summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_nfsiod.c
diff options
context:
space:
mode:
authorpeadar <peadar@FreeBSD.org>2004-04-11 13:30:20 +0000
committerpeadar <peadar@FreeBSD.org>2004-04-11 13:30:20 +0000
commit9bb40b73ee38d581fd618dcc763cb6e9adcf607d (patch)
treea9fbdaa4c8e4800e0faf70c2b2c9b5b19300ad03 /sys/nfsclient/nfs_nfsiod.c
parent3341cc4adb28d03c2c544c42d2c3e10f3546606d (diff)
downloadFreeBSD-src-9bb40b73ee38d581fd618dcc763cb6e9adcf607d.zip
FreeBSD-src-9bb40b73ee38d581fd618dcc763cb6e9adcf607d.tar.gz
Clean up properly when unloading NFS client module.
This includes a modified form of some code from Thomas Moestl (tmm@) to properly clean up the UMA zone and the "nfsnodehashtbl" hash table. Reviewed By: iedowse PR: 16299
Diffstat (limited to 'sys/nfsclient/nfs_nfsiod.c')
-rw-r--r--sys/nfsclient/nfs_nfsiod.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/nfsclient/nfs_nfsiod.c b/sys/nfsclient/nfs_nfsiod.c
index f36d19f..bf6175a 100644
--- a/sys/nfsclient/nfs_nfsiod.c
+++ b/sys/nfsclient/nfs_nfsiod.c
@@ -87,7 +87,7 @@ static unsigned int nfs_iodmaxidle = 120;
SYSCTL_UINT(_vfs_nfs, OID_AUTO, iodmaxidle, CTLFLAG_RW, &nfs_iodmaxidle, 0, "");
/* Maximum number of nfsiod kthreads */
-static unsigned int nfs_iodmax = 20;
+unsigned int nfs_iodmax = 20;
/* Minimum number of nfsiod kthreads to keep as spares */
static unsigned int nfs_iodmin = 4;
@@ -280,7 +280,9 @@ finish:
nmp->nm_bufqiods--;
nfs_iodwant[myiod] = NULL;
nfs_iodmount[myiod] = NULL;
- nfs_numasync--;
+ /* Someone may be waiting for the last nfsiod to terminate. */
+ if (--nfs_numasync == 0)
+ wakeup(&nfs_numasync);
if ((error == 0) || (error == EWOULDBLOCK))
kthread_exit(0);
/* Abnormal termination */
OpenPOWER on IntegriCloud