diff options
author | J. Bruce Fields <bfields@redhat.com> | 2010-07-21 18:29:25 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2010-07-23 08:51:26 -0400 |
commit | 59db4a0c102e0de226a3395dbf25ea51bf845937 (patch) | |
tree | 368532c7540cdec8df175b668cc9abef48b8bc11 /fs/nfsd/nfssvc.c | |
parent | ac77efbe2b4d2a1e571a4f1e5b6e47de72a7d737 (diff) |
nfsd: move more into nfsd_startup()
This is just cleanup--it's harmless to call nfsd_rachache_init,
nfsd_init_socks, and nfsd_reset_versions more than once. But there's no
point to it.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfssvc.c')
-rw-r--r-- | fs/nfsd/nfssvc.c | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 8a556ff2e10d..62a6c4474d13 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -180,22 +180,54 @@ int nfsd_nrthreads(void) | |||
180 | return rv; | 180 | return rv; |
181 | } | 181 | } |
182 | 182 | ||
183 | static int nfsd_init_socks(int port) | ||
184 | { | ||
185 | int error; | ||
186 | if (!list_empty(&nfsd_serv->sv_permsocks)) | ||
187 | return 0; | ||
188 | |||
189 | error = svc_create_xprt(nfsd_serv, "udp", PF_INET, port, | ||
190 | SVC_SOCK_DEFAULTS); | ||
191 | if (error < 0) | ||
192 | return error; | ||
193 | |||
194 | error = svc_create_xprt(nfsd_serv, "tcp", PF_INET, port, | ||
195 | SVC_SOCK_DEFAULTS); | ||
196 | if (error < 0) | ||
197 | return error; | ||
198 | |||
199 | return 0; | ||
200 | } | ||
201 | |||
183 | static bool nfsd_up = false; | 202 | static bool nfsd_up = false; |
184 | 203 | ||
185 | static int nfsd_startup(unsigned short port, int nrservs) | 204 | static int nfsd_startup(unsigned short port, int nrservs) |
186 | { | 205 | { |
187 | int ret; | 206 | int ret; |
188 | 207 | /* | |
208 | * Readahead param cache - will no-op if it already exists. | ||
209 | * (Note therefore results will be suboptimal if number of | ||
210 | * threads is modified after nfsd start.) | ||
211 | */ | ||
212 | ret = nfsd_racache_init(2*nrservs); | ||
213 | if (ret) | ||
214 | return ret; | ||
215 | ret = nfsd_init_socks(port); | ||
216 | if (ret) | ||
217 | goto out_racache; | ||
189 | ret = lockd_up(); | 218 | ret = lockd_up(); |
190 | if (ret) | 219 | if (ret) |
191 | return ret; | 220 | return ret; |
192 | ret = nfs4_state_start(); | 221 | ret = nfs4_state_start(); |
193 | if (ret) | 222 | if (ret) |
194 | goto out_lockd; | 223 | goto out_lockd; |
224 | nfsd_reset_versions(); | ||
195 | nfsd_up = true; | 225 | nfsd_up = true; |
196 | return 0; | 226 | return 0; |
197 | out_lockd: | 227 | out_lockd: |
198 | lockd_down(); | 228 | lockd_down(); |
229 | out_racache: | ||
230 | nfsd_racache_shutdown(); | ||
199 | return ret; | 231 | return ret; |
200 | } | 232 | } |
201 | 233 | ||
@@ -209,8 +241,9 @@ static void nfsd_shutdown(void) | |||
209 | */ | 241 | */ |
210 | if (!nfsd_up) | 242 | if (!nfsd_up) |
211 | return; | 243 | return; |
212 | lockd_down(); | ||
213 | nfs4_state_shutdown(); | 244 | nfs4_state_shutdown(); |
245 | lockd_down(); | ||
246 | nfsd_racache_shutdown(); | ||
214 | nfsd_up = false; | 247 | nfsd_up = false; |
215 | } | 248 | } |
216 | 249 | ||
@@ -218,7 +251,6 @@ static void nfsd_last_thread(struct svc_serv *serv) | |||
218 | { | 251 | { |
219 | /* When last nfsd thread exits we need to do some clean-up */ | 252 | /* When last nfsd thread exits we need to do some clean-up */ |
220 | nfsd_serv = NULL; | 253 | nfsd_serv = NULL; |
221 | nfsd_racache_shutdown(); | ||
222 | nfsd_shutdown(); | 254 | nfsd_shutdown(); |
223 | 255 | ||
224 | printk(KERN_WARNING "nfsd: last server has exited, flushing export " | 256 | printk(KERN_WARNING "nfsd: last server has exited, flushing export " |
@@ -305,25 +337,6 @@ int nfsd_create_serv(void) | |||
305 | return err; | 337 | return err; |
306 | } | 338 | } |
307 | 339 | ||
308 | static int nfsd_init_socks(int port) | ||
309 | { | ||
310 | int error; | ||
311 | if (!list_empty(&nfsd_serv->sv_permsocks)) | ||
312 | return 0; | ||
313 | |||
314 | error = svc_create_xprt(nfsd_serv, "udp", PF_INET, port, | ||
315 | SVC_SOCK_DEFAULTS); | ||
316 | if (error < 0) | ||
317 | return error; | ||
318 | |||
319 | error = svc_create_xprt(nfsd_serv, "tcp", PF_INET, port, | ||
320 | SVC_SOCK_DEFAULTS); | ||
321 | if (error < 0) | ||
322 | return error; | ||
323 | |||
324 | return 0; | ||
325 | } | ||
326 | |||
327 | int nfsd_nrpools(void) | 340 | int nfsd_nrpools(void) |
328 | { | 341 | { |
329 | if (nfsd_serv == NULL) | 342 | if (nfsd_serv == NULL) |
@@ -419,11 +432,6 @@ nfsd_svc(unsigned short port, int nrservs) | |||
419 | if (nrservs == 0 && nfsd_serv == NULL) | 432 | if (nrservs == 0 && nfsd_serv == NULL) |
420 | goto out; | 433 | goto out; |
421 | 434 | ||
422 | /* Readahead param cache - will no-op if it already exists */ | ||
423 | error = nfsd_racache_init(2*nrservs); | ||
424 | if (error<0) | ||
425 | goto out; | ||
426 | |||
427 | first_thread = (nfsd_serv->sv_nrthreads == 0) && (nrservs != 0); | 435 | first_thread = (nfsd_serv->sv_nrthreads == 0) && (nrservs != 0); |
428 | 436 | ||
429 | if (first_thread) { | 437 | if (first_thread) { |
@@ -431,16 +439,9 @@ nfsd_svc(unsigned short port, int nrservs) | |||
431 | if (error) | 439 | if (error) |
432 | goto out; | 440 | goto out; |
433 | } | 441 | } |
434 | |||
435 | nfsd_reset_versions(); | ||
436 | |||
437 | error = nfsd_create_serv(); | 442 | error = nfsd_create_serv(); |
438 | if (error) | 443 | if (error) |
439 | goto out_shutdown; | 444 | goto out_shutdown; |
440 | error = nfsd_init_socks(port); | ||
441 | if (error) | ||
442 | goto out_destroy; | ||
443 | |||
444 | error = svc_set_num_threads(nfsd_serv, NULL, nrservs); | 445 | error = svc_set_num_threads(nfsd_serv, NULL, nrservs); |
445 | if (error == 0) | 446 | if (error == 0) |
446 | /* We are holding a reference to nfsd_serv which | 447 | /* We are holding a reference to nfsd_serv which |