On 7/2/17 4:36 am, Edward Tomasz Napierala wrote:
Author: trasz
Date: Mon Feb  6 20:36:59 2017
New Revision: 313350
URL: https://svnweb.freebsd.org/changeset/base/313350

Log:
   In r290196 the root mount hold mechanism was changed to make it not wait
   for mount hold release if the root device already exists.  So, unless your
   rootdev is not on USB - ie in the usual case - the root mount won't wait
   for USB.  However, the old behaviour was sometimes used as "wait until USB
   is fully enumerated", and r290196 broke that.
This commit adds vfs.root_mount_always_wait tunable, to force the kernel
   to always wait for root mount holds, even if the root is already there.
can we not add some more specific way to wait for enumeration?
like a sysctl that counts number of enumerations completed?

Reviewed by: kib
   MFC after:   2 weeks
   Relnotes:    yes
   Sponsored by:        DARPA, AFRL
   Differential Revision:       https://reviews.freebsd.org/D9387

Modified:
   head/sys/kern/vfs_mountroot.c

Modified: head/sys/kern/vfs_mountroot.c
==============================================================================
--- head/sys/kern/vfs_mountroot.c       Mon Feb  6 18:44:15 2017        
(r313349)
+++ head/sys/kern/vfs_mountroot.c       Mon Feb  6 20:36:59 2017        
(r313350)
@@ -132,6 +132,11 @@ static int root_mount_complete;
  static int root_mount_timeout = 3;
  TUNABLE_INT("vfs.mountroot.timeout", &root_mount_timeout);
+static int root_mount_always_wait = 0;
+SYSCTL_INT(_vfs, OID_AUTO, root_mount_always_wait, CTLFLAG_RDTUN,
+    &root_mount_always_wait, 0,
+    "Wait for root mount holds even if the root device already exists");
+
  SYSCTL_PROC(_vfs, OID_AUTO, root_mount_hold,
      CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
      NULL, 0, sysctl_vfs_root_mount_hold, "A",
@@ -961,10 +966,11 @@ vfs_mountroot_wait_if_neccessary(const c
/*
         * In case of ZFS and NFS we don't have a way to wait for
-        * specific device.
+        * specific device.  Also do the wait if the user forced that
+        * behaviour by setting vfs.root_mount_always_wait=1.
         */
        if (strcmp(fs, "zfs") == 0 || strstr(fs, "nfs") != NULL ||
-           dev[0] == '\0') {
+           dev[0] == '\0' || root_mount_always_wait != 0) {
                vfs_mountroot_wait();
                return (0);
        }



_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to