File 0097-Implement-rd.timeout-to-modify-the-device-timeout.patch of Package dracut.892

From 59be707744473b82f2ae6d14a159fbf94834d4b6 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Thu, 3 Jul 2014 11:21:29 +0200
Subject: Implement 'rd.timeout' to modify the device timeout

When generating units for devices the administrator might
want to use a different timeout than the default.
So implement a new parameter 'rd.timeout' for this.

References: bnc#878770

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
 dracut.cmdline.7.asc                    | 7 ++++++-
 modules.d/98systemd/rootfs-generator.sh | 7 +++++--
 modules.d/99base/dracut-lib.sh          | 6 +++++-
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
index 84fe794..2dc795b 100644
--- a/dracut.cmdline.7.asc
+++ b/dracut.cmdline.7.asc
@@ -117,11 +117,16 @@ Misc
     have been loaded. This parameter can be specified multiple times.
 
 **rd.retry=**__<seconds>__::
-    specify how long dracut should wait for devices to appear.
+    specify how long dracut should retry the initqueue to configure devices.
     The default is 30 seconds. After 2/3 of the time, degraded raids are force
     started. If you have hardware, which takes a very long time to announce its
     drives, you might want to extend this value.
 
+**rd.timeout=**__<seconds>__::
+    specify how long dracut should wait for devices to appear. The
+    default is '0', which means 'forever'. Note that this timeout
+    should be longer than rd.retry to allow for proper configuration.
+
 **rd.noverifyssl**::
     accept self-signed certificates for ssl downloads.
 
diff --git a/modules.d/98systemd/rootfs-generator.sh b/modules.d/98systemd/rootfs-generator.sh
index 2c09895..a2b71ff 100755
--- a/modules.d/98systemd/rootfs-generator.sh
+++ b/modules.d/98systemd/rootfs-generator.sh
@@ -7,8 +7,11 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
 generator_wait_for_dev()
 {
     local _name
+    local _timeout
 
     _name="$(str_replace "$1" '/' '\x2f')"
+    _timeout=$(getarg rd.timeout)
+    _timeout=${_timeout:-0}
 
     [ -e "$hookdir/initqueue/finished/devexists-${_name}.sh" ] && return 0
 
@@ -29,7 +32,7 @@ generator_wait_for_dev()
         mkdir -p /run/systemd/generator/${_name}.device.d
         {
             echo "[Unit]"
-            echo "JobTimeoutSec=0"
+            echo "JobTimeoutSec=$_timeout"
         } > /run/systemd/generator/${_name}.device.d/timeout.conf
     fi
 }
@@ -60,6 +63,6 @@ case "$root" in
         rootok=1 ;;
 esac
 
-[ "${root%%:*}" = "block" ] && generator_wait_for_dev "${root#block:}"
+[ "${root%%:*}" = "block" ] && generator_wait_for_dev "${root#block:}" "$RDRETRY"
 
 exit 0
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index 33f7678..5a867b8 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -876,12 +876,16 @@ wait_for_dev()
     local _name
     local _needreload
     local _noreload
+    local _timeout
 
     if [ "$1" = "-n" ]; then
         _noreload=1
         shift
     fi
 
+    _timeout=$(getarg rd.timeout)
+    _timeout=${_timeout:-0}
+
     _name="$(str_replace "$1" '/' '\x2f')"
 
     [ -e "${PREFIX}$hookdir/initqueue/finished/devexists-${_name}.sh" ] && return 0
@@ -905,7 +909,7 @@ wait_for_dev()
             mkdir -p ${PREFIX}/etc/systemd/system/${_name}.device.d
             {
                 echo "[Unit]"
-                echo "JobTimeoutSec=0"
+                echo "JobTimeoutSec=$_timeout"
             } > ${PREFIX}/etc/systemd/system/${_name}.device.d/timeout.conf
             _needreload=1
         fi
-- 
1.8.4.5