block: don't call invalidate_partition from blk_drop_partitions
authorChristoph Hellwig <hch@lst.de>
Tue, 14 Apr 2020 07:28:59 +0000 (09:28 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 20 Apr 2020 17:32:59 +0000 (11:32 -0600)
Given that the device must not be busy, most of the calls from
invalidate_partition that are related to file system metadata are
guranteed to not happen.  Just open code the calls to sync_blockdev
and invalidate_bdev instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/partitions/core.c

index 8c5295c..a94d296 100644 (file)
@@ -607,15 +607,14 @@ int blk_drop_partitions(struct block_device *bdev)
 {
        struct disk_part_iter piter;
        struct hd_struct *part;
-       int res;
 
        if (!disk_part_scan_enabled(bdev->bd_disk))
                return 0;
        if (bdev->bd_part_count || bdev->bd_openers > 1)
                return -EBUSY;
-       res = invalidate_partition(bdev->bd_disk, 0);
-       if (res)
-               return res;
+
+       sync_blockdev(bdev);
+       invalidate_bdev(bdev);
 
        disk_part_iter_init(&piter, bdev->bd_disk, DISK_PITER_INCL_EMPTY);
        while ((part = disk_part_iter_next(&piter)))