Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 333163
b: refs/heads/master
c: 23c20ec
h: refs/heads/master
i:
  333161: 5c62cca
  333159: dfb6b7a
v: v3
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Oct 1, 2012
1 parent 483ca6d commit 565921f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8e2461444319b8f3fe47b94ea9b5d2e1dd8adadb
refs/heads/master: 23c20ecd44750dd42e5fd53285a17ca8d8a9b0a3
22 changes: 10 additions & 12 deletions trunk/fs/nfs/callback.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,

nfs_callback_bc_serv(minorversion, xprt, serv);

if (cb_info->task)
return 0;

minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion,
serv, &rqstp, &callback_svc);
if (!minorversion_setup) {
Expand Down Expand Up @@ -292,6 +295,8 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct n
err_socks:
svc_rpcb_cleanup(serv, net);
err_bind:
dprintk("NFS: Couldn't create callback socket: err = %d; "
"net = %p\n", ret, net);
return ret;
}

Expand Down Expand Up @@ -340,7 +345,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
{
struct svc_serv *serv;
struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion];
int ret = 0;
int ret;
struct net *net = xprt->xprt_net;

mutex_lock(&nfs_callback_mutex);
Expand All @@ -351,11 +356,6 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
goto err_create;
}

if (cb_info->users++ || cb_info->task != NULL) {
nfs_callback_bc_serv(minorversion, xprt, serv);
goto out;
}

ret = nfs_callback_up_net(minorversion, serv, net);
if (ret < 0)
goto err_net;
Expand All @@ -364,25 +364,23 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
if (ret < 0)
goto err_start;

out:
cb_info->users++;
/*
* svc_create creates the svc_serv with sv_nrthreads == 1, and then
* svc_prepare_thread increments that. So we need to call svc_destroy
* on both success and failure so that the refcount is 1 when the
* thread exits.
*/
err_net:
svc_destroy(serv);
err_create:
mutex_unlock(&nfs_callback_mutex);
return ret;

err_start:
svc_shutdown_net(serv, net);
err_net:
dprintk("NFS: Couldn't create callback socket or server thread; "
"err = %d\n", ret);
cb_info->users--;
goto out;
dprintk("NFS: Couldn't create server thread; err = %d\n", ret);
goto err_net;
}

/*
Expand Down

0 comments on commit 565921f

Please sign in to comment.