Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Feb 2017 17:28:02 +0800
From:      Julian Elischer <julian@freebsd.org>
To:        Edward Tomasz Napierala <trasz@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r313350 - head/sys/kern
Message-ID:  <d877a269-e63d-c177-219b-ee9ee0ac4d88@freebsd.org>
In-Reply-To: <201702062036.v16Kaxbc061348@repo.freebsd.org>
References:  <201702062036.v16Kaxbc061348@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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);
>   	}
>
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?d877a269-e63d-c177-219b-ee9ee0ac4d88>