NFSv4: Convert CLOSE to use nfs4_async_handle_exception()
authorTrond Myklebust <trond.myklebust@primarydata.com>
Tue, 7 Nov 2017 15:51:37 +0000 (10:51 -0500)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 15 Jan 2018 04:06:28 +0000 (23:06 -0500)
Convert CLOSE so that it specifies the correct stateid, state and
inode for the error handling.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/nfs4proc.c

index 56fa5a1..ea2b7e8 100644 (file)
@@ -3148,6 +3148,11 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
        struct nfs4_state *state = calldata->state;
        struct nfs_server *server = NFS_SERVER(calldata->inode);
        nfs4_stateid *res_stateid = NULL;
+       struct nfs4_exception exception = {
+               .state = state,
+               .inode = calldata->inode,
+               .stateid = &calldata->arg.stateid,
+       };
 
        dprintk("%s: begin!\n", __func__);
        if (!nfs4_sequence_done(task, &calldata->res.seq_res))
@@ -3213,7 +3218,9 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
                case -NFS4ERR_BAD_STATEID:
                        break;
                default:
-                       if (nfs4_async_handle_error(task, server, state, NULL) == -EAGAIN)
+                       task->tk_status = nfs4_async_handle_exception(task,
+                                       server, task->tk_status, &exception);
+                       if (exception.retry)
                                goto out_restart;
        }
        nfs_clear_open_stateid(state, &calldata->arg.stateid,