On Thu, Aug 23, 2012 at 11:02:22AM +0800, [email protected] wrote:
> each dev in host_devs[] should be waited in initqueue to make sure they
> are oneline before initqueue finish.
>
> Add a new wait_host_devs.sh in base module to make this a generic thing.
> Because all the devs in fstab lines are also added to host_devs, so no need
> do same wait in fstab-sys module anymore.
>
> [v2->v3]: do not add slave devices to host_devs
> wait for persistent dev name in initramfs
>
> Signed-off-by: Dave Young <[email protected]>
> ---
> dracut.sh | 16 ++++++++++++++++
> modules.d/95fstab-sys/module-setup.sh | 1 -
> modules.d/95fstab-sys/wait-mount-dev.sh | 22 ----------------------
> modules.d/99base/module-setup.sh | 1 +
> modules.d/99base/wait-host-devs.sh | 20 ++++++++++++++++++++
> 5 files changed, 37 insertions(+), 23 deletions(-)
>
> --- dracut.orig/dracut.sh
> +++ dracut/dracut.sh
> @@ -903,6 +903,22 @@ done
>
> dinfo "*** Including modules done ***"
>
> +get_persistent_dev() {
> + local i _tmp
> + local _dev=${1##*/}
> +
> + for i in /dev/disk/by-id/*; do
> + _tmp=$(readlink $i)
> + [ "${_tmp##*/}" = "$_dev" ] && echo $i && return
> + done
> +}
> +
I am wondering that will it be better to rely on user to pass the
persistent device name instead of we trying to convert it into a name
generated by udev.
I kind of prefer to let user provide the persistent name instead of
dong tricks internally. (Either in fstab or using --device option).
Thanks
Vivek
> +## save host_devs which we need bring up
> +for _dev in ${host_devs[@]}; do
> + _pdev=$(get_persistent_dev $_dev)
> + [ -n "$_pdev" ] && echo $_pdev >> $initdir/etc/host_devs
> +done
> +
> ## final stuff that has to happen
> if [[ $no_kernel != yes ]]; then
>
> --- dracut.orig/modules.d/95fstab-sys/module-setup.sh
> +++ dracut/modules.d/95fstab-sys/module-setup.sh
> @@ -13,5 +13,4 @@ depends() {
> install() {
> [ -f /etc/fstab.sys ] && inst_simple /etc/fstab.sys
> inst_hook pre-pivot 00 "$moddir/mount-sys.sh"
> - inst_hook cmdline 00 "$moddir/wait-mount-dev.sh"
> }
> --- dracut.orig/modules.d/95fstab-sys/wait-mount-dev.sh
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -#!/bin/sh
> -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
> -# ex: ts=8 sw=4 sts=4 et filetype=sh
> -
> -type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
> -type det_fs >/dev/null 2>&1 || . /lib/fs-lib.sh
> -
> -fstab_wait_dev() {
> - local _dev _mp _fs _opts _dump _pass _rest
> - test -e "$1" || return 1
> - while read _dev _mp _fs _opts _dump _pass _rest; do
> - [ -z "${_dev%%#*}" ] && continue # Skip comment lines
> - case "$_dev" in
> - /dev/?*)
> - wait_for_dev $_dev;;
> - *) ;;
> - esac
> - done < $1
> - return 0
> -}
> -
> -[ -f /etc/fstab ] && fstab_wait_dev /etc/fstab
> --- dracut.orig/modules.d/99base/module-setup.sh
> +++ dracut/modules.d/99base/module-setup.sh
> @@ -41,6 +41,7 @@ install() {
> dracut_install switch_root || dfatal "Failed to install switch_root"
>
> inst_simple "$moddir/dracut-lib.sh" "/lib/dracut-lib.sh"
> + inst_hook cmdline 00 "$moddir/wait-host-devs.sh"
> inst_hook cmdline 10 "$moddir/parse-root-opts.sh"
> mkdir -p "${initdir}/var"
> [ -x /lib/systemd/systemd-timestamp ] && inst
> /lib/systemd/systemd-timestamp
> --- /dev/null
> +++ dracut/modules.d/99base/wait-host-devs.sh
> @@ -0,0 +1,20 @@
> +#!/bin/sh
> +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
> +# ex: ts=8 sw=4 sts=4 et filetype=sh
> +
> +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
> +
> +wait_host_devs() {
> + local _dev
> +
> + while read _dev; do
> + case "$_dev" in
> + /dev/?*)
> + wait_for_dev $_dev
> + ;;
> + *) ;;
> + esac
> + done < $1
> +}
> +
> +[ -f /etc/host_devs ] && wait_host_devs /etc/host_devs
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html