aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Adamson <andros@netapp.com>2013-04-11 09:28:45 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-11 09:39:53 -0400
commitb9536ad52152ff440231dcc2dd9cfa644f5413c9 (patch)
treed600241dc0255e6f29a772200a8e5d98c3497c9d
parent314d7cc05d10208d6e63b0b1185f02c73a16adfb (diff)
NFSv4 release the sequence id in the return on close case
Otherwise we deadlock if state recovery is initiated while we sleep. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4proc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 264ddb16255f..83197fb60d5f 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2275,8 +2275,10 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
2275 if (calldata->arg.fmode == 0) { 2275 if (calldata->arg.fmode == 0) {
2276 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE]; 2276 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
2277 if (calldata->roc && 2277 if (calldata->roc &&
2278 pnfs_roc_drain(inode, &calldata->roc_barrier, task)) 2278 pnfs_roc_drain(inode, &calldata->roc_barrier, task)) {
2279 nfs_release_seqid(calldata->arg.seqid);
2279 goto out_wait; 2280 goto out_wait;
2281 }
2280 } 2282 }
2281 2283
2282 nfs_fattr_init(calldata->res.fattr); 2284 nfs_fattr_init(calldata->res.fattr);