svn commit: r313350 - head/sys/kern
Julian Elischer
julian at freebsd.org
Wed Feb 8 09:28:14 UTC 2017
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);
> }
>
>
More information about the svn-src-all
mailing list