svn commit: r299913 - head/sys/kern
Andriy Gapon
avg at FreeBSD.org
Mon May 16 07:23:25 UTC 2016
Author: avg
Date: Mon May 16 07:23:24 2016
New Revision: 299913
URL: https://svnweb.freebsd.org/changeset/base/299913
Log:
dounmount: do not call mountcheckdirs() for mounts with MNT_IGNORE
This is a bit hackish, but the flag is currently set only for ZFS
snapshots mounted under .zfs. mountcheckdirs() can change cdir/rdir
references to a covered vnode. But for the said snapshots the covered
vnode is really ephemeral and it must never be accessed (except
for a few specific cases).
To do: consider removing mountcheckdirs() entirely
MFC after: 5 days
Modified:
head/sys/kern/vfs_mount.c
Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c Mon May 16 07:19:33 2016 (r299912)
+++ head/sys/kern/vfs_mount.c Mon May 16 07:23:24 2016 (r299913)
@@ -1298,7 +1298,8 @@ dounmount(struct mount *mp, int flags, s
*/
if ((flags & MNT_FORCE) &&
VFS_ROOT(mp, LK_EXCLUSIVE, &fsrootvp) == 0) {
- if (mp->mnt_vnodecovered != NULL)
+ if (mp->mnt_vnodecovered != NULL &&
+ (mp->mnt_flag & MNT_IGNORE) == 0)
mountcheckdirs(fsrootvp, mp->mnt_vnodecovered);
if (fsrootvp == rootvnode) {
vrele(rootvnode);
@@ -1319,7 +1320,8 @@ dounmount(struct mount *mp, int flags, s
if (error && error != ENXIO) {
if ((flags & MNT_FORCE) &&
VFS_ROOT(mp, LK_EXCLUSIVE, &fsrootvp) == 0) {
- if (mp->mnt_vnodecovered != NULL)
+ if (mp->mnt_vnodecovered != NULL &&
+ (mp->mnt_flag & MNT_IGNORE) == 0)
mountcheckdirs(mp->mnt_vnodecovered, fsrootvp);
if (rootvnode == NULL) {
rootvnode = fsrootvp;
More information about the svn-src-all
mailing list