[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#442236: updated patch



Hi Frans
On Tue, Feb 26, 2008 at 04:53:52PM +0100, Frans Pop wrote:
> On Tuesday 26 February 2008, Guido Günther wrote:
> > attached is an updated patch against current partman-base. I attach an
> > updated version for review since it contains a template which might be
> > interesting for translators
> 
> There are two (minor) issues in:
I've attached an updated patch. Thanks for the comments.
Cheers,
 -- Guido
>From 40d553ebe5fd9189b110dfd70c44b42f17349d4a Mon Sep 17 00:00:00 2001
From: Guido Guenther <agx@sigxcpu.org>
Date: Tue, 26 Feb 2008 15:37:47 +0100
Subject: [PATCH] teach partman base about multipath ed devices (Closes: #442236)
 also addressing Frans Pop's concerns

---
 .../partman-base/debian/partman-base.templates     |    8 ++++
 packages/partman/partman-base/init.d/parted        |   23 +++++++++++
 packages/partman/partman-base/lib/base.sh          |   42 +++++++++++++++++--
 packages/partman/partman-base/lib/commit.sh        |    9 +++-
 4 files changed, 75 insertions(+), 7 deletions(-)

diff --git a/packages/partman/partman-base/debian/partman-base.templates b/packages/partman/partman-base/debian/partman-base.templates
index 5bd5e87..001301e 100644
--- a/packages/partman/partman-base/debian/partman-base.templates
+++ b/packages/partman/partman-base/debian/partman-base.templates
@@ -295,6 +295,14 @@ Type: text
 # :sl3:
 _Description: Serial ATA RAID %s (partition #%s)
 
+Template: partman/text/multipath
+Type: text
+_Description: Multipath %s (WWID %s)
+
+Template: partman/text/multipath_partition
+Type: text
+_Description: Multipath %s Partition #%s
+
 Template: partman/text/lvm_lv
 Type: text
 # :sl3:
diff --git a/packages/partman/partman-base/init.d/parted b/packages/partman/partman-base/init.d/parted
index b10781b..388d29a 100755
--- a/packages/partman/partman-base/init.d/parted
+++ b/packages/partman/partman-base/init.d/parted
@@ -16,6 +16,25 @@ part_of_sataraid () {
 	return 1
 }
 
+part_of_multipath() {
+	local mpdev
+	type multipath >/dev/null 2>&1 || return 1
+
+	if multipath_part $1; then
+		return 0
+	fi
+	# The block devices that make up the multipath:
+	# Output looks like \_ 4:0:0:1 sdc 8:32 ...
+	for mpdev in $(multipath -l | \
+		       grep '_ \([0-9]\+:\)\{3\}[0-9]\+ sd[a-z]\+ [0-9]\+:[0-9]\+' | \
+		       cut -f4 -d' '); do
+		if [ "$(readlink -f /dev/$mpdev)" = $1 ]; then
+			return 0
+		fi
+	done
+	return 1
+}
+
 if [ ! -f /var/run/parted_server.pid ]; then
 	mkdir -p /var/run
 	parted_server
@@ -24,6 +43,10 @@ if [ ! -f /var/run/parted_server.pid ]; then
 		# TODO: How do we signal we couldn't start parted_server properly?
 		exit $RET
 	fi
+	# Skip devices that are part of a multipathed device
+	if part_of_multipath $partdev; then
+		continue
+	fi
 
 	rm -rf /var/lib/partman/old_devices
 	if [ -d $DEVICES ]; then
diff --git a/packages/partman/partman-base/lib/base.sh b/packages/partman/partman-base/lib/base.sh
index 1d973cd..d3871e8 100644
--- a/packages/partman/partman-base/lib/base.sh
+++ b/packages/partman/partman-base/lib/base.sh
@@ -496,9 +496,34 @@ memfree () {
 	fi
 }
 
+# return the device mapper table type
+dm_table () {
+	type=""
+	if [ -x /sbin/dmsetup ]; then
+		type=$(/sbin/dmsetup table "$1" | head -n 1 | cut -d " " -f3)
+	fi
+	echo $type
+}
+
+# Check if a device is a partition on a multipath'ed device by checking if
+# the corresponding multipath map exists
+is_multipath_part () {
+	type multipath >/dev/null 2>&1 || return 1
+
+	type=$(dm_table $1)
+	[ "$type" = linear ] || return 1
+	name=$(dmsetup info --noheadings -c -oname "$1")
+
+	mp=${name%-part*}
+	if [ $(multipath -l $mp | wc -l) -gt  0 ]; then
+		return 0
+	fi
+	return 1
+}
+
 # TODO: this should not be global
 humandev () {
-    local host bus target part lun idenum targtype scsinum linux
+    local host bus target part lun idenum targtype scsinum linux wwid
     case "$1" in
 	/dev/ide/host*/bus[01]/target[01]/lun0/disc)
 	    host=`echo $1 | sed 's,/dev/ide/host\(.*\)/bus.*/target[01]/lun0/disc,\1,'`
@@ -698,10 +723,7 @@ humandev () {
 	    printf "$RET" ${type} ${device}
 	    ;;
 	/dev/mapper/*)
-	    type=""
-	    if [ -x /sbin/dmsetup ]; then
-	        type=$(/sbin/dmsetup table "$1" | head -n 1 | cut -d " " -f3)
-	    fi
+	    type=$(dm_table "$1")
 
 	    # First check for Serial ATA RAID devices
 	    if type dmraid >/dev/null 2>&1; then
@@ -732,6 +754,16 @@ humandev () {
 	        mapping=${1#/dev/mapper/}
 	        db_metaget partman/text/dmcrypt_volume description
 	        printf "$RET" $mapping
+	    elif [ "$type" = multipath ]; then
+	    	device=${1#/dev/mapper/}
+	    	wwid=$(multipath -l ${device} | head -n 1 | sed "s/^${device} \+(\([a-f0-9]\+\)).*/\1/")
+	    	db_metaget partman/text/multipath description
+	    	printf "$RET" ${device} ${wwid}
+	    elif is_multipath_part $1; then
+	    	part=$(echo "$1" | sed 's%.*-part\([0-9]\+\)$%\1%')
+	    	device=$(echo "$1" | sed 's%/dev/mapper/\(.*\)-part[0-9]\+$%\1%')
+	    	db_metaget partman/text/multipath_partition description
+	    	printf "$RET" ${device} ${part}
 	    else
 	        # LVM2 devices are found as /dev/mapper/<vg>-<lv>.  If the vg
 	        # or lv contains a dash, the dash is replaced by two dashes.
diff --git a/packages/partman/partman-base/lib/commit.sh b/packages/partman/partman-base/lib/commit.sh
index 6ab7ede..f5ccfe9 100644
--- a/packages/partman/partman-base/lib/commit.sh
+++ b/packages/partman/partman-base/lib/commit.sh
@@ -52,8 +52,13 @@ confirm_changes () {
 			filesystem=$(cat $id/visual_filesystem)
 			# Special case d-m devices to use a different description
 			if cat device | grep -q "/dev/mapper" ; then
-				partdesc="partman/text/confirm_unpartitioned_item"
-			else
+				type=$(dm_table $device)
+				# multipath devices are partitioned
+				if [  "$type" != multipath ] && ! is_multipath_part $device; then
+					partdesc="partman/text/confirm_unpartitioned_item"
+				fi
+			fi
+			if [ -z "$partdesc" ]; then
 				partdesc="partman/text/confirm_item"
 				db_subst $partdesc PARTITION "$num"
 			fi
-- 
1.5.4.2


Reply to: