nfsd4: allow nfs4 state startup to fail
The failure here is pretty unlikely, but we should handle it anyway. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
5d351754fc
commit
29ab23cc5d
|
@ -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)
|
||||||
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)
|
||||||
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;
|
||||||
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);
|
||||||
#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) { }
|
||||||
|
|
Loading…
Reference in New Issue