summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsclient/nfs_clvfsops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/nfsclient/nfs_clvfsops.c')
-rw-r--r--sys/fs/nfsclient/nfs_clvfsops.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/fs/nfsclient/nfs_clvfsops.c b/sys/fs/nfsclient/nfs_clvfsops.c
index 94fc380..51a1d90 100644
--- a/sys/fs/nfsclient/nfs_clvfsops.c
+++ b/sys/fs/nfsclient/nfs_clvfsops.c
@@ -1643,8 +1643,12 @@ bad:
NFSUNLOCKCLSTATE();
free(nmp->nm_clp, M_NFSCLCLIENT);
}
- TAILQ_FOREACH_SAFE(dsp, &nmp->nm_sess, nfsclds_list, tdsp)
+ TAILQ_FOREACH_SAFE(dsp, &nmp->nm_sess, nfsclds_list, tdsp) {
+ if (dsp != TAILQ_FIRST(&nmp->nm_sess) &&
+ dsp->nfsclds_sockp != NULL)
+ newnfs_disconnect(dsp->nfsclds_sockp);
nfscl_freenfsclds(dsp);
+ }
FREE(nmp, M_NEWNFSMNT);
FREE(nam, M_SONAME);
return (error);
@@ -1709,8 +1713,12 @@ nfs_unmount(struct mount *mp, int mntflags)
AUTH_DESTROY(nmp->nm_sockreq.nr_auth);
mtx_destroy(&nmp->nm_sockreq.nr_mtx);
mtx_destroy(&nmp->nm_mtx);
- TAILQ_FOREACH_SAFE(dsp, &nmp->nm_sess, nfsclds_list, tdsp)
+ TAILQ_FOREACH_SAFE(dsp, &nmp->nm_sess, nfsclds_list, tdsp) {
+ if (dsp != TAILQ_FIRST(&nmp->nm_sess) &&
+ dsp->nfsclds_sockp != NULL)
+ newnfs_disconnect(dsp->nfsclds_sockp);
nfscl_freenfsclds(dsp);
+ }
FREE(nmp, M_NEWNFSMNT);
out:
return (error);
OpenPOWER on IntegriCloud