summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-09 18:56:52 +0200
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-09 19:19:35 +0200
commitfa332941c0c7c00e3420078268b7558d0ef792b5 (patch)
treed1063f53f5b19de2575c9007df4054773098f411
parentSUNRPC: Fix a potential memory leak in rpc_new_client (diff)
downloadlinux-fa332941c0c7c00e3420078268b7558d0ef792b5.tar.xz
linux-fa332941c0c7c00e3420078268b7558d0ef792b5.zip
NFSv4: Fix another potential state manager deadlock
Don't hold the NFSv4 sequence id while we check for open permission. The call to ACCESS may block due to reboot recovery. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4proc.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 26431cf62ddb..0ad025eb523b 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1046,6 +1046,7 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
/* Save the delegation */
nfs4_stateid_copy(&stateid, &delegation->stateid);
rcu_read_unlock();
+ nfs_release_seqid(opendata->o_arg.seqid);
ret = nfs_may_open(state->inode, state->owner->so_cred, open_mode);
if (ret != 0)
goto out;