summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_mount.c
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2008-11-03 20:00:35 +0000
committerattilio <attilio@FreeBSD.org>2008-11-03 20:00:35 +0000
commit26a604f3bccb7c4a377c7cbf4facbae8c20e1fed (patch)
tree51374f893e6d2ba20ae55ec543453eb22efd981b /sys/kern/vfs_mount.c
parent6cfec3e1612f60d19983a6ab0defbecbfd07a12d (diff)
downloadFreeBSD-src-26a604f3bccb7c4a377c7cbf4facbae8c20e1fed.zip
FreeBSD-src-26a604f3bccb7c4a377c7cbf4facbae8c20e1fed.tar.gz
Remove the mnt_holdcnt and mnt_holdcntwaiters because they are useless.
Really, the concept of holdcnt in the struct mount is rappresented by the mnt_ref (which prevents the type-stable structure from being "recycled) handled through vfs_ref() and vfs_rel(). On this optic, switch the holdcnt acquisition into an emulated vfs_ref() (and subsequent release into vfs_rel()). Discussed with: kib Tested by: pho
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r--sys/kern/vfs_mount.c21
1 files changed, 3 insertions, 18 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 4285b4c..2421260 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -509,16 +509,6 @@ vfs_mount_destroy(struct mount *mp)
MNT_ILOCK(mp);
while (mp->mnt_ref)
msleep(mp, MNT_MTX(mp), PVFS, "mntref", 0);
- if (mp->mnt_holdcnt != 0) {
- printf("Waiting for mount point to be unheld\n");
- while (mp->mnt_holdcnt != 0) {
- mp->mnt_holdcntwaiters++;
- msleep(&mp->mnt_holdcnt, MNT_MTX(mp),
- PZERO, "mntdestroy", 0);
- mp->mnt_holdcntwaiters--;
- }
- printf("mount point unheld\n");
- }
if (mp->mnt_writeopcount > 0) {
printf("Waiting for mount point write ops\n");
while (mp->mnt_writeopcount > 0) {
@@ -2062,7 +2052,7 @@ __mnt_vnode_first(struct vnode **mvp, struct mount *mp)
*mvp = NULL;
return (NULL);
}
- mp->mnt_holdcnt++;
+ MNT_REF(mp);
MNT_IUNLOCK(mp);
*mvp = (struct vnode *) malloc(sizeof(struct vnode),
M_VNODE_MARKER,
@@ -2080,9 +2070,7 @@ __mnt_vnode_first(struct vnode **mvp, struct mount *mp)
free(*mvp, M_VNODE_MARKER);
MNT_ILOCK(mp);
*mvp = NULL;
- mp->mnt_holdcnt--;
- if (mp->mnt_holdcnt == 0 && mp->mnt_holdcntwaiters != 0)
- wakeup(&mp->mnt_holdcnt);
+ MNT_REL(mp);
return (NULL);
}
(*mvp)->v_mount = mp;
@@ -2106,10 +2094,7 @@ __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp)
free(*mvp, M_VNODE_MARKER);
MNT_ILOCK(mp);
*mvp = NULL;
-
- mp->mnt_holdcnt--;
- if (mp->mnt_holdcnt == 0 && mp->mnt_holdcntwaiters != 0)
- wakeup(&mp->mnt_holdcnt);
+ MNT_REL(mp);
}
OpenPOWER on IntegriCloud