summaryrefslogtreecommitdiff
path: root/backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch
diff options
context:
space:
mode:
Diffstat (limited to 'backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch')
-rw-r--r--backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch b/backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch
new file mode 100644
index 0000000..b4ccd97
--- /dev/null
+++ b/backport-feat-lvm-only-run-lvchange-for-LV-that-is-seen-on-de.patch
@@ -0,0 +1,54 @@
+From 1af46743195422aaebcde5c508a5dd479eff51ea Mon Sep 17 00:00:00 2001
+From: David Teigland <teigland@redhat.com>
+Date: Fri, 10 Dec 2021 12:51:26 -0600
+Subject: [PATCH] feat(lvm): only run lvchange for LV that is seen on devices
+
+Change the command listing LVs from lvscan to lvs, and list
+only the LV names that are being activated. Before attempting
+to activate an LV, check that that LV name appears in the
+lvs command output. This avoids wasting time running an
+lvchange command that we know will fail.
+---
+ modules.d/90lvm/lvm_scan.sh | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/90lvm/lvm_scan.sh b/modules.d/90lvm/lvm_scan.sh
+index bda265f..89f077a 100755
+--- a/modules.d/90lvm/lvm_scan.sh
++++ b/modules.d/90lvm/lvm_scan.sh
+@@ -119,7 +119,7 @@ sub=${sub%%\(*}
+ # ignores locking failures (--ignorelockingfailure)
+ # disables hints (--nohints)
+ #
+-# For lvscan and vgscan:
++# For lvs and vgscan:
+ # disable locking (--nolocking)
+ # disable hints (--nohints)
+
+@@ -136,10 +136,20 @@ check_lvm_ver 2 3 14 "$maj" "$min" "$sub" \
+ if [ -n "$LVS" ]; then
+ info "Scanning devices $lvmdevs for LVM logical volumes $LVS"
+ # shellcheck disable=SC2086
+- lvm lvscan $scan_args 2>&1 | vinfo
++ LVSLIST=$(lvm lvs $scan_args --noheading -o lv_full_name,segtype $LVS)
++ info "$LVSLIST"
++
++ # Only attempt to activate an LV if it appears in the lvs output.
+ for LV in $LVS; do
+- # shellcheck disable=SC2086
+- lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo
++ if strstr "$LVSLIST" "$LV"; then
++ # This lvchange is expected to fail if all PVs used by
++ # the LV are not yet present. Premature/failed lvchange
++ # could be avoided by reporting if an LV is complete
++ # from the lvs command above and skipping this lvchange
++ # if the LV is not lised as complete.
++ # shellcheck disable=SC2086
++ lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo
++ fi
+ done
+ fi
+
+--
+1.8.3.1
+