Message ID | 20201112165005.4022502-3-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] block: add a return value to set_capacity_revalidate_and_notify | expand |
Hi Christoph, > From: Petr Vorel <pvorel@suse.cz> Thanks for rebasing my code. Using loop.c specific code in the file instead of the function is indeed much better. I also like your cleanup for 5.11 (remove the update_bdev parameter from set_capacity_revalidate_and_notify). > Commit 716ad0986cbd ("loop: Switch to set_capacity_revalidate_and_notify") > causes an occasional drop of loop device uevent, which are no longer > triggered in loop_set_size() but in a different part of code. > Bug is reproducible with LTP test uevent01 [1]: > i=0; while true; do > i=$((i+1)); echo "== $i ==" > lsmod |grep -q loop && rmmod -f loop > ./uevent01 || break > done > Put back triggering through code called in loop_set_size(). > Fix required to add yet another parameter to > set_capacity_revalidate_and_notify(). This ^ is no longer true and should be removed. Kind regards, Petr
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index cb1191d6e945f2..a58084c2ed7ceb 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -255,7 +255,8 @@ static void loop_set_size(struct loop_device *lo, loff_t size) bd_set_nr_sectors(bdev, size); - set_capacity_revalidate_and_notify(lo->lo_disk, size, false); + if (!set_capacity_revalidate_and_notify(lo->lo_disk, size, false)) + kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE); } static inline int