[PATCH] lockdep: annotate sunrpc code
Add i_mutex ordering annotations to the sunrpc rpc_pipe code. This code has 3 levels of i_mutex hierarchy in some cases: parent dir, client dir and file inside client dir; the i_mutex ordering is I_MUTEX_PARENT -> I_MUTEX_CHILD -> I_MUTEX_NORMAL This patch applies this ordering annotation to the various functions. This is in line with the VFS expected ordering where it is always OK to lock a child after locking a parent; the sunrpc code is very diligent in doing this correctly. Has no effect on non-lockdep kernels. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Cc: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ad33945175
commit
c6573c2904
|
@ -515,7 +515,7 @@ rpc_depopulate(struct dentry *parent)
|
|||
struct dentry *dentry, *dvec[10];
|
||||
int n = 0;
|
||||
|
||||
mutex_lock(&dir->i_mutex);
|
||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_CHILD);
|
||||
repeat:
|
||||
spin_lock(&dcache_lock);
|
||||
list_for_each_safe(pos, next, &parent->d_subdirs) {
|
||||
|
@ -631,7 +631,7 @@ rpc_lookup_negative(char *path, struct nameidata *nd)
|
|||
if ((error = rpc_lookup_parent(path, nd)) != 0)
|
||||
return ERR_PTR(error);
|
||||
dir = nd->dentry->d_inode;
|
||||
mutex_lock(&dir->i_mutex);
|
||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
||||
dentry = lookup_one_len(nd->last.name, nd->dentry, nd->last.len);
|
||||
if (IS_ERR(dentry))
|
||||
goto out_err;
|
||||
|
@ -693,7 +693,7 @@ rpc_rmdir(char *path)
|
|||
if ((error = rpc_lookup_parent(path, &nd)) != 0)
|
||||
return error;
|
||||
dir = nd.dentry->d_inode;
|
||||
mutex_lock(&dir->i_mutex);
|
||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
||||
dentry = lookup_one_len(nd.last.name, nd.dentry, nd.last.len);
|
||||
if (IS_ERR(dentry)) {
|
||||
error = PTR_ERR(dentry);
|
||||
|
@ -754,7 +754,7 @@ rpc_unlink(char *path)
|
|||
if ((error = rpc_lookup_parent(path, &nd)) != 0)
|
||||
return error;
|
||||
dir = nd.dentry->d_inode;
|
||||
mutex_lock(&dir->i_mutex);
|
||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
||||
dentry = lookup_one_len(nd.last.name, nd.dentry, nd.last.len);
|
||||
if (IS_ERR(dentry)) {
|
||||
error = PTR_ERR(dentry);
|
||||
|
|
Loading…
Reference in New Issue