diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-11-07 18:51:37 +0300 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2018-01-15 07:06:28 +0300 |
commit | b8b8d221090f2b469027f04e451ef1877cb1be08 (patch) | |
tree | fa097afd903d84f9e94184cc9b0a29cec8257962 /fs/nfs/nfs4proc.c | |
parent | 7f1bda447c9bd48b415acedba6b830f61591601f (diff) | |
download | linux-b8b8d221090f2b469027f04e451ef1877cb1be08.tar.xz |
NFSv4: Convert CLOSE to use nfs4_async_handle_exception()
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>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 56fa5a16e097..ea2b7e8db437 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -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, |