Module Name: src Committed By: hannken Date: Mon Aug 22 09:14:24 UTC 2022
Modified Files: src/sys/kern: vfs_mount.c Log Message: Protect changing "v_mountedhere" with file system suspension instead of vnode lock. To generate a diff of this commit: cvs rdiff -u -r1.94 -r1.95 src/sys/kern/vfs_mount.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/vfs_mount.c diff -u src/sys/kern/vfs_mount.c:1.94 src/sys/kern/vfs_mount.c:1.95 --- src/sys/kern/vfs_mount.c:1.94 Fri Jul 8 07:43:19 2022 +++ src/sys/kern/vfs_mount.c Mon Aug 22 09:14:24 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.94 2022/07/08 07:43:19 hannken Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.95 2022/08/22 09:14:24 hannken Exp $ */ /*- * Copyright (c) 1997-2020 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.94 2022/07/08 07:43:19 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.95 2022/08/22 09:14:24 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -929,14 +929,12 @@ dounmount(struct mount *mp, int flags, s * vfs_busy() from succeeding. */ mp->mnt_iflag |= IMNT_GONE; - if (!was_suspended) - vfs_resume(mp); - if ((coveredvp = mp->mnt_vnodecovered) != NULLVP) { - vn_lock(coveredvp, LK_EXCLUSIVE | LK_RETRY); coveredvp->v_mountedhere = NULL; - VOP_UNLOCK(coveredvp); } + if (!was_suspended) + vfs_resume(mp); + mountlist_remove(mp); if (TAILQ_FIRST(&mp->mnt_vnodelist) != NULL) panic("unmount: dangling vnode");