diff options
author | Alexey Dobriyan <adobriyan@sw.ru> | 2008-02-08 07:18:27 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-08 12:22:23 -0500 |
commit | 4237e0d3de38da640d7c977d68f5f7f1d207a631 (patch) | |
tree | 0bf02984aef945c5d97a5929b82e7ecd6b7f39ed /fs | |
parent | 5b3fe63b19e00f3b2a14a09c979e84163029e390 (diff) |
proc: less LOCK operations during lookup
Pseudo-code for lookup effectively is:
LOCK kernel
LOCK proc_subdir_lock
find PDE
UNLOCK proc_subdir_lock
get inode
LOCK proc_subdir_lock
goto unlock
UNLOCK proc_subdir_lock
UNLOCK kernel
We can get rid of LOCK/UNLOCK pair after getting inode simply by jumping
to unlock_kernel() directly.
Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/generic.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 6a2fe5187b62..75cd8d709f7f 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
@@ -406,12 +406,12 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry, struct nam | |||
406 | spin_unlock(&proc_subdir_lock); | 406 | spin_unlock(&proc_subdir_lock); |
407 | error = -EINVAL; | 407 | error = -EINVAL; |
408 | inode = proc_get_inode(dir->i_sb, ino, de); | 408 | inode = proc_get_inode(dir->i_sb, ino, de); |
409 | spin_lock(&proc_subdir_lock); | 409 | goto out_unlock; |
410 | break; | ||
411 | } | 410 | } |
412 | } | 411 | } |
413 | } | 412 | } |
414 | spin_unlock(&proc_subdir_lock); | 413 | spin_unlock(&proc_subdir_lock); |
414 | out_unlock: | ||
415 | unlock_kernel(); | 415 | unlock_kernel(); |
416 | 416 | ||
417 | if (inode) { | 417 | if (inode) { |