Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4e89902 authored by Trond Myklebust's avatar Trond Myklebust Committed by J. Bruce Fields
Browse files

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: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Reviewed-by: default avatarJeff Layton <jlayton@primarydata.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent ccad7dad
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;