diff options
Diffstat (limited to 'fs/nfsd/nfssvc.c')
-rw-r--r-- | fs/nfsd/nfssvc.c | 50 |
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) | |||
206 | 206 | ||
207 | static bool nfsd_up = false; | 207 | static bool nfsd_up = false; |
208 | 208 | ||
209 | static int nfsd_startup_generic(int nrservs) | ||
210 | { | ||
211 | int ret; | ||
212 | |||
213 | if (nfsd_up) | ||
214 | return 0; | ||
215 | |||
216 | /* | ||
217 | * Readahead param cache - will no-op if it already exists. | ||
218 | * (Note therefore results will be suboptimal if number of | ||
219 | * threads is modified after nfsd start.) | ||
220 | */ | ||
221 | ret = nfsd_racache_init(2*nrservs); | ||
222 | if (ret) | ||
223 | return ret; | ||
224 | ret = nfs4_state_start(); | ||
225 | if (ret) | ||
226 | goto out_racache; | ||
227 | return 0; | ||
228 | |||
229 | out_racache: | ||
230 | nfsd_racache_shutdown(); | ||
231 | return ret; | ||
232 | } | ||
233 | |||
234 | static void nfsd_shutdown_generic(void) | ||
235 | { | ||
236 | nfs4_state_shutdown(); | ||
237 | nfsd_racache_shutdown(); | ||
238 | } | ||
239 | |||
209 | static int nfsd_startup_net(struct net *net) | 240 | static int nfsd_startup_net(struct net *net) |
210 | { | 241 | { |
211 | struct nfsd_net *nn = net_generic(net, nfsd_net_id); | 242 | struct nfsd_net *nn = net_generic(net, nfsd_net_id); |
@@ -236,19 +267,9 @@ static int nfsd_startup(int nrservs, struct net *net) | |||
236 | { | 267 | { |
237 | int ret; | 268 | int ret; |
238 | 269 | ||
239 | if (nfsd_up) | 270 | ret = nfsd_startup_generic(nrservs); |
240 | return 0; | ||
241 | /* | ||
242 | * Readahead param cache - will no-op if it already exists. | ||
243 | * (Note therefore results will be suboptimal if number of | ||
244 | * threads is modified after nfsd start.) | ||
245 | */ | ||
246 | ret = nfsd_racache_init(2*nrservs); | ||
247 | if (ret) | 271 | if (ret) |
248 | return ret; | 272 | return ret; |
249 | ret = nfs4_state_start(); | ||
250 | if (ret) | ||
251 | goto out_racache; | ||
252 | ret = nfsd_startup_net(net); | 273 | ret = nfsd_startup_net(net); |
253 | if (ret) | 274 | if (ret) |
254 | goto out_net; | 275 | goto out_net; |
@@ -257,9 +278,7 @@ static int nfsd_startup(int nrservs, struct net *net) | |||
257 | return 0; | 278 | return 0; |
258 | 279 | ||
259 | out_net: | 280 | out_net: |
260 | nfs4_state_shutdown(); | 281 | nfsd_shutdown_generic(); |
261 | out_racache: | ||
262 | nfsd_racache_shutdown(); | ||
263 | return ret; | 282 | return ret; |
264 | } | 283 | } |
265 | 284 | ||
@@ -286,8 +305,7 @@ static void nfsd_shutdown(struct net *net) | |||
286 | if (!nfsd_up) | 305 | if (!nfsd_up) |
287 | return; | 306 | return; |
288 | nfsd_shutdown_net(net); | 307 | nfsd_shutdown_net(net); |
289 | nfs4_state_shutdown(); | 308 | nfsd_shutdown_generic(); |
290 | nfsd_racache_shutdown(); | ||
291 | nfsd_up = false; | 309 | nfsd_up = false; |
292 | } | 310 | } |
293 | 311 | ||