From: Al Viro <viro@ftp.linux.org.uk>
To: John McCutchan <ttb@tentacle.dhs.org>
Cc: Linus Torvalds <torvalds@osdl.org>, Ray Lee <ray@madrabbit.org>,
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: Wed, 21 Sep 2005 02:01:55 +0100 [thread overview]
Message-ID: <20050921010154.GR7992@ftp.linux.org.uk> (raw)
In-Reply-To: <1127256814.749.5.camel@vertex>
On Tue, Sep 20, 2005 at 06:53:34PM -0400, John McCutchan wrote:
> Is there some reason we can't just do this from vfs_unlink
>
> inode = dentry->inode;
> iget (inode);
> d_delete (dentry);
> fsnotify_inoderemove (inode);
> iput (inode);
>
> This would allow us to have immediate event notification, and avoid a
> race with the inode going away, right?
Playing with references to struct inode means playing dirty tricks
behind the filesystem's back. Doing that in a way that really changes
inode lifetime means asking for trouble. Combined with a dirty trick
*already* pulled by sys_unlink() to postpone the final iput until after
we unlock the parent, it means breakage (and aforementioned dirty trick
took some rather interesting logics to compensate for in the first place).
Moreover, your suggestion would do that to _everyone_, whether they use
inotify or not. NAK.
> static inline void fsnotify_inoderemove(struct inode *inode)
> {
> - inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL);
> - inotify_inode_is_dead(inode);
> + inotify_inode_queue_event(inode, IN_DELETE_SELF, inode->i_nlink, NULL);
> + if (inode->i_nlink == 0)
> + inotify_inode_is_dead(inode);
> }
Assumes that filesystem treats ->i_nlink on final iput() in usual way.
It doesn't have to.
BTW, what happens if one uses inotify on procfs? Or sysfs, for that matter?
Fundamental problem with that sucker is that you are playing games with
lifetime rules of inodes in a way that might be OK for some filesystems,
but violates a lot of assumptions made by other...
BTW^2, what guarantees that inotify_unmount_inodes() will not happen while we
are in inotify_release()? That would happily keep watch refcount bumped,
so it would outlive inotify_unmount_inodes(). Sure, it would be dropped.
And call iput() on a pinned inode that had outlived the umount(). Oops...
next prev parent reply other threads:[~2005-09-21 1:02 UTC|newest]
Thread overview: 41+ 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
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 [this message]
2005-09-21 1:41 ` John McCutchan
2005-09-21 2:36 ` Al Viro
2005-09-21 8:35 ` Christoph Hellwig
2005-09-21 9:15 ` Joel Becker
2005-09-21 9:17 ` Christoph Hellwig
2005-09-21 14:45 ` Joel Becker
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=20050921010154.GR7992@ftp.linux.org.uk \
--to=viro@ftp.linux.org.uk \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ray@madrabbit.org \
--cc=rml@novell.com \
--cc=torvalds@osdl.org \
--cc=ttb@tentacle.dhs.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox