diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 30 |
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 | } |
7467 | out: | 7466 | out: |
@@ -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 = { | |||
7498 | static int _nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred, | 7493 | static 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); |
7596 | out: | 7582 | out: |