nfs: do not start the callback thread until we set rqstp->rq_task
This fixes an Oopsable race when starting up the callback server. 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
d4e8990299
commit
66f09ca717
@ -235,7 +235,7 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,
|
|||||||
|
|
||||||
cb_info->serv = serv;
|
cb_info->serv = serv;
|
||||||
cb_info->rqst = rqstp;
|
cb_info->rqst = rqstp;
|
||||||
cb_info->task = kthread_run(callback_svc, cb_info->rqst,
|
cb_info->task = kthread_create(callback_svc, cb_info->rqst,
|
||||||
"nfsv4.%u-svc", minorversion);
|
"nfsv4.%u-svc", minorversion);
|
||||||
if (IS_ERR(cb_info->task)) {
|
if (IS_ERR(cb_info->task)) {
|
||||||
ret = PTR_ERR(cb_info->task);
|
ret = PTR_ERR(cb_info->task);
|
||||||
@ -245,6 +245,7 @@ static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
rqstp->rq_task = cb_info->task;
|
rqstp->rq_task = cb_info->task;
|
||||||
|
wake_up_process(cb_info->task);
|
||||||
dprintk("nfs_callback_up: service started\n");
|
dprintk("nfs_callback_up: service started\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user