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

From: Julian Ruess
Date: Tue Mar 07 2023 - 04:20:23 EST


On Tue, 2023-03-07 at 09:42 +0800, Yu Kuai wrote:
> 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
> >
>

This patch works for me. Thanks!
@Jens Axboe: Will this be part of the next 6.3-rc?

Regards
Julian