diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/auth.c | 28 | ||||
-rw-r--r-- | net/sunrpc/sched.c | 11 |
2 files changed, 22 insertions, 17 deletions
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index b0f2b2ee7cc0..1cdb163c4f89 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c | |||
@@ -375,7 +375,15 @@ rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred, | |||
375 | } | 375 | } |
376 | EXPORT_SYMBOL_GPL(rpcauth_init_cred); | 376 | EXPORT_SYMBOL_GPL(rpcauth_init_cred); |
377 | 377 | ||
378 | void | 378 | static void |
379 | rpcauth_generic_bind_cred(struct rpc_task *task, struct rpc_cred *cred) | ||
380 | { | ||
381 | task->tk_msg.rpc_cred = get_rpccred(cred); | ||
382 | dprintk("RPC: %5u holding %s cred %p\n", task->tk_pid, | ||
383 | cred->cr_auth->au_ops->au_name, cred); | ||
384 | } | ||
385 | |||
386 | static void | ||
379 | rpcauth_bind_root_cred(struct rpc_task *task) | 387 | rpcauth_bind_root_cred(struct rpc_task *task) |
380 | { | 388 | { |
381 | struct rpc_auth *auth = task->tk_client->cl_auth; | 389 | struct rpc_auth *auth = task->tk_client->cl_auth; |
@@ -394,8 +402,8 @@ rpcauth_bind_root_cred(struct rpc_task *task) | |||
394 | task->tk_status = PTR_ERR(ret); | 402 | task->tk_status = PTR_ERR(ret); |
395 | } | 403 | } |
396 | 404 | ||
397 | void | 405 | static void |
398 | rpcauth_bindcred(struct rpc_task *task) | 406 | rpcauth_bind_new_cred(struct rpc_task *task) |
399 | { | 407 | { |
400 | struct rpc_auth *auth = task->tk_client->cl_auth; | 408 | struct rpc_auth *auth = task->tk_client->cl_auth; |
401 | struct rpc_cred *ret; | 409 | struct rpc_cred *ret; |
@@ -410,14 +418,14 @@ rpcauth_bindcred(struct rpc_task *task) | |||
410 | } | 418 | } |
411 | 419 | ||
412 | void | 420 | void |
413 | rpcauth_holdcred(struct rpc_task *task) | 421 | rpcauth_bindcred(struct rpc_task *task, struct rpc_cred *cred, int flags) |
414 | { | 422 | { |
415 | struct rpc_cred *cred = task->tk_msg.rpc_cred; | 423 | if (cred != NULL) |
416 | if (cred != NULL) { | 424 | rpcauth_generic_bind_cred(task, cred); |
417 | get_rpccred(cred); | 425 | else if (flags & RPC_TASK_ROOTCREDS) |
418 | dprintk("RPC: %5u holding %s cred %p\n", task->tk_pid, | 426 | rpcauth_bind_root_cred(task); |
419 | cred->cr_auth->au_ops->au_name, cred); | 427 | else |
420 | } | 428 | rpcauth_bind_new_cred(task); |
421 | } | 429 | } |
422 | 430 | ||
423 | void | 431 | void |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index 7db956f6e018..6eab9bf94baf 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -817,14 +817,11 @@ static void rpc_init_task(struct rpc_task *task, const struct rpc_task_setup *ta | |||
817 | task->tk_action = rpc_prepare_task; | 817 | task->tk_action = rpc_prepare_task; |
818 | 818 | ||
819 | if (task_setup_data->rpc_message != NULL) { | 819 | if (task_setup_data->rpc_message != NULL) { |
820 | memcpy(&task->tk_msg, task_setup_data->rpc_message, sizeof(task->tk_msg)); | 820 | task->tk_msg.rpc_proc = task_setup_data->rpc_message->rpc_proc; |
821 | task->tk_msg.rpc_argp = task_setup_data->rpc_message->rpc_argp; | ||
822 | task->tk_msg.rpc_resp = task_setup_data->rpc_message->rpc_resp; | ||
821 | /* Bind the user cred */ | 823 | /* Bind the user cred */ |
822 | if (task->tk_msg.rpc_cred != NULL) | 824 | rpcauth_bindcred(task, task_setup_data->rpc_message->rpc_cred, task_setup_data->flags); |
823 | rpcauth_holdcred(task); | ||
824 | else if (!(task_setup_data->flags & RPC_TASK_ROOTCREDS)) | ||
825 | rpcauth_bindcred(task); | ||
826 | else | ||
827 | rpcauth_bind_root_cred(task); | ||
828 | if (task->tk_action == NULL) | 825 | if (task->tk_action == NULL) |
829 | rpc_call_start(task); | 826 | rpc_call_start(task); |
830 | } | 827 | } |