NFSv4 release the sequence id in the return on close case
authorAndy Adamson <andros@netapp.com>
Thu, 11 Apr 2013 13:28:45 +0000 (09:28 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 11 Apr 2013 13:39:53 +0000 (09:39 -0400)
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>
fs/nfs/nfs4proc.c

index 264ddb16255fa0197eadbcd0c7a5ffdad72e8521..83197fb60d5f79ad5e93532e7105ff37660870f4 100644 (file)
@@ -2275,8 +2275,10 @@ static void nfs4_close_prepare(struct rpc_task *task, void *data)
        if (calldata->arg.fmode == 0) {
                task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
                if (calldata->roc &&
-                   pnfs_roc_drain(inode, &calldata->roc_barrier, task))
+                   pnfs_roc_drain(inode, &calldata->roc_barrier, task)) {
+                       nfs_release_seqid(calldata->arg.seqid);
                        goto out_wait;
+                   }
        }
 
        nfs_fattr_init(calldata->res.fattr);