Author: glen
Date: Fri Feb 27 17:58:17 2009
New Revision: 10152

Modified:
   geninitrd/trunk/geninitrd
Log:
- handle LVM PV consisting colon in path: /dev/block/104:2

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd   (original)
+++ geninitrd/trunk/geninitrd   Fri Feb 27 17:58:17 2009
@@ -350,7 +350,7 @@
                        [ $m = $mod ] && have=1
                done
                if [ $have = 0 ]; then
-                       MODULES="$MODULES $mod" 
+                       MODULES="$MODULES $mod"
 
                        # if we are adding uvesafb, we need v86d as well
                        if [ "$modName" = "uvesafb" ]; then
@@ -550,7 +550,7 @@
 is_lvm_node() {
        local node="$1"
        if [ ! -e "$node" ]; then
-               warn "check_lvm(): node $node doesn't exist!"
+               die "check_lvm(): node $node doesn't exist!"
                return 1
        fi
 
@@ -559,13 +559,11 @@
        rc=$?
 
        if [ $rc = 0 ]; then
-               debug "LVM check: $node is LVM v1 node"
                # is lvm1
                return 0
        fi
 
        if [ ! -x /sbin/lvm ]; then
-               debug "LVM check: no lvm2 tools present to check"
                return 0
        fi
 
@@ -576,14 +574,24 @@
                die "Unexpected exit from 'lvdisplay $node': $rc - are your lvm 
tools broken?"
        fi
 
-       if [ $rc = 0 ]; then
-               debug "LVM check: $node is LVM v2 node"
-       else
-               debug "LVM check: $node is not any LVM node"
-       fi
        return $rc
 }
 
+# find PV names from given VG name
+find_lvm_pv() {
+       local vg="$1"
+
+       local pv=$(/sbin/vgdisplay -C --noheadings -o pv_name "$vg")
+       echo $pv
+}
+
+# find VG name from given devnode
+find_lvm_vg() {
+       local devnode="$1"
+
+       local vg=$(/sbin/lvdisplay -C --noheadings -o vg_name "$devnode")
+       echo $vg
+}
 
 # return dependencies MAJOR:MINOR [MAJOR:MINOR] for DM_NAME
 # TODO: patch `dmsetup export`
@@ -627,12 +635,17 @@
                die "No argument passed to find_modules_for_devpath() - is your 
/etc/fstab correct?"
        fi
 
-       # /dev/dm-3 -> /dev/mapper/sil_ahbgadcbchfc3
-       case "$devpath" in
-       /dev/dm-*)
+       if [[ "$devpath" = /dev/dm-* ]]; then
+               # /dev/dm-3 -> /dev/mapper/sil_ahbgadcbchfc3
                devpath=$(dm_longname "$devpath")
-               ;;
-       esac
+       fi
+
+       if [ -L "$devpath" ] && ! is_lvm_node "$devpath"; then
+               # sanitize things like:
+               # /dev/block/104:2 -> /dev/cciss/c0d0p2
+               devpath=$(readlink -f "$devpath")
+       fi
+
        debug "Finding modules for device path $devpath"
 
        if is_luks "$devpath"; then
@@ -749,6 +762,8 @@
        fi
 
        if is_lvm_node "$devpath"; then
+               debug "LVM: $devpath is LVM node"
+
                node="$devpath"
 
                if [ ! -f /sbin/initrd-lvm -o ! -x /sbin/lvdisplay -o ! -x 
/sbin/pvdisplay ]; then
@@ -761,9 +776,12 @@
                        fi
                fi
 
-               local vg=$(/sbin/lvdisplay -c "$node" 2> /dev/null | awk -F":" 
' { print $2 } ')
+               local vg=$(find_lvm_vg "$node")
+               debug "LVM VG for $node: $vg"
                VGVOLUMES=$(echo $VGVOLUMES $vg | tr ' ' '\n' | sort -u)
-               local pv=$(/sbin/pvdisplay -c 2>/dev/null | awk -F":" -v 
vg="$vg" ' BEGIN { devices="" } { if ($2 == vg) { devices = devices " " $1 } } 
END { print devices } ')
+
+               local pv=$(find_lvm_pv "$vg")
+               debug "LVM PV for $vg: $pv"
                PVDEVICES=$(echo $PVDEVICES $pv | tr ' ' '\n' | sort -u)
 
                if [ -n "$PVDEVICES" ]; then
@@ -773,6 +791,7 @@
                else
                        die "I wasn't able to find PV (via lvdisplay and 
pvdisplay). You can try to set PVDEVICES in /etc/sysconfig/geninitrd."
                fi
+
                if [ "$LVMTOOLSVERSION" = "2" ]; then
                        findmodule "-dm-mod"
                elif [ "$LVMTOOLSVERSION" = "1" ]; then
@@ -781,6 +800,7 @@
                else
                        die "LVM version $LVMTOOLSVERSION is not supported yet."
                fi
+
                debug "LVM v$LVMTOOLSVERSION enabled"
                have_lvm=yes
                return
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to