block: don't clear bd_invalidated in check_disk_size_change
authorChristoph Hellwig <hch@lst.de>
Tue, 1 Sep 2020 15:57:41 +0000 (17:57 +0200)
committerJens Axboe <axboe@kernel.dk>
Wed, 2 Sep 2020 13:59:59 +0000 (07:59 -0600)
bd_invalidated is set by check_disk_change or in add_disk to initiate a
partition scan.  Move it from check_disk_size_change which is called
from both revalidate_disk() and bdev_disk_changed() to only the latter,
as that is what is called from the block device open code (and nbd) to
deal with the bd_invalidated event.  revalidate_disk() on the other hand
is mostly used to propagate a size update from the gendisk to the block
device, which is entirely unrelated.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/block_dev.c

index 990e97b..7e32398 100644 (file)
@@ -1302,7 +1302,6 @@ static void check_disk_size_change(struct gendisk *disk,
                }
                i_size_write(bdev->bd_inode, disk_size);
        }
-       bdev->bd_invalidated = 0;
        spin_unlock(&bdev->bd_size_lock);
 
        if (bdev_size > disk_size) {
@@ -1391,6 +1390,8 @@ int bdev_disk_changed(struct block_device *bdev, bool invalidate)
 
        lockdep_assert_held(&bdev->bd_mutex);
 
+       bdev->bd_invalidated = 0;
+
 rescan:
        ret = blk_drop_partitions(bdev);
        if (ret)