Serge, I'm sorry this patch hasn't had any attention for so long.

On Thu, 9 Dec 2010 15:20:28 -0600 "Serge E. Hallyn" 
<serge.hal...@canonical.com> wrote:
> Here is a patch (against the ubuntu package, just as example)
> which instead of doing a dumb retry loop, waits for udev.
> 
> === modified file 'debian/changelog'
> --- debian/changelog  2010-04-26 15:17:47 +0000
> +++ debian/changelog  2010-12-08 21:44:32 +0000
> @@ -1,3 +1,15 @@
> +initramfs-tools (0.92bubuntu79) natty; urgency=low
> +
> +  * When using multipath, it is possible that mountroot() will race
> +    with udev's renaming of /dev/disk/by-uuid/{rootfs-uuid} from
> +    /dev/sd?? to /dev/mapper/something.  After multipath has grabbed
> +    the /dev/sd?? and until udev completes the rename, mounting
> +    /dev/disk/by-uuid/{rootfs-uuid} will fail with -EBUSY.  In that
> +    case, call 'udevsettle' to wait until udev has finished all its
> +    related actions. (Closes LP: #686832)
> +
> + -- Serge Hallyn <serge.hal...@ubuntu.com>  Fri, 19 Nov 2010 12:19:43 -0600

(Bear in mind that I have no experience of using multipath.)

If one path shows up quickly and the other rather later, can't we still
end up mounting the single-path device rather than the multipath
device?  How do we tell when multipath discovery is complete?

Does it even make sense to specify a multipath device by UUID rather
than by its device-mapper name?  This certainly isn't supported for
LVM.

Ben.

>  initramfs-tools (0.92bubuntu78) lucid; urgency=low
>  
>    * hooks/compcache: Escape $-expansions inside <<EOF (thanks, Eugene San;
> 
> === modified file 'scripts/local'
> --- scripts/local     2009-12-21 23:06:53 +0000
> +++ scripts/local     2010-11-20 01:03:26 +0000
> @@ -69,10 +69,19 @@
>       # FIXME This has no error checking
>       [ -n "${FSTYPE}" ] && modprobe ${FSTYPE}
>  
> -     # FIXME This has no error checking
>       # Mount root
> -     mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
> -     mountroot_status="$?"
> +     tries=0
> +     ret=1
> +     while [ $tries -lt 2 -a $ret -ne 0 ]; do
> +             mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} 
> ${rootmnt}
> +             ret=$?
> +             if [ $ret -ne 0 ]; then
> +                     echo "failed attempt $tries to mount $ROOT as root"
> +                     udevadm settle
> +                     tries=$((tries+1))
> +             fi
> +     done
> +     mountroot_status=$ret
>       if [ "$LOOP" ]; then
>               if [ "$mountroot_status" != 0 ]; then
>                       if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
> 
> 
> 
> 
-- 
Ben Hutchings
I'm always amazed by the number of people who take up solipsism because
they heard someone else explain it. - E*Borg on alt.fan.pratchett

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to