Commit b9d189e5 authored by Neil Brown's avatar Neil Brown Committed by Linus Torvalds

[PATCH] kNFSd: Fix nfs shutdown problem.

The 'unexport everything' that happens when the
last nfsd thread dies was shuting down too much -
things that should only be shut down on module unload.
parent 23518c21
...@@ -738,23 +738,6 @@ exp_do_unexport(svc_export *unexp) ...@@ -738,23 +738,6 @@ exp_do_unexport(svc_export *unexp)
exp_fsid_unhash(unexp); exp_fsid_unhash(unexp);
} }
/*
* Revoke all exports for a given client.
*/
static void
exp_unexport_all(svc_client *clp)
{
struct svc_export *exp;
int index;
dprintk("unexporting all fs's for clnt %p\n", clp);
cache_for_each(exp, &svc_export_cache, index, h)
if (exp->ex_client == clp)
exp_do_unexport(exp);
cache_flush();
}
/* /*
* unexport syscall. * unexport syscall.
...@@ -1108,6 +1091,18 @@ nfsd_export_init(void) ...@@ -1108,6 +1091,18 @@ nfsd_export_init(void)
} }
/*
* Flush exports table - called when last nfsd thread is killed
*/
void
nfsd_export_flush(void)
{
exp_writelock();
cache_purge(&svc_expkey_cache);
cache_purge(&svc_export_cache);
exp_writeunlock();
}
/* /*
* Shutdown the exports module. * Shutdown the exports module.
*/ */
...@@ -1119,8 +1114,6 @@ nfsd_export_shutdown(void) ...@@ -1119,8 +1114,6 @@ nfsd_export_shutdown(void)
exp_writelock(); exp_writelock();
exp_unexport_all(NULL);
if (cache_unregister(&svc_expkey_cache)) if (cache_unregister(&svc_expkey_cache))
printk(KERN_ERR "nfsd: failed to unregister expkey cache\n"); printk(KERN_ERR "nfsd: failed to unregister expkey cache\n");
if (cache_unregister(&svc_export_cache)) if (cache_unregister(&svc_export_cache))
......
...@@ -238,7 +238,7 @@ nfsd(struct svc_rqst *rqstp) ...@@ -238,7 +238,7 @@ nfsd(struct svc_rqst *rqstp)
printk(KERN_WARNING "nfsd: last server has exited\n"); printk(KERN_WARNING "nfsd: last server has exited\n");
if (err != SIG_NOCLEAN) { if (err != SIG_NOCLEAN) {
printk(KERN_WARNING "nfsd: unexporting all filesystems\n"); printk(KERN_WARNING "nfsd: unexporting all filesystems\n");
nfsd_export_shutdown(); nfsd_export_flush();
} }
nfsd_serv = NULL; nfsd_serv = NULL;
nfsd_racache_shutdown(); /* release read-ahead cache */ nfsd_racache_shutdown(); /* release read-ahead cache */
......
...@@ -83,6 +83,7 @@ struct svc_expkey { ...@@ -83,6 +83,7 @@ struct svc_expkey {
*/ */
void nfsd_export_init(void); void nfsd_export_init(void);
void nfsd_export_shutdown(void); void nfsd_export_shutdown(void);
void nfsd_export_flush(void);
void exp_readlock(void); void exp_readlock(void);
void exp_readunlock(void); void exp_readunlock(void);
struct svc_expkey * exp_find_key(struct auth_domain *clp, struct svc_expkey * exp_find_key(struct auth_domain *clp,
......
...@@ -101,6 +101,7 @@ EXPORT_SYMBOL(auth_unix_lookup); ...@@ -101,6 +101,7 @@ EXPORT_SYMBOL(auth_unix_lookup);
EXPORT_SYMBOL(cache_check); EXPORT_SYMBOL(cache_check);
EXPORT_SYMBOL(cache_clean); EXPORT_SYMBOL(cache_clean);
EXPORT_SYMBOL(cache_flush); EXPORT_SYMBOL(cache_flush);
EXPORT_SYMBOL(cache_purge);
EXPORT_SYMBOL(cache_fresh); EXPORT_SYMBOL(cache_fresh);
EXPORT_SYMBOL(cache_init); EXPORT_SYMBOL(cache_init);
EXPORT_SYMBOL(cache_register); EXPORT_SYMBOL(cache_register);
......
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