summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_vfsops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfsclient/nfs_vfsops.c')
-rw-r--r--sys/nfsclient/nfs_vfsops.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 6f00cf9..7a26aa2 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -1362,7 +1362,7 @@ static int
nfs_unmount(struct mount *mp, int mntflags)
{
struct nfsmount *nmp;
- int error, flags = 0;
+ int error, flags = 0, i;
if (mntflags & MNT_FORCE)
flags |= FORCECLOSE;
@@ -1387,6 +1387,14 @@ nfs_unmount(struct mount *mp, int mntflags)
/*
* We are now committed to the unmount.
*/
+ /* Make sure no nfsiods are assigned to this mount. */
+ mtx_lock(&nfs_iod_mtx);
+ for (i = 0; i < NFS_MAXASYNCDAEMON; i++)
+ if (nfs_iodmount[i] == nmp) {
+ nfs_iodwant[i] = NFSIOD_AVAILABLE;
+ nfs_iodmount[i] = NULL;
+ }
+ mtx_unlock(&nfs_iod_mtx);
nfs_disconnect(nmp);
free(nmp->nm_nam, M_SONAME);
OpenPOWER on IntegriCloud