Page MenuHomeFreeBSD

D37198.id112341.diff
No OneTemporary

D37198.id112341.diff

diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -1201,20 +1201,22 @@
mp->mnt_kern_flag &= ~MNTK_ASYNC;
MNT_IUNLOCK(mp);
- VI_LOCK(vp);
- vn_irflag_set_locked(vp, VIRF_MOUNTPOINT);
- vp->v_mountedhere = mp;
- VI_UNLOCK(vp);
- cache_purge(vp);
-
/*
- * We need to lock both vnodes.
+ * We need to lock both vnodes. VIRF_MOUNTPOINT and
+ * v_mountedhere need to be set under the vp lock to satisfy
+ * vfs_lookup() requirements.
*
* Use vn_lock_pair to avoid establishing an ordering between vnodes
* from different filesystems.
*/
vn_lock_pair(vp, false, newdp, false);
+ VI_LOCK(vp);
+ vn_irflag_set_locked(vp, VIRF_MOUNTPOINT);
+ vp->v_mountedhere = mp;
+ VI_UNLOCK(vp);
+ cache_purge(vp);
+
VI_LOCK(vp);
vp->v_iflag &= ~VI_MOUNT;
VI_UNLOCK(vp);

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 4, 10:03 PM (11 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28437977
Default Alt Text
D37198.id112341.diff (849 B)

Event Timeline