[projects/geninitrd] wait for root only if it's not using device mapper
atler
atler at pld-linux.org
Thu Dec 11 21:21:42 CET 2025
commit 3a15323cb7b33c41764d121830b51e871b83680d
Author: Jan Palus <atler at pld-linux.org>
Date: Thu Dec 11 19:58:58 2025 +0100
wait for root only if it's not using device mapper
functions | 44 ++++++++++++++++++++++++++++++++++++++++++--
geninitrd | 2 +-
2 files changed, 43 insertions(+), 3 deletions(-)
---
diff --git a/functions b/functions
index 5f38115..e656452 100644
--- a/functions
+++ b/functions
@@ -50,6 +50,18 @@ find_devname() {
echo $outname
}
+find_dev_major() {
+ local maj_hex
+ maj_hex=$(stat -L -c %t "$1") || return 1
+ echo $((0x$maj_hex))
+}
+
+find_dev_minor() {
+ local min_hex
+ min_hex=$(stat -L -c %T "$1") || return 1
+ echo $((0x$min_hex))
+}
+
# Find root device from fstab.
#
# @param string $fstab location of /etc/fstab
@@ -115,6 +127,16 @@ find_root() {
return 0
}
+blk_dev_sysfs() {
+ local maj min
+ # /sys/dev available since 2.6.26
+ if [ "$kernel_version_long" -ge "002006026" ]; then
+ maj=$(find_dev_major "$1")
+ min=$(find_dev_minor "$1")
+ echo /sys/dev/block/$maj:$min
+ fi
+}
+
# resolve /dev/dm-0 to lvm2 node
# which they got from blkid program fs was specifed as UUID= in fstab
dm_lvm2_name() {
@@ -131,8 +153,7 @@ dm_lvm2_name() {
dm_minor=${node#/dev/dm-}
;;
/dev/mapper/*)
- stat=$(stat -L -c %T "$node") || die "stat failed: $node"
- dm_minor=$((0x$stat))
+ dm_minor=$(find_dev_minor "$node") || die "find_dev_minor failed: $node"
;;
esac
@@ -157,6 +178,25 @@ dm_lvm2_name() {
echo $lvm_path
}
+# check if device is device mapper node
+is_dm() {
+ local sysfs
+ # /sys/dev/block/*/dm available since 2.6.29
+ [ "$kernel_version_long" -ge "002006029" ] && sysfs=$(blk_dev_sysfs "$1")
+ if [ -n "$sysfs" ]; then
+ test -e "$sysfs/dm"
+ else
+ case $(readlink -f "$1") in
+ /dev/mapper/*|/dev/dm-[0-9]*)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+ fi
+}
+
# resolve /dev/dm-0, /dev/mapper/name
# @return DM name
dm_name() {
diff --git a/geninitrd b/geninitrd
index fa62d58..b3153a5 100755
--- a/geninitrd
+++ b/geninitrd
@@ -1765,7 +1765,7 @@ else
initrd_gen_lvm
initrd_gen_bcache
initrd_gen_luks
- echo 'wait_blk_dev "$ROOT"' | add_linuxrc
+ is_dm "$rootdev" || echo 'wait_blk_dev "$ROOT"' | add_linuxrc
initrd_gen_blkid
initrd_gen_setrootdev
fi
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/projects/geninitrd.git/commitdiff/ed261c3ecdc4e50c55c1e2adcca5715668e144f0
More information about the pld-cvs-commit
mailing list