From: Jan Kara <jack@suse.cz>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Jan Kara <jack@suse.cz>, Ivan Delalande <colona@arista.com>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: Potential regression after fsnotify_nameremove() rework in 5.3
Date: Tue, 18 Jan 2022 11:06:59 +0100 [thread overview]
Message-ID: <20220118100659.ajl4ngwhpfrh74bs@quack3.lan> (raw)
In-Reply-To: <CAOQ4uxh5h5tQXtirxfUuZT1NJXrHuqm=e7uXD5sCDWjf5n+DEQ@mail.gmail.com>
On Tue 18-01-22 00:02:38, Amir Goldstein wrote:
> > > One possibility I can see is: Add fsnotify primitive to create the event,
> > > just not queue it in the notification queue yet (essentially we would
> > > cut-short the event handling before calling fsnotify_insert_event() /
> > > fsnotify_add_event()), only return it. Then another primitive would be for
> > > queueing already prepared event. Then the sequence for unlink would be:
> > >
> > > LIST_HEAD(event_list);
> > >
> > > fsnotify_events_prepare(&event_list, ...);
> > > d_delete(dentry);
> > > fsnotify_events_report(&event_list);
> > >
> > > And we can optionally wrap this inside d_delete_notify() to make it easier
> > > on the callers. What do you think?
> > >
> >
> > I think it sounds like the "correct" design, but also sounds like a
> > big change that
> > is not so practical for backporting.
> >
> > Given that this is a regression that goes way back, backportability
> > plays a role.
> > Also, a big change like this needs developer time, which I myself don't have
> > at the moment.
Agreed. I'm for simplicity as well.
> > For a simpler backportable solution, instead of preparing the event
> > perhaps it is enough that we ihold() the inode until after fsnotify_unlink()
> > and pass it as an argument very similar to fsnotify_link().
> >
> > The question is how to ihold() the inode only if we are going to queue
> > an IN_DELETE event? Maybe send an internal FS_PRE_DELETE
> > event?
> >
>
> Actually, seeing that do_unlinkat() already iholds the inode outside
> vfs_unlink()
> anyway, is it so bad that vfs_unlink() will elevate refcount as well, so we can
> call fsnotify_unlink() with the inode arg after d_delete()?
No, that's what I wanted to suggest :) ihold() should be pretty cheap as,
as you have noticed, the cacheline should be dirty and hot anyway. I think
this is by far cheaper than trying to find out whether the event will be
sent or not.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2022-01-18 10:07 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-15 3:11 Potential regression after fsnotify_nameremove() rework in 5.3 Ivan Delalande
2022-01-15 19:50 ` Amir Goldstein
2022-01-16 1:20 ` Ivan Delalande
2022-01-16 10:14 ` Amir Goldstein
2022-01-17 2:34 ` Ivan Delalande
2022-01-17 13:14 ` Amir Goldstein
2022-01-17 14:21 ` Jan Kara
2022-01-17 19:09 ` Amir Goldstein
2022-01-17 22:02 ` Amir Goldstein
2022-01-18 10:06 ` Jan Kara [this message]
2022-01-16 10:16 ` Thorsten Leemhuis
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=20220118100659.ajl4ngwhpfrh74bs@quack3.lan \
--to=jack@suse.cz \
--cc=amir73il@gmail.com \
--cc=colona@arista.com \
--cc=linux-fsdevel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).