aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4callback.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs4callback.c')
-rw-r--r--fs/nfsd/nfs4callback.c12
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
451out_rpciod: 447out_release_clp:
452 atomic_dec(&clp->cl_count); 448 atomic_dec(&clp->cl_count);
453 rpciod_down();
454out_clnt:
455 rpc_shutdown_client(cb->cb_client); 449 rpc_shutdown_client(cb->cb_client);
456out_err: 450out_err:
457 cb->cb_client = NULL; 451 cb->cb_client = NULL;