[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>
Showing
- fs/dcache.c 8 additions, 0 deletionsfs/dcache.c
- fs/inotify.c 77 additions, 10 deletionsfs/inotify.c
- include/linux/dcache.h 2 additions, 0 deletionsinclude/linux/dcache.h
- include/linux/fsnotify.h 19 additions, 0 deletionsinclude/linux/fsnotify.h
- include/linux/inotify.h 11 additions, 0 deletionsinclude/linux/inotify.h
Loading
Please register or sign in to comment