diff options
Diffstat (limited to 'fs/nfsd/nfs4callback.c')
-rw-r--r-- | fs/nfsd/nfs4callback.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 864090edc28b..6b1b487db1ec 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
@@ -429,29 +429,23 @@ nfsd4_probe_callback(struct nfs4_client *clp) | |||
429 | goto out_err; | 429 | goto out_err; |
430 | } | 430 | } |
431 | 431 | ||
432 | /* Kick rpciod, put the call on the wire. */ | ||
433 | if (rpciod_up() != 0) | ||
434 | goto out_clnt; | ||
435 | |||
436 | /* the task holds a reference to the nfs4_client struct */ | 432 | /* the task holds a reference to the nfs4_client struct */ |
437 | atomic_inc(&clp->cl_count); | 433 | atomic_inc(&clp->cl_count); |
438 | 434 | ||
439 | msg.rpc_cred = nfsd4_lookupcred(clp,0); | 435 | msg.rpc_cred = nfsd4_lookupcred(clp,0); |
440 | if (IS_ERR(msg.rpc_cred)) | 436 | if (IS_ERR(msg.rpc_cred)) |
441 | goto out_rpciod; | 437 | goto out_release_clp; |
442 | status = rpc_call_async(cb->cb_client, &msg, RPC_TASK_ASYNC, &nfs4_cb_null_ops, NULL); | 438 | status = rpc_call_async(cb->cb_client, &msg, RPC_TASK_ASYNC, &nfs4_cb_null_ops, NULL); |
443 | put_rpccred(msg.rpc_cred); | 439 | put_rpccred(msg.rpc_cred); |
444 | 440 | ||
445 | if (status != 0) { | 441 | if (status != 0) { |
446 | dprintk("NFSD: asynchronous NFSPROC4_CB_NULL failed!\n"); | 442 | dprintk("NFSD: asynchronous NFSPROC4_CB_NULL failed!\n"); |
447 | goto out_rpciod; | 443 | goto out_release_clp; |
448 | } | 444 | } |
449 | return; | 445 | return; |
450 | 446 | ||
451 | out_rpciod: | 447 | out_release_clp: |
452 | atomic_dec(&clp->cl_count); | 448 | atomic_dec(&clp->cl_count); |
453 | rpciod_down(); | ||
454 | out_clnt: | ||
455 | rpc_shutdown_client(cb->cb_client); | 449 | rpc_shutdown_client(cb->cb_client); |
456 | out_err: | 450 | out_err: |
457 | cb->cb_client = NULL; | 451 | cb->cb_client = NULL; |