Re: [syzbot] [block?] WARNING in blkdev_put (2)

From: Yu Kuai
Date: Mon Mar 06 2023 - 20:42:33 EST


Hi,

在 2023/03/06 23:00, Julian Ruess 写道:
On Thu, 2023-03-02 at 20:33 +0100, Alexander Egorenkov wrote:

Hi,

we are seeing a similar problem on s390x architecture when
partitioning
a NVMe disk on linux-next.


  [   70.403015]  nvme0n1: p1
  [   70.403197] ------------[ cut here ]------------
  [   70.403199] WARNING: CPU: 8 PID: 2452 at block/bdev.c:845
blkdev_put+0x280/0x298

...

The problem appeared about a week ago.

Regards
Alex

Hi all,

I bisected this to:

commit e5cfefa97bccf956ea0bb6464c1f6c84fd7a8d9f
Author: Yu Kuai <yukuai3@xxxxxxxxxx>
Date: Fri Feb 17 10:22:00 2023 +0800
block: fix scan partition for exclusively open device again

Yes, thanks for the report, I figure out that I made a mistake here.

Following patch should fix this problem:

diff --git a/block/genhd.c b/block/genhd.c
index 3ee5577e1586..02d9cfb9e077 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -385,7 +385,7 @@ int disk_scan_partitions(struct gendisk *disk, fmode_t mode)
if (IS_ERR(bdev))
ret = PTR_ERR(bdev);
else
- blkdev_put(bdev, mode);
+ blkdev_put(bdev, mode & ~FMODE_EXCL);

Thanks,
Kuai
As explained in commit 36369f46e917 ("block: Do not reread
partition table
on exclusively open device"), reread partition on the device that
is
exclusively opened by someone else is problematic.
This patch will make sure partition scan will only be proceed if
current
thread open the device exclusively, or the device is not opened
exclusively, and in the later case, other scanners and exclusive
openers
will be blocked temporarily until partition scan is done.
Fixes: 10c70d95c0f2 ("block: remove the bd_openers checks in
blk_drop_partitions")
Cc: <stable@xxxxxxxxxxxxxxx>
Suggested-by: Jan Kara <jack@xxxxxxx>
Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx>
Reviewed-by: Christoph Hellwig <hch@xxxxxx>
Link:
https://lore.kernel.org/r/20230217022200.3092987-3-yukuai1@xxxxxxxxxxxxxxx
Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>



Regards
Julian