Module Name: src Committed By: hannken Date: Wed May 24 09:53:55 UTC 2017
Modified Files: src/sys/kern: vfs_mount.c vfs_subr.c src/sys/miscfs/genfs: genfs_vfsops.c src/sys/sys: mount.h param.h Log Message: With dounmount() working on a suspended file system remove no longer needed fields mnt_busynest and mnt_unmounting from struct mount. Welcome to 7.99.73 To generate a diff of this commit: cvs rdiff -u -r1.63 -r1.64 src/sys/kern/vfs_mount.c cvs rdiff -u -r1.465 -r1.466 src/sys/kern/vfs_subr.c cvs rdiff -u -r1.6 -r1.7 src/sys/miscfs/genfs/genfs_vfsops.c cvs rdiff -u -r1.227 -r1.228 src/sys/sys/mount.h cvs rdiff -u -r1.539 -r1.540 src/sys/sys/param.h 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.63 src/sys/kern/vfs_mount.c:1.64 --- src/sys/kern/vfs_mount.c:1.63 Wed May 24 09:52:59 2017 +++ src/sys/kern/vfs_mount.c Wed May 24 09:53:55 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.63 2017/05/24 09:52:59 hannken Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.64 2017/05/24 09:53:55 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.63 2017/05/24 09:52:59 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.64 2017/05/24 09:53:55 hannken Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -158,7 +158,6 @@ vfs_mountalloc(struct vfsops *vfsops, vn mp->mnt_op = vfsops; mp->mnt_refcnt = 1; TAILQ_INIT(&mp->mnt_vnodelist); - mutex_init(&mp->mnt_unmounting, MUTEX_DEFAULT, IPL_NONE); mutex_init(&mp->mnt_renamelock, MUTEX_DEFAULT, IPL_NONE); mutex_init(&mp->mnt_updating, MUTEX_DEFAULT, IPL_NONE); mp->mnt_vnodecovered = vp; @@ -298,7 +297,6 @@ vfs_rele(struct mount *mp) */ KASSERT(mp->mnt_refcnt == 0); specificdata_fini(mount_specificdata_domain, &mp->mnt_specdataref); - mutex_destroy(&mp->mnt_unmounting); mutex_destroy(&mp->mnt_updating); mutex_destroy(&mp->mnt_renamelock); if (mp->mnt_op != NULL) { @@ -325,23 +323,14 @@ _vfs_busy(struct mount *mp, bool wait) if (wait) { fstrans_start(mp, FSTRANS_SHARED); - mutex_enter(&mp->mnt_unmounting); } else { if (fstrans_start_nowait(mp, FSTRANS_SHARED)) return EBUSY; - if (!mutex_tryenter(&mp->mnt_unmounting)) { - fstrans_done(mp); - return EBUSY; - } } if (__predict_false((mp->mnt_iflag & IMNT_GONE) != 0)) { - mutex_exit(&mp->mnt_unmounting); fstrans_done(mp); return ENOENT; } - ++mp->mnt_busynest; - KASSERT(mp->mnt_busynest != 0); - mutex_exit(&mp->mnt_unmounting); vfs_ref(mp); return 0; } @@ -371,10 +360,6 @@ vfs_unbusy(struct mount *mp) KASSERT(mp->mnt_refcnt > 0); - mutex_enter(&mp->mnt_unmounting); - KASSERT(mp->mnt_busynest != 0); - mp->mnt_busynest--; - mutex_exit(&mp->mnt_unmounting); fstrans_done(mp); vfs_rele(mp); } @@ -874,23 +859,7 @@ dounmount(struct mount *mp, int flags, s return error; } - /* - * Abort unmount attempt when the filesystem is in use - */ - mutex_enter(&mp->mnt_unmounting); - if (mp->mnt_busynest != 0) { - mutex_exit(&mp->mnt_unmounting); - vfs_resume(mp); - return EBUSY; - } - - /* - * Abort unmount attempt when the filesystem is not mounted - */ - if ((mp->mnt_iflag & IMNT_GONE) != 0) { - mutex_exit(&mp->mnt_unmounting); - return ENOENT; - } + KASSERT((mp->mnt_iflag & IMNT_GONE) == 0); used_syncer = (mp->mnt_iflag & IMNT_ONWORKLIST) != 0; used_extattr = mp->mnt_flag & MNT_EXTATTR; @@ -911,7 +880,6 @@ dounmount(struct mount *mp, int flags, s } if (error) { mp->mnt_iflag &= ~IMNT_UNMOUNT; - mutex_exit(&mp->mnt_unmounting); if ((mp->mnt_flag & (MNT_RDONLY | MNT_ASYNC)) == 0) vfs_syncer_add_to_worklist(mp); mp->mnt_flag |= async; @@ -928,15 +896,11 @@ dounmount(struct mount *mp, int flags, s mutex_exit(&mp->mnt_updating); /* - * release mnt_umounting lock here, because other code calls - * vfs_busy() while holding the mountlist_lock. - * * mark filesystem as gone to prevent further umounts * after mnt_umounting lock is gone, this also prevents * vfs_busy() from succeeding. */ mp->mnt_iflag |= IMNT_GONE; - mutex_exit(&mp->mnt_unmounting); vfs_resume(mp); if ((coveredvp = mp->mnt_vnodecovered) != NULLVP) { Index: src/sys/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.465 src/sys/kern/vfs_subr.c:1.466 --- src/sys/kern/vfs_subr.c:1.465 Wed May 24 09:52:59 2017 +++ src/sys/kern/vfs_subr.c Wed May 24 09:53:55 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.465 2017/05/24 09:52:59 hannken Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.466 2017/05/24 09:53:55 hannken Exp $ */ /*- * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.465 2017/05/24 09:52:59 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.466 2017/05/24 09:53:55 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1561,8 +1561,7 @@ vfs_mount_print(struct mount *mp, int fu snprintb(sbuf, sizeof(sbuf), __IMNT_FLAG_BITS, mp->mnt_iflag); (*pr)("iflag = %s\n", sbuf); - (*pr)("refcnt = %d unmounting @ %p updating @ %p\n", mp->mnt_refcnt, - &mp->mnt_unmounting, &mp->mnt_updating); + (*pr)("refcnt = %d updating @ %p\n", mp->mnt_refcnt, &mp->mnt_updating); (*pr)("statvfs cache:\n"); (*pr)("\tbsize = %lu\n",mp->mnt_stat.f_bsize); Index: src/sys/miscfs/genfs/genfs_vfsops.c diff -u src/sys/miscfs/genfs/genfs_vfsops.c:1.6 src/sys/miscfs/genfs/genfs_vfsops.c:1.7 --- src/sys/miscfs/genfs/genfs_vfsops.c:1.6 Sun May 7 08:25:54 2017 +++ src/sys/miscfs/genfs/genfs_vfsops.c Wed May 24 09:53:55 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: genfs_vfsops.c,v 1.6 2017/05/07 08:25:54 hannken Exp $ */ +/* $NetBSD: genfs_vfsops.c,v 1.7 2017/05/24 09:53:55 hannken Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.6 2017/05/07 08:25:54 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.7 2017/05/24 09:53:55 hannken Exp $"); #include <sys/types.h> #include <sys/mount.h> @@ -85,10 +85,8 @@ genfs_suspendctl(struct mount *mp, int c case SUSPEND_SUSPEND: error = fstrans_setstate(mp, FSTRANS_SUSPENDED); if (error == 0) { - mutex_enter(&mp->mnt_unmounting); if ((mp->mnt_iflag & IMNT_GONE) != 0) error = ENOENT; - mutex_exit(&mp->mnt_unmounting); if (error) { error2 = fstrans_setstate(mp, FSTRANS_NORMAL); KASSERT(error2 == 0); Index: src/sys/sys/mount.h diff -u src/sys/sys/mount.h:1.227 src/sys/sys/mount.h:1.228 --- src/sys/sys/mount.h:1.227 Wed May 24 09:52:59 2017 +++ src/sys/sys/mount.h Wed May 24 09:53:55 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: mount.h,v 1.227 2017/05/24 09:52:59 hannken Exp $ */ +/* $NetBSD: mount.h,v 1.228 2017/05/24 09:53:55 hannken Exp $ */ /* * Copyright (c) 1989, 1991, 1993 @@ -115,10 +115,8 @@ struct mount { int mnt_synclist_slot; /* synclist slot index */ void *mnt_transinfo; /* for FS-internal use */ void *mnt_data; /* private data */ - kmutex_t mnt_unmounting; /* to prevent new activity */ kmutex_t mnt_renamelock; /* per-fs rename lock */ int mnt_refcnt; /* ref count on this structure */ - unsigned int mnt_busynest; /* vfs_busy nestings */ int mnt_flag; /* flags */ int mnt_iflag; /* internal flags */ int mnt_fs_bshift; /* offset shift for lblkno */ Index: src/sys/sys/param.h diff -u src/sys/sys/param.h:1.539 src/sys/sys/param.h:1.540 --- src/sys/sys/param.h:1.539 Fri May 19 00:01:34 2017 +++ src/sys/sys/param.h Wed May 24 09:53:55 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.539 2017/05/19 00:01:34 pgoyette Exp $ */ +/* $NetBSD: param.h,v 1.540 2017/05/24 09:53:55 hannken Exp $ */ /*- * Copyright (c) 1982, 1986, 1989, 1993 @@ -67,7 +67,7 @@ * 2.99.9 (299000900) */ -#define __NetBSD_Version__ 799007200 /* NetBSD 7.99.72 */ +#define __NetBSD_Version__ 799007300 /* NetBSD 7.99.73 */ #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \ (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)