summaryrefslogtreecommitdiff
path: root/skip-the-broken-sd-in-initqueue.patch
blob: fa18e88c9b7af68fb554155e9ad1328c0a52153e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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