]> git.ipfire.org Git - people/ms/linux.git/commitdiff
NFSv4: Don't call put_rpccred() under the rcu_read_lock()
authorTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 26 Feb 2015 17:54:46 +0000 (12:54 -0500)
committerJiri Slaby <jslaby@suse.cz>
Mon, 16 Mar 2015 13:58:20 +0000 (14:58 +0100)
commit 7c0af9ffb7bb4e5355470fa60b3eb711ddf226fa upstream.

put_rpccred() can sleep.

Fixes: 8f649c3762547 ("NFSv4: Fix the locking in nfs_inode_reclaim_delegation()")
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
fs/nfs/delegation.c

index 3ed1be9aade33c82031443a5f8612e248dc78fc2..2ea3537b8bdee61421f1a3f3606760ffd7fed199 100644 (file)
@@ -161,8 +161,8 @@ void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred,
                                  &delegation->flags);
                        NFS_I(inode)->delegation_state = delegation->type;
                        spin_unlock(&delegation->lock);
-                       put_rpccred(oldcred);
                        rcu_read_unlock();
+                       put_rpccred(oldcred);
                        trace_nfs4_reclaim_delegation(inode, res->delegation_type);
                } else {
                        /* We appear to have raced with a delegation return. */