]> git.hungrycats.org Git - linux/commit
inotify: fix race
authorNick Piggin <npiggin@suse.de>
Tue, 25 Mar 2008 12:48:15 +0000 (13:48 +0100)
committerChris Wright <chrisw@sous-sol.org>
Sat, 19 Apr 2008 01:53:20 +0000 (18:53 -0700)
commit4193242f7ca7c2626b440fe4e9dda57f2bcf0baa
treeb34ea6ced0a0fdde18400d7a4205611f3c2677c1
parentd4fe2bbe7a065a8aee77612356d8057239a03b84
inotify: fix race

upstream commit: d599e36a9ea85432587f4550acc113cd7549d12a

There is a race between setting an inode's children's "parent watched" flag
when placing the first watch on a parent, and instantiating new children of
that parent: a child could miss having its flags set by
set_dentry_child_flags, but then inotify_d_instantiate might still see
!inotify_inode_watched.

The solution is to set_dentry_child_flags after adding the watch.  Locking is
taken care of, because both set_dentry_child_flags and inotify_d_instantiate
hold dcache_lock and child->d_locks.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Robert Love <rlove@google.com>
Cc: John McCutchan <ttb@tentacle.dhs.org>
Cc: Jan Kara <jack@ucw.cz>
Cc: Yan Zheng <yanzheng@21cn.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christian Lamparter <chunkeey@web.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
fs/inotify.c