All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Jan Kara <jack@suse.cz>,
	Matthew Bobrowski <mbobrowski@mbobrowski.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH v2 06/14] fs: convert debugfs to use simple_remove() helper
Date: Thu, 16 May 2019 18:52:36 +0200	[thread overview]
Message-ID: <20190516165236.GA27726@kroah.com> (raw)
In-Reply-To: <CAOQ4uxjkN3dWrr3YMaado5uR3LigzeY8CH7HEwGLt3W6n1s7kQ@mail.gmail.com>

On Thu, May 16, 2019 at 06:38:50PM +0300, Amir Goldstein wrote:
> On Thu, May 16, 2019 at 6:28 PM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > On Thu, May 16, 2019 at 03:09:20PM +0300, Amir Goldstein wrote:
> > > On Thu, May 16, 2019 at 3:02 PM Jan Kara <jack@suse.cz> wrote:
> > > >
> > > > On Thu 16-05-19 13:44:51, Amir Goldstein wrote:
> > > > > On Thu, May 16, 2019 at 1:35 PM Greg Kroah-Hartman
> > > > > <gregkh@linuxfoundation.org> wrote:
> > > > > >
> > > > > > On Thu, May 16, 2019 at 01:26:33PM +0300, Amir Goldstein wrote:
> > > > > > > This will allow generating fsnotify delete events after the
> > > > > > > fsnotify_nameremove() hook is removed from d_delete().
> > > > > > >
> > > > > > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > > > > > Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> > > > > > > ---
> > > > > > >  fs/debugfs/inode.c | 20 ++++----------------
> > > > > > >  1 file changed, 4 insertions(+), 16 deletions(-)
> > > > > > >
> > > > > > > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
> > > > > > > index acef14ad53db..bc96198df1d4 100644
> > > > > > > --- a/fs/debugfs/inode.c
> > > > > > > +++ b/fs/debugfs/inode.c
> > > > > > > @@ -617,13 +617,10 @@ struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
> > > > > > >  }
> > > > > > >  EXPORT_SYMBOL_GPL(debugfs_create_symlink);
> > > > > > >
> > > > > > > -static void __debugfs_remove_file(struct dentry *dentry, struct dentry *parent)
> > > > > > > +static void __debugfs_file_removed(struct dentry *dentry)
> > > > > > >  {
> > > > > > >       struct debugfs_fsdata *fsd;
> > > > > > >
> > > > > > > -     simple_unlink(d_inode(parent), dentry);
> > > > > > > -     d_delete(dentry);
> > > > > >
> > > > > > What happened to this call?  Why no unlinking anymore?
> > > > > >
> > > > > > > -
> > > > > > >       /*
> > > > > > >        * Paired with the closing smp_mb() implied by a successful
> > > > > > >        * cmpxchg() in debugfs_file_get(): either
> > > > > > > @@ -643,18 +640,9 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
> > > > > > >       int ret = 0;
> > > > > > >
> > > > > > >       if (simple_positive(dentry)) {
> > > > > > > -             dget(dentry);
> > > > > > > -             if (!d_is_reg(dentry)) {
> > > > > > > -                     if (d_is_dir(dentry))
> > > > > > > -                             ret = simple_rmdir(d_inode(parent), dentry);
> > > > > > > -                     else
> > > > > > > -                             simple_unlink(d_inode(parent), dentry);
> > > > > > > -                     if (!ret)
> > > > > > > -                             d_delete(dentry);
> > > > > > > -             } else {
> > > > > > > -                     __debugfs_remove_file(dentry, parent);
> > > > > > > -             }
> > > > > > > -             dput(dentry);
> > > > > > > +             ret = simple_remove(d_inode(parent), dentry);
> > > > > > > +             if (d_is_reg(dentry))
> > > > > >
> > > > > > Can't dentry be gone here?  This doesn't seem to match the same pattern
> > > > > > as before.
> > > > > >
> > > > > > What am I missing?
> > > > > >
> > > > >
> > > > > The grammatical change __debugfs_remove_file() => __debugfs_file_removed()
> > > > > After change, the helper only does the post delete stuff.
> > > > > simple_unlink() is now done inside simple_remove().
> > > > > This debugfs patch depends on a patch that adds the simple_remove() helper.
> > > > > sorry for not mentioning this explicitly.
> > > >
> > > > Right. But Greg is right that simple_remove() may have dropped last dentry
> > > > reference and thus you now pass freed dentry to d_is_reg() and
> > > > __debugfs_file_removed()?
> > > >
> > >
> > > It seem so. Good spotting!
> >
> > Yes, that's what I was trying to say.  I don't think this conversion is
> > correct, so you might either have to rework your simple_rmdir(), or this
> > patch, to make it work properly.
> >
> 
> To fix the correctness issue we will keep dget(dentry)/dput(dentry)
> in place both in __debugfs_remove() and in simple_remove(), i.e:
> 
>                dget(dentry);
>                ret = simple_remove(d_inode(parent), dentry);
>                if (d_is_reg(dentry))
>                        __debugfs_file_removed(dentry);
>                dput(dentry);
> 
> Will this have addressed your concern?

Shouldn't you check for !d_is_reg before calling simple_remove()?
> 
> BTW, I forwarded you the dependency patch that is needed for the
> context of this review.

I had dug it out of the original series when I reviewed this :)

thanks,

greg k-h

  reply	other threads:[~2019-05-16 16:52 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-16 10:26 [PATCH v2 00/14] Sort out fsnotify_nameremove() mess Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 01/14] ASoC: rename functions that pollute the simple_xxx namespace Amir Goldstein
2019-05-17  1:04   ` Kuninori Morimoto
2019-05-21 20:32   ` Applied "ASoC: rename functions that pollute the simple_xxx namespace" to the asoc tree Mark Brown
2019-05-21 20:32     ` Mark Brown
2019-05-16 10:26 ` [PATCH v2 02/14] fs: create simple_remove() helper Amir Goldstein
2019-05-16 15:08   ` Fwd: " Amir Goldstein
2019-05-16 17:07   ` Al Viro
2019-05-16 18:42     ` Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 03/14] fsnotify: add empty fsnotify_{unlink,rmdir}() hooks Amir Goldstein
2019-05-16 15:30   ` Fwd: " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 04/14] fs: convert hypfs to use simple_remove() helper Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 05/14] fs: convert qibfs/ipathfs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 06/14] fs: convert debugfs " Amir Goldstein
2019-05-16 10:35   ` Greg Kroah-Hartman
2019-05-16 10:44     ` Amir Goldstein
2019-05-16 12:02       ` Jan Kara
2019-05-16 12:09         ` Amir Goldstein
2019-05-16 15:28           ` Greg Kroah-Hartman
2019-05-16 15:38             ` Amir Goldstein
2019-05-16 16:52               ` Greg Kroah-Hartman [this message]
2019-05-16 18:47                 ` Amir Goldstein
2019-05-23  4:53   ` [fs] ae1cf04e22: BUG:KASAN:use-after-free_in__debugfs_remove kernel test robot
2019-05-16 10:26 ` [PATCH v2 07/14] fs: convert tracefs to use simple_remove() helper Amir Goldstein
2019-05-17 17:33   ` Steven Rostedt
2019-05-16 10:26 ` [PATCH v2 08/14] fs: convert rpc_pipefs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 09/14] fs: convert apparmorfs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 10/14] fsnotify: call fsnotify_rmdir() hook from btrfs Amir Goldstein
2019-05-16 11:56   ` David Sterba
2019-05-16 10:26 ` [PATCH v2 11/14] fsnotify: call fsnotify_rmdir() hook from configfs Amir Goldstein
2019-05-16 12:33   ` Christoph Hellwig
2019-05-16 13:38     ` Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 12/14] fsnotify: call fsnotify_unlink() hook from devpts Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 13/14] fsnotify: move fsnotify_nameremove() hook out of d_delete() Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 14/14] fsnotify: get rid of fsnotify_nameremove() Amir Goldstein
2019-05-16 10:40 ` [PATCH v2 00/14] Sort out fsnotify_nameremove() mess Amir Goldstein
2019-05-16 12:25 ` Jan Kara
2019-05-16 13:56   ` Amir Goldstein
2019-05-16 16:17     ` Al Viro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190516165236.GA27726@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=amir73il@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=mbobrowski@mbobrowski.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.