Re: [PATCH 5.4 258/267] nilfs2: replace WARN_ONs for invalid DAT metadata block requests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 22, 2024 at 12:25:51AM +0900, Ryusuke Konishi wrote:
> On Wed, Feb 21, 2024 at 11:30 PM Greg Kroah-Hartman wrote:
> >
> > 5.4-stable review patch.  If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxx>
> >
> > commit 5124a0a549857c4b87173280e192eea24dea72ad upstream.
> >
> > If DAT metadata file block access fails due to corruption of the DAT file
> > or abnormal virtual block numbers held by b-trees or inodes, a kernel
> > warning is generated.
> >
> > This replaces the WARN_ONs by error output, so that a kernel, booted with
> > panic_on_warn, does not panic.  This patch also replaces the detected
> > return code -ENOENT with another internal code -EINVAL to notify the bmap
> > layer of metadata corruption.  When the bmap layer sees -EINVAL, it
> > handles the abnormal situation with nilfs_bmap_convert_error() and finally
> > returns code -EIO as it should.
> >
> > Link: https://lkml.kernel.org/r/0000000000005cc3d205ea23ddcf@xxxxxxxxxx
> > Link: https://lkml.kernel.org/r/20230126164114.6911-1-konishi.ryusuke@xxxxxxxxx
> > Signed-off-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxx>
> > Reported-by: <syzbot+5d5d25f90f195a3cfcb4@xxxxxxxxxxxxxxxxxxxxxxxxx>
> > Tested-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxx>
> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> > ---
> >  fs/nilfs2/dat.c |   27 +++++++++++++++++----------
> >  1 file changed, 17 insertions(+), 10 deletions(-)
> >
> > --- a/fs/nilfs2/dat.c
> > +++ b/fs/nilfs2/dat.c
> > @@ -40,8 +40,21 @@ static inline struct nilfs_dat_info *NIL
> >  static int nilfs_dat_prepare_entry(struct inode *dat,
> >                                    struct nilfs_palloc_req *req, int create)
> >  {
> > -       return nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
> > -                                           create, &req->pr_entry_bh);
> > +       int ret;
> > +
> > +       ret = nilfs_palloc_get_entry_block(dat, req->pr_entry_nr,
> > +                                          create, &req->pr_entry_bh);
> > +       if (unlikely(ret == -ENOENT)) {
> > +               nilfs_error(dat->i_sb,
> > +                         "DAT doesn't have a block to manage vblocknr = %llu",
> > +                         (unsigned long long)req->pr_entry_nr);
> > +               /*
> > +                * Return internal code -EINVAL to notify bmap layer of
> > +                * metadata corruption.
> > +                */
> > +               ret = -EINVAL;
> > +       }
> > +       return ret;
> >  }
> >
> >  static void nilfs_dat_commit_entry(struct inode *dat,
> > @@ -123,11 +136,7 @@ static void nilfs_dat_commit_free(struct
> >
> >  int nilfs_dat_prepare_start(struct inode *dat, struct nilfs_palloc_req *req)
> >  {
> > -       int ret;
> > -
> > -       ret = nilfs_dat_prepare_entry(dat, req, 0);
> > -       WARN_ON(ret == -ENOENT);
> > -       return ret;
> > +       return nilfs_dat_prepare_entry(dat, req, 0);
> >  }
> >
> >  void nilfs_dat_commit_start(struct inode *dat, struct nilfs_palloc_req *req,
> > @@ -154,10 +163,8 @@ int nilfs_dat_prepare_end(struct inode *
> >         int ret;
> >
> >         ret = nilfs_dat_prepare_entry(dat, req, 0);
> > -       if (ret < 0) {
> > -               WARN_ON(ret == -ENOENT);
> > +       if (ret < 0)
> >                 return ret;
> > -       }
> >
> >         kaddr = kmap_atomic(req->pr_entry_bh->b_page);
> >         entry = nilfs_palloc_block_get_entry(dat, req->pr_entry_nr,
> >
> >
> 
> Hi Greg,
> 
> Please drop this patch for 5.4 as well as the patch for 4.19.
> (same reason as the review comment for the 4.19 patch)
> 
> I will send an equivalent replacement patch.

Now dropped, thanks!

greg k-h




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux