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__)

Reply via email to