From: John McCutchan <ttb@tentacle.dhs.org>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Andrew Morton <akpm@osdl.org>,
Linux Kernel <linux-kernel@vger.kernel.org>,
Robert Love <rml@novell.com>, Al Viro <viro@ZenIV.linux.org.uk>
Subject: Re: [patch] stop inotify from sending random DELETE_SELF event under load
Date: Mon, 19 Sep 2005 22:00:41 -0400 [thread overview]
Message-ID: <1127181641.16372.10.camel@vertex> (raw)
In-Reply-To: <Pine.LNX.4.58.0509191821220.2553@g5.osdl.org>
On Mon, 2005-09-19 at 18:37 -0700, Linus Torvalds wrote:
>
> On Mon, 19 Sep 2005, John McCutchan wrote:
> >
> > Below is a patch that fixes the random DELETE_SELF events when the
> > system is under load. The problem is that the DELETE_SELF event is sent
> > from dentry_iput, which is called in two code paths,
> >
> > 1) When a dentry is being deleted
> > 2) When the dcache is being pruned.
>
> No no.
>
> The problem is that you put the "fsnotify_inoderemove(inode);" in the
> wrong place, and I and Al never noticed.
>
To quote you:
Instead of the broken fsnotify_unlink/fsnotify_rmdir functions, you can
split this into two logically _different_ functions:
- fsnotify_nameremove(dentry) - called when the dentry goes away
- fsnotify_inoderemove(dentry) - called when the inode goes away
...
The fsnotify_inoderemove() is called from dentry_iput(), and that's the
one that specifies that an actual inode no longer exists.
;)
> iput() doesn't have anything to do with delete at all, and adding a flag
> to it would be wrong. The inode may stay around _after_ the unlink() for
> as long as it has users (or much longer, if you have hardlinks ;).
>
> You should probably move the "fsnotify_inoderemove(inode);" call into
> generic_delete_inode() instead, just after "security_inode_delete()". No
> new flags, just a new place.
>
> (Oh, I think you need to add it to "hugetlbfs_delete_inode()" too).
>
> There's still a potential problem there: some network filesystems seem to
> use "generic_delete_inode()" as their "drop_inode" thing. Which may mean
> that you get spurious delete messages when the reference is dropped. I
> don't see how to avoid that, though - we fundamentally don't _know_ when
> the inode actually gets deleted.
>
I don't think moving it to generic_delete_inode is the right place.
Anyways, generic_delete_inode is called when the final reference on the
inode is released, but inotify keeps a reference on the inode, so I
don't think it would work.
fsnotify_inoderemove should be called after the dentry for the file is
removed, not when the inode actually goes away. The behaviour inotify
users expect is:
$ watch /tmp/foo (wd = 0)
$ rm /tmp/foo
event sent: DELETE_SELF (wd = 0)
Inotify doesn't care if the inode for /tmp/foo is sticking around for
whatever reason. As far as inotify is concerned, the file is deleted.
--
John McCutchan <ttb@tentacle.dhs.org>
next prev parent reply other threads:[~2005-09-20 1:59 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-20 0:48 [patch] stop inotify from sending random DELETE_SELF event under load John McCutchan
2005-09-20 1:37 ` Linus Torvalds
2005-09-20 2:00 ` John McCutchan [this message]
2005-09-20 2:20 ` Linus Torvalds
2005-09-20 3:46 ` John McCutchan
2005-09-20 4:03 ` Linus Torvalds
2005-09-20 4:24 ` Al Viro
2005-09-20 4:30 ` Linus Torvalds
2005-09-20 4:36 ` John McCutchan
2005-09-20 4:46 ` Al Viro
2005-09-20 4:53 ` John McCutchan
2005-09-20 4:58 ` Al Viro
2005-09-20 5:06 ` John McCutchan
2005-09-20 5:17 ` Al Viro
2005-09-20 12:34 ` John McCutchan
2005-09-20 16:38 ` Al Viro
2005-09-20 17:44 ` Ray Lee
2005-09-20 18:12 ` Linus Torvalds
2005-09-20 18:22 ` Al Viro
2005-09-20 19:37 ` Linus Torvalds
2005-09-20 22:53 ` John McCutchan
2005-09-21 0:33 ` Linus Torvalds
2005-09-21 0:52 ` John McCutchan
2005-09-21 1:01 ` Al Viro
2005-09-21 1:41 ` John McCutchan
2005-09-21 2:36 ` Al Viro
2005-09-21 8:35 ` Christoph Hellwig
2005-09-21 4:15 ` [Ocfs2-devel] " Joel Becker
2005-09-21 9:15 ` Joel Becker
2005-09-21 9:17 ` Christoph Hellwig
2005-09-21 9:45 ` [Ocfs2-devel] " Joel Becker
2005-09-21 14:45 ` Joel Becker
2005-09-21 13:08 ` [Ocfs2-devel] " Mark Fasheh
2005-09-21 18:08 ` Mark Fasheh
2005-09-20 18:26 ` John McCutchan
2005-09-20 19:39 ` Linus Torvalds
2005-09-20 4:56 ` Linus Torvalds
2005-09-20 4:52 ` Linus Torvalds
2005-09-20 4:27 ` John McCutchan
2005-09-20 3:33 ` Al Viro
2005-09-20 3:50 ` John McCutchan
2005-09-20 3:31 ` Al Viro
2005-09-20 3:51 ` John McCutchan
2005-09-20 8:33 ` Christoph Hellwig
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=1127181641.16372.10.camel@vertex \
--to=ttb@tentacle.dhs.org \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rml@novell.com \
--cc=torvalds@osdl.org \
--cc=viro@ZenIV.linux.org.uk \
/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.