Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Sep 2016 05:44:13 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r306071 - head/sys/kern
Message-ID:  <201609210544.u8L5iDMl090525@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Wed Sep 21 05:44:13 2016
New Revision: 306071
URL: https://svnweb.freebsd.org/changeset/base/306071

Log:
  Fix bug introduced with r302388, which could cause processes accessing
  automounted shares to hang with "vfs_busy" wchan.
  
  (As a workaround one can run 'automount -u' from cron.)
  
  Reviewed by:	kib@
  MFC after:	1 month

Modified:
  head/sys/kern/vfs_mount.c

Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c	Wed Sep 21 05:33:18 2016	(r306070)
+++ head/sys/kern/vfs_mount.c	Wed Sep 21 05:44:13 2016	(r306071)
@@ -1207,6 +1207,9 @@ sys_unmount(struct thread *td, struct un
 /*
  * Return error if any of the vnodes, ignoring the root vnode
  * and the syncer vnode, have non-zero usecount.
+ *
+ * This function is purely advisory - it can return false positives
+ * and negatives.
  */
 static int
 vfs_check_usecounts(struct mount *mp)
@@ -1288,6 +1291,10 @@ dounmount(struct mount *mp, int flags, s
 		MNT_ILOCK(mp);
 		if (error != 0) {
 			mp->mnt_kern_flag &= ~(MNTK_UNMOUNT | MNTK_NOINSMNTQ);
+			if (mp->mnt_kern_flag & MNTK_MWAIT) {
+				mp->mnt_kern_flag &= ~MNTK_MWAIT;
+				wakeup(mp);
+			}
 			MNT_IUNLOCK(mp);
 			if (coveredvp != NULL) {
 				VOP_UNLOCK(coveredvp, 0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609210544.u8L5iDMl090525>