From: Christoph Hellwig Date: Wed, 18 Mar 2020 08:12:06 +0000 (+0100) Subject: block: fix a device invalidation regression X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=d981cb5b9fa0da9da6a6c8b9ae7cbe789c3b3214;p=linux.git block: fix a device invalidation regression Historically we only set the capacity to zero for devices that support partitions (independ of actually having partitions created). Doing that is rather inconsistent, but changing it broke legacy udisks polling for legacy ide-cdrom devices. Use the crude a crude check for devices that either are non-removable or partitionable to get the sane behavior for most device while not breaking userspace for this particular setup. Fixes: a1548b674403 ("block: move rescan_partitions to fs/block_dev.c") Reported-by: He Zhe Signed-off-by: Christoph Hellwig Tested-by: He Zhe Signed-off-by: Jens Axboe --- diff --git a/fs/block_dev.c b/fs/block_dev.c index 69bf2fb6f7cda..9501880dff5e2 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1520,10 +1520,22 @@ rescan: if (ret) return ret; - if (invalidate) - set_capacity(disk, 0); - else if (disk->fops->revalidate_disk) - disk->fops->revalidate_disk(disk); + /* + * Historically we only set the capacity to zero for devices that + * support partitions (independ of actually having partitions created). + * Doing that is rather inconsistent, but changing it broke legacy + * udisks polling for legacy ide-cdrom devices. Use the crude check + * below to get the sane behavior for most device while not breaking + * userspace for this particular setup. + */ + if (invalidate) { + if (disk_part_scan_enabled(disk) || + !(disk->flags & GENHD_FL_REMOVABLE)) + set_capacity(disk, 0); + } else { + if (disk->fops->revalidate_disk) + disk->fops->revalidate_disk(disk); + } check_disk_size_change(disk, bdev, !invalidate);