diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:35 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:22 -0500 |
commit | b23fb0a60379a95e10c671f646b259ea2558421e (patch) | |
tree | 7c3644b91241d32fda502a7be0b78e4c225f8091 /fs/notify | |
parent | 2fd6b7f50797f2e993eea59e0a0b8c6399c811dc (diff) |
fs: scale inode alias list
Add a new lock, dcache_inode_lock, to protect the inode's i_dentry list
from concurrent modification. d_alias is also protected by d_lock.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/notify')
-rw-r--r-- | fs/notify/fsnotify.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index aa4f25e803f6..ae769fc9b66c 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c | |||
@@ -60,6 +60,7 @@ void __fsnotify_update_child_dentry_flags(struct inode *inode) | |||
60 | watched = fsnotify_inode_watches_children(inode); | 60 | watched = fsnotify_inode_watches_children(inode); |
61 | 61 | ||
62 | spin_lock(&dcache_lock); | 62 | spin_lock(&dcache_lock); |
63 | spin_lock(&dcache_inode_lock); | ||
63 | /* run all of the dentries associated with this inode. Since this is a | 64 | /* run all of the dentries associated with this inode. Since this is a |
64 | * directory, there damn well better only be one item on this list */ | 65 | * directory, there damn well better only be one item on this list */ |
65 | list_for_each_entry(alias, &inode->i_dentry, d_alias) { | 66 | list_for_each_entry(alias, &inode->i_dentry, d_alias) { |
@@ -82,6 +83,7 @@ void __fsnotify_update_child_dentry_flags(struct inode *inode) | |||
82 | } | 83 | } |
83 | spin_unlock(&alias->d_lock); | 84 | spin_unlock(&alias->d_lock); |
84 | } | 85 | } |
86 | spin_unlock(&dcache_inode_lock); | ||
85 | spin_unlock(&dcache_lock); | 87 | spin_unlock(&dcache_lock); |
86 | } | 88 | } |
87 | 89 | ||