Commit e3264a4d authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Jens Axboe

Send uevents for write_protect changes

Whenever a block device changes it's read-only attribute
notify the userspace about it.
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarNikanth Karthikesan <knikanth@suse.de>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent d58b85e1
...@@ -1215,6 +1215,16 @@ void put_disk(struct gendisk *disk) ...@@ -1215,6 +1215,16 @@ void put_disk(struct gendisk *disk)
EXPORT_SYMBOL(put_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(&disk_to_dev(gd)->kobj, KOBJ_CHANGE, envp);
}
void set_device_ro(struct block_device *bdev, int flag) void set_device_ro(struct block_device *bdev, int flag)
{ {
bdev->bd_part->policy = flag; bdev->bd_part->policy = flag;
...@@ -1227,8 +1237,12 @@ void set_disk_ro(struct gendisk *disk, int flag) ...@@ -1227,8 +1237,12 @@ void set_disk_ro(struct gendisk *disk, int flag)
struct disk_part_iter piter; struct disk_part_iter piter;
struct hd_struct *part; struct hd_struct *part;
disk_part_iter_init(&piter, disk, if (disk->part0.policy != flag) {
DISK_PITER_INCL_EMPTY | DISK_PITER_INCL_PART0); set_disk_ro_uevent(disk, flag);
disk->part0.policy = flag;
}
disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY);
while ((part = disk_part_iter_next(&piter))) while ((part = disk_part_iter_next(&piter)))
part->policy = flag; part->policy = flag;
disk_part_iter_exit(&piter); disk_part_iter_exit(&piter);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment