summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2012-12-06 14:23:29 +0300
committerJ. Bruce Fields <bfields@redhat.com>2012-12-10 16:25:39 -0500
commitbda9cac1db8ab044e9edbfe5730283016b67d451 (patch)
tree1b126e8bdbcc7938290879e7d899d839d5d3130f
parent9dd9845f084cda07ce00cca32a5ba8fbcbbfbcaf (diff)
nfsd: introduce helpers for generic resources init and shutdown
NFSd have per-net resources and resources, used globally. Let's move generic resources init and shutdown to separated functions since they are going to be allocated on first NFSd service start and destroyed after last NFSd service shutdown. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r--fs/nfsd/nfssvc.c50
1 files changed, 34 insertions, 16 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 0e8622a4341c..f9d147f6dfd4 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -206,6 +206,37 @@ static int nfsd_init_socks(struct net *net)
static bool nfsd_up = false;
+static int nfsd_startup_generic(int nrservs)
+{
+ int ret;
+
+ if (nfsd_up)
+ return 0;
+
+ /*
+ * Readahead param cache - will no-op if it already exists.
+ * (Note therefore results will be suboptimal if number of
+ * threads is modified after nfsd start.)
+ */
+ ret = nfsd_racache_init(2*nrservs);
+ if (ret)
+ return ret;
+ ret = nfs4_state_start();
+ if (ret)
+ goto out_racache;
+ return 0;
+
+out_racache:
+ nfsd_racache_shutdown();
+ return ret;
+}
+
+static void nfsd_shutdown_generic(void)
+{
+ nfs4_state_shutdown();
+ nfsd_racache_shutdown();
+}
+
static int nfsd_startup_net(struct net *net)
{
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
@@ -236,19 +267,9 @@ static int nfsd_startup(int nrservs, struct net *net)
{
int ret;
- if (nfsd_up)
- return 0;
- /*
- * Readahead param cache - will no-op if it already exists.
- * (Note therefore results will be suboptimal if number of
- * threads is modified after nfsd start.)
- */
- ret = nfsd_racache_init(2*nrservs);
+ ret = nfsd_startup_generic(nrservs);
if (ret)
return ret;
- ret = nfs4_state_start();
- if (ret)
- goto out_racache;
ret = nfsd_startup_net(net);
if (ret)
goto out_net;
@@ -257,9 +278,7 @@ static int nfsd_startup(int nrservs, struct net *net)
return 0;
out_net:
- nfs4_state_shutdown();
-out_racache:
- nfsd_racache_shutdown();
+ nfsd_shutdown_generic();
return ret;
}
@@ -286,8 +305,7 @@ static void nfsd_shutdown(struct net *net)
if (!nfsd_up)
return;
nfsd_shutdown_net(net);
- nfs4_state_shutdown();
- nfsd_racache_shutdown();
+ nfsd_shutdown_generic();
nfsd_up = false;
}