Blob Blame History Raw
From deb36d236e2dd86ddc16b33d5ca8c648cc8ed369 Mon Sep 17 00:00:00 2001
From: Zdenek Kabelac <zkabelac@redhat.com>
Date: Wed, 1 Sep 2021 15:46:04 +0200
Subject: [PATCH 3/5] vdo: better message for missing device

Show readable message when passed device cannot be accessed.
And use STAT shell var wrapper to call 'stat' command.

(cherry picked from commit 3287d37f440ca272b52f900fc60ee5effcf73697)

Conflicts:
	scripts/lvm_import_vdo.sh
---
 scripts/lvm_import_vdo.sh | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/scripts/lvm_import_vdo.sh b/scripts/lvm_import_vdo.sh
index f8dd71f..dec32bc 100755
--- a/scripts/lvm_import_vdo.sh
+++ b/scripts/lvm_import_vdo.sh
@@ -18,8 +18,8 @@
 #
 # Needed utilities:
 #  lvm, dmsetup,
-#  vdo, vdo2lvm,
-#  grep, awk, sed, blockdev, readlink, mkdir
+#  vdo,
+#  grep, awk, sed, blockdev, readlink, stat, mkdir
 #
 # Conversion is using  'vdo convert' support from VDO manager to move
 # existing VDO header by 2M which makes space to place in PV header
@@ -40,6 +40,7 @@ VDOCONF=${VDOCONF:-}
 BLOCKDEV="blockdev"
 READLINK="readlink"
 READLINK_E="-e"
+STAT="stat"
 MKDIR="mkdir"
 DMSETUP="dmsetup"
 
@@ -156,8 +157,8 @@ detect_lv_() {
 	local MAJORMINOR
 
 	DEVICE=${1/#"${DM_DEV_DIR}/"/}
-	DEVICE=$("$READLINK" $READLINK_E "$DM_DEV_DIR/$DEVICE")
-	test -n "$DEVICE" || error "Cannot get readlink \"$1\"."
+	DEVICE=$("$READLINK" $READLINK_E "$DM_DEV_DIR/$DEVICE" || true)
+	test -n "$DEVICE" || error "Readlink cannot access device \"$1\"."
 	RDEVICE=$DEVICE
 	case "$RDEVICE" in
 	  # hardcoded /dev  since udev does not create these entries elsewhere
@@ -168,9 +169,9 @@ detect_lv_() {
 		DEVMINOR=${MAJORMINOR##*:}
 		;;
 	  *)
-		STAT=$(stat --format "DEVMAJOR=\$((0x%t)) DEVMINOR=\$((0x%T))" "$RDEVICE")
-		test -n "$STAT" || error "Cannot get major:minor for \"$DEVICE\"."
-		eval "$STAT"
+		RSTAT=$("$STAT" --format "DEVMAJOR=\$((0x%t)) DEVMINOR=\$((0x%T))" "$RDEVICE" || true)
+		test -n "$RSTAT" || error "Cannot get major:minor for \"$DEVICE\"."
+		eval "$RSTAT"
 		;;
 	esac
 
@@ -269,8 +270,8 @@ convert2lvm_() {
 	for i in $(awk '/.*device:/ {print $2}' "$TEMPDIR/vdoconf.yml") ; do
 		local DEV
 		DEV=$("$READLINK" $READLINK_E "$i") || continue
-		STAT=$(stat --format "MAJOR=\$((0x%t)) MINOR=\$((0x%T))" "$DEV" 2>/dev/null) || continue
-		eval "$STAT"
+		RSTAT=$("$STAT" --format "MAJOR=\$((0x%t)) MINOR=\$((0x%T))" "$DEV" 2>/dev/null) || continue
+		eval "$RSTAT"
 		test "$MAJOR" = "$DEVMAJOR" && test "$MINOR" = "$DEVMINOR" && {
 			test -z "$FOUND" || error "VDO configuration contains duplicate entries $FOUND and $i"
 			FOUND=$i
@@ -287,7 +288,7 @@ convert2lvm_() {
 	DM_OPEN="$("$DMSETUP" info -c -o open  "$VDONAME" --noheadings --nameprefixes 2>/dev/null || true)"
 	case "$DM_OPEN" in
 	Device*) ;; # no devices
-	*) 	eval "$DM_OPEN"
+	*)	eval "$DM_OPEN"
 		test "${DM_OPEN:-0}" -eq 0 || error "Cannot converted VDO volume \"$VDONAME\" which is in use!"
 		;;
 	esac
-- 
1.8.3.1