From: Trond Myklebust Date: Tue, 2 Sep 2014 17:58:57 +0000 (-0400) Subject: lockd: Do not start the lockd thread before we've set nlmsvc_rqst->rq_task X-Git-Tag: v4.0~1044^2~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4e89902990e3fae1b8d2ca501d2fa5f0657c053;p=platform%2Fkernel%2Flinux-amlogic.git 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 Reviewed-by: Jeff Layton Signed-off-by: J. Bruce Fields --- diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index b416b33..09857b4 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c @@ -306,7 +306,7 @@ static int lockd_start_svc(struct svc_serv *serv) svc_sock_update_bufs(serv); 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)) { error = PTR_ERR(nlmsvc_task); printk(KERN_WARNING @@ -314,6 +314,7 @@ static int lockd_start_svc(struct svc_serv *serv) goto out_task; } nlmsvc_rqst->rq_task = nlmsvc_task; + wake_up_process(nlmsvc_task); dprintk("lockd_up: service started\n"); return 0;