Re: linux-next: manual merge of the fuse tree with Linus' tree
From: Stephen Rothwell
Date: Thu Mar 07 2024 - 16:34:30 EST
Hi Miklos,
On Thu, 7 Mar 2024 15:16:00 +0100 Miklos Szeredi <miklos@xxxxxxxxxx> wrote:
>
> On Wed, 6 Mar 2024 at 00:34, Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote:
>
> > diff --cc fs/fuse/inode.c
> > index 516ea2979a90,02869edf72f3..000000000000
> > --- a/fs/fuse/inode.c
> > +++ b/fs/fuse/inode.c
> > @@@ -930,14 -942,6 +942,16 @@@ void fuse_conn_init(struct fuse_conn *f
> > }
> > EXPORT_SYMBOL_GPL(fuse_conn_init);
> >
> > +static void delayed_release(struct rcu_head *p)
> > +{
> > + struct fuse_conn *fc = container_of(p, struct fuse_conn, rcu);
> > +
> > + put_user_ns(fc->user_ns);
> > ++ if (IS_ENABLED(CONFIG_FUSE_PASSTHROUGH))
> > ++ fuse_backing_files_free(fc);
> > + fc->release(fc);
> > +}
> > +
>
> fuse_backing_files_free() doesn't need to be called after an RCU
> delay, so it should be resolved like this:
>
> diff --cc fs/fuse/inode.c
> index 516ea2979a90,02869edf72f3..000000000000
> --- a/fs/fuse/inode.c
> +++ b/fs/fuse/inode.c
> @@@ -954,7 -959,9 +966,9 @@@ void fuse_conn_put(struct fuse_conn *fc
> WARN_ON(atomic_read(&bucket->count) != 1);
> kfree(bucket);
> }
> + if (IS_ENABLED(CONFIG_FUSE_PASSTHROUGH))
> + fuse_backing_files_free(fc);
> - fc->release(fc);
> + call_rcu(&fc->rcu, delayed_release);
> }
> }
> EXPORT_SYMBOL_GPL(fuse_conn_put);
Thanks, I will do that from today.
--
Cheers,
Stephen Rothwell
Attachment:
pgpNDoOoToHHD.pgp
Description: OpenPGP digital signature