Skip to content

Commit 6a4e252

Browse files
neilbrownchucklever
authored andcommitted
lockd: move svc_exit_thread() into the thread
The normal place to call svc_exit_thread() is from the thread itself just before it exists. Do this for lockd. This means that nlmsvc_rqst is not used out side of lockd_start_svc(), so it can be made local to that function, and renamed to 'rqst'. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
1 parent b73a297 commit 6a4e252

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

fs/lockd/svc.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ static DEFINE_MUTEX(nlmsvc_mutex);
5656
static unsigned int nlmsvc_users;
5757
static struct svc_serv *nlmsvc_serv;
5858
static struct task_struct *nlmsvc_task;
59-
static struct svc_rqst *nlmsvc_rqst;
6059
unsigned long nlmsvc_timeout;
6160

6261
unsigned int lockd_net_id;
@@ -182,6 +181,11 @@ lockd(void *vrqstp)
182181
nlm_shutdown_hosts();
183182
cancel_delayed_work_sync(&ln->grace_period_end);
184183
locks_end_grace(&ln->lockd_manager);
184+
185+
dprintk("lockd_down: service stopped\n");
186+
187+
svc_exit_thread(rqstp);
188+
185189
return 0;
186190
}
187191

@@ -358,13 +362,14 @@ static void lockd_unregister_notifiers(void)
358362
static int lockd_start_svc(struct svc_serv *serv)
359363
{
360364
int error;
365+
struct svc_rqst *rqst;
361366

362367
/*
363368
* Create the kernel thread and wait for it to start.
364369
*/
365-
nlmsvc_rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
366-
if (IS_ERR(nlmsvc_rqst)) {
367-
error = PTR_ERR(nlmsvc_rqst);
370+
rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
371+
if (IS_ERR(rqst)) {
372+
error = PTR_ERR(rqst);
368373
printk(KERN_WARNING
369374
"lockd_up: svc_rqst allocation failed, error=%d\n",
370375
error);
@@ -374,24 +379,23 @@ static int lockd_start_svc(struct svc_serv *serv)
374379
svc_sock_update_bufs(serv);
375380
serv->sv_maxconn = nlm_max_connections;
376381

377-
nlmsvc_task = kthread_create(lockd, nlmsvc_rqst, "%s", serv->sv_name);
382+
nlmsvc_task = kthread_create(lockd, rqst, "%s", serv->sv_name);
378383
if (IS_ERR(nlmsvc_task)) {
379384
error = PTR_ERR(nlmsvc_task);
380385
printk(KERN_WARNING
381386
"lockd_up: kthread_run failed, error=%d\n", error);
382387
goto out_task;
383388
}
384-
nlmsvc_rqst->rq_task = nlmsvc_task;
389+
rqst->rq_task = nlmsvc_task;
385390
wake_up_process(nlmsvc_task);
386391

387392
dprintk("lockd_up: service started\n");
388393
return 0;
389394

390395
out_task:
391-
svc_exit_thread(nlmsvc_rqst);
396+
svc_exit_thread(rqst);
392397
nlmsvc_task = NULL;
393398
out_rqst:
394-
nlmsvc_rqst = NULL;
395399
return error;
396400
}
397401

@@ -500,9 +504,6 @@ lockd_down(struct net *net)
500504
}
501505
lockd_unregister_notifiers();
502506
kthread_stop(nlmsvc_task);
503-
dprintk("lockd_down: service stopped\n");
504-
svc_exit_thread(nlmsvc_rqst);
505-
nlmsvc_rqst = NULL;
506507
dprintk("lockd_down: service destroyed\n");
507508
nlmsvc_serv = NULL;
508509
nlmsvc_task = NULL;

0 commit comments

Comments
 (0)