Commit 29ab23cc authored by J. Bruce Fields's avatar J. Bruce Fields

nfsd4: allow nfs4 state startup to fail

The failure here is pretty unlikely, but we should handle it anyway.
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 5d351754
...@@ -4004,7 +4004,7 @@ set_max_delegations(void) ...@@ -4004,7 +4004,7 @@ set_max_delegations(void)
/* initialization to perform when the nfsd service is started: */ /* initialization to perform when the nfsd service is started: */
static void static int
__nfs4_state_start(void) __nfs4_state_start(void)
{ {
unsigned long grace_time; unsigned long grace_time;
...@@ -4016,19 +4016,26 @@ __nfs4_state_start(void) ...@@ -4016,19 +4016,26 @@ __nfs4_state_start(void)
printk(KERN_INFO "NFSD: starting %ld-second grace period\n", printk(KERN_INFO "NFSD: starting %ld-second grace period\n",
grace_time/HZ); grace_time/HZ);
laundry_wq = create_singlethread_workqueue("nfsd4"); laundry_wq = create_singlethread_workqueue("nfsd4");
if (laundry_wq == NULL)
return -ENOMEM;
queue_delayed_work(laundry_wq, &laundromat_work, grace_time); queue_delayed_work(laundry_wq, &laundromat_work, grace_time);
set_max_delegations(); set_max_delegations();
return 0;
} }
void int
nfs4_state_start(void) nfs4_state_start(void)
{ {
int ret;
if (nfs4_init) if (nfs4_init)
return; return 0;
nfsd4_load_reboot_recovery_data(); nfsd4_load_reboot_recovery_data();
__nfs4_state_start(); ret = __nfs4_state_start();
if (ret)
return ret;
nfs4_init = 1; nfs4_init = 1;
return; return 0;
} }
time_t time_t
......
...@@ -411,7 +411,9 @@ nfsd_svc(unsigned short port, int nrservs) ...@@ -411,7 +411,9 @@ 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;
nfs4_state_start(); error = nfs4_state_start();
if (error)
goto out;
nfsd_reset_versions(); nfsd_reset_versions();
......
...@@ -166,7 +166,7 @@ extern int nfsd_max_blksize; ...@@ -166,7 +166,7 @@ extern int nfsd_max_blksize;
extern unsigned int max_delegations; extern unsigned int max_delegations;
int nfs4_state_init(void); int nfs4_state_init(void);
void nfsd4_free_slabs(void); void nfsd4_free_slabs(void);
void nfs4_state_start(void); int 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);
...@@ -174,7 +174,7 @@ int nfs4_reset_recoverydir(char *recdir); ...@@ -174,7 +174,7 @@ int nfs4_reset_recoverydir(char *recdir);
#else #else
static inline int nfs4_state_init(void) { return 0; } static inline int nfs4_state_init(void) { return 0; }
static inline void nfsd4_free_slabs(void) { } static inline void nfsd4_free_slabs(void) { }
static inline void nfs4_state_start(void) { } static inline int nfs4_state_start(void) { }
static inline void nfs4_state_shutdown(void) { } static inline void nfs4_state_shutdown(void) { }
static inline time_t nfs4_lease_time(void) { return 0; } static inline time_t nfs4_lease_time(void) { return 0; }
static inline void nfs4_reset_lease(time_t leasetime) { } static inline void nfs4_reset_lease(time_t leasetime) { }
......
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