]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
1 | From: Hannes Reinecke <hare@suse.de> |
2 | Subject: Send uevents for write_protect changes | |
3 | References: bnc#440959 | |
4 | ||
5 | Whenever a block device changes it's read-only attribute | |
6 | we should notify the userspace about it. | |
7 | ||
8 | Signed-off-by: Hannes Reinecke <hare@suse.de> | |
9 | ||
10 | --- | |
11 | block/genhd.c | 13 +++++++++++++ | |
12 | 1 file changed, 13 insertions(+) | |
13 | ||
14 | --- a/block/genhd.c | |
15 | +++ b/block/genhd.c | |
16 | @@ -813,6 +813,16 @@ void put_disk(struct gendisk *disk) | |
17 | ||
18 | EXPORT_SYMBOL(put_disk); | |
19 | ||
20 | +static void set_disk_ro_uevent(struct gendisk *gd, int ro) | |
21 | +{ | |
22 | + char event[] = "DISK_RO=1"; | |
23 | + char *envp[] = { event, NULL }; | |
24 | + | |
25 | + if (!ro) | |
26 | + event[8] = '0'; | |
27 | + kobject_uevent_env(&gd->dev.kobj, KOBJ_CHANGE, envp); | |
28 | +} | |
29 | + | |
30 | void set_device_ro(struct block_device *bdev, int flag) | |
31 | { | |
32 | if (bdev->bd_contains != bdev) | |
33 | @@ -826,6 +836,9 @@ EXPORT_SYMBOL(set_device_ro); | |
34 | void set_disk_ro(struct gendisk *disk, int flag) | |
35 | { | |
36 | int i; | |
37 | + if (disk->policy != flag) | |
38 | + set_disk_ro_uevent(disk, flag); | |
39 | + | |
40 | disk->policy = flag; | |
41 | for (i = 0; i < disk->minors - 1; i++) | |
42 | if (disk->part[i]) disk->part[i]->policy = flag; |