|
@@ -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)
|
|
static struct svc_serv *lockd_create_svc(void)
|
|
{
|
|
{
|
|
struct svc_serv *serv;
|
|
struct svc_serv *serv;
|
|
@@ -343,32 +383,9 @@ int lockd_up(struct net *net)
|
|
if (error < 0)
|
|
if (error < 0)
|
|
goto err_net;
|
|
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;
|
|
goto err_start;
|
|
- }
|
|
|
|
|
|
|
|
nlmsvc_users++;
|
|
nlmsvc_users++;
|
|
/*
|
|
/*
|