In add_disk(), don't send uevent to userspace when gen_uevent is true; also export the refactored function disk_gen_uevents for later use. Signed-off-by: Fam Zheng <famz@xxxxxxxxxx> --- block/genhd.c | 23 +++++++++++++++++++---- include/linux/genhd.h | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/block/genhd.c b/block/genhd.c index 8e1bfa1..9b66953 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -506,12 +506,10 @@ static int exact_lock(dev_t devt, void *data) return 0; } -static void register_disk(struct gendisk *disk) +static void register_disk(struct gendisk *disk, bool gen_uevent) { struct device *ddev = disk_to_dev(disk); struct block_device *bdev; - struct disk_part_iter piter; - struct hd_struct *part; int err; ddev->parent = disk->driverfs_dev; @@ -563,6 +561,22 @@ static void register_disk(struct gendisk *disk) exit: /* announce disk after possible partitions are created */ dev_set_uevent_suppress(ddev, 0); + if (gen_uevent) + disk_gen_uevents(disk); +} + +/** + * disk_gen_uevents + * @disk - the disk to generate uevent + * + * Generate KOBJ_ADD uevents on the disk and partitions. + */ +void disk_gen_uevents(struct gendisk *disk) +{ + struct device *ddev = disk_to_dev(disk); + struct disk_part_iter piter; + struct hd_struct *part; + kobject_uevent(&ddev->kobj, KOBJ_ADD); /* announce possible partitions */ @@ -571,6 +585,7 @@ exit: kobject_uevent(&part_to_dev(part)->kobj, KOBJ_ADD); disk_part_iter_exit(&piter); } +EXPORT_SYMBOL(disk_gen_uevents); /** * add_disk - add partitioning information to kernel list @@ -618,7 +633,7 @@ void add_disk(struct gendisk *disk, bool gen_uevent) blk_register_region(disk_devt(disk), disk->minors, NULL, exact_match, exact_lock, disk); - register_disk(disk); + register_disk(disk, gen_uevent); blk_register_queue(disk); /* diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 038be80..87ad9e5 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -416,6 +416,7 @@ extern void part_round_stats(int cpu, struct hd_struct *part); /* block/genhd.c */ extern void add_disk(struct gendisk *disk, bool gen_uevent); extern void del_gendisk(struct gendisk *gp); +extern void disk_gen_uevents(struct gendisk *disk); extern struct gendisk *get_gendisk(dev_t dev, int *partno); extern struct block_device *bdget_disk(struct gendisk *disk, int partno); -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html