Commit e8ff2a84 authored by J. Bruce Fields's avatar J. Bruce Fields

knfsd: move nfsv4 slab creation/destruction to module init/exit

We have some slabs that the nfs4 server uses to store state objects.
We're currently creating and destroying those slabs whenever the server
is brought up or down.  That seems excessive; may as well just do that
in module initialization and exit.

Also add some minor header cleanup.  (Thanks to Andrew Morton for that
and a compile fix.)
Signed-off-by: default avatar"J. Bruce Fields" <bfields@citi.umich.edu>
Acked-by: default avatarNeil Brown <neilb@suse.de>
parent 2b47eece
...@@ -1021,7 +1021,7 @@ nfsd4_free_slab(struct kmem_cache **slab) ...@@ -1021,7 +1021,7 @@ nfsd4_free_slab(struct kmem_cache **slab)
*slab = NULL; *slab = NULL;
} }
static void void
nfsd4_free_slabs(void) nfsd4_free_slabs(void)
{ {
nfsd4_free_slab(&stateowner_slab); nfsd4_free_slab(&stateowner_slab);
...@@ -3152,11 +3152,14 @@ nfs4_check_open_reclaim(clientid_t *clid) ...@@ -3152,11 +3152,14 @@ nfs4_check_open_reclaim(clientid_t *clid)
/* initialization to perform at module load time: */ /* initialization to perform at module load time: */
void int
nfs4_state_init(void) nfs4_state_init(void)
{ {
int i; int i, status;
status = nfsd4_init_slabs();
if (status)
return status;
for (i = 0; i < CLIENT_HASH_SIZE; i++) { for (i = 0; i < CLIENT_HASH_SIZE; i++) {
INIT_LIST_HEAD(&conf_id_hashtbl[i]); INIT_LIST_HEAD(&conf_id_hashtbl[i]);
INIT_LIST_HEAD(&conf_str_hashtbl[i]); INIT_LIST_HEAD(&conf_str_hashtbl[i]);
...@@ -3185,6 +3188,7 @@ nfs4_state_init(void) ...@@ -3185,6 +3188,7 @@ nfs4_state_init(void)
for (i = 0; i < CLIENT_HASH_SIZE; i++) for (i = 0; i < CLIENT_HASH_SIZE; i++)
INIT_LIST_HEAD(&reclaim_str_hashtbl[i]); INIT_LIST_HEAD(&reclaim_str_hashtbl[i]);
reclaim_str_hashtbl_size = 0; reclaim_str_hashtbl_size = 0;
return 0;
} }
static void static void
...@@ -3245,20 +3249,15 @@ __nfs4_state_start(void) ...@@ -3245,20 +3249,15 @@ __nfs4_state_start(void)
set_max_delegations(); set_max_delegations();
} }
int void
nfs4_state_start(void) nfs4_state_start(void)
{ {
int status;
if (nfs4_init) if (nfs4_init)
return 0; return;
status = nfsd4_init_slabs();
if (status)
return status;
nfsd4_load_reboot_recovery_data(); nfsd4_load_reboot_recovery_data();
__nfs4_state_start(); __nfs4_state_start();
nfs4_init = 1; nfs4_init = 1;
return 0; return;
} }
int int
...@@ -3316,7 +3315,6 @@ nfs4_state_shutdown(void) ...@@ -3316,7 +3315,6 @@ nfs4_state_shutdown(void)
nfs4_lock_state(); nfs4_lock_state();
nfs4_release_reclaim(); nfs4_release_reclaim();
__nfs4_state_shutdown(); __nfs4_state_shutdown();
nfsd4_free_slabs();
nfs4_unlock_state(); nfs4_unlock_state();
} }
......
...@@ -679,11 +679,13 @@ static int __init init_nfsd(void) ...@@ -679,11 +679,13 @@ static int __init init_nfsd(void)
int retval; int retval;
printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n"); printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
retval = nfs4_state_init(); /* nfs4 locking state */
if (retval)
return retval;
nfsd_stat_init(); /* Statistics */ nfsd_stat_init(); /* Statistics */
nfsd_cache_init(); /* RPC reply cache */ nfsd_cache_init(); /* RPC reply cache */
nfsd_export_init(); /* Exports table */ nfsd_export_init(); /* Exports table */
nfsd_lockd_init(); /* lockd->nfsd callbacks */ nfsd_lockd_init(); /* lockd->nfsd callbacks */
nfs4_state_init(); /* NFSv4 locking state */
nfsd_idmap_init(); /* Name to ID mapping */ nfsd_idmap_init(); /* Name to ID mapping */
if (proc_mkdir("fs/nfs", NULL)) { if (proc_mkdir("fs/nfs", NULL)) {
struct proc_dir_entry *entry; struct proc_dir_entry *entry;
...@@ -712,6 +714,7 @@ static void __exit exit_nfsd(void) ...@@ -712,6 +714,7 @@ static void __exit exit_nfsd(void)
nfsd_stat_shutdown(); nfsd_stat_shutdown();
nfsd_lockd_shutdown(); nfsd_lockd_shutdown();
nfsd_idmap_shutdown(); nfsd_idmap_shutdown();
nfsd4_free_slabs();
unregister_filesystem(&nfsd_fs_type); unregister_filesystem(&nfsd_fs_type);
} }
......
...@@ -349,9 +349,7 @@ nfsd_svc(unsigned short port, int nrservs) ...@@ -349,9 +349,7 @@ nfsd_svc(unsigned short port, int nrservs)
error = nfsd_racache_init(2*nrservs); error = nfsd_racache_init(2*nrservs);
if (error<0) if (error<0)
goto out; goto out;
error = nfs4_state_start(); nfs4_state_start();
if (error<0)
goto out;
nfsd_reset_versions(); nfsd_reset_versions();
......
...@@ -153,19 +153,21 @@ extern int nfsd_max_blksize; ...@@ -153,19 +153,21 @@ extern int nfsd_max_blksize;
*/ */
#ifdef CONFIG_NFSD_V4 #ifdef CONFIG_NFSD_V4
extern unsigned int max_delegations; extern unsigned int max_delegations;
void nfs4_state_init(void); int nfs4_state_init(void);
int nfs4_state_start(void); void nfsd4_free_slabs(void);
void nfs4_state_start(void);
void nfs4_state_shutdown(void); void nfs4_state_shutdown(void);
time_t nfs4_lease_time(void); time_t nfs4_lease_time(void);
void nfs4_reset_lease(time_t leasetime); void nfs4_reset_lease(time_t leasetime);
int nfs4_reset_recoverydir(char *recdir); int nfs4_reset_recoverydir(char *recdir);
#else #else
static inline void nfs4_state_init(void){}; static inline int nfs4_state_init(void) { return 0; }
static inline int nfs4_state_start(void){return 0;} static inline void nfsd4_free_slabs(void) { }
static inline void nfs4_state_shutdown(void){} static inline void nfs4_state_start(void) { }
static inline time_t nfs4_lease_time(void){return 0;} static inline void nfs4_state_shutdown(void) { }
static inline void nfs4_reset_lease(time_t leasetime){} static inline time_t nfs4_lease_time(void) { return 0; }
static inline int nfs4_reset_recoverydir(char *recdir) {return 0;} static inline void nfs4_reset_lease(time_t leasetime) { }
static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
#endif #endif
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment