diff options
author | Rick Macklem <rmacklem@FreeBSD.org> | 2020-08-26 21:49:43 +0000 |
---|---|---|
committer | Rick Macklem <rmacklem@FreeBSD.org> | 2020-08-26 21:49:43 +0000 |
commit | df665abd347e2141f54fcbcb44092f21b232fd85 (patch) | |
tree | de4a6a23ca81d1a482cc61cdb8a3a512f264aafb | |
parent | 113bcc82a28fcaeec7d545c7d641a58ab19b18ec (diff) | |
download | src-test2-df665abd347e2141f54fcbcb44092f21b232fd85.tar.gz src-test2-df665abd347e2141f54fcbcb44092f21b232fd85.zip |
Notes
-rw-r--r-- | sys/kern/vfs_mount.c | 9 |
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); |