summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2017-11-07 17:14:49 +0100
committerTrond Myklebust <trond.myklebust@primarydata.com>2018-01-15 05:06:29 +0100
commit82571552a034f7531b0c8e76c1fd593c8755c519 (patch)
tree1cb5fb4fa2c38fa91e5d00aa2d029e6c7102e8aa
parentNFSv4: Convert DELEGRETURN to use nfs4_handle_exception() (diff)
downloadlinux-82571552a034f7531b0c8e76c1fd593c8755c519.tar.xz
linux-82571552a034f7531b0c8e76c1fd593c8755c519.zip
NFSv4: Convert LOCKU to use nfs4_async_handle_exception()
Convert CLOSE so that it specifies the correct stateid and inode for the error handling. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
-rw-r--r--fs/nfs/nfs4proc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index b704e08b390c..b927fda32e74 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -6071,6 +6071,10 @@ static void nfs4_locku_release_calldata(void *data)
static void nfs4_locku_done(struct rpc_task *task, void *data)
{
struct nfs4_unlockdata *calldata = data;
+ struct nfs4_exception exception = {
+ .inode = calldata->lsp->ls_state->inode,
+ .stateid = &calldata->arg.stateid,
+ };
if (!nfs4_sequence_done(task, &calldata->res.seq_res))
return;
@@ -6094,8 +6098,10 @@ static void nfs4_locku_done(struct rpc_task *task, void *data)
rpc_restart_call_prepare(task);
break;
default:
- if (nfs4_async_handle_error(task, calldata->server,
- NULL, NULL) == -EAGAIN)
+ task->tk_status = nfs4_async_handle_exception(task,
+ calldata->server, task->tk_status,
+ &exception);
+ if (exception.retry)
rpc_restart_call_prepare(task);
}
nfs_release_seqid(calldata->arg.seqid);