diff options
author | peadar <peadar@FreeBSD.org> | 2004-04-11 13:30:20 +0000 |
---|---|---|
committer | peadar <peadar@FreeBSD.org> | 2004-04-11 13:30:20 +0000 |
commit | 9bb40b73ee38d581fd618dcc763cb6e9adcf607d (patch) | |
tree | a9fbdaa4c8e4800e0faf70c2b2c9b5b19300ad03 /sys/nfsclient/nfs_nfsiod.c | |
parent | 3341cc4adb28d03c2c544c42d2c3e10f3546606d (diff) | |
download | FreeBSD-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.c | 6 |
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 */ |