svn commit: r290197 - in head: etc/defaults etc/rc.d sys/kern
Edward Tomasz Napierala
trasz at FreeBSD.org
Thu Jan 14 16:56:39 UTC 2016
On 1221T1807, Jilles Tjoelker wrote:
> On Fri, Oct 30, 2015 at 03:52:10PM +0000, Edward Tomasz Napierala wrote:
> > Author: trasz
> > Date: Fri Oct 30 15:52:10 2015
> > New Revision: 290197
> > URL: https://svnweb.freebsd.org/changeset/base/290197
>
> > Log:
> > After r290196, the kernel won't wait for stuff like gmirror nodes
> > if they are not required for mounting rootfs. However, it's possible
> > that some setups try to mount them in mountcritlocal (ie from fstab).
>
> > Export the list of current root mount holds using a new sysctl,
> > vfs.root_mount_hold, and make mountcritlocal retry if "mount -a" fails
> > and the list is not empty.
>
> > MFC after: 1 month
> > Sponsored by: The FreeBSD Foundation
> > Differential Revision: https://reviews.freebsd.org/D3709
>
> I like the faster startup, but the rc.d script clearly will not wait as
> intended. See below.
>
> > Modified:
> > head/etc/defaults/rc.conf
> > head/etc/rc.d/mountcritlocal
> > head/sys/kern/vfs_mountroot.c
>
> > [snip]
> > Modified: head/etc/rc.d/mountcritlocal
> > ==============================================================================
> > --- head/etc/rc.d/mountcritlocal Fri Oct 30 15:35:04 2015 (r290196)
> > +++ head/etc/rc.d/mountcritlocal Fri Oct 30 15:52:10 2015 (r290197)
> > @@ -15,7 +15,7 @@ stop_cmd=sync
> >
> > mountcritlocal_start()
> > {
> > - local err
> > + local err holders waited
> >
> > # Set up the list of network filesystem types for which mounting
> > # should be delayed until after network initialization.
> > @@ -35,8 +35,42 @@ mountcritlocal_start()
> > mount_excludes="${mount_excludes}${fstype},"
> > done
> > mount_excludes=${mount_excludes%,}
> > +
> > + # Originally, root mount hold had to be released before mounting the root
> > + # filesystem. This delayed the boot, so it was changed to only wait if
> > + # the root device isn't readily available. This can result in this script
> > + # executing before all the devices - such as graid(8) - are available.
> > + # Thus, should the mount fail, we will wait for the root mount hold release
> > + # and retry.
>
> These lines are a bit too long.
>
> > mount -a -t ${mount_excludes}
> > err=$?
> > + if [ $? -ne 0 ]; then
>
> The assignment will set $? to 0, so the new code will never be executed.
> "$err" should be tested instead of $?.
Thanks, fixed. Previously, I've tested it by changing "-ne" to "-eq",
and didn't even realize I've missed a step.
More information about the svn-src-head
mailing list