tags 603319 pending thanks Hello,
On pirmadienis 06 Gruodis 2010 20:59:52 Modestas Vainius wrote: > Like previously [2], feel free to do a maintainer upload or I will NMU in > two weeks from now. Two weeks is almost up. I have just uploaded dmraid 1.0.0.rc16-4.1 NMU to DELAYED/2-day. NMU diff is attached. You may also pull my NMU changes directly from my git repository. $ git pull git://git.debian.org/users/modax/dmraid.git master:master -- Modestas Vainius <mo...@debian.org>
diff -u dmraid-1.0.0.rc16/debian/dmraid-activate dmraid-1.0.0.rc16/debian/dmraid-activate --- dmraid-1.0.0.rc16/debian/dmraid-activate +++ dmraid-1.0.0.rc16/debian/dmraid-activate @@ -116,13 +116,18 @@ fi } -ddf1_virtual_drive_guids() +ddf1_virtual_drive_names() { - ddf1_awk_script=$(cat <<'EOF' + ddf1_awk_script="$(cat <<'EOF' BEGIN { section = "" disk_ref = "" guid_i = 0 + + # Heximal to decimal conversion array + for (i = 0; i <= 9; i++) hex2dec[i] = i + hex2dec["a"] = 10; hex2dec["b"] = 11; hex2dec["c"] = 12 + hex2dec["e"] = 13; hex2dec["d"] = 14; hex2dec["f"] = 15; } function section_begins(name) @@ -132,6 +137,42 @@ drive_map = 0 } +function extract_vd_guid(line, g) +{ + g = substr(line, match(line,/\[[0-9a-f ]+\]$/)+1, RLENGTH-2) + gsub(/ /, "", g) + # IF LSI, do timestamp substitution to get persistent name, see + # 19_ddf1_lsi_persistent_name.patch + if (g ~ /^4c5349/) + g = substr(g, 1, 32) "47114711" substr(g, 41) + return g +} + +function extract_vd_name(line, hex, n, max, i, d1, d2, sed) +{ + n = tolower(substr(line, match(line,/\[[0-9a-f ]+\]$/)+1, RLENGTH-2)) + max = split(n, hex, / /) + + if (max <= 0 || hex[0] == "00") return "" + + # Convert name from hex to string (16 bytes) + n = "" + for (i = 1; i <= max; i++) { + d1 = hex2dec[substr(hex[i], 1, 1)] + d2 = hex2dec[substr(hex[i], 2, 1)] + if ((d1 + d2) == 0) break + n = n sprintf("%c", d1 * 16 + d2) + } + # Shell-escape single quotes in the name + gsub(/'/,"'\\''", n) + # Finally strip non-graph chars from the end of the string + # mawk does not support character classes. Use sed. + sed = "echo '" n "' | sed 's/[^[:graph:]]\+$//'" + sed | getline n + close(sed) + return n +} + { if (!/^0x/ && / at /) { # Section begins @@ -140,31 +181,45 @@ disk_ref = $3 sub(/^0x/, "", disk_ref) } else if (disk_ref) { - if (section == "Virtual Drive Config Record" && /^0x008 guid:/) { - vd_guid = substr($0, match($0,/\[[0-9a-f ]+\]$/)+1, RLENGTH-2) - gsub(/ /, "", vd_guid) - # IF LSI, do timestamp substitution to get persistent name, see - # 19_ddf1_lsi_persistent_name.patch - if (vd_guid ~ /^4c5349/) - vd_guid = substr(vd_guid, 1, 32) "47114711" substr(vd_guid, 41) - } else if (drive_map) { - # 0: 4BCBB980 @ 0 - if ($2 == disk_ref) { - guids[guid_i] = vd_guid - guid_i++ + # We need to parse 'Virtual Drive' sections in order to extract VD + # names + if (section == "Virtual Drive") { + if (/^0x000 guid:/) { + vd_guid = extract_vd_guid($0) + } else if (/^0x030 name:/) { + vd_name = extract_vd_name($0) + if (vd_name) + vd_names[vd_guid] = vd_name + } + } else if (section == "Virtual Drive Config Record") { + if (/^0x008 guid:/) { + vd_guid = extract_vd_guid($0) + } else if (drive_map) { + # 0: 4BCBB980 @ 0 + if ($2 == disk_ref) { + guids[guid_i] = vd_guid + guid_i++ + } + } else if (vd_guid) { + drive_map = /^Drive map:/ } - } else if (vd_guid) { - drive_map = /^Drive map:/ } } } END { - # Print discovered virtual drive GUIDs which belong to this physical drive - for (guid in guids) - print guids[guid] + # Print discovered virtual drive names (or GUIDs) which belong to this + # physical drive + for (guid_i in guids) { + guid = guids[guid_i] + if (guid in vd_names) { + print vd_names[guid] + } else { + print guid + } + } } EOF -) +)" dmraid -i -n "$1" | awk "$ddf1_awk_script" } @@ -193,6 +248,9 @@ exit 0 fi +newline=" +" + case "$Raid_Name" in isw_*) # We need a special case for isw arrays, since it is possible to have several @@ -208,13 +266,20 @@ ;; .ddf1_disks) # Dummy name for the main DDF1 group. Needs special handling to - # find RAID subsets for this physical drive - Ddf1_guids=`ddf1_virtual_drive_guids "/dev/$Node_Name"` + # find RAID subsets (name or GUID) for this physical drive + Ddf1_names=`ddf1_virtual_drive_names "/dev/$Node_Name"` - for ddf1_guid in $Ddf1_guids + # Returned names might contain space characters. Therefore + # split fields at new line. Use $IFS to avoid forking a new shell + save_IFS="$IFS" + IFS="$newline" + for ddf1_name in $Ddf1_names do - activate_array "ddf1_${ddf1_guid}" + IFS="$save_IFS" + activate_array "ddf1_${ddf1_name}" + IFS="$newline" done + IFS="$save_IFS" break ;; *) diff -u dmraid-1.0.0.rc16/debian/changelog dmraid-1.0.0.rc16/debian/changelog --- dmraid-1.0.0.rc16/debian/changelog +++ dmraid-1.0.0.rc16/debian/changelog @@ -1,3 +1,11 @@ +dmraid (1.0.0.rc16-4.1) unstable; urgency=low + + * Non-maintainer upload. + * dmraid-active: properly handle the case when DDF1 virtual drive has a name. + (Closes: #603319) + + -- Modestas Vainius <mo...@debian.org> Sat, 18 Dec 2010 22:26:41 +0200 + dmraid (1.0.0.rc16-4) unstable; urgency=low [ Modestas Vainius ]
signature.asc
Description: This is a digitally signed message part.