Signed-off-by: Aaron Lu <aaron.lu@xxxxxxxxx> --- block/genhd.c | 23 +++++++++++++++++------ include/linux/genhd.h | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index cac7366..4244256 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1627,6 +1627,19 @@ static void disk_events_workfn(struct work_struct *work) kobject_uevent_env(&disk_to_dev(disk)->kobj, KOBJ_CHANGE, envp); } +int disk_events_set_poll_msecs(struct gendisk *disk, long intv) +{ + if (intv < 0 && intv != -1) + return -EINVAL; + + disk_block_events(disk); + disk->ev->poll_msecs = intv; + __disk_unblock_events(disk, true); + + return 0; +} +EXPORT_SYMBOL(disk_events_set_poll_msecs); + /* * A disk events enabled device has the following sysfs nodes under * its /sys/block/X/ directory. @@ -1683,16 +1696,14 @@ static ssize_t disk_events_poll_msecs_store(struct device *dev, { struct gendisk *disk = dev_to_disk(dev); long intv; + int ret; if (!count || !sscanf(buf, "%ld", &intv)) return -EINVAL; - if (intv < 0 && intv != -1) - return -EINVAL; - - disk_block_events(disk); - disk->ev->poll_msecs = intv; - __disk_unblock_events(disk, true); + ret = disk_events_set_poll_msecs(disk, intv); + if (ret) + return ret; return count; } diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 4f440b3..63409e5 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -423,6 +423,7 @@ extern void disk_block_events(struct gendisk *disk); extern void disk_unblock_events(struct gendisk *disk); extern void disk_flush_events(struct gendisk *disk, unsigned int mask); extern unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask); +extern int disk_events_set_poll_msecs(struct gendisk *disk, long intv); /* drivers/char/random.c */ extern void add_disk_randomness(struct gendisk *disk); -- 1.7.12.21.g871e293 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html