2007-11-15 16:14:33

by Alexey Dobriyan

[permalink] [raw]
Subject: [PATCH] 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 <[email protected]>
---

fs/proc/generic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -403,12 +403,12 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry, struct nam
spin_unlock(&proc_subdir_lock);
error = -EINVAL;
inode = proc_get_inode(dir->i_sb, ino, de);
- spin_lock(&proc_subdir_lock);
- break;
+ goto out_unlock;
}
}
}
spin_unlock(&proc_subdir_lock);
+out_unlock:
unlock_kernel();

if (inode) {