]>
Commit | Line | Data |
---|---|---|
2c431e8e HH |
1 | #!/bin/sh |
2 | # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- | |
3 | # ex: ts=8 sw=4 sts=4 et filetype=sh | |
2c431e8e | 4 | |
aefea76c | 5 | export DRACUT_SYSTEMD=1 |
2c431e8e | 6 | if [ -f /dracut-state.sh ]; then |
f1e9f613 | 7 | . /dracut-state.sh 2>/dev/null |
2c431e8e | 8 | fi |
f1e9f613 HH |
9 | type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh |
10 | ||
2c431e8e | 11 | source_conf /etc/conf.d |
2c431e8e | 12 | |
7bd8f233 | 13 | make_trace_mem "hook initqueue" '1:shortmem' '2+:mem' '3+:slab' |
68e7661c | 14 | getarg 'rd.break=initqueue' -d 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue" |
2c431e8e | 15 | |
68e7661c | 16 | RDRETRY=$(getarg rd.retry -d 'rd_retry=') |
dbfaae0e | 17 | RDRETRY=${RDRETRY:-180} |
2c431e8e HH |
18 | RDRETRY=$(($RDRETRY*2)) |
19 | export RDRETRY | |
20 | ||
21 | main_loop=0 | |
22 | export main_loop | |
23 | ||
24 | while :; do | |
25 | ||
26 | check_finished && break | |
27 | ||
2663232a | 28 | udevadm settle --exit-if-exists=$hookdir/initqueue/work |
2c431e8e HH |
29 | |
30 | check_finished && break | |
31 | ||
32 | if [ -f $hookdir/initqueue/work ]; then | |
32bd2fbb | 33 | rm -f -- "$hookdir/initqueue/work" |
2c431e8e HH |
34 | fi |
35 | ||
36 | for job in $hookdir/initqueue/*.sh; do | |
37 | [ -e "$job" ] || break | |
38 | job=$job . $job | |
39 | check_finished && break 2 | |
40 | done | |
41 | ||
11174408 | 42 | udevadm settle --timeout=0 >/dev/null 2>&1 || continue |
2c431e8e HH |
43 | |
44 | for job in $hookdir/initqueue/settled/*.sh; do | |
45 | [ -e "$job" ] || break | |
46 | job=$job . $job | |
47 | check_finished && break 2 | |
48 | done | |
49 | ||
11174408 | 50 | udevadm settle --timeout=0 >/dev/null 2>&1 || continue |
2c431e8e HH |
51 | |
52 | # no more udev jobs and queues empty. | |
53 | sleep 0.5 | |
54 | ||
5cd7c104 | 55 | if [ $main_loop -gt $((2*$RDRETRY/3)) ]; then |
2c431e8e HH |
56 | for job in $hookdir/initqueue/timeout/*.sh; do |
57 | [ -e "$job" ] || break | |
58 | job=$job . $job | |
f62f3a21 | 59 | udevadm settle --timeout=0 >/dev/null 2>&1 || main_loop=0 |
dbfaae0e | 60 | [ -f $hookdir/initqueue/work ] && main_loop=0 |
2c431e8e HH |
61 | done |
62 | fi | |
63 | ||
64 | main_loop=$(($main_loop+1)) | |
9d787df1 | 65 | [ $main_loop -gt $RDRETRY ] && action_on_fail "Could not boot." && break |
2c431e8e HH |
66 | done |
67 | ||
68 | unset job | |
69 | unset queuetriggered | |
70 | unset main_loop | |
71 | unset RDRETRY | |
72 | ||
2c431e8e | 73 | export -p > /dracut-state.sh |
f7231824 | 74 | |
f1e9f613 | 75 | exit 0 |