lockd: Do not start the lockd thread before we've set nlmsvc_rqst->rq_task
This fixes an Oopsable race when starting lockd. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Reviewed-by: Jeff Layton <jlayton@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
ccad7dad86
commit
d4e8990299
|
@ -306,7 +306,7 @@ 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_run(lockd, nlmsvc_rqst, "%s", serv->sv_name);
|
nlmsvc_task = kthread_create(lockd, nlmsvc_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
|
||||||
|
@ -314,6 +314,7 @@ static int lockd_start_svc(struct svc_serv *serv)
|
||||||
goto out_task;
|
goto out_task;
|
||||||
}
|
}
|
||||||
nlmsvc_rqst->rq_task = nlmsvc_task;
|
nlmsvc_rqst->rq_task = nlmsvc_task;
|
||||||
|
wake_up_process(nlmsvc_task);
|
||||||
|
|
||||||
dprintk("lockd_up: service started\n");
|
dprintk("lockd_up: service started\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue