loop: remove the racy bd_inode->i_mapping->nrpages asserts
authorChristoph Hellwig <hch@lst.de>
Wed, 30 Mar 2022 05:29:10 +0000 (07:29 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Apr 2022 12:54:09 +0000 (06:54 -0600)
Nothing prevents a file system or userspace opener of the block device
from redirtying the page right afte sync_blockdev returned.  Fortunately
data in the page cache during a block device change is mostly harmless
anyway.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Tested-by: Darrick J. Wong <djwong@kernel.org>
Link: https://lore.kernel.org/r/20220330052917.2566582-9-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index 98e12d2..610942e 100644 (file)
@@ -1271,15 +1271,6 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
        /* I/O need to be drained during transfer transition */
        blk_mq_freeze_queue(lo->lo_queue);
 
-       if (size_changed && lo->lo_device->bd_inode->i_mapping->nrpages) {
-               /* If any pages were dirtied after invalidate_bdev(), try again */
-               err = -EAGAIN;
-               pr_warn("%s: loop%d (%s) still has dirty pages (nrpages=%lu)\n",
-                       __func__, lo->lo_number, lo->lo_file_name,
-                       lo->lo_device->bd_inode->i_mapping->nrpages);
-               goto out_unfreeze;
-       }
-
        prev_lo_flags = lo->lo_flags;
 
        err = loop_set_status_from_info(lo, info);
@@ -1490,21 +1481,10 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
        invalidate_bdev(lo->lo_device);
 
        blk_mq_freeze_queue(lo->lo_queue);
-
-       /* invalidate_bdev should have truncated all the pages */
-       if (lo->lo_device->bd_inode->i_mapping->nrpages) {
-               err = -EAGAIN;
-               pr_warn("%s: loop%d (%s) still has dirty pages (nrpages=%lu)\n",
-                       __func__, lo->lo_number, lo->lo_file_name,
-                       lo->lo_device->bd_inode->i_mapping->nrpages);
-               goto out_unfreeze;
-       }
-
        blk_queue_logical_block_size(lo->lo_queue, arg);
        blk_queue_physical_block_size(lo->lo_queue, arg);
        blk_queue_io_min(lo->lo_queue, arg);
        loop_update_dio(lo);
-out_unfreeze:
        blk_mq_unfreeze_queue(lo->lo_queue);
 
        return err;