Blame SOURCES/0027-dracut-functions.sh-check_block_and_slaves-skip-LVM-.patch

18971c
From 8e3620568cd4e2c7e8db52fcf3f6e25cc4608aaf Mon Sep 17 00:00:00 2001
18971c
From: Marian Csontos <mcsontos@redhat.com>
18971c
Date: Fri, 18 Oct 2013 14:40:40 +0200
18971c
Subject: [PATCH] dracut-functions.sh:check_block_and_slaves*() skip LVM
18971c
 internal devs
18971c
18971c
Not every device in /dev/mapper should be examined.
18971c
If it is an LVM device, touch only devices which have /dev/VG/LV symlink.
18971c
---
18971c
 dracut-functions.sh | 16 ++++++++++++++--
18971c
 1 file changed, 14 insertions(+), 2 deletions(-)
18971c
18971c
diff --git a/dracut-functions.sh b/dracut-functions.sh
18971c
index 45e09118..2e6e8456 100755
18971c
--- a/dracut-functions.sh
18971c
+++ b/dracut-functions.sh
18971c
@@ -579,7 +579,7 @@ host_fs_all()
18971c
 check_block_and_slaves() {
18971c
     local _x
18971c
     [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry.
18971c
-    "$1" $2 && return
18971c
+    if ! lvm_internal_dev $2; then "$1" $2 && return; fi
18971c
     check_vol_slaves "$@" && return 0
18971c
     if [[ -f /sys/dev/block/$2/../dev ]]; then
18971c
         check_block_and_slaves $1 $(<"/sys/dev/block/$2/../dev") && return 0
18971c
@@ -595,7 +595,7 @@ check_block_and_slaves() {
18971c
 check_block_and_slaves_all() {
18971c
     local _x _ret=1
18971c
     [[ -b /dev/block/$2 ]] || return 1 # Not a block device? So sorry.
18971c
-    if "$1" $2; then
18971c
+    if ! lvm_internal_dev $2 && "$1" $2; then
18971c
         _ret=0
18971c
     fi
18971c
     check_vol_slaves "$@" && return 0
18971c
@@ -1672,3 +1672,15 @@ get_ucode_file ()
18971c
         printf "%02x-%02x-%02x" ${family} ${model} ${stepping}
18971c
     fi
18971c
 }
18971c
+
18971c
+# Not every device in /dev/mapper should be examined.
18971c
+# If it is an LVM device, touch only devices which have /dev/VG/LV symlink.
18971c
+lvm_internal_dev() {
18971c
+    local dev_dm_dir=/sys/dev/block/$1/dm
18971c
+    [[ ! -f $dev_dm_dir/uuid || $(<$dev_dm_dir/uuid) != LVM-* ]] && return 1 # Not an LVM device
18971c
+    local DM_VG_NAME DM_LV_NAME DM_LV_LAYER
18971c
+    eval $(dmsetup splitname --nameprefixes --noheadings --rows "$(<$dev_dm_dir/name)" 2>/dev/null)
18971c
+    [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 0 # Better skip this!
18971c
+    [[ ${DM_LV_LAYER} ]] || [[ ! -L /dev/${DM_VG_NAME}/${DM_LV_NAME} ]]
18971c
+}
18971c
+