Skip to content

Commit

Permalink
LockD: service start function introduced
Browse files Browse the repository at this point in the history
This is just a code move, which from my POV makes the code look better.
I.e. now on start we have 3 different stages:
1) Service creation.
2) Service per-net data allocation.
3) Service start.

Signed-off-by: Stanislav Kinsbursky <[email protected]>
Signed-off-by: J. Bruce Fields <[email protected]>
  • Loading branch information
Stanislav Kinsbursky authored and J. Bruce Fields committed Jun 1, 2012
1 parent 7d13ec7 commit 3d1221d
Showing 1 changed file with 42 additions and 25 deletions.
67 changes: 42 additions & 25 deletions fs/lockd/svc.c
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,46 @@ static void lockd_down_net(struct svc_serv *serv, struct net *net)
}
}

static int lockd_start_svc(struct svc_serv *serv)
{
int error;

if (nlmsvc_rqst)
return 0;

/*
* Create the kernel thread and wait for it to start.
*/
nlmsvc_rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
if (IS_ERR(nlmsvc_rqst)) {
error = PTR_ERR(nlmsvc_rqst);
printk(KERN_WARNING
"lockd_up: svc_rqst allocation failed, error=%d\n",
error);
goto out_rqst;
}

svc_sock_update_bufs(serv);
serv->sv_maxconn = nlm_max_connections;

nlmsvc_task = kthread_run(lockd, nlmsvc_rqst, serv->sv_name);
if (IS_ERR(nlmsvc_task)) {
error = PTR_ERR(nlmsvc_task);
printk(KERN_WARNING
"lockd_up: kthread_run failed, error=%d\n", error);
goto out_task;
}
dprintk("lockd_up: service started\n");
return 0;

out_task:
svc_exit_thread(nlmsvc_rqst);
nlmsvc_task = NULL;
out_rqst:
nlmsvc_rqst = NULL;
return error;
}

static struct svc_serv *lockd_create_svc(void)
{
struct svc_serv *serv;
Expand Down Expand Up @@ -343,32 +383,9 @@ int lockd_up(struct net *net)
if (error < 0)
goto err_net;

/*
* Create the kernel thread and wait for it to start.
*/
nlmsvc_rqst = svc_prepare_thread(serv, &serv->sv_pools[0], NUMA_NO_NODE);
if (IS_ERR(nlmsvc_rqst)) {
error = PTR_ERR(nlmsvc_rqst);
nlmsvc_rqst = NULL;
printk(KERN_WARNING
"lockd_up: svc_rqst allocation failed, error=%d\n",
error);
goto err_start;
}

svc_sock_update_bufs(serv);
serv->sv_maxconn = nlm_max_connections;

nlmsvc_task = kthread_run(lockd, nlmsvc_rqst, serv->sv_name);
if (IS_ERR(nlmsvc_task)) {
error = PTR_ERR(nlmsvc_task);
svc_exit_thread(nlmsvc_rqst);
nlmsvc_task = NULL;
nlmsvc_rqst = NULL;
printk(KERN_WARNING
"lockd_up: kthread_run failed, error=%d\n", error);
error = lockd_start_svc(serv);
if (error < 0)
goto err_start;
}

nlmsvc_users++;
/*
Expand Down

0 comments on commit 3d1221d

Please sign in to comment.