]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] inotify: lock avoidance with parent watch status in dentry
authorNick Piggin <nickpiggin@yahoo.com.au>
Sat, 25 Mar 2006 11:07:09 +0000 (03:07 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sat, 25 Mar 2006 16:22:53 +0000 (08:22 -0800)
commit6a3b38981b65a1576e95648b88e67575314ff2e1
tree612dc637976cbe36e8b72924a1f7bd76e75463fd
parent93e71baea1a2c89b9012a36384e12ca003b2166d
[PATCH] inotify: lock avoidance with parent watch status in dentry

Previous inotify work avoidance is good when inotify is completely unused,
but it breaks down if even a single watch is in place anywhere in the
system.  Robin Holt notices that udev is one such culprit - it slows down a
512-thread application on a 512 CPU system from 6 seconds to 22 minutes.

Solve this by adding a flag in the dentry that tells inotify whether or not
its parent inode has a watch on it.  Event queueing to parent will skip
taking locks if this flag is cleared.  Setting and clearing of this flag on
all child dentries versus event delivery: this is no in terms of race
cases, and that was shown to be equivalent to always performing the check.

The essential behaviour is that activity occuring _after_ a watch has been
added and _before_ it has been removed, will generate events.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Robert Love <rml@novell.com>
Cc: John McCutchan <ttb@tentacle.dhs.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/dcache.c
fs/inotify.c
include/linux/dcache.h
include/linux/fsnotify.h
include/linux/inotify.h