summaryrefslogtreecommitdiff
path: root/skip-the-broken-sd-in-initqueue.patch
diff options
context:
space:
mode:
Diffstat (limited to 'skip-the-broken-sd-in-initqueue.patch')
-rw-r--r--skip-the-broken-sd-in-initqueue.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/skip-the-broken-sd-in-initqueue.patch b/skip-the-broken-sd-in-initqueue.patch
new file mode 100644
index 0000000..fa18e88
--- /dev/null
+++ b/skip-the-broken-sd-in-initqueue.patch
@@ -0,0 +1,48 @@
+From 816a7dbff7128b4b87ea8d6abd2caf564f8f3502 Mon Sep 17 00:00:00 2001
+From: gaoyi <gaoyi15@huawei.com>
+Date: Fri, 18 Oct 2019 10:42:55 -0400
+Subject: [PATCH] skip the broken sd in initqueue
+
+---
+ .../98dracut-systemd/dracut-initqueue.sh | 25 +++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/modules.d/98dracut-systemd/dracut-initqueue.sh b/modules.d/98dracut-systemd/dracut-initqueue.sh
+index 3ddc236..c7d7888 100755
+--- a/modules.d/98dracut-systemd/dracut-initqueue.sh
++++ b/modules.d/98dracut-systemd/dracut-initqueue.sh
+@@ -16,6 +16,31 @@ RDRETRY=${RDRETRY:-180}
+ RDRETRY=$((RDRETRY * 2))
+ export RDRETRY
+
++if getarg 'skipbadscsi' -d 'skipbadscsi'; then
++ sd_dir=/sys/block
++ while [ "`ls $sd_dir/`" = "" ]
++ do
++ sleep 1
++ done
++
++ dev_num=0
++ for _sd_device in `ls $sd_dir/`
++ do
++ blkid /dev/$_sd_device >/dev/null 2>&1 &
++ ((dev_num++))
++ done
++
++ sleep $dev_num
++
++ for _sd_device in `ps -eo cmd,stat | grep -Po "(?<=blkid /dev/).*(?=D)"`
++ do
++ echo offline > $sd_dir/$_sd_device/device/state
++ echo "Dev $_sd_device maybe broken, set it offline" > /dev/kmsg
++ done
++
++ udevadm settle --timeout=30
++fi
++
+ main_loop=0
+ export main_loop
+
+--
+2.19.1
+