lockd: move svc_exit_thread() into the thread
[ Upstream commit 6a4e2527a63620a820c4ebf3596b57176da26fb3 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
7077a00703
commit
8304dd04fb
@@ -56,7 +56,6 @@ static DEFINE_MUTEX(nlmsvc_mutex);
|
|||||||
static unsigned int nlmsvc_users;
|
static unsigned int nlmsvc_users;
|
||||||
static struct svc_serv *nlmsvc_serv;
|
static struct svc_serv *nlmsvc_serv;
|
||||||
static struct task_struct *nlmsvc_task;
|
static struct task_struct *nlmsvc_task;
|
||||||
static struct svc_rqst *nlmsvc_rqst;
|
|
||||||
unsigned long nlmsvc_timeout;
|
unsigned long nlmsvc_timeout;
|
||||||
|
|
||||||
unsigned int lockd_net_id;
|
unsigned int lockd_net_id;
|
||||||
@@ -182,6 +181,11 @@ lockd(void *vrqstp)
|
|||||||
nlm_shutdown_hosts();
|
nlm_shutdown_hosts();
|
||||||
cancel_delayed_work_sync(&ln->grace_period_end);
|
cancel_delayed_work_sync(&ln->grace_period_end);
|
||||||
locks_end_grace(&ln->lockd_manager);
|
locks_end_grace(&ln->lockd_manager);
|
||||||
|
|
||||||
|
dprintk("lockd_down: service stopped\n");
|
||||||
|
|
||||||
|
svc_exit_thread(rqstp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,13 +362,14 @@ static void lockd_unregister_notifiers(void)
|
|||||||
static int lockd_start_svc(struct svc_serv *serv)
|
static int lockd_start_svc(struct svc_serv *serv)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
struct svc_rqst *rqst;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the kernel thread and wait for it to start.
|
* Create the kernel thread and wait for it to start.
|
||||||
*/
|
*/
|
||||||
nlmsvc_rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
|
rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
|
||||||
if (IS_ERR(nlmsvc_rqst)) {
|
if (IS_ERR(rqst)) {
|
||||||
error = PTR_ERR(nlmsvc_rqst);
|
error = PTR_ERR(rqst);
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"lockd_up: svc_rqst allocation failed, error=%d\n",
|
"lockd_up: svc_rqst allocation failed, error=%d\n",
|
||||||
error);
|
error);
|
||||||
@@ -374,24 +379,23 @@ static int lockd_start_svc(struct svc_serv *serv)
|
|||||||
svc_sock_update_bufs(serv);
|
svc_sock_update_bufs(serv);
|
||||||
serv->sv_maxconn = nlm_max_connections;
|
serv->sv_maxconn = nlm_max_connections;
|
||||||
|
|
||||||
nlmsvc_task = kthread_create(lockd, nlmsvc_rqst, "%s", serv->sv_name);
|
nlmsvc_task = kthread_create(lockd, rqst, "%s", serv->sv_name);
|
||||||
if (IS_ERR(nlmsvc_task)) {
|
if (IS_ERR(nlmsvc_task)) {
|
||||||
error = PTR_ERR(nlmsvc_task);
|
error = PTR_ERR(nlmsvc_task);
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"lockd_up: kthread_run failed, error=%d\n", error);
|
"lockd_up: kthread_run failed, error=%d\n", error);
|
||||||
goto out_task;
|
goto out_task;
|
||||||
}
|
}
|
||||||
nlmsvc_rqst->rq_task = nlmsvc_task;
|
rqst->rq_task = nlmsvc_task;
|
||||||
wake_up_process(nlmsvc_task);
|
wake_up_process(nlmsvc_task);
|
||||||
|
|
||||||
dprintk("lockd_up: service started\n");
|
dprintk("lockd_up: service started\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_task:
|
out_task:
|
||||||
svc_exit_thread(nlmsvc_rqst);
|
svc_exit_thread(rqst);
|
||||||
nlmsvc_task = NULL;
|
nlmsvc_task = NULL;
|
||||||
out_rqst:
|
out_rqst:
|
||||||
nlmsvc_rqst = NULL;
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,9 +504,6 @@ lockd_down(struct net *net)
|
|||||||
}
|
}
|
||||||
lockd_unregister_notifiers();
|
lockd_unregister_notifiers();
|
||||||
kthread_stop(nlmsvc_task);
|
kthread_stop(nlmsvc_task);
|
||||||
dprintk("lockd_down: service stopped\n");
|
|
||||||
svc_exit_thread(nlmsvc_rqst);
|
|
||||||
nlmsvc_rqst = NULL;
|
|
||||||
dprintk("lockd_down: service destroyed\n");
|
dprintk("lockd_down: service destroyed\n");
|
||||||
nlmsvc_serv = NULL;
|
nlmsvc_serv = NULL;
|
||||||
nlmsvc_task = NULL;
|
nlmsvc_task = NULL;
|
||||||
|
Reference in New Issue
Block a user