summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2020-08-26 21:49:43 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2020-08-26 21:49:43 +0000
commitdf665abd347e2141f54fcbcb44092f21b232fd85 (patch)
treede4a6a23ca81d1a482cc61cdb8a3a512f264aafb
parent113bcc82a28fcaeec7d545c7d641a58ab19b18ec (diff)
downloadsrc-test2-df665abd347e2141f54fcbcb44092f21b232fd85.tar.gz
src-test2-df665abd347e2141f54fcbcb44092f21b232fd85.zip
Notes
-rw-r--r--sys/kern/vfs_mount.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 84d14fadae1d..d2cd104318eb 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -969,11 +969,14 @@ vfs_domount_first(
if ((error = VFS_MOUNT(mp)) != 0 ||
(error1 = VFS_STATFS(mp, &mp->mnt_stat)) != 0 ||
(error1 = VFS_ROOT(mp, LK_EXCLUSIVE, &newdp)) != 0) {
+ rootvp = NULL;
if (error1 != 0) {
error = error1;
rootvp = vfs_cache_root_clear(mp);
- if (rootvp != NULL)
+ if (rootvp != NULL) {
+ vhold(rootvp);
vrele(rootvp);
+ }
if ((error1 = VFS_UNMOUNT(mp, 0)) != 0)
printf("VFS_UNMOUNT returned %d\n", error1);
}
@@ -983,6 +986,10 @@ vfs_domount_first(
VI_LOCK(vp);
vp->v_iflag &= ~VI_MOUNT;
VI_UNLOCK(vp);
+ if (rootvp != NULL) {
+ vn_seqc_write_end(rootvp);
+ vdrop(rootvp);
+ }
vn_seqc_write_end(vp);
vrele(vp);
return (error);