aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2012-08-20 10:00:31 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-10-01 18:25:38 -0400
commit23c20ecd44750dd42e5fd53285a17ca8d8a9b0a3 (patch)
tree36940b99df871bd80fbb0d99fbaf9c3ef037abd8 /fs
parent8e2461444319b8f3fe47b94ea9b5d2e1dd8adadb (diff)
NFS: callback up - users counting cleanup
Usage coutner now increased only is the service was started sccessfully. Even if service is running already, then goto is not required anymore, because service creation and start will be skipped. With this patch code looks clearer. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/callback.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index 5d5f9d10cfd0..64e87ec045aa 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -229,6 +229,9 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,
229 229
230 nfs_callback_bc_serv(minorversion, xprt, serv); 230 nfs_callback_bc_serv(minorversion, xprt, serv);
231 231
232 if (cb_info->task)
233 return 0;
234
232 minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion, 235 minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion,
233 serv, &rqstp, &callback_svc); 236 serv, &rqstp, &callback_svc);
234 if (!minorversion_setup) { 237 if (!minorversion_setup) {
@@ -292,6 +295,8 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct n
292err_socks: 295err_socks:
293 svc_rpcb_cleanup(serv, net); 296 svc_rpcb_cleanup(serv, net);
294err_bind: 297err_bind:
298 dprintk("NFS: Couldn't create callback socket: err = %d; "
299 "net = %p\n", ret, net);
295 return ret; 300 return ret;
296} 301}
297 302
@@ -340,7 +345,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
340{ 345{
341 struct svc_serv *serv; 346 struct svc_serv *serv;
342 struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion]; 347 struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion];
343 int ret = 0; 348 int ret;
344 struct net *net = xprt->xprt_net; 349 struct net *net = xprt->xprt_net;
345 350
346 mutex_lock(&nfs_callback_mutex); 351 mutex_lock(&nfs_callback_mutex);
@@ -351,11 +356,6 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
351 goto err_create; 356 goto err_create;
352 } 357 }
353 358
354 if (cb_info->users++ || cb_info->task != NULL) {
355 nfs_callback_bc_serv(minorversion, xprt, serv);
356 goto out;
357 }
358
359 ret = nfs_callback_up_net(minorversion, serv, net); 359 ret = nfs_callback_up_net(minorversion, serv, net);
360 if (ret < 0) 360 if (ret < 0)
361 goto err_net; 361 goto err_net;
@@ -364,13 +364,14 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
364 if (ret < 0) 364 if (ret < 0)
365 goto err_start; 365 goto err_start;
366 366
367out: 367 cb_info->users++;
368 /* 368 /*
369 * svc_create creates the svc_serv with sv_nrthreads == 1, and then 369 * svc_create creates the svc_serv with sv_nrthreads == 1, and then
370 * svc_prepare_thread increments that. So we need to call svc_destroy 370 * svc_prepare_thread increments that. So we need to call svc_destroy
371 * on both success and failure so that the refcount is 1 when the 371 * on both success and failure so that the refcount is 1 when the
372 * thread exits. 372 * thread exits.
373 */ 373 */
374err_net:
374 svc_destroy(serv); 375 svc_destroy(serv);
375err_create: 376err_create:
376 mutex_unlock(&nfs_callback_mutex); 377 mutex_unlock(&nfs_callback_mutex);
@@ -378,11 +379,8 @@ err_create:
378 379
379err_start: 380err_start:
380 svc_shutdown_net(serv, net); 381 svc_shutdown_net(serv, net);
381err_net: 382 dprintk("NFS: Couldn't create server thread; err = %d\n", ret);
382 dprintk("NFS: Couldn't create callback socket or server thread; " 383 goto err_net;
383 "err = %d\n", ret);
384 cb_info->users--;
385 goto out;
386} 384}
387 385
388/* 386/*