From ef77501cc4bc696432efe115aaf87bc93bad81c6 Mon Sep 17 00:00:00 2001 From: "J. Bruce Fields" Date: Mon, 23 Feb 2009 19:35:22 -0800 Subject: [PATCH] --- yaml --- r: 153674 b: refs/heads/master c: ecdd03b7914c91ef849e49c4d466c87f4981b5cd h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/nfsd/nfs4callback.c | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index 7ec23af2004c..a046dfa048f7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e1cab5a5896e142190cd66a8287099b52e5855a7 +refs/heads/master: ecdd03b7914c91ef849e49c4d466c87f4981b5cd diff --git a/trunk/fs/nfsd/nfs4callback.c b/trunk/fs/nfsd/nfs4callback.c index 4788d09d9bec..711c6282151f 100644 --- a/trunk/fs/nfsd/nfs4callback.c +++ b/trunk/fs/nfsd/nfs4callback.c @@ -409,6 +409,12 @@ int setup_callback_client(struct nfs4_client *clp) } +static void warn_no_callback_path(struct nfs4_client *clp, int reason) +{ + dprintk("NFSD: warning: no callback path to client %.*s: error %d\n", + (int)clp->cl_name.len, clp->cl_name.data, reason); +} + static int do_probe_callback(void *data) { struct nfs4_client *clp = data; @@ -419,24 +425,12 @@ static int do_probe_callback(void *data) }; int status; - status = setup_callback_client(clp); - if (status) - goto out_err; - status = rpc_call_sync(cb->cb_client, &msg, RPC_TASK_SOFT); - if (status) - goto out_release_client; + warn_no_callback_path(clp, status); + else + atomic_set(&cb->cb_set, 1); - atomic_set(&cb->cb_set, 1); - put_nfs4_client(clp); - return 0; -out_release_client: - rpc_shutdown_client(cb->cb_client); - cb->cb_client = NULL; -out_err: - dprintk("NFSD: warning: no callback path to client %.*s: error %d\n", - (int)clp->cl_name.len, clp->cl_name.data, status); put_nfs4_client(clp); return 0; } @@ -448,9 +442,16 @@ void nfsd4_probe_callback(struct nfs4_client *clp) { struct task_struct *t; + int status; BUG_ON(atomic_read(&clp->cl_callback.cb_set)); + status = setup_callback_client(clp); + if (status) { + warn_no_callback_path(clp, status); + return; + } + /* the task holds a reference to the nfs4_client struct */ atomic_inc(&clp->cl_count);