aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Dobriyan <adobriyan@sw.ru>2008-02-08 07:18:27 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-08 12:22:23 -0500
commit4237e0d3de38da640d7c977d68f5f7f1d207a631 (patch)
tree0bf02984aef945c5d97a5929b82e7ecd6b7f39ed
parent5b3fe63b19e00f3b2a14a09c979e84163029e390 (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>
-rw-r--r--fs/proc/generic.c4
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);
414out_unlock:
415 unlock_kernel(); 415 unlock_kernel();
416 416
417 if (inode) { 417 if (inode) {