diff options
author | jeff <jeff@FreeBSD.org> | 2005-03-24 07:31:38 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2005-03-24 07:31:38 +0000 |
commit | 0210925e420b2f938988d2f44a571ed45d741fd8 (patch) | |
tree | f3d973fb4ec17cc9f154c9cbec4c4315696f64ae /sys/kern/vfs_mount.c | |
parent | 5528d705e8e8b6b0f31749590ccd903e2f51b55b (diff) | |
download | FreeBSD-src-0210925e420b2f938988d2f44a571ed45d741fd8.zip FreeBSD-src-0210925e420b2f938988d2f44a571ed45d741fd8.tar.gz |
- Pass LK_EXCLUSIVE to VFS_ROOT() to satisfy the new flags argument. For
now, all calls to VFS_ROOT() should still acquire exclusive locks.
Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r-- | sys/kern/vfs_mount.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index a2fc340..5ff2c20 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -785,7 +785,7 @@ vfs_domount( TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list); mtx_unlock(&mountlist_mtx); vfs_event_signal(NULL, VQ_MOUNT, 0); - if (VFS_ROOT(mp, &newdp, td)) + if (VFS_ROOT(mp, LK_EXCLUSIVE, &newdp, td)) panic("mount: lost mount"); mountcheckdirs(vp, newdp); vput(newdp); @@ -946,7 +946,8 @@ dounmount(mp, flags, td) * vnode to the covered vnode. For non-forced unmounts we want * such references to cause an EBUSY error. */ - if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp, td) == 0) { + if ((flags & MNT_FORCE) && + VFS_ROOT(mp, LK_EXCLUSIVE, &fsrootvp, td) == 0) { if (mp->mnt_vnodecovered != NULL) mountcheckdirs(fsrootvp, mp->mnt_vnodecovered); if (fsrootvp == rootvnode) { @@ -963,7 +964,8 @@ dounmount(mp, flags, td) vn_finished_write(mp); if (error) { /* Undo cdir/rdir and rootvnode changes made above. */ - if ((flags & MNT_FORCE) && VFS_ROOT(mp, &fsrootvp, td) == 0) { + if ((flags & MNT_FORCE) && + VFS_ROOT(mp, LK_EXCLUSIVE, &fsrootvp, td) == 0) { if (mp->mnt_vnodecovered != NULL) mountcheckdirs(mp->mnt_vnodecovered, fsrootvp); if (rootvnode == NULL) { @@ -1006,7 +1008,7 @@ set_rootvnode(struct thread *td) { struct proc *p; - if (VFS_ROOT(TAILQ_FIRST(&mountlist), &rootvnode, td)) + if (VFS_ROOT(TAILQ_FIRST(&mountlist), LK_EXCLUSIVE, &rootvnode, td)) panic("Cannot find root vnode"); p = td->td_proc; @@ -1087,7 +1089,7 @@ devfs_fixup(struct thread *td) mtx_unlock(&mountlist_mtx); cache_purgevfs(mp); - VFS_ROOT(mp, &dvp, td); + VFS_ROOT(mp, LK_EXCLUSIVE, &dvp, td); VI_LOCK(dvp); dvp->v_iflag &= ~VI_MOUNT; dvp->v_mountedhere = NULL; |