diff options
author | Andy Adamson <andros@netapp.com> | 2013-04-11 09:28:45 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-04-11 09:39:53 -0400 |
commit | b9536ad52152ff440231dcc2dd9cfa644f5413c9 (patch) | |
tree | d600241dc0255e6f29a772200a8e5d98c3497c9d | |
parent | 314d7cc05d10208d6e63b0b1185f02c73a16adfb (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.c | 4 |
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); |