--- /dev/null
+From f4bd34b139a3fa2808c4205f12714c65e1548c6c Mon Sep 17 00:00:00 2001
+From: Zheng Bin <zhengbin13@huawei.com>
+Date: Thu, 18 Jun 2020 12:21:37 +0800
+Subject: loop: replace kill_bdev with invalidate_bdev
+
+From: Zheng Bin <zhengbin13@huawei.com>
+
+commit f4bd34b139a3fa2808c4205f12714c65e1548c6c upstream.
+
+When a filesystem is mounted on a loop device and on a loop ioctl
+LOOP_SET_STATUS64, because of kill_bdev, buffer_head mappings are getting
+destroyed.
+kill_bdev
+ truncate_inode_pages
+ truncate_inode_pages_range
+ do_invalidatepage
+ block_invalidatepage
+ discard_buffer -->clear BH_Mapped flag
+
+sb_bread
+ __bread_gfp
+ bh = __getblk_gfp
+ -->discard_buffer clear BH_Mapped flag
+ __bread_slow
+ submit_bh
+ submit_bh_wbc
+ BUG_ON(!buffer_mapped(bh)) --> hit this BUG_ON
+
+Fixes: 5db470e229e2 ("loop: drop caches if offset or block_size are changed")
+Signed-off-by: Zheng Bin <zhengbin13@huawei.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/loop.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -1110,7 +1110,7 @@ loop_set_status(struct loop_device *lo,
+ if (lo->lo_offset != info->lo_offset ||
+ lo->lo_sizelimit != info->lo_sizelimit) {
+ sync_blockdev(lo->lo_device);
+- kill_bdev(lo->lo_device);
++ invalidate_bdev(lo->lo_device);
+ }
+
+ /* I/O need to be drained during transfer transition */
+@@ -1380,12 +1380,12 @@ static int loop_set_block_size(struct lo
+
+ if (lo->lo_queue->limits.logical_block_size != arg) {
+ sync_blockdev(lo->lo_device);
+- kill_bdev(lo->lo_device);
++ invalidate_bdev(lo->lo_device);
+ }
+
+ blk_mq_freeze_queue(lo->lo_queue);
+
+- /* kill_bdev should have truncated all the pages */
++ /* invalidate_bdev should have truncated all the pages */
+ if (lo->lo_queue->limits.logical_block_size != arg &&
+ lo->lo_device->bd_inode->i_mapping->nrpages) {
+ err = -EAGAIN;