summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_mount.c
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2003-11-05 04:30:08 +0000
committerkan <kan@FreeBSD.org>2003-11-05 04:30:08 +0000
commit36d60f3bb735f38bbec69f4cc40ef27a24629c54 (patch)
treed6d549e791dd7c4a627af5beb25ec44a2fcdd02d /sys/kern/vfs_mount.c
parent932794c27cf2ec2241eadf3b4891463fa9eb2432 (diff)
downloadFreeBSD-src-36d60f3bb735f38bbec69f4cc40ef27a24629c54.zip
FreeBSD-src-36d60f3bb735f38bbec69f4cc40ef27a24629c54.tar.gz
Remove mntvnode_mtx and replace it with per-mountpoint mutex.
Introduce two new macros MNT_ILOCK(mp)/MNT_IUNLOCK(mp) to operate on this mutex transparently. Eventually new mutex will be protecting more fields in struct mount, not only vnode list. Discussed with: jeff
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r--sys/kern/vfs_mount.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index a962bcc..cea2d41 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -116,9 +116,6 @@ struct mntlist mountlist = TAILQ_HEAD_INITIALIZER(mountlist);
/* For any iteration/modification of mountlist */
struct mtx mountlist_mtx;
-/* For any iteration/modification of mnt_vnodelist */
-struct mtx mntvnode_mtx;
-
/*
* The vnode of the system's root (/ in the filesystem, without chroot
* active.)
@@ -662,6 +659,7 @@ vfs_nmount(td, fsflags, fsoptions)
TAILQ_INIT(&mp->mnt_nvnodelist);
TAILQ_INIT(&mp->mnt_reservedvnlist);
mp->mnt_nvnodelistsize = 0;
+ mtx_init(&mp->mnt_mtx, "struct mount mtx", NULL, MTX_DEF);
lockinit(&mp->mnt_lock, PVFS, "vfslock", 0, LK_NOPAUSE);
(void)vfs_busy(mp, LK_NOWAIT, 0, td);
mp->mnt_op = vfsp->vfc_vfsops;
@@ -1029,6 +1027,7 @@ vfs_mount(td, fstype, fspath, fsflags, fsdata)
TAILQ_INIT(&mp->mnt_nvnodelist);
TAILQ_INIT(&mp->mnt_reservedvnlist);
mp->mnt_nvnodelistsize = 0;
+ mtx_init(&mp->mnt_mtx, "struct mount mtx", NULL, MTX_DEF);
lockinit(&mp->mnt_lock, PVFS, "vfslock", 0, LK_NOPAUSE);
(void)vfs_busy(mp, LK_NOWAIT, 0, td);
mp->mnt_op = vfsp->vfc_vfsops;
@@ -1371,6 +1370,7 @@ dounmount(mp, flags, td)
panic("unmount: dangling vnode");
lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK, &mountlist_mtx, td);
lockdestroy(&mp->mnt_lock);
+ mtx_destroy(&mp->mnt_mtx);
if (coveredvp != NULL)
vrele(coveredvp);
if (mp->mnt_kern_flag & MNTK_MWAIT)
@@ -1408,6 +1408,7 @@ vfs_rootmountalloc(fstypename, devname, mpp)
if (vfsp == NULL)
return (ENODEV);
mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK | M_ZERO);
+ mtx_init(&mp->mnt_mtx, "struct mount mtx", NULL, MTX_DEF);
lockinit(&mp->mnt_lock, PVFS, "vfslock", 0, LK_NOPAUSE);
(void)vfs_busy(mp, LK_NOWAIT, 0, td);
TAILQ_INIT(&mp->mnt_nvnodelist);
OpenPOWER on IntegriCloud