Re: [PATCH 3/4] fuse: don't unhash root

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

 



On Wed, 28 Feb 2024 at 17:34, Bernd Schubert <bernd.schubert@xxxxxxxxxxx> wrote:
>
>
>
> On 2/28/24 17:02, Miklos Szeredi wrote:
> > The root inode is assumed to be always hashed.  Do not unhash the root
> > inode even if it is marked BAD.
> >
> > Fixes: 5d069dbe8aaf ("fuse: fix bad inode")
> > Cc: <stable@xxxxxxxxxxxxxxx> # v5.11
> > Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx>
> > ---
> >  fs/fuse/fuse_i.h | 1 -
> >  fs/fuse/inode.c  | 7 +++++--
> >  2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
> > index 7bd3552b1e80..4ef6087f0e5c 100644
> > --- a/fs/fuse/fuse_i.h
> > +++ b/fs/fuse/fuse_i.h
> > @@ -994,7 +994,6 @@ static inline bool fuse_stale_inode(const struct inode *inode, int generation,
> >
> >  static inline void fuse_make_bad(struct inode *inode)
> >  {
> > -     remove_inode_hash(inode);
> >       set_bit(FUSE_I_BAD, &get_fuse_inode(inode)->state);
> >  }
>
> Hmm, what about callers like fuse_direntplus_link? It now never removes
> the inode hash for these? Depend on lookup/revalidate?

Good questions.

In that case the dentry will be unhashed, and after retrying it will
go through fuse_iget(), which will unhash the inode.

So AFAICS the only place the inode needs to be unhashed is in
fuse_iget(), which is the real fix in 775c5033a0d1 ("fuse: fix live
lock in fuse_iget()").

Thanks,
Miklos




[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