summaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 18ca6879d8de..d90132642340 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -2553,9 +2553,8 @@ static int nfs41_check_open_stateid(struct nfs4_state *state)
2553 clear_bit(NFS_O_RDWR_STATE, &state->flags); 2553 clear_bit(NFS_O_RDWR_STATE, &state->flags);
2554 clear_bit(NFS_OPEN_STATE, &state->flags); 2554 clear_bit(NFS_OPEN_STATE, &state->flags);
2555 stateid->type = NFS4_INVALID_STATEID_TYPE; 2555 stateid->type = NFS4_INVALID_STATEID_TYPE;
2556 }
2557 if (status != NFS_OK)
2558 return status; 2556 return status;
2557 }
2559 if (nfs_open_stateid_recover_openmode(state)) 2558 if (nfs_open_stateid_recover_openmode(state))
2560 return -NFS4ERR_OPENMODE; 2559 return -NFS4ERR_OPENMODE;
2561 return NFS_OK; 2560 return NFS_OK;
@@ -7461,7 +7460,7 @@ static void nfs4_exchange_id_done(struct rpc_task *task, void *data)
7461 cdata->res.server_scope = NULL; 7460 cdata->res.server_scope = NULL;
7462 } 7461 }
7463 /* Save the EXCHANGE_ID verifier session trunk tests */ 7462 /* Save the EXCHANGE_ID verifier session trunk tests */
7464 memcpy(clp->cl_confirm.data, cdata->args.verifier->data, 7463 memcpy(clp->cl_confirm.data, cdata->args.verifier.data,
7465 sizeof(clp->cl_confirm.data)); 7464 sizeof(clp->cl_confirm.data));
7466 } 7465 }
7467out: 7466out:
@@ -7474,10 +7473,6 @@ static void nfs4_exchange_id_release(void *data)
7474 struct nfs41_exchange_id_data *cdata = 7473 struct nfs41_exchange_id_data *cdata =
7475 (struct nfs41_exchange_id_data *)data; 7474 (struct nfs41_exchange_id_data *)data;
7476 7475
7477 if (cdata->xprt) {
7478 xprt_put(cdata->xprt);
7479 rpc_clnt_xprt_switch_put(cdata->args.client->cl_rpcclient);
7480 }
7481 nfs_put_client(cdata->args.client); 7476 nfs_put_client(cdata->args.client);
7482 kfree(cdata->res.impl_id); 7477 kfree(cdata->res.impl_id);
7483 kfree(cdata->res.server_scope); 7478 kfree(cdata->res.server_scope);
@@ -7498,7 +7493,6 @@ static const struct rpc_call_ops nfs4_exchange_id_call_ops = {
7498static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred, 7493static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred,
7499 u32 sp4_how, struct rpc_xprt *xprt) 7494 u32 sp4_how, struct rpc_xprt *xprt)
7500{ 7495{
7501 nfs4_verifier verifier;
7502 struct rpc_message msg = { 7496 struct rpc_message msg = {
7503 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_EXCHANGE_ID], 7497 .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_EXCHANGE_ID],
7504 .rpc_cred = cred, 7498 .rpc_cred = cred,
@@ -7507,7 +7501,7 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred,
7507 .rpc_client = clp->cl_rpcclient, 7501 .rpc_client = clp->cl_rpcclient,
7508 .callback_ops = &nfs4_exchange_id_call_ops, 7502 .callback_ops = &nfs4_exchange_id_call_ops,
7509 .rpc_message = &msg, 7503 .rpc_message = &msg,
7510 .flags = RPC_TASK_ASYNC | RPC_TASK_TIMEOUT, 7504 .flags = RPC_TASK_TIMEOUT,
7511 }; 7505 };
7512 struct nfs41_exchange_id_data *calldata; 7506 struct nfs41_exchange_id_data *calldata;
7513 struct rpc_task *task; 7507 struct rpc_task *task;
@@ -7522,8 +7516,7 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred,
7522 return -ENOMEM; 7516 return -ENOMEM;
7523 } 7517 }
7524 7518
7525 if (!xprt) 7519 nfs4_init_boot_verifier(clp, &calldata->args.verifier);
7526 nfs4_init_boot_verifier(clp, &verifier);
7527 7520
7528 status = nfs4_init_uniform_client_string(clp); 7521 status = nfs4_init_uniform_client_string(clp);
7529 if (status) 7522 if (status)
@@ -7562,11 +7555,9 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred,
7562 if (xprt) { 7555 if (xprt) {
7563 calldata->xprt = xprt; 7556 calldata->xprt = xprt;
7564 task_setup_data.rpc_xprt = xprt; 7557 task_setup_data.rpc_xprt = xprt;
7565 task_setup_data.flags = 7558 task_setup_data.flags |= RPC_TASK_SOFTCONN;
7566 RPC_TASK_SOFT|RPC_TASK_SOFTCONN|RPC_TASK_ASYNC; 7559 memcpy(calldata->args.verifier.data, clp->cl_confirm.data,
7567 calldata->args.verifier = &clp->cl_confirm; 7560 sizeof(calldata->args.verifier.data));
7568 } else {
7569 calldata->args.verifier = &verifier;
7570 } 7561 }
7571 calldata->args.client = clp; 7562 calldata->args.client = clp;
7572#ifdef CONFIG_NFS_V4_1_MIGRATION 7563#ifdef CONFIG_NFS_V4_1_MIGRATION
@@ -7585,12 +7576,7 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred,
7585 if (IS_ERR(task)) 7576 if (IS_ERR(task))
7586 return PTR_ERR(task); 7577 return PTR_ERR(task);
7587 7578
7588 if (!xprt) { 7579 status = calldata->rpc_status;
7589 status = rpc_wait_for_completion_task(task);
7590 if (!status)
7591 status = calldata->rpc_status;
7592 } else /* session trunking test */
7593 status = calldata->rpc_status;
7594 7580
7595 rpc_put_task(task); 7581 rpc_put_task(task);
7596out: 7582out: