]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.suse/genhd-disk-ro-uevents
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / genhd-disk-ro-uevents
diff --git a/src/patches/suse-2.6.27.31/patches.suse/genhd-disk-ro-uevents b/src/patches/suse-2.6.27.31/patches.suse/genhd-disk-ro-uevents
new file mode 100644 (file)
index 0000000..447f558
--- /dev/null
@@ -0,0 +1,42 @@
+From: Hannes Reinecke <hare@suse.de>
+Subject: Send uevents for write_protect changes
+References: bnc#440959
+
+Whenever a block device changes it's read-only attribute
+we should notify the userspace about it.
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+
+---
+ block/genhd.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/block/genhd.c
++++ b/block/genhd.c
+@@ -813,6 +813,16 @@ void put_disk(struct gendisk *disk)
+ EXPORT_SYMBOL(put_disk);
++static void set_disk_ro_uevent(struct gendisk *gd, int ro)
++{
++      char event[] = "DISK_RO=1";
++      char *envp[] = { event, NULL };
++
++      if (!ro)
++              event[8] = '0';
++      kobject_uevent_env(&gd->dev.kobj, KOBJ_CHANGE, envp);
++}
++
+ void set_device_ro(struct block_device *bdev, int flag)
+ {
+       if (bdev->bd_contains != bdev)
+@@ -826,6 +836,9 @@ EXPORT_SYMBOL(set_device_ro);
+ void set_disk_ro(struct gendisk *disk, int flag)
+ {
+       int i;
++      if (disk->policy != flag)
++              set_disk_ro_uevent(disk, flag);
++
+       disk->policy = flag;
+       for (i = 0; i < disk->minors - 1; i++)
+               if (disk->part[i]) disk->part[i]->policy = flag;