From tetsuya@secom-sis.co.jp  Wed Feb 18 22:47:08 1998
Received: from secom-sis.co.jp (spiral.secom-sis.co.jp [202.218.246.72])
          by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id WAA18354
          for <FreeBSD-gnats-submit@FreeBSD.ORG>; Wed, 18 Feb 1998 22:47:07 -0800 (PST)
          (envelope-from tetsuya@secom-sis.co.jp)
Received: by spiral.secom-sis.co.jp id <27791>; Thu, 19 Feb 1998 15:47:08 +0900
Message-Id: <98Feb19.154708jst.27791@spiral.secom-sis.co.jp>
Date: Thu, 19 Feb 1998 15:46:28 +0900
From: tetsuya@secom-sis.co.jp
Reply-To: tetsuya@secom-sis.co.jp
To: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Failure of unmounting asyncronous file system causes it to be non-asyncronous
X-Send-Pr-Version: 3.2

>Number:         5787
>Category:       kern
>Synopsis:       Failure of unmounting asyncronous file system causes it to be non-asyncronous
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 18 22:50:02 PST 1998
>Closed-Date:    Thu Jul 2 20:53:11 PDT 1998
>Last-Modified:  Thu Jul  2 20:53:49 PDT 1998
>Originator:     Tetsuya Furukawa
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
SECOM Information System Co.,Ltd.
>Environment:

	3.0-CURRENT on Dec 8 1997

>Description:

	After unmounting a file system which has been mounted with the flag
	MNT_ASYNC fails for it is busy, the flag will be lost.

>How-To-Repeat:

	# /sbin/mount
	/dev/sd0a on / (local)
	/dev/sd0s2e on /var (local)
	/dev/sd0s2f on /usr (local)
	/dev/sd0s2g on /async (asynchronous, local)
	procfs on /proc (local)
	# /sbin/umount /async
	umount: /async: Device busy
	# /sbin/mount
	/dev/sd0a on / (local)
	/dev/sd0s2e on /var (local)
	/dev/sd0s2f on /usr (local)
	/dev/sd0s2g on /async (local)
	procfs on /proc (local)

>Fix:

	--- kern/vfs_syscalls.c.orig	Thu Feb 19 14:56:16 1998
	+++ kern/vfs_syscalls.c	Thu Feb 19 14:58:59 1998
	@@ -416,6 +416,7 @@
	 {
		struct vnode *coveredvp;
		int error;
	+	int asyncflag;
	 
		simple_lock(&mountlist_slock);
		mp->mnt_kern_flag |= MNTK_UNMOUNT;
	@@ -424,6 +425,7 @@
		if (mp->mnt_flag & MNT_EXPUBLIC)
			vfs_setpublicfs(NULL, NULL, NULL);
	 
	+	asyncflag = mp->mnt_flag & MNT_ASYNC;
		mp->mnt_flag &=~ MNT_ASYNC;
		vfs_msync(mp, MNT_NOWAIT);
		vnode_pager_umount(mp);	/* release cached vnodes */
	@@ -434,6 +436,8 @@
			error = VFS_UNMOUNT(mp, flags, p);
		simple_lock(&mountlist_slock);
		if (error) {
	+		if (asyncflag)
	+			mp->mnt_flag |= MNT_ASYNC;
			mp->mnt_kern_flag &= ~MNTK_UNMOUNT;
			lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK | LK_REENABLE,
			    &mountlist_slock, p);

>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: dg 
State-Changed-When: Thu Jul 2 20:53:11 PDT 1998 
State-Changed-Why:  
Fixed in rev 1.104 and 1.51.2.7 of vfs_syscalls.c. Thanks for the bug report! 
>Unformatted:
