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>
This commit is contained in:
Alexey Dobriyan 2008-02-08 04:18:27 -08:00 committed by Linus Torvalds
parent 5b3fe63b19
commit 4237e0d3de

View File

@ -406,12 +406,12 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry, struct nam
spin_unlock(&proc_subdir_lock); spin_unlock(&proc_subdir_lock);
error = -EINVAL; error = -EINVAL;
inode = proc_get_inode(dir->i_sb, ino, de); inode = proc_get_inode(dir->i_sb, ino, de);
spin_lock(&proc_subdir_lock); goto out_unlock;
break;
} }
} }
} }
spin_unlock(&proc_subdir_lock); spin_unlock(&proc_subdir_lock);
out_unlock:
unlock_kernel(); unlock_kernel();
if (inode) { if (inode) {