diff --git a/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch b/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch
new file mode 100644
index 0000000..0a00e8b
--- /dev/null
+++ b/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch
@@ -0,0 +1,86 @@
+From 9eb6db5b9ac5372793aa2fc6f479a2a82a369695 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 1 Dec 2014 12:36:20 +0100
+Subject: [PATCH] do not symlink /var/log to /run/log
+
+some programs e.g. systemd-journald expect a directory in /var/log as
+the marker to do some actions. Here journald tries to flush
+/run/log/journal to /var/log/journal, if the directory is seen.
+
+/var/log is now a symlink to /run/initramfs/log.
+
+(cherry picked from commit 99d4fd6bb791ca8ce07e07e13b58445f3e20894a)
+---
+ dracut.sh                                |  1 -
+ modules.d/98systemd/dracut-tmpfiles.conf |  3 +++
+ modules.d/98systemd/module-setup.sh      |  5 +++++
+ modules.d/99base/dracut-lib.sh           | 11 +++++++++++
+ 4 files changed, 19 insertions(+), 1 deletion(-)
+ create mode 100644 modules.d/98systemd/dracut-tmpfiles.conf
+
+diff --git a/dracut.sh b/dracut.sh
+index 74c59a0..27c2bf4 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1217,7 +1217,6 @@ if [[ $kernel_only != yes ]]; then
+ 
+     ln -sfn ../run "$initdir/var/run"
+     ln -sfn ../run/lock "$initdir/var/lock"
+-    ln -sfn ../run/log "$initdir/var/log"
+ else
+     for d in lib "$libdir"; do
+         [[ -e "${initdir}${prefix}/$d" ]] && continue
+diff --git a/modules.d/98systemd/dracut-tmpfiles.conf b/modules.d/98systemd/dracut-tmpfiles.conf
+new file mode 100644
+index 0000000..3c21ce8
+--- /dev/null
++++ b/modules.d/98systemd/dracut-tmpfiles.conf
+@@ -0,0 +1,3 @@
++d /run/initramfs     0755 root root -
++d /run/initramfs/log 0755 root root -
++L /var/log           -    -    -    - ../run/initramfs/log
+diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
+index f62f551..aae0319 100755
+--- a/modules.d/98systemd/module-setup.sh
++++ b/modules.d/98systemd/module-setup.sh
+@@ -121,6 +121,8 @@ install() {
+         $systemdsystemunitdir/slices.target \
+         $systemdsystemunitdir/system.slice \
+         \
++        $tmpfilesdir/systemd.conf \
++        \
+         journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles
+ 
+     inst_multiple -o \
+@@ -230,6 +232,9 @@ install() {
+         ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/initrd.target.wants/${i}"
+     done
+ 
++    inst_simple "$moddir/dracut-tmpfiles.conf" "$tmpfilesdir/dracut-tmpfiles.conf"
++
++
+     mkdir -p "$initdir/etc/systemd"
+     # turn off RateLimit for journal
+     {
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index b0ac08a..b490e82 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -4,6 +4,17 @@
+ 
+ export DRACUT_SYSTEMD
+ export NEWROOT
++if [ -n "$NEWROOT" ]; then
++    [ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT
++fi
++
++if ! [ -d /run/initramfs ]; then
++    mkdir -p -m 0755 /run/initramfs/log
++    ln -sfn /run/initramfs/log /var/log
++fi
++
++[ -d /run/lock ] || mkdir -p -m 0755 /run/lock
++[ -d /run/log ] || mkdir -p -m 0755 /run/log
+ 
+ debug_off() {
+     set +x
diff --git a/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch b/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch
new file mode 100644
index 0000000..201ab36
--- /dev/null
+++ b/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch
@@ -0,0 +1,40 @@
+From cf3098064c490486e867c389509a11908661fe9a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 1 Dec 2014 12:34:54 +0100
+Subject: [PATCH] dracut.sh: add $tmpfilesdir to install files to
+ /usr/lib/tmpfiles.d
+
+(cherry picked from commit 3a04bddeed15c810865aa49a2575bf13e651272d)
+---
+ dracut.sh | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 27c2bf4..6e56af5 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1152,6 +1152,14 @@ fi
+ 
+ [[ -d "$systemdsystemconfdir" ]] || systemdsystemconfdir=/etc/systemd/system
+ 
++[[ -d $tmpfilesdir ]] \
++    || tmpfilesdir=$(pkg-config systemd --variable=tmpfilesdir 2>/dev/null)
++
++if ! [[ -d "$tmpfilesdir" ]]; then
++    [[ -f /lib/tmpfiles.d ]] && tmpfilesdir=/lib/tmpfiles.d
++    [[ -f /usr/lib/tmpfiles.d ]] && tmpfilesdir=/usr/lib/tmpfiles.d
++fi
++
+ export initdir dracutbasedir \
+     dracutmodules force_add_dracutmodules add_dracutmodules omit_dracutmodules \
+     mods_to_load \
+@@ -1162,7 +1170,8 @@ export initdir dracutbasedir \
+     debug host_fs_types host_devs sshkey add_fstab \
+     DRACUT_VERSION udevdir prefix filesystems drivers \
+     systemdutildir systemdsystemunitdir systemdsystemconfdir \
+-    host_modalias host_modules hostonly_cmdline
++    host_modalias host_modules hostonly_cmdline loginstall \
++    tmpfilesdir
+ 
+ mods_to_load=""
+ # check all our modules to see if they should be sourced.
diff --git a/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch b/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch
new file mode 100644
index 0000000..99d062c
--- /dev/null
+++ b/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch
@@ -0,0 +1,38 @@
+From 10e5b14705e5bb732e66e8f08317529aa7bc8017 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 7 May 2015 14:42:10 +0200
+Subject: [PATCH] network:dhcp:wait_for_ipv6_dad() in PREINIT6
+
+---
+ modules.d/40network/dhclient-script.sh | 3 ++-
+ modules.d/40network/net-lib.sh         | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index 885303a..aef94d6 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -95,8 +95,9 @@ case $reason in
+         ;;
+ 
+     PREINIT6)
+-        echo "dhcp: PREINIT $netif up"
++        echo "dhcp: PREINIT6 $netif up"
+         linkup $netif
++        wait_for_ipv6_dad $netif
+         ;;
+ 
+     BOUND)
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 89b1101..220480b 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -522,7 +522,7 @@ wait_for_ipv6_dad() {
+     local cnt=0
+     local li
+     while [ $cnt -lt 500 ]; do
+-        li=$(ip -6 addr show dev $1)
++        li=$(ip -6 addr show dev $1 scope link)
+         strstr "$li" "tentative" || return 0
+         sleep 0.1
+         cnt=$(($cnt+1))
diff --git a/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch b/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch
new file mode 100644
index 0000000..59aec8b
--- /dev/null
+++ b/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch
@@ -0,0 +1,36 @@
+From e863891c154419932617e101ef5549dda41f6e62 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 7 May 2015 14:47:58 +0200
+Subject: [PATCH] network/net-lib.sh:iface_has_link() wait 5s for the carrier
+ to appear
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1088808
+---
+ modules.d/40network/net-lib.sh | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 220480b..1f77a15 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -556,13 +556,18 @@ hostname() {
+ }
+ 
+ iface_has_link() {
++    local cnt=0
+     local interface="$1" flags=""
+     [ -n "$interface" ] || return 2
+     interface="/sys/class/net/$interface"
+     [ -d "$interface" ] || return 2
+     linkup "$1"
+-    [ "$(cat $interface/carrier)" = 1 ] || return 1
+-    # XXX Do we need to reset the flags here? anaconda never bothered..
++    while [ $cnt -lt 50 ]; do
++        [ "$(cat $interface/carrier)" = 1 ] && return 0
++        sleep 0.1
++        cnt=$(($cnt+1))
++    done
++    return 1
+ }
+ 
+ find_iface_with_link() {
diff --git a/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch b/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch
new file mode 100644
index 0000000..52e6115
--- /dev/null
+++ b/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch
@@ -0,0 +1,51 @@
+From 1ad2884d82f15e9d1a6f3e24da42d56f47ebe949 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 16 Jun 2015 13:28:48 +0200
+Subject: [PATCH] dracut-pre-pivot: call udevadm settle one last time
+
+Some Hardware needs initialization and killing modprobe or modprobe
+scripts would harm the process.
+---
+ modules.d/98systemd/dracut-pre-pivot.service |  7 -------
+ modules.d/98systemd/dracut-pre-pivot.sh      | 12 ++++++++++++
+ 2 files changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/modules.d/98systemd/dracut-pre-pivot.service b/modules.d/98systemd/dracut-pre-pivot.service
+index d7c7b1d..f453900 100644
+--- a/modules.d/98systemd/dracut-pre-pivot.service
++++ b/modules.d/98systemd/dracut-pre-pivot.service
+@@ -16,13 +16,6 @@ Before=initrd-cleanup.service
+ Wants=remote-fs.target
+ After=remote-fs.target
+ ConditionPathExists=/etc/initrd-release
+-ConditionDirectoryNotEmpty=|/lib/dracut/hooks/pre-pivot
+-ConditionDirectoryNotEmpty=|/lib/dracut/hooks/cleanup
+-ConditionKernelCommandLine=|rd.break=pre-pivot
+-ConditionKernelCommandLine=|rd.break=cleanup
+-ConditionKernelCommandLine=|rd.break
+-ConditionPathExists=|/dev/root
+-ConditionPathExists=|/dev/nfs
+ 
+ [Service]
+ Environment=DRACUT_SYSTEMD=1
+diff --git a/modules.d/98systemd/dracut-pre-pivot.sh b/modules.d/98systemd/dracut-pre-pivot.sh
+index e62a1ce..afe3466 100755
+--- a/modules.d/98systemd/dracut-pre-pivot.sh
++++ b/modules.d/98systemd/dracut-pre-pivot.sh
+@@ -26,4 +26,16 @@ getarg rd.break -d rdbreak && emergency_shell -n switch_root "Break before switc
+ [ -h /dev/root ] && rm -f -- /dev/root
+ [ -h /dev/nfs ] && rm -f -- /dev/nfs
+ 
++udevadm settle
++
++cnt=0
++while ! udevadm settle --timeout=0; do
++    info "udev still not settled. Waiting."
++    udevadm settle
++    cnt=$(($cnt+1))
++    [ $cnt -gt 10 ] && break
++done
++
++udevadm control --exit
++
+ exit 0
diff --git a/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch b/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch
new file mode 100644
index 0000000..66dca53
--- /dev/null
+++ b/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch
@@ -0,0 +1,38 @@
+From 90b5b48734b8738fac217df1b2846997f532a0ea Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 2 Jul 2015 14:55:31 +0200
+Subject: [PATCH] dracut.sh: add devices with x-initrd.mount in /etc/fstab to
+ host_devs
+
+otherwise dracut might not even be able to mount those.
+
+(cherry picked from commit 916559e073a49eedbc7b0c58b399d303fb8c2a05)
+---
+ dracut.sh | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index 6e56af5..0e60022 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1061,6 +1061,20 @@ if [[ $hostonly ]]; then
+             done < /etc/fstab
+         done < /proc/swaps
+     fi
++
++    # collect all "x-initrd.mount" entries from /etc/fstab
++    if [[ -f /etc/fstab ]]; then
++        while read _d _m _t _o _r || [ -n "$_d" ]; do
++            [[ "$_d" == \#* ]] && continue
++            [[ $_d ]] || continue
++            [[ "$_o" != *x-initrd.mount* ]] && continue
++            _dev=$(expand_persistent_dev "$_d")
++            _dev="$(readlink -f "$_dev")"
++            [[ -b $_dev ]] && push host_devs "$_dev"
++        done < /etc/fstab
++    fi
++
++
+     # record all host modaliases
+     declare -A host_modalias
+     find  /sys/devices/ -name uevent -print > "$initdir/.modalias"
diff --git a/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch b/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch
new file mode 100644
index 0000000..1d0e192
--- /dev/null
+++ b/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch
@@ -0,0 +1,34 @@
+From e2b5b450e7aac101d12149fdf0623106799933ff Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 2 Jul 2015 15:02:31 +0200
+Subject: [PATCH] dracut-lib.sh:info() output info to stderr
+
+otherwise it might collide with stdout redirection
+
+(cherry picked from commit 57fb6e67de0cc58b9d188439b0ceb0d0d5dbbd6f)
+---
+ modules.d/99base/dracut-lib.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index b490e82..69f7079 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -51,7 +51,7 @@ if [ -z "$DRACUT_SYSTEMD" ]; then
+         check_quiet
+         echo "<30>dracut: $*" > /dev/kmsg
+         [ "$DRACUT_QUIET" != "yes" ] && \
+-            echo "dracut: $*"
++            echo "dracut: $*" >&2
+     }
+ 
+ else
+@@ -61,7 +61,7 @@ else
+     }
+ 
+     info() {
+-        echo "$*"
++        echo "$*" >&2
+     }
+ 
+ fi
diff --git a/SOURCES/0251-Factor-out-all-the-type-V-commands.patch b/SOURCES/0251-Factor-out-all-the-type-V-commands.patch
new file mode 100644
index 0000000..4928403
--- /dev/null
+++ b/SOURCES/0251-Factor-out-all-the-type-V-commands.patch
@@ -0,0 +1,696 @@
+From da3dacfa5e63ca00d4c8efd8c3c603bce7937cdd Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 6 Feb 2014 16:45:20 +0100
+Subject: [PATCH] Factor out all the "type -V" commands
+
+Add new functions require_binaries() and require_any_binary() to be used
+in the check() section of module-setup.sh.
+
+These functions print a warning line telling the user, which binary is
+missing for the specific dracut module.
+
+This unifies the way of checking for binaries and makes the life of an
+initramfs creator easier, if he wants to find out why a specific dracut
+module is not included in the initramfs.
+
+(cherry picked from commit 30e6e809ed8d189cc8374df3c28cfbcab5a299b9)
+---
+ dracut-functions.sh                           | 57 ++++++++++++++++++++++++---
+ modules.d/00bash/module-setup.sh              |  2 +-
+ modules.d/00bootchart/module-setup.sh         |  2 +-
+ modules.d/00dash/module-setup.sh              |  2 +-
+ modules.d/00systemd-bootchart/module-setup.sh |  2 +-
+ modules.d/02caps/module-setup.sh              | 14 ++++---
+ modules.d/03modsign/module-setup.sh           |  2 +-
+ modules.d/05busybox/module-setup.sh           |  2 +-
+ modules.d/10i18n/module-setup.sh              |  4 +-
+ modules.d/40network/module-setup.sh           |  7 +---
+ modules.d/45url-lib/module-setup.sh           |  2 +-
+ modules.d/50plymouth/module-setup.sh          |  2 +-
+ modules.d/90btrfs/module-setup.sh             |  2 +-
+ modules.d/90crypt/module-setup.sh             |  2 +-
+ modules.d/90dm/module-setup.sh                |  2 +-
+ modules.d/90dmraid/module-setup.sh            |  2 +-
+ modules.d/90lvm/module-setup.sh               |  2 +-
+ modules.d/90mdraid/module-setup.sh            |  2 +-
+ modules.d/90multipath/module-setup.sh         |  2 +-
+ modules.d/91crypt-gpg/module-setup.sh         |  2 +-
+ modules.d/91crypt-loop/module-setup.sh        | 21 ++++++----
+ modules.d/95cifs/module-setup.sh              |  2 +-
+ modules.d/95dasd/module-setup.sh              |  1 +
+ modules.d/95dasd_mod/module-setup.sh          |  1 +
+ modules.d/95fcoe-uefi/module-setup.sh         |  4 +-
+ modules.d/95fcoe/module-setup.sh              |  5 +--
+ modules.d/95iscsi/module-setup.sh             |  2 +-
+ modules.d/95nbd/module-setup.sh               |  2 +-
+ modules.d/95nfs/module-setup.sh               |  4 +-
+ modules.d/95ssh-client/module-setup.sh        |  6 +--
+ modules.d/95udev-rules/module-setup.sh        |  2 +-
+ modules.d/95zfcp/module-setup.sh              |  2 +
+ modules.d/95znet/module-setup.sh              |  2 +
+ modules.d/97biosdevname/module-setup.sh       |  2 +-
+ modules.d/97masterkey/module-setup.sh         |  2 +-
+ modules.d/98systemd/module-setup.sh           |  2 +-
+ modules.d/99img-lib/module-setup.sh           |  4 +-
+ 37 files changed, 112 insertions(+), 66 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 89438b2..4ea3204 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -35,6 +35,51 @@ fi
+ # Generic substring function.  If $2 is in $1, return 0.
+ strstr() { [[ $1 = *$2* ]]; }
+ 
++# helper function for check() in module-setup.sh
++# to check for required installed binaries
++# issues a standardized warning message
++require_binaries() {
++    local _module_name="${moddir##*/}"
++    local _ret=0
++
++    if [[ "$1" = "-m" ]]; then
++        _module_name="$2"
++        shift 2
++    fi
++
++    for cmd in "$@"; do
++        if ! find_binary "$cmd" &>/dev/null; then
++            dwarning "$_module_name: Could not find command '$cmd'!"
++            ((_ret++))
++        fi
++    done
++    return $_ret
++}
++
++require_any_binary() {
++    local _module_name="${moddir##*/}"
++    local _ret=1
++
++    if [[ "$1" = "-m" ]]; then
++        _module_name="$2"
++        shift 2
++    fi
++
++    for cmd in "$@"; do
++        if find_binary "$cmd" &>/dev/null; then
++            _ret=0
++            break
++        fi
++    done
++
++    if (( $_ret != 0 )); then
++        dwarning "$_module_name: Could not find any command of '$@'!"
++        return 1
++    fi
++
++    return 0
++}
++
+ # find a binary.  If we were not passed the full path directly,
+ # search in the usual places to find the binary.
+ find_binary() {
+@@ -1055,7 +1100,7 @@ module_check() {
+         . $_moddir/module-setup.sh
+         is_func check || return 0
+         [ $_forced -ne 0 ] && unset hostonly
+-        check $hostonly
++        moddir=$_moddir check $hostonly
+         _ret=$?
+         unset check depends cmdline install installkernel
+     fi
+@@ -1081,7 +1126,7 @@ module_check_mount() {
+         unset check depends cmdline install installkernel
+         check() { false; }
+         . $_moddir/module-setup.sh
+-        check 0
++        moddir=$_moddir check 0
+         _ret=$?
+         unset check depends cmdline install installkernel
+     fi
+@@ -1105,7 +1150,7 @@ module_depends() {
+         unset check depends cmdline install installkernel
+         depends() { true; }
+         . $_moddir/module-setup.sh
+-        depends
++        moddir=$_moddir depends
+         _ret=$?
+         unset check depends cmdline install installkernel
+         return $_ret
+@@ -1126,7 +1171,7 @@ module_cmdline() {
+         unset check depends cmdline install installkernel
+         cmdline() { true; }
+         . $_moddir/module-setup.sh
+-        cmdline
++        moddir=$_moddir cmdline
+         _ret=$?
+         unset check depends cmdline install installkernel
+         return $_ret
+@@ -1147,7 +1192,7 @@ module_install() {
+         unset check depends cmdline install installkernel
+         install() { true; }
+         . $_moddir/module-setup.sh
+-        install
++        moddir=$_moddir install
+         _ret=$?
+         unset check depends cmdline install installkernel
+         return $_ret
+@@ -1168,7 +1213,7 @@ module_installkernel() {
+         unset check depends cmdline install installkernel
+         installkernel() { true; }
+         . $_moddir/module-setup.sh
+-        installkernel
++        moddir=$_moddir installkernel
+         _ret=$?
+         unset check depends cmdline install installkernel
+         return $_ret
+diff --git a/modules.d/00bash/module-setup.sh b/modules.d/00bash/module-setup.sh
+index e874e73..109642a 100755
+--- a/modules.d/00bash/module-setup.sh
++++ b/modules.d/00bash/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    [ -x /bin/bash ]
++    require_binaries /bin/bash
+ }
+ 
+ depends() {
+diff --git a/modules.d/00bootchart/module-setup.sh b/modules.d/00bootchart/module-setup.sh
+index 72b6063..f03fc54 100755
+--- a/modules.d/00bootchart/module-setup.sh
++++ b/modules.d/00bootchart/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ "$mount_needs" ]] && return 1
+-    [ -x /sbin/bootchartd ] || return 1
++    require_binaries /sbin/bootchartd || return 1
+     return 255
+ }
+ 
+diff --git a/modules.d/00dash/module-setup.sh b/modules.d/00dash/module-setup.sh
+index dfd4d7b..9a2a92f 100755
+--- a/modules.d/00dash/module-setup.sh
++++ b/modules.d/00dash/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    [ -x /bin/dash ]
++    require_binaries /bin/dash
+ }
+ 
+ depends() {
+diff --git a/modules.d/00systemd-bootchart/module-setup.sh b/modules.d/00systemd-bootchart/module-setup.sh
+index 3eb4de1..eb6f383 100755
+--- a/modules.d/00systemd-bootchart/module-setup.sh
++++ b/modules.d/00systemd-bootchart/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ "$mount_needs" ]] && return 1
+-    [ -x $systemdutildir/systemd-bootchart ] || return 1
++    require_binaries $systemdutildir/systemd-bootchart || return 1
+     return 255
+ }
+ 
+diff --git a/modules.d/02caps/module-setup.sh b/modules.d/02caps/module-setup.sh
+index c9d94ee..73eb215 100755
+--- a/modules.d/02caps/module-setup.sh
++++ b/modules.d/02caps/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    type -P capsh >/dev/null 2>&1
++    require_binaries capsh
+ }
+ 
+ depends() {
+@@ -11,9 +11,13 @@ depends() {
+ }
+ 
+ install() {
+-    inst_hook pre-pivot 00 "$moddir/caps.sh"
+-    inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh
+-    # capsh wants bash and we need bash also
+-    inst /bin/bash
++    if ! dracut_module_included "systemd"; then
++        inst_hook pre-pivot 00 "$moddir/caps.sh"
++        inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh
++        # capsh wants bash and we need bash also
++        inst /bin/bash
++    else
++        dwarning "caps: does not work with systemd in the initramfs"
++    fi
+ }
+ 
+diff --git a/modules.d/03modsign/module-setup.sh b/modules.d/03modsign/module-setup.sh
+index 730cd86..bed5cfe 100755
+--- a/modules.d/03modsign/module-setup.sh
++++ b/modules.d/03modsign/module-setup.sh
+@@ -8,7 +8,7 @@
+ # Peter Jones <pjones@redhat.com>
+ 
+ check() {
+-    [[ -x /usr/bin/keyctl ]] || return 1
++    require_binaries keyctl || return 1
+ 
+     # do not include module in hostonly mode,
+     # if no keys are present
+diff --git a/modules.d/05busybox/module-setup.sh b/modules.d/05busybox/module-setup.sh
+index edcc8da..c35ab2e 100755
+--- a/modules.d/05busybox/module-setup.sh
++++ b/modules.d/05busybox/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    type -P busybox >/dev/null || return 1
++    require_binaries busybox || return 1
+ 
+     return 255
+ }
+diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh
+index 413ee12..2c0a275 100755
+--- a/modules.d/10i18n/module-setup.sh
++++ b/modules.d/10i18n/module-setup.sh
+@@ -5,9 +5,7 @@
+ check() {
+     [[ "$mount_needs" ]] && return 1
+ 
+-    for i in setfont loadkeys kbd_mode; do
+-        type -P "$i" >/dev/null || return 1
+-    done
++    require_binaries setfont loadkeys kbd_mode || return 1
+ 
+     return 0
+ }
+diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
+index a52e881..3134b5f 100755
+--- a/modules.d/40network/module-setup.sh
++++ b/modules.d/40network/module-setup.sh
+@@ -5,12 +5,7 @@
+ check() {
+     local _program
+ 
+-    for _program in ip arping dhclient ; do
+-        if ! type -P $_program >/dev/null; then
+-            derror "Could not find program \"$_program\" required by network."
+-            return 1
+-        fi
+-    done
++    require_binaries ip arping dhclient || return 1
+ 
+     return 255
+ }
+diff --git a/modules.d/45url-lib/module-setup.sh b/modules.d/45url-lib/module-setup.sh
+index b5cf36f..f2d068b 100755
+--- a/modules.d/45url-lib/module-setup.sh
++++ b/modules.d/45url-lib/module-setup.sh
+@@ -2,7 +2,7 @@
+ # module-setup for url-lib
+ 
+ check() {
+-    command -v curl >/dev/null || return 1
++    require_binaries curl || return 1
+     return 255
+ }
+ 
+diff --git a/modules.d/50plymouth/module-setup.sh b/modules.d/50plymouth/module-setup.sh
+index e0e6936..961c1e3 100755
+--- a/modules.d/50plymouth/module-setup.sh
++++ b/modules.d/50plymouth/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ "$mount_needs" ]] && return 1
+-    type -P plymouthd >/dev/null && type -P plymouth >/dev/null
++    require_binaries plymouthd plymouth
+ }
+ 
+ depends() {
+diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh
+index a280594..4804f58 100755
+--- a/modules.d/90btrfs/module-setup.sh
++++ b/modules.d/90btrfs/module-setup.sh
+@@ -6,7 +6,7 @@ check() {
+     local _rootdev
+     # if we don't have btrfs installed on the host system,
+     # no point in trying to support it in the initramfs.
+-    type -P btrfs >/dev/null || return 1
++    require_binaries btrfs || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
+index 272e527..dbc87a4 100755
+--- a/modules.d/90crypt/module-setup.sh
++++ b/modules.d/90crypt/module-setup.sh
+@@ -5,7 +5,7 @@
+ check() {
+     local _rootdev
+     # if cryptsetup is not installed, then we cannot support encrypted devices.
+-    type -P cryptsetup >/dev/null || return 1
++    require_binaries cryptsetup || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in "${host_fs_types[@]}"; do
+diff --git a/modules.d/90dm/module-setup.sh b/modules.d/90dm/module-setup.sh
+index 1fd9298..ed94f43 100755
+--- a/modules.d/90dm/module-setup.sh
++++ b/modules.d/90dm/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    type -P dmsetup >/dev/null || return 1
++    require_binaries dmsetup || return 1
+     return 255
+ }
+ 
+diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
+index b230cb0..8ca69aa 100755
+--- a/modules.d/90dmraid/module-setup.sh
++++ b/modules.d/90dmraid/module-setup.sh
+@@ -6,7 +6,7 @@ check() {
+     local _rootdev
+     # if we don't have dmraid installed on the host system, no point
+     # in trying to support it in the initramfs.
+-    type -P dmraid >/dev/null || return 1
++    require_binaries dmraid || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for dev in "${!host_fs_types[@]}"; do
+diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
+index 0c5890a..5ec6281 100755
+--- a/modules.d/90lvm/module-setup.sh
++++ b/modules.d/90lvm/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     # No point trying to support lvm if the binaries are missing
+-    type -P lvm >/dev/null || return 1
++    require_binaries lvm || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in "${host_fs_types[@]}"; do
+diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
+index 815a3eb..2092dae 100755
+--- a/modules.d/90mdraid/module-setup.sh
++++ b/modules.d/90mdraid/module-setup.sh
+@@ -5,7 +5,7 @@
+ check() {
+     local _rootdev
+     # No mdadm?  No mdraid support.
+-    type -P mdadm >/dev/null || return 1
++    require_binaries mdadm || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for dev in "${!host_fs_types[@]}"; do
+diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh
+index feb58dc..d37f958 100755
+--- a/modules.d/90multipath/module-setup.sh
++++ b/modules.d/90multipath/module-setup.sh
+@@ -5,7 +5,7 @@
+ check() {
+     local _rootdev
+     # if there's no multipath binary, no go.
+-    type -P multipath >/dev/null || return 1
++    require_binaries multipath || return 1
+ 
+     is_mpath() {
+         local _dev=$1
+diff --git a/modules.d/91crypt-gpg/module-setup.sh b/modules.d/91crypt-gpg/module-setup.sh
+index 43a5a00..17b58f1 100755
+--- a/modules.d/91crypt-gpg/module-setup.sh
++++ b/modules.d/91crypt-gpg/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ # GPG support is optional
+ check() {
+-    type -P gpg >/dev/null || return 1
++    require_binaries gpg || return 1
+ 
+     return 255
+ }
+diff --git a/modules.d/91crypt-loop/module-setup.sh b/modules.d/91crypt-loop/module-setup.sh
+index c14fd45..d0a4956 100644
+--- a/modules.d/91crypt-loop/module-setup.sh
++++ b/modules.d/91crypt-loop/module-setup.sh
+@@ -1,19 +1,24 @@
++#!/bin/bash
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++# called by dracut
+ check() {
+-	type -P losetup >/dev/null || return 1
+-	
+-	return 255
++    require_binaries losetup || return 1
++
++    return 255
+ }
+ 
+ depends() {
+-	echo crypt
++    echo crypt
+ }
+ 
+ installkernel() {
+-	    instmods loop
++    instmods loop
+ }
+ 
+ install() {
+-	inst_multiple losetup
+-	inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
+-        dracut_need_initqueue
++    inst_multiple losetup
++    inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
++    dracut_need_initqueue
+ }
+diff --git a/modules.d/95cifs/module-setup.sh b/modules.d/95cifs/module-setup.sh
+index c17b973..9e36f87 100755
+--- a/modules.d/95cifs/module-setup.sh
++++ b/modules.d/95cifs/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     # If our prerequisites are not met, fail anyways.
+-    type -P mount.cifs >/dev/null || return 1
++    require_binaries mount.cifs || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+diff --git a/modules.d/95dasd/module-setup.sh b/modules.d/95dasd/module-setup.sh
+index 3b8396d..70b2fcc 100755
+--- a/modules.d/95dasd/module-setup.sh
++++ b/modules.d/95dasd/module-setup.sh
+@@ -5,6 +5,7 @@
+ check() {
+     local _arch=$(uname -m)
+     [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
++    require_binaries normalize_dasd_arg || return 1
+     return 0
+ }
+ 
+diff --git a/modules.d/95dasd_mod/module-setup.sh b/modules.d/95dasd_mod/module-setup.sh
+index 9c9eeea..d20764e 100755
+--- a/modules.d/95dasd_mod/module-setup.sh
++++ b/modules.d/95dasd_mod/module-setup.sh
+@@ -5,6 +5,7 @@
+ check() {
+     local _arch=$(uname -m)
+     [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
++    require_binaries grep sed seq
+ 
+     return 0
+ }
+diff --git a/modules.d/95fcoe-uefi/module-setup.sh b/modules.d/95fcoe-uefi/module-setup.sh
+index c91f775..0fb06e2 100755
+--- a/modules.d/95fcoe-uefi/module-setup.sh
++++ b/modules.d/95fcoe-uefi/module-setup.sh
+@@ -4,9 +4,7 @@
+ 
+ # called by dracut
+ check() {
+-    for i in dcbtool fipvlan lldpad ip readlink; do
+-        type -P $i >/dev/null || return 1
+-    done
++    require_binaries dcbtool fipvlan lldpad ip readlink || return 1
+     return 0
+ }
+ 
+diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh
+index 3ffaf5a..8c6290d 100755
+--- a/modules.d/95fcoe/module-setup.sh
++++ b/modules.d/95fcoe/module-setup.sh
+@@ -3,10 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    for i in dcbtool fipvlan lldpad ip readlink; do
+-        type -P $i >/dev/null || return 1
+-    done
+-
++    require_binaries dcbtool fipvlan lldpad ip readlink || return 1
+     return 0
+ }
+ 
+diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
+index c6901c0..49f9a0e 100755
+--- a/modules.d/95iscsi/module-setup.sh
++++ b/modules.d/95iscsi/module-setup.sh
+@@ -5,7 +5,7 @@
+ check() {
+     local _rootdev
+     # If our prerequisites are not met, fail anyways.
+-    type -P iscsistart hostname iscsi-iname >/dev/null || return 1
++    require_binaries iscsistart hostname iscsi-iname || return 1
+ 
+     # If hostonly was requested, fail the check if we are not actually
+     # booting from root.
+diff --git a/modules.d/95nbd/module-setup.sh b/modules.d/95nbd/module-setup.sh
+index 3ac00f6..7e8a416 100755
+--- a/modules.d/95nbd/module-setup.sh
++++ b/modules.d/95nbd/module-setup.sh
+@@ -5,7 +5,7 @@
+ check() {
+     local _rootdev
+     # If our prerequisites are not met, fail.
+-    type -P nbd-client >/dev/null || return 1
++    require_binaries nbd-client || return 1
+ 
+     # if an nbd device is not somewhere in the chain of devices root is
+     # mounted on, fail the hostonly check.
+diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
+index 75beb74..02838a4 100755
+--- a/modules.d/95nfs/module-setup.sh
++++ b/modules.d/95nfs/module-setup.sh
+@@ -4,8 +4,8 @@
+ 
+ check() {
+     # If our prerequisites are not met, fail anyways.
+-    type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1
+-    type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1
++    require_any_binary rpcbind portmap || return 1
++    require_binaries rpc.statd mount.nfs mount.nfs4 umount || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+diff --git a/modules.d/95ssh-client/module-setup.sh b/modules.d/95ssh-client/module-setup.sh
+index c7d8ee2..6b44107 100755
+--- a/modules.d/95ssh-client/module-setup.sh
++++ b/modules.d/95ssh-client/module-setup.sh
+@@ -5,11 +5,11 @@
+ # fixme: assume user is root
+ 
+ check() {
+-    # If our prerequisites are not met, fail.
+-    type -P ssh >/dev/null || return 1
+-    type -P scp >/dev/null || return 1
+     [[ $mount_needs ]] && return 1
+ 
++    # If our prerequisites are not met, fail.
++    require_binaries ssh scp  || return 1
++
+     if [[ $sshkey ]]; then
+         [ ! -f $sshkey ] && {
+             derror "ssh key: $sshkey is not found!"
+diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh
+index 094479a..fdea8c6 100755
+--- a/modules.d/95udev-rules/module-setup.sh
++++ b/modules.d/95udev-rules/module-setup.sh
+@@ -5,7 +5,7 @@
+ install() {
+     local _i
+ 
+-    # Fixme: would be nice if we didn't have to know which rules to grab....
++    # Fixme: would be nice if we didn't have to guess, which rules to grab....
+     # ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies
+     # of the rules we want so that we just copy those in would be best
+     inst_multiple udevadm cat uname blkid \
+diff --git a/modules.d/95zfcp/module-setup.sh b/modules.d/95zfcp/module-setup.sh
+index 9906695..d19eba4 100755
+--- a/modules.d/95zfcp/module-setup.sh
++++ b/modules.d/95zfcp/module-setup.sh
+@@ -6,6 +6,8 @@ check() {
+     arch=$(uname -m)
+     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
+ 
++    require_binaries zfcp_cio_free grep sed seq || return 1
++
+     return 0
+ }
+ 
+diff --git a/modules.d/95znet/module-setup.sh b/modules.d/95znet/module-setup.sh
+index 16f8493..b052ec3 100755
+--- a/modules.d/95znet/module-setup.sh
++++ b/modules.d/95znet/module-setup.sh
+@@ -6,6 +6,8 @@ check() {
+     arch=$(uname -m)
+     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
+ 
++    require_binaries znet_cio_free grep sed seq readlink || return 1
++
+     return 0
+ }
+ 
+diff --git a/modules.d/97biosdevname/module-setup.sh b/modules.d/97biosdevname/module-setup.sh
+index 4a0b4f4..fd4d463 100755
+--- a/modules.d/97biosdevname/module-setup.sh
++++ b/modules.d/97biosdevname/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ "$mount_needs" ]] && return 1
+-    type -P biosdevname >/dev/null || return 1
++    require_binaries biosdevname || return 1
+     return 0
+ }
+ 
+diff --git a/modules.d/97masterkey/module-setup.sh b/modules.d/97masterkey/module-setup.sh
+index a94c4f5..cda6e80 100755
+--- a/modules.d/97masterkey/module-setup.sh
++++ b/modules.d/97masterkey/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ $hostonly ]] && {
+-        [ -x "/bin/keyctl" ] || return 1
++        require_binaries keyctl uname || return 1
+     }
+ 
+     return 255
+diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
+index aae0319..d0271f1 100755
+--- a/modules.d/98systemd/module-setup.sh
++++ b/modules.d/98systemd/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     [[ $mount_needs ]] && return 1
+-    if [[ -x $systemdutildir/systemd ]]; then
++    if require_binaries $systemdutildir/systemd; then
+         SYSTEMD_VERSION=$($systemdutildir/systemd --version | { read a b a; echo $b; })
+         (( $SYSTEMD_VERSION >= 198 )) && return 0
+        return 255
+diff --git a/modules.d/99img-lib/module-setup.sh b/modules.d/99img-lib/module-setup.sh
+index 28bfc2a..a951b93 100755
+--- a/modules.d/99img-lib/module-setup.sh
++++ b/modules.d/99img-lib/module-setup.sh
+@@ -2,9 +2,7 @@
+ # module-setup for img-lib
+ 
+ check() {
+-    for cmd in tar gzip dd; do
+-        command -v $cmd >/dev/null || return 1
+-    done
++    require_binaries tar gzip dd bash || return 1
+     return 255
+ }
+ 
diff --git a/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch b/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch
new file mode 100644
index 0000000..15e71f5
--- /dev/null
+++ b/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch
@@ -0,0 +1,51 @@
+From efe5301ab91a0e871f2c68faf1f835f306388690 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 1 Jul 2015 14:53:33 +0200
+Subject: [PATCH] network/dhclient-script.sh: add RENEW/REBIND
+
+(cherry picked from commit cf627b20d039c527f4de167e38978d4984e4d727)
+---
+ modules.d/40network/dhclient-script.sh | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index aef94d6..d96f7d9 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -131,6 +131,17 @@ case $reason in
+         >/tmp/net.$netif.up
+         ;;
+ 
++    RENEW|REBIND)
++        unset lease_time
++        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
++        [ -n "$new_max_life" ] && lease_time=$new_max_life
++        preferred_lft=$lease_time
++        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
++        ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \
++           ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
++           >/dev/null 2>&1
++        ;;
++
+     BOUND6)
+         echo "dhcp: BOND6 setting $netif"
+         setup_interface6
+@@ -151,6 +162,18 @@ case $reason in
+         echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
+         >/tmp/net.$netif.up
+         ;;
++
++    RENEW6|REBIND6)
++        unset lease_time
++        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
++        [ -n "$new_max_life" ] && lease_time=$new_max_life
++        preferred_lft=$lease_time
++        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
++        ip -6 addr change ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} scope global \
++           ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
++           >/dev/null 2>&1
++        ;;
++
+     *) echo "dhcp: $reason";;
+ esac
+ 
diff --git a/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch b/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch
new file mode 100644
index 0000000..86a866a
--- /dev/null
+++ b/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch
@@ -0,0 +1,44 @@
+From 4ec362ce0ba3fc8b10df83c015d88e002f8ccd36 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 1 Jul 2015 14:57:15 +0200
+Subject: [PATCH] network/dhclient-script.sh: make IPv4 DHCP lease time
+ optionally
+
+If bootp is used, no lease time is provided in the packet from the bootp
+server.
+
+(cherry picked from commit 0f89ec314b062a410199251db0356a55b4773173)
+---
+ modules.d/40network/dhclient-script.sh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index d96f7d9..7972af9 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -23,7 +23,11 @@ setup_interface() {
+     search=$(printf -- "$new_domain_search")
+     namesrv=$new_domain_name_servers
+     hostname=$new_host_name
+-    lease_time=$new_dhcp_lease_time
++
++    [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
++    [ -n "$new_max_life" ] && lease_time=$new_max_life
++    preferred_lft=$lease_time
++    [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+ 
+     [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
+ 
+@@ -41,9 +45,9 @@ setup_interface() {
+         fi
+     fi
+ 
+-    ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} \
+-        valid_lft ${lease_time} preferred_lft ${lease_time} \
+-        dev $netif
++    ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} dev $netif \
++        ${lease_time:+valid_lft $lease_time} \
++        ${preferred_lft:+preferred_lft ${preferred_lft}}
+ 
+     [ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw
+ 
diff --git a/SOURCES/0254-network-don-t-use-ifup-m.patch b/SOURCES/0254-network-don-t-use-ifup-m.patch
new file mode 100644
index 0000000..d17aaef
--- /dev/null
+++ b/SOURCES/0254-network-don-t-use-ifup-m.patch
@@ -0,0 +1,46 @@
+From 00c118a93a154d8ee7469331da2868db6c76fcd2 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 2 Jul 2015 11:32:08 +0200
+Subject: [PATCH] network: don't use "ifup -m"
+
+"ifup -m" was thought to be used by humans in the emergency shell.
+Using it programatically shows some other flaw in the execution logic.
+
+Also, "ifup -m" was configuring the interface multiple times on "add"
+and "change" uevent, because the "$netif.did-setup" test was not
+executed.
+
+(cherry picked from commit 7cca5efdcea4f1431331cf7663fc6fb48a365cdf)
+---
+ modules.d/40network/ifup.sh         | 3 ++-
+ modules.d/40network/net-genrules.sh | 1 -
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index bd7db02..3cff725 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -82,9 +82,10 @@ fi
+ # disable manual ifup while netroot is set for simplifying our logic
+ # in netroot case we prefer netroot to bringup $netif automaticlly
+ [ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
+-[ -z "$netroot" ] && [ -z "$manualup" ] && exit 0
++
+ if [ -n "$manualup" ]; then
+     >/tmp/net.$netif.manualup
++    rm -f /tmp/net.${netif}.did-setup
+ else
+     [ -e /tmp/net.${netif}.did-setup ] && exit 0
+     [ -e /sys/class/net/$netif/address ] && \
+diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
+index 3664984..750a4d7 100755
+--- a/modules.d/40network/net-genrules.sh
++++ b/modules.d/40network/net-genrules.sh
+@@ -55,7 +55,6 @@ command -v fix_bootif >/dev/null || . /lib/net-lib.sh
+     fi
+ 
+     ifup='/sbin/ifup $env{INTERFACE}'
+-    [ -z "$netroot" ] && ifup="$ifup -m"
+ 
+     runcmd="RUN+=\"/sbin/initqueue --name ifup-\$env{INTERFACE} --unique --onetime $ifup\""
+ 
diff --git a/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch b/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch
new file mode 100644
index 0000000..1e180d8
--- /dev/null
+++ b/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch
@@ -0,0 +1,30 @@
+From fe15c6b6cb03f518c79d990b7054792e1d23c7ba Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 20 Mar 2015 15:48:15 +0100
+Subject: [PATCH] nfs/parse-nfsroot.sh: don't unset netroot, if not nfs
+
+(cherry picked from commit afcc697cb8c588eef68bb635f790991411209089)
+---
+ modules.d/95nfs/parse-nfsroot.sh | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh
+index 9fc2a8c..a84cd43 100755
+--- a/modules.d/95nfs/parse-nfsroot.sh
++++ b/modules.d/95nfs/parse-nfsroot.sh
+@@ -59,7 +59,14 @@ fi
+ 
+ case "$netroot" in
+     /dev/nfs) netroot=nfs;;
+-    /dev/*) unset netroot; return;;
++    /dev/*)
++        if [ -n "$oldnetroot" ]; then
++            netroot="$oldnetroot"
++        else
++            unset netroot
++        fi
++	return
++	;;
+     # LEGACY: root=<server-ip>:/<path
+     [0-9]*:/*|[0-9]*\.[0-9]*\.[0-9]*[!:]|/*)
+         netroot=nfs:$netroot;;
diff --git a/SOURCES/0256-Change-the-fs_passno-of-nfs-to-0.patch b/SOURCES/0256-Change-the-fs_passno-of-nfs-to-0.patch
new file mode 100644
index 0000000..e1a2b38
--- /dev/null
+++ b/SOURCES/0256-Change-the-fs_passno-of-nfs-to-0.patch
@@ -0,0 +1,37 @@
+From a218f3253c3c39c58d60d1a6696facf88f3e4be0 Mon Sep 17 00:00:00 2001
+From: Chao Fan <cfan@redhat.com>
+Date: Wed, 20 May 2015 18:07:14 +0800
+Subject: [PATCH] Change the fs_passno of nfs to 0
+
+There is a bug that kdump-initrd contains entry requesting nfs dump
+filesystem to get filesystemchecked. And there is an erro message said
+that nfs need be checked. But there's no fsck for nfs utility, e.g
+fsck.nfs like other file system. Whatever fs_passno 0 or 2 are passed,
+no fsck is executed at all for nfs mount.But in dracut, set it to be 2
+always, so the erro message appear and it should be set to 0.
+
+In the fstab,the sixth variable fs_passno stands for that the device need
+checked or not,and dracut set it to "2".To fix this issue, it should
+be "0" when the device is nfs.The third variable stands for the type of
+the filesystem and we can use it to judge whether the device is nfs.
+So when the third variable of fstab contains "nfs", the sixth variable
+fs_passno should be set to "0".
+
+Signed-off-by: Chao Fan <cfan@redhat.com>
+(cherry picked from commit 3586a7aa770016aeadb23257c27916fd009bec42)
+---
+ dracut.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index 0e60022..cc22a14 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1348,6 +1348,7 @@ if [[ $kernel_only != yes ]]; then
+         [ -z "${line[3]}" ] && line[3]="defaults"
+         [ -z "${line[4]}" ] && line[4]="0"
+         [ -z "${line[5]}" ] && line[5]="2"
++        strstr "${line[2]}" "nfs" && line[5]="0"
+         echo "${line[@]}" >> "${initdir}/etc/fstab"
+     done
+ 
diff --git a/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch b/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch
new file mode 100644
index 0000000..168ca64
--- /dev/null
+++ b/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch
@@ -0,0 +1,49 @@
+From 4350c73199b3d2ac1e22b5e2e093de12ca5ad598 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 2 Jul 2015 15:21:35 +0200
+Subject: [PATCH] nfs/nfs-lib.sh: add anaconda_nfsv6_to_var()
+
+add "nfs:[[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]]/path" style parsing
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1190098
+(cherry picked from commit ba665de454e7d6ef1da4ba95308fb9f65c7a9497)
+---
+ modules.d/95nfs/nfs-lib.sh | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/modules.d/95nfs/nfs-lib.sh b/modules.d/95nfs/nfs-lib.sh
+index bf7d044..4f24f69 100755
+--- a/modules.d/95nfs/nfs-lib.sh
++++ b/modules.d/95nfs/nfs-lib.sh
+@@ -17,6 +17,7 @@ nfs_to_var() {
+     # FIXME: local netif=${2:-$netif}?
+     case "$1" in
+         nfs://*) rfc2224_nfs_to_var "$1" ;;
++        nfs:*[*) anaconda_nfsv6_to_var "$1" ;;
+         nfs:*:*:/*) anaconda_nfs_to_var "$1" ;;
+         *) nfsroot_to_var "$1" ;;
+     esac
+@@ -86,6 +87,23 @@ anaconda_nfs_to_var() {
+     path="/${1##*:/}"
+ }
+ 
++# IPv6 nfs path will be treated separately
++anaconda_nfsv6_to_var() {
++    nfs="nfs"
++    path="$1:"
++    options="${path#*:/}"
++    path="/${options%%:*}"
++    server="${1#*nfs:}"
++    if str_starts $server '['; then
++        server="${server%:/*}"
++        options="${options#*:*}"
++    else
++        server="${server%:/*}"
++        options="${server%%:*}"
++        server="${server#*:}"
++    fi
++}
++
+ # nfsroot_from_dhcp NETIF
+ # fill in missing server/path from DHCP options.
+ nfsroot_from_dhcp() {
diff --git a/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch b/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch
new file mode 100644
index 0000000..40e8d03
--- /dev/null
+++ b/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch
@@ -0,0 +1,660 @@
+From 1211a10b959fea039f4c8718c3901ad63e4816d3 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 2 Jul 2015 15:40:13 +0200
+Subject: [PATCH] splitup dracut-init.sh from dracut-functions.sh
+
+other tools want to source dracut-functions.sh without any mkdir side
+effects.
+
+(cherry picked from commit 777f2db0373ccbc1a44fc2d960ecefbe50195055)
+---
+ Makefile                          |  1 +
+ dracut-functions.sh               |  9 ++-------
+ dracut-init.sh                    | 34 ++++++++++++++++++++++++++++++++++
+ dracut.sh                         |  8 ++++----
+ dracut.spec                       |  1 +
+ test/TEST-01-BASIC/test.sh        |  6 +++---
+ test/TEST-02-SYSTEMD/test.sh      |  6 +++---
+ test/TEST-03-USR-MOUNT/test.sh    |  6 +++---
+ test/TEST-04-FULL-SYSTEMD/test.sh |  6 +++---
+ test/TEST-10-RAID/test.sh         |  6 +++---
+ test/TEST-11-LVM/test.sh          |  6 +++---
+ test/TEST-12-RAID-DEG/test.sh     |  6 +++---
+ test/TEST-13-ENC-RAID-LVM/test.sh |  6 +++---
+ test/TEST-14-IMSM/test.sh         |  6 +++---
+ test/TEST-15-BTRFSRAID/test.sh    |  6 +++---
+ test/TEST-16-DMSQUASH/test.sh     |  4 ++--
+ test/TEST-17-LVM-THIN/test.sh     |  6 +++---
+ test/TEST-20-NFS/test.sh          |  6 +++---
+ test/TEST-30-ISCSI/test.sh        |  8 ++++----
+ test/TEST-40-NBD/test.sh          | 10 +++++-----
+ test/TEST-50-MULTINIC/test.sh     |  6 +++---
+ 21 files changed, 92 insertions(+), 61 deletions(-)
+ create mode 100644 dracut-init.sh
+
+diff --git a/Makefile b/Makefile
+index 5441d8f..18f5a88 100644
+--- a/Makefile
++++ b/Makefile
+@@ -106,6 +106,7 @@ install: dracut-version.sh
+ 	install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf
+ 	mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
+ 	mkdir -p $(DESTDIR)$(pkglibdir)/dracut.conf.d
++	install -m 0755 dracut-init.sh $(DESTDIR)$(pkglibdir)/dracut-init.sh
+ 	install -m 0755 dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions.sh
+ 	install -m 0755 dracut-version.sh $(DESTDIR)$(pkglibdir)/dracut-version.sh
+ 	ln -fs dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 4ea3204..31586ca 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -22,14 +22,9 @@
+ export LC_MESSAGES=C
+ 
+ if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then
+-    if ! [[ -d "$initdir/.kernelmodseen" ]]; then
+-        mkdir -p "$initdir/.kernelmodseen"
++    if [[ -d "$initdir/.kernelmodseen" ]]; then
++        DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen"
+     fi
+-    DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen"
+-fi
+-
+-if [[ $initdir ]] && ! [[ -d $initdir ]]; then
+-    mkdir -p "$initdir"
+ fi
+ 
+ # Generic substring function.  If $2 is in $1, return 0.
+diff --git a/dracut-init.sh b/dracut-init.sh
+new file mode 100644
+index 0000000..469e42a
+--- /dev/null
++++ b/dracut-init.sh
+@@ -0,0 +1,34 @@
++#!/bin/bash
++#
++# functions used by dracut and other tools.
++#
++# Copyright 2005-2009 Red Hat, Inc.  All rights reserved.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++#
++export LC_MESSAGES=C
++
++if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then
++    if ! [[ -d "$initdir/.kernelmodseen" ]]; then
++        mkdir -p "$initdir/.kernelmodseen"
++    fi
++    DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen"
++fi
++
++if [[ $initdir ]] && ! [[ -d $initdir ]]; then
++    mkdir -p "$initdir"
++fi
++
++[[ $dracutbasedir ]] || export dracutbasedir=${BASH_SOURCE%/*}
++. $dracutbasedir/dracut-functions.sh
+diff --git a/dracut.sh b/dracut.sh
+index cc22a14..a214f81 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -519,7 +519,7 @@ while :; do
+         -q|--quiet)    ((verbosity_mod_l--));;
+         -l|--local)
+                        allowlocal="yes"
+-                       [[ -f "$(readlink -f "${0%/*}")/dracut-functions.sh" ]] \
++                       [[ -f "$(readlink -f "${0%/*}")/dracut-init.sh" ]] \
+                            && dracutbasedir="$(readlink -f "${0%/*}")"
+                        ;;
+         -H|--hostonly|--host-only)
+@@ -841,10 +841,10 @@ if [[ $print_cmdline ]]; then
+     kmsgloglvl=0
+ fi
+ 
+-if [[ -f $dracutbasedir/dracut-functions.sh ]]; then
+-    . $dracutbasedir/dracut-functions.sh
++if [[ -f $dracutbasedir/dracut-init.sh ]]; then
++    . $dracutbasedir/dracut-init.sh
+ else
+-    printf "%s\n" "dracut: Cannot find $dracutbasedir/dracut-functions.sh." >&2
++    printf "%s\n" "dracut: Cannot find $dracutbasedir/dracut-init.sh." >&2
+     printf "%s\n" "dracut: Are you running from a git checkout?" >&2
+     printf "%s\n" "dracut: Try passing -l as an argument to $0" >&2
+     exit 1
+diff --git a/dracut.spec b/dracut.spec
+index 302cfc5..d22f586 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -296,6 +296,7 @@ rm -rf -- $RPM_BUILD_ROOT
+ %endif
+ %dir %{dracutlibdir}
+ %dir %{dracutlibdir}/modules.d
++%{dracutlibdir}/dracut-init.sh
+ %{dracutlibdir}/dracut-functions.sh
+ %{dracutlibdir}/dracut-functions
+ %{dracutlibdir}/dracut-version.sh
+diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
+index 02ebc23..642b250 100755
+--- a/test/TEST-01-BASIC/test.sh
++++ b/test/TEST-01-BASIC/test.sh
+@@ -29,7 +29,7 @@ test_setup() {
+     (
+ 	export initdir=$TESTDIR/overlay/source
+ 	mkdir -p $initdir
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ 	    umount strace less setsid
+@@ -51,7 +51,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -80,7 +80,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-02-SYSTEMD/test.sh b/test/TEST-02-SYSTEMD/test.sh
+index 2a8ed6b..4ebff83 100755
+--- a/test/TEST-02-SYSTEMD/test.sh
++++ b/test/TEST-02-SYSTEMD/test.sh
+@@ -25,7 +25,7 @@ test_setup() {
+     (
+ 	export initdir=$TESTDIR/overlay/source
+ 	mkdir -p $initdir
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ 	    umount strace less setsid
+@@ -47,7 +47,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mkfs.ext3 poweroff cp umount
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -76,7 +76,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-03-USR-MOUNT/test.sh b/test/TEST-03-USR-MOUNT/test.sh
+index b8231fe..e772352 100755
+--- a/test/TEST-03-USR-MOUNT/test.sh
++++ b/test/TEST-03-USR-MOUNT/test.sh
+@@ -55,7 +55,7 @@ test_setup() {
+     (
+ 	export initdir=$TESTDIR/overlay/source
+ 	mkdir -p $initdir
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ 	    umount strace less setsid
+@@ -78,7 +78,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -114,7 +114,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-04-FULL-SYSTEMD/test.sh b/test/TEST-04-FULL-SYSTEMD/test.sh
+index aa83122..3834238 100755
+--- a/test/TEST-04-FULL-SYSTEMD/test.sh
++++ b/test/TEST-04-FULL-SYSTEMD/test.sh
+@@ -57,7 +57,7 @@ test_setup() {
+     (
+ 	export initdir=$TESTDIR/overlay/source
+ 	mkdir -p $initdir
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 
+         for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run; do
+             if [ -L "/$d" ]; then
+@@ -221,7 +221,7 @@ EOF
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -256,7 +256,7 @@ EOF
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh
+index d79d5cd..cf474df 100755
+--- a/test/TEST-10-RAID/test.sh
++++ b/test/TEST-10-RAID/test.sh
+@@ -28,7 +28,7 @@ test_setup() {
+     (
+ 	export initdir=$TESTDIR/overlay/source
+ 	(mkdir -p "$initdir"; cd "$initdir"; mkdir -p dev sys proc etc var/run tmp run)
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -49,7 +49,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -77,7 +77,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst ./cryptroot-ask.sh /sbin/cryptroot-ask
+diff --git a/test/TEST-11-LVM/test.sh b/test/TEST-11-LVM/test.sh
+index 732d0c8..c3c27bc 100755
+--- a/test/TEST-11-LVM/test.sh
++++ b/test/TEST-11-LVM/test.sh
+@@ -24,7 +24,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -46,7 +46,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -69,7 +69,7 @@ test_setup() {
+     grep -F -m 1 -q dracut-root-block-created $TESTDIR/root.ext2 || return 1
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-12-RAID-DEG/test.sh b/test/TEST-12-RAID-DEG/test.sh
+index 87fe542..11f66b2 100755
+--- a/test/TEST-12-RAID-DEG/test.sh
++++ b/test/TEST-12-RAID-DEG/test.sh
+@@ -66,7 +66,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -87,7 +87,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount dd grep
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -120,7 +120,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-13-ENC-RAID-LVM/test.sh b/test/TEST-13-ENC-RAID-LVM/test.sh
+index 129620b..993f71d 100755
+--- a/test/TEST-13-ENC-RAID-LVM/test.sh
++++ b/test/TEST-13-ENC-RAID-LVM/test.sh
+@@ -62,7 +62,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -83,7 +83,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount grep
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -113,7 +113,7 @@ test_setup() {
+ 
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-14-IMSM/test.sh b/test/TEST-14-IMSM/test.sh
+index ad0cf7b..9465965 100755
+--- a/test/TEST-14-IMSM/test.sh
++++ b/test/TEST-14-IMSM/test.sh
+@@ -54,7 +54,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -76,7 +76,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount grep
+ 	inst_hook initqueue 01 ./create-root.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -104,7 +104,7 @@ test_setup() {
+     echo $MD_UUID > $TESTDIR/mduuid
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-15-BTRFSRAID/test.sh b/test/TEST-15-BTRFSRAID/test.sh
+index 71f5703..9b97136 100755
+--- a/test/TEST-15-BTRFSRAID/test.sh
++++ b/test/TEST-15-BTRFSRAID/test.sh
+@@ -26,7 +26,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -47,7 +47,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mkfs.btrfs poweroff cp umount
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -77,7 +77,7 @@ test_setup() {
+ 
+    (
+         export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-16-DMSQUASH/test.sh b/test/TEST-16-DMSQUASH/test.sh
+index 252e845..c08a2a4 100755
+--- a/test/TEST-16-DMSQUASH/test.sh
++++ b/test/TEST-16-DMSQUASH/test.sh
+@@ -30,7 +30,7 @@ test_setup() {
+     mkdir -p -- "$TESTDIR"/overlay
+     (
+ 	export initdir="$TESTDIR"/overlay
+-	. "$basedir"/dracut-functions.sh
++	. "$basedir"/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -48,7 +48,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir="$TESTDIR"/root-source
+-	. "$basedir"/dracut-functions.sh
++	. "$basedir"/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ 	    umount strace less
+diff --git a/test/TEST-17-LVM-THIN/test.sh b/test/TEST-17-LVM-THIN/test.sh
+index 4c904b0..79e224e 100755
+--- a/test/TEST-17-LVM-THIN/test.sh
++++ b/test/TEST-17-LVM-THIN/test.sh
+@@ -24,7 +24,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+ 	export initdir=$TESTDIR/overlay/source
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ 	    mount dmesg ifconfig dhclient mkdir cp ping dhclient
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -46,7 +46,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple sfdisk mke2fs poweroff cp umount
+ 	inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -69,7 +69,7 @@ test_setup() {
+     grep -F -m 1 -q dracut-root-block-created $TESTDIR/root.ext2 || return 1
+     (
+ 	export initdir=$TESTDIR/overlay
+-	. $basedir/dracut-functions.sh
++	. $basedir/dracut-init.sh
+ 	inst_multiple poweroff shutdown
+ 	inst_hook emergency 000 ./hard-off.sh
+ 	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh
+index 7b5e3c5..14350e9 100755
+--- a/test/TEST-20-NFS/test.sh
++++ b/test/TEST-20-NFS/test.sh
+@@ -221,7 +221,7 @@ test_setup() {
+ 
+     (
+         export initdir=$TESTDIR/mnt
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+ 
+         for _f in modules.builtin.bin modules.builtin; do
+             [[ $srcmods/$_f ]] && break
+@@ -287,7 +287,7 @@ test_setup() {
+     # Make client root inside server root
+     (
+         export initdir=$TESTDIR/mnt/nfs/client
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+ 
+         inst_multiple sh shutdown poweroff stty cat ps ln ip \
+             mount dmesg mkdir cp ping grep
+@@ -331,7 +331,7 @@ test_setup() {
+     # Make an overlay with needed tools for the test harness
+     (
+         export initdir=$TESTDIR/overlay
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         mkdir $TESTDIR/overlay
+         inst_multiple poweroff shutdown
+         inst_hook emergency 000 ./hard-off.sh
+diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh
+index f597783..a258c04 100755
+--- a/test/TEST-30-ISCSI/test.sh
++++ b/test/TEST-30-ISCSI/test.sh
+@@ -104,7 +104,7 @@ test_setup() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+         export initdir=$TESTDIR/overlay/source
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         inst_multiple sh shutdown poweroff stty cat ps ln ip \
+             mount dmesg mkdir cp ping grep
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -121,7 +121,7 @@ test_setup() {
+     # second, install the files needed to make the root filesystem
+     (
+         export initdir=$TESTDIR/overlay
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         inst_multiple sfdisk mkfs.ext3 poweroff cp umount
+         inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -157,7 +157,7 @@ test_setup() {
+     rm -- $TESTDIR/client.img
+     (
+         export initdir=$TESTDIR/overlay
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         inst_multiple poweroff shutdown
+         inst_hook emergency 000 ./hard-off.sh
+         inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -177,7 +177,7 @@ test_setup() {
+     kernel=$KVERSION
+     (
+         export initdir=$TESTDIR/mnt
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         (
+             cd "$initdir";
+             mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi
+diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh
+index 59494ed..abf1a4f 100755
+--- a/test/TEST-40-NBD/test.sh
++++ b/test/TEST-40-NBD/test.sh
+@@ -195,7 +195,7 @@ make_encrypted_root() {
+     # Create what will eventually be our root filesystem onto an overlay
+     (
+         export initdir=$TESTDIR/overlay/source
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         mkdir -p "$initdir"
+         (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+         inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
+@@ -214,7 +214,7 @@ make_encrypted_root() {
+     # second, install the files needed to make the root filesystem
+     (
+         export initdir=$TESTDIR/overlay
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         inst_multiple mke2fs poweroff cp umount tune2fs
+         inst_hook emergency 000 ./hard-off.sh
+         inst_hook initqueue 01 ./create-root.sh
+@@ -253,7 +253,7 @@ make_client_root() {
+     kernel=$KVERSION
+     (
+         export initdir=$TESTDIR/mnt
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         mkdir -p "$initdir"
+         (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+         inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+@@ -288,7 +288,7 @@ make_server_root() {
+     kernel=$KVERSION
+     (
+         export initdir=$TESTDIR/mnt
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         mkdir -p "$initdir"
+         (
+             cd "$initdir";
+@@ -335,7 +335,7 @@ test_setup() {
+     # Make the test image
+     (
+         export initdir=$TESTDIR/overlay
+-        . $basedir/dracut-functions.sh
++        . $basedir/dracut-init.sh
+         inst_multiple poweroff shutdown
+         inst_hook emergency 000 ./hard-off.sh
+         inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh
+index 3c6003b..4f73203 100755
+--- a/test/TEST-50-MULTINIC/test.sh
++++ b/test/TEST-50-MULTINIC/test.sh
+@@ -150,7 +150,7 @@ test_setup() {
+ 
+     (
+         export initdir="$TESTDIR"/mnt
+-        . "$basedir"/dracut-functions.sh
++        . "$basedir"/dracut-init.sh
+ 
+         (
+             cd "$initdir";
+@@ -216,7 +216,7 @@ test_setup() {
+     # Make client root inside server root
+     (
+         export initdir="$TESTDIR"/mnt/nfs/client
+-        . "$basedir"/dracut-functions.sh
++        . "$basedir"/dracut-init.sh
+         inst_multiple sh shutdown poweroff stty cat ps ln ip \
+             mount dmesg mkdir cp ping grep ls
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+@@ -256,7 +256,7 @@ test_setup() {
+     # Make an overlay with needed tools for the test harness
+     (
+         export initdir="$TESTDIR"/overlay
+-        . "$basedir"/dracut-functions.sh
++        . "$basedir"/dracut-init.sh
+         inst_multiple poweroff shutdown
+         inst_hook emergency 000 ./hard-off.sh
+         inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
diff --git a/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch b/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch
new file mode 100644
index 0000000..8ca30d5
--- /dev/null
+++ b/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch
@@ -0,0 +1,173 @@
+From b9c6d2b2afa94dcba7129390edb7b1a2eaf2c31c Mon Sep 17 00:00:00 2001
+From: Major Hayden <major@mhtx.net>
+Date: Mon, 4 Aug 2014 10:27:36 -0500
+Subject: [PATCH] Adding support for read/write filesystem images
+
+A user can provide a filesystem image (rootfs.img) inside a compressed
+tarball and that filesystem image will be mounted read/write.  This provides
+some benefits over a device mapper snapshot overlay, especially when the
+live system becomes full.  The boot command line simple needs
+"rd.writable.fsimg" added to utilize this feature.
+
+Additional documentation for this option as well as other live boot
+options is included.
+
+Signed-off-by: Major Hayden <major@mhtx.net>
+(cherry picked from commit 504c0a8feca7d7ef470e4483a68cbaf9cb7df2bf)
+---
+ dracut.cmdline.7.asc                            | 82 ++++++++++++++++++++++++-
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 16 ++++-
+ modules.d/90dmsquash-live/module-setup.sh       |  2 +-
+ 3 files changed, 96 insertions(+), 4 deletions(-)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index bce8608..0493dcd 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -729,10 +729,90 @@ rd.znet=qeth,0.0.0600,0.0.0601,0.0.0602,layer2=1,portname=foo
+ rd.znet=ctc,0.0.0600,0.0.0601,protocol=bar
+ --
+ 
++Booting live images
++~~~~~~~~~~~~~~~~~~~
++Dracut offers multiple options for live booted images:
++
++=====================
++squashfs with read-only filesystem image::: The system will boot with a read
++only filesystem from the squashfs and apply a writable device mapper snapshot
++over the read only filesystem.  Using this method ensures a relatively fast
++boot and lower RAM usage. Users **must be careful** to avoid writing too many
++blocks to the snapshot volume.  Once the blocks of the snapshot are exhaused,
++the live filesystem becomes unusable and requires a reboot.
+++
++The filesystem structure is expected to be:
+++
++[listing]
++--
++squashfs.img          |  Squashfs downloaded via network
++   !(mount)
++   /LiveOS
++       |- ext3fs.img  |  Filesystem image to mount read-only
++            !(mount)
++            /bin      |  Live filesystem
++            /boot     |
++            /dev      |
++            ...       |
++--
+++
++Dracut uses this method of live booting by default.  No additional command line
++options are required other than **root=live:<URL>** to specify the location
++of your squashed filesystem.
+++
++writable filesystem image::: The system will retrieve a compressed filesystem
++image, connect it to a loopback device, and mount it as a writable volume.  More
++RAM is required during boot but the live filesystem is easier to manage if it
++becomes full.  Users can make a filesystem image of any size and that size will
++be maintained when the system boots.
+++
++The filesystem structure is expected to be:
+++
++[listing]
++--
++rootfs.tgz            |  Compressed tarball containing fileystem image
++   !(unpack)
++   /rootfs.img        |  Filesystem image
++      !(mount)
++      /bin            |  Live filesystem
++      /boot           |
++      /dev            |
++      ...             |
++--
+++
++To use this boot option, ensure that **rd.writable_fsimg=1** is in your kernel
++command line and add the **root=live:<URL>** to specify the location
++of your compressed filesystem image tarball.
++=====================
++
++**root=**live:__<url>__::
++Boots a live image retrieved from __<url>__.  Valid handlers: __http, httpd, ftp, tftp__.
+++
++[listing]
++.Example
++--
++root=live:http://example.com/liveboot.img
++root=live:ftp://ftp.example.com/liveboot.img
++--
++
++**rd.live.debug=**1::
++Enables debug output from the live boot process.
++
++**rd.live.dir=**__<path>__::
++Specifies the directory within the squashfs where the ext3fs.img or rootfs.img
++can be found.  By default, this is __LiveOS__.
++
++**rd.writable.fsimg=**1::
++Enables writable filesystem support.  The system will boot with a fully 
++writable filesystem without snapshots __(see notes above about available live boot options)__.
++You can use the **rootflags** option to set mount options for the live
++filesystem as well __(see documentation about rootflags in the **Standard** section above)__.
++
++
+ Plymouth Boot Splash
+ ~~~~~~~~~~~~~~~~~~~~
+ **plymouth.enable=0**::
+-    disable the plymouth bootsplash completly.
++    disable the plymouth bootsplash completely.
+ 
+ **rd.plymouth=0**::
+     disable the plymouth bootsplash only for the initramfs.
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index 5705e8d..c6c02c7 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -4,6 +4,8 @@
+ 
+ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ 
++command -v unpack_archive >/dev/null || . /lib/img-lib.sh
++
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
+ 
+ if getargbool 0 rd.live.debug -n -y rdlivedebug; then
+@@ -26,6 +28,7 @@ getargbool 0 rd.live.ram -d -y live_ram && live_ram="yes"
+ getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes"
+ getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay=""
+ overlay=$(getarg rd.live.overlay -d overlay)
++getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes"
+ 
+ # CD/DVD media check
+ [ -b $livedev ] && fs=$(blkid -s TYPE -o value $livedev)
+@@ -180,9 +183,18 @@ fi
+ 
+ if [ -n "$FSIMG" ] ; then
+     BASE_LOOPDEV=$( losetup -f )
+-    losetup -r $BASE_LOOPDEV $FSIMG
+ 
+-    do_live_from_base_loop
++    if [ -n "$writable_fsimg" ] ; then
++        # mount the provided fileysstem read/write
++        echo "Unpacking live filesystem (may take some time)"
++        unpack_archive $FSIMG /tmp/fsimg/
++        losetup $BASE_LOOPDEV /tmp/fsimg/rootfs.img
++        echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw
++    else
++        # mount the filesystem read-only and add a dm snapshot for writes
++        losetup -r $BASE_LOOPDEV $FSIMG
++        do_live_from_base_loop
++    fi
+ fi
+ 
+ # we might have an embedded fs image on squashfs (compressed live)
+diff --git a/modules.d/90dmsquash-live/module-setup.sh b/modules.d/90dmsquash-live/module-setup.sh
+index c6d1f9d..f52717d 100755
+--- a/modules.d/90dmsquash-live/module-setup.sh
++++ b/modules.d/90dmsquash-live/module-setup.sh
+@@ -11,7 +11,7 @@ check() {
+ depends() {
+     # if dmsetup is not installed, then we cannot support fedora/red hat
+     # style live images
+-    echo dm rootfs-block
++    echo dm rootfs-block img-lib
+     return 0
+ }
+ 
diff --git a/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch b/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch
new file mode 100644
index 0000000..33b2569
--- /dev/null
+++ b/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch
@@ -0,0 +1,82 @@
+From db1e692c13290fba4d1c9a5e81b7374c677cb421 Mon Sep 17 00:00:00 2001
+From: Fabian Deutsch <fabiand@fedoraproject.org>
+Date: Wed, 18 Feb 2015 14:31:40 +0100
+Subject: [PATCH] dmsquash: Add rd.live.overlay.thin
+
+This option changes the underlying mechanism for the overlay in the
+dmsquash module.
+Instead of a plain dm snapshot a dm thin snapshot is used. The advantage
+of the thin snapshot is, that the TRIM command is recognized, which
+means that at runtime, only the occupied blocks will be claimed from
+memory, and freed blocks will really be freed in ram.
+
+Signed-off-by: Fabian Deutsch <fabiand@fedoraproject.org>
+(cherry picked from commit d6e34d362a05cda61baaf8e231ad3f0e8665a9cc)
+---
+ dracut.cmdline.7.asc                            |  7 +++++++
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 27 ++++++++++++++++++++++++-
+ 2 files changed, 33 insertions(+), 1 deletion(-)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index 0493dcd..0c3bc29 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -802,6 +802,13 @@ Enables debug output from the live boot process.
+ Specifies the directory within the squashfs where the ext3fs.img or rootfs.img
+ can be found.  By default, this is __LiveOS__.
+ 
++**rd.live.overlay.thin=**1::
++Enables the usage of thin snapshots instead of classic dm snapshots.
++The advantage of thin snapshots is, that they support discards, and will free
++blocks which are not claimed by the filesystem. In this use case this means,
++that memory is given back to the kernel, when the filesystem does not claim it
++anymore.
++
+ **rd.writable.fsimg=**1::
+ Enables writable filesystem support.  The system will boot with a fully 
+ writable filesystem without snapshots __(see notes above about available live boot options)__.
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index c6c02c7..0645a0b 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -30,6 +30,8 @@ getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay
+ overlay=$(getarg rd.live.overlay -d overlay)
+ getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes"
+ 
++getargbool 0 rd.live.overlay.thin && thin_snapshot="yes"
++
+ # CD/DVD media check
+ [ -b $livedev ] && fs=$(blkid -s TYPE -o value $livedev)
+ if [ "$fs" = "iso9660" -o "$fs" = "udf" ]; then
+@@ -146,7 +148,30 @@ do_live_overlay() {
+         base=$BASE_LOOPDEV
+         over=$OVERLAY_LOOPDEV
+     fi
+-    echo 0 $sz snapshot $base $over p 8 | dmsetup create live-rw
++    if [ -n "$thin_snapshot" ]; then
++        modprobe dm_thin_pool
++        mkdir /run/initramfs/thin-overlay
++
++        # In block units (512b)
++        thin_data_sz=$(( $overlay_size * 1024 * 1024 / 512 ))
++        thin_meta_sz=$(( $thin_data_sz / 10 ))
++
++        # It is important to have the backing file on a tmpfs
++        # this is needed to let the loopdevice support TRIM
++        dd if=/dev/null of=/run/initramfs/thin-overlay/meta bs=1b count=1 seek=$((thin_meta_sz)) 2> /dev/null
++        dd if=/dev/null of=/run/initramfs/thin-overlay/data bs=1b count=1 seek=$((thin_data_sz)) 2> /dev/null
++
++        THIN_META_LOOPDEV=$( losetup --show -f /run/initramfs/thin-overlay/meta )
++        THIN_DATA_LOOPDEV=$( losetup --show -f /run/initramfs/thin-overlay/data )
++
++        echo 0 $thin_data_sz thin-pool $THIN_META_LOOPDEV $THIN_DATA_LOOPDEV 1024 1024 | dmsetup create live-overlay-pool
++        dmsetup message /dev/mapper/live-overlay-pool 0 "create_thin 0"
++
++        # Create a snapshot of the base image
++        echo 0 $sz thin /dev/mapper/live-overlay-pool 0 $base | dmsetup create live-rw
++    else
++        echo 0 $sz snapshot $base $over p 8 | dmsetup create live-rw
++    fi
+ 
+     # Create a device that always points to a ro base image
+     echo 0 $sz linear $base 0 | dmsetup create --readonly live-base
diff --git a/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch b/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch
new file mode 100644
index 0000000..f760866
--- /dev/null
+++ b/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch
@@ -0,0 +1,53 @@
+From 23e3c7f95f7747375fdda20e0dfac10bc7a8920f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 16 Dec 2014 12:53:18 +0100
+Subject: [PATCH] dmsquash-live: setup the images in /run/initramfs
+
+We want to cleanup / after switch_root. Placing the loop files in /
+works, but it is more sane to put them in /run/initramfs
+
+(cherry picked from commit 1f8abe81a9fca0f44c63bf3bd30a7f7fbec28642)
+---
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index 0645a0b..12354f4 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -189,9 +189,9 @@ fi
+ 
+ if [ -n "$OSMINSQFS" ]; then
+     # decompress the delta data
+-    dd if=$OSMINSQFS of=/osmin.img 2> /dev/null
++    dd if=$OSMINSQFS of=/run/initramfs/osmin.img 2> /dev/null
+     OSMIN_SQUASHED_LOOPDEV=$( losetup -f )
+-    losetup -r $OSMIN_SQUASHED_LOOPDEV /osmin.img
++    losetup -r $OSMIN_SQUASHED_LOOPDEV /run/initramfs/osmin.img
+     mkdir -m 0755 -p /run/initramfs/squashfs.osmin
+     mount -n -t squashfs -o ro $OSMIN_SQUASHED_LOOPDEV /run/initramfs/squashfs.osmin
+     OSMIN_LOOPDEV=$( losetup -f )
+@@ -212,8 +212,8 @@ if [ -n "$FSIMG" ] ; then
+     if [ -n "$writable_fsimg" ] ; then
+         # mount the provided fileysstem read/write
+         echo "Unpacking live filesystem (may take some time)"
+-        unpack_archive $FSIMG /tmp/fsimg/
+-        losetup $BASE_LOOPDEV /tmp/fsimg/rootfs.img
++        unpack_archive $FSIMG /run/initramfs/fsimg/
++        losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img
+         echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw
+     else
+         # mount the filesystem read-only and add a dm snapshot for writes
+@@ -231,10 +231,10 @@ if [ -e "$SQUASHED" ] ; then
+     if [ -n "$live_ram" ] ; then
+         echo "Copying live image to RAM..."
+         echo "(this may take a few minutes)"
+-        dd if=$SQUASHED of=/squashed.img bs=512 2> /dev/null
++        dd if=$SQUASHED of=/run/initramfs/squashed.img bs=512 2> /dev/null
+         umount -n /run/initramfs/live
+         echo "Done copying live image to RAM."
+-        SQUASHED="/squashed.img"
++        SQUASHED="/run/initramfs/squashed.img"
+     fi
+ 
+     SQUASHED_LOOPDEV=$( losetup -f )
diff --git a/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch b/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch
new file mode 100644
index 0000000..9df54bc
--- /dev/null
+++ b/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch
@@ -0,0 +1,140 @@
+From 70b7ec9492f950bcfb6f390c58ad6e3e2b8fda9c Mon Sep 17 00:00:00 2001
+From: Fabian Deutsch <fabiand@fedoraproject.org>
+Date: Thu, 19 Feb 2015 10:09:14 +0100
+Subject: [PATCH] dmsquash: Add squashfs support to rd.live.fsimg
+
+Previously rd.live.fsimg only supported filesystems residing in
+(compressed) archives.
+Now rd.live.fsimg can also be used when a squashfs image is used.
+This is achieved by extracting the rootfs image from the squashfs and
+then continue with the default routines for rd.live.fsimg.
+In addition some code duplication got removed and some documentation
+got added.
+
+Signed-off-by: Fabian Deutsch <fabiand@fedoraproject.org>
+(cherry picked from commit b0472eac111268e2cae783097d0eccc1986e1762)
+---
+ dracut.cmdline.7.asc                            |  9 ++++
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 64 +++++++++++++------------
+ 2 files changed, 42 insertions(+), 31 deletions(-)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index 0c3bc29..1e89bd5 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -802,6 +802,10 @@ Enables debug output from the live boot process.
+ Specifies the directory within the squashfs where the ext3fs.img or rootfs.img
+ can be found.  By default, this is __LiveOS__.
+ 
++**rd.live.ram=**1::
++Copy the complete image to RAM and use this for booting. This is useful
++when the image resides on i.e. a DVD which needs to be ejected later on.
++
+ **rd.live.overlay.thin=**1::
+ Enables the usage of thin snapshots instead of classic dm snapshots.
+ The advantage of thin snapshots is, that they support discards, and will free
+@@ -814,6 +818,11 @@ Enables writable filesystem support.  The system will boot with a fully
+ writable filesystem without snapshots __(see notes above about available live boot options)__.
+ You can use the **rootflags** option to set mount options for the live
+ filesystem as well __(see documentation about rootflags in the **Standard** section above)__.
++This implies that the whole image is copied to RAM before the boot continues.
+++
++NOTE: There must be enough free RAM available to hold the complete image.
+++
++This method is very suitable for diskless boots.
+ 
+ 
+ Plymouth Boot Splash
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index 12354f4..64abc0b 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -148,6 +148,7 @@ do_live_overlay() {
+         base=$BASE_LOOPDEV
+         over=$OVERLAY_LOOPDEV
+     fi
++
+     if [ -n "$thin_snapshot" ]; then
+         modprobe dm_thin_pool
+         mkdir /run/initramfs/thin-overlay
+@@ -199,29 +200,6 @@ if [ -n "$OSMINSQFS" ]; then
+     umount -l /run/initramfs/squashfs.osmin
+ fi
+ 
+-# we might have an embedded fs image to use as rootfs (uncompressed live)
+-if [ -e /run/initramfs/live/${live_dir}/ext3fs.img ]; then
+-    FSIMG="/run/initramfs/live/${live_dir}/ext3fs.img"
+-elif [ -e /run/initramfs/live/${live_dir}/rootfs.img ]; then
+-    FSIMG="/run/initramfs/live/${live_dir}/rootfs.img"
+-fi
+-
+-if [ -n "$FSIMG" ] ; then
+-    BASE_LOOPDEV=$( losetup -f )
+-
+-    if [ -n "$writable_fsimg" ] ; then
+-        # mount the provided fileysstem read/write
+-        echo "Unpacking live filesystem (may take some time)"
+-        unpack_archive $FSIMG /run/initramfs/fsimg/
+-        losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img
+-        echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw
+-    else
+-        # mount the filesystem read-only and add a dm snapshot for writes
+-        losetup -r $BASE_LOOPDEV $FSIMG
+-        do_live_from_base_loop
+-    fi
+-fi
+-
+ # we might have an embedded fs image on squashfs (compressed live)
+ if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then
+     SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}"
+@@ -242,18 +220,42 @@ if [ -e "$SQUASHED" ] ; then
+     mkdir -m 0755 -p /run/initramfs/squashfs
+     mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs
+ 
+-    BASE_LOOPDEV=$( losetup -f )
+-    if [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then
+-        losetup -r $BASE_LOOPDEV /run/initramfs/squashfs/LiveOS/ext3fs.img
+-    elif [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
+-        losetup -r $BASE_LOOPDEV /run/initramfs/squashfs/LiveOS/rootfs.img
+-    fi
++fi
++
++# we might have an embedded fs image to use as rootfs (uncompressed live)
++if [ -e /run/initramfs/live/${live_dir}/ext3fs.img ]; then
++    FSIMG="/run/initramfs/live/${live_dir}/ext3fs.img"
++elif [ -e /run/initramfs/live/${live_dir}/rootfs.img ]; then
++    FSIMG="/run/initramfs/live/${live_dir}/rootfs.img"
++elif [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then
++    FSIMG="/run/initramfs/squashfs/LiveOS/ext3fs.img"
++elif [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
++    FSIMG="/run/initramfs/squashfs/LiveOS/rootfs.img"
++fi
+ 
+-    umount -l /run/initramfs/squashfs
++if [ -n "$FSIMG" ] ; then
++    BASE_LOOPDEV=$( losetup -f )
+ 
+-    do_live_from_base_loop
++    if [ -n "$writable_fsimg" ] ; then
++        # mount the provided fileysstem read/write
++        echo "Unpacking live filesystem (may take some time)"
++        mkdir /run/initramfs/fsimg/
++        if [ -n "$SQUASHED" ]; then
++            cp -v $FSIMG /run/initramfs/fsimg/rootfs.img
++        else
++            unpack_archive $FSIMG /run/initramfs/fsimg/
++        fi
++        losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img
++        echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw
++    else
++        # mount the filesystem read-only and add a dm snapshot for writes
++        losetup -r $BASE_LOOPDEV $FSIMG
++        do_live_from_base_loop
++    fi
+ fi
+ 
++[ -e "$SQUASHED" ] && umount -l /run/initramfs/squashfs
++
+ if [ -b "$OSMIN_LOOPDEV" ]; then
+     # set up the devicemapper snapshot device, which will merge
+     # the normal live fs image, and the delta, into a minimzied fs image
diff --git a/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch b/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch
new file mode 100644
index 0000000..502b124
--- /dev/null
+++ b/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch
@@ -0,0 +1,34 @@
+From 55473e86b6fc1bc15d58810eb73594b1f30568bf Mon Sep 17 00:00:00 2001
+From: Fabian Deutsch <fabiand@fedoraproject.org>
+Date: Thu, 21 May 2015 12:37:38 +0200
+Subject: [PATCH] doc: Add a minimal rd.live.overlay documentation
+
+Signed-off-by: Fabian Deutsch <fabiand@fedoraproject.org>
+(cherry picked from commit a1b4efe6a722ac3754d8a48109575d11d5ccf61b)
+---
+ dracut.cmdline.7.asc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index 1e89bd5..c7e3bd4 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -806,6 +806,18 @@ can be found.  By default, this is __LiveOS__.
+ Copy the complete image to RAM and use this for booting. This is useful
+ when the image resides on i.e. a DVD which needs to be ejected later on.
+ 
++**rd.live.overlay=**_<devspec>_:_(<pathspec>|auto)__
++Allow the usage of a permanent overlay.
++_<devspec>_ specifies the path to a device with a mountable filesystem.
++_<pathspec>_ is the path to a file within that filesystem, which shall be used to
++persist the changes made to the device specified by **root=live:__<url>__** option.
+++
++[listing]
++.Example
++--
++rd.live.overlay=/dev/sdb1:persistent-overlay.img
++--
++
+ **rd.live.overlay.thin=**1::
+ Enables the usage of thin snapshots instead of classic dm snapshots.
+ The advantage of thin snapshots is, that they support discards, and will free
diff --git a/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch b/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch
new file mode 100644
index 0000000..4d2615f
--- /dev/null
+++ b/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch
@@ -0,0 +1,24 @@
+From afbff20e51c34be078db8e55f76c3304f7f6ab6a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 18 May 2015 13:43:26 +0200
+Subject: [PATCH] 50drm: add hyperv_fb kernel module
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1192035
+(cherry picked from commit 81b67232dcc796178124676d124d7d91514e4a8f)
+---
+ modules.d/50drm/module-setup.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/modules.d/50drm/module-setup.sh b/modules.d/50drm/module-setup.sh
+index bf33c5b..0e1c5ff 100755
+--- a/modules.d/50drm/module-setup.sh
++++ b/modules.d/50drm/module-setup.sh
+@@ -48,6 +48,8 @@ installkernel() {
+         return 0
+     }
+ 
++    instmods amdkfd hyperv_fb
++
+     for _modname in $(find_kernel_modules_by_path drivers/gpu/drm \
+         | drm_module_filter) ; do
+         # if the hardware is present, include module even if it is not currently loaded,
diff --git a/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch b/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch
new file mode 100644
index 0000000..db17be0
--- /dev/null
+++ b/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch
@@ -0,0 +1,56 @@
+From b34bd60c3b4378ea33768c4dece5b744a7e769b0 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 23 Apr 2015 13:46:52 +0200
+Subject: [PATCH] kernel-modules: install all HID drivers
+
+Instead of hardcoding a list of useful drivers, which has to be curated
+all the time, just include all HID drivers.
+
+(cherry picked from commit 180e9d78516fb4b2ee5baef44521007a860d4dd2)
+---
+ modules.d/90kernel-modules/module-setup.sh | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
+index fba2bc1..34d85b1 100755
+--- a/modules.d/90kernel-modules/module-setup.sh
++++ b/modules.d/90kernel-modules/module-setup.sh
+@@ -40,20 +40,31 @@ installkernel() {
+             ehci-hcd ehci-pci ehci-platform \
+             ohci-hcd ohci-pci \
+             uhci-hcd \
+-            xhci-hcd
++            xhci-hcd xhci-pci xhci-plat-hcd
+ 
+-        instmods yenta_socket scsi_dh_rdac scsi_dh_emc \
+-            atkbd i8042 usbhid hid-apple hid-sunplus hid-cherry hid-logitech \
+-            hid-logitech-dj hid-microsoft firewire-ohci \
+-            pcmcia usb_storage nvme hid-hyperv hv-vmbus \
+-            sdhci_acpi
++        instmods yenta_socket scsi_dh_rdac scsi_dh_emc scsi_dh_alua \
++                 atkbd i8042 usbhid firewire-ohci pcmcia hv-vmbus \
++                 atkbd i8042 usbhid firewire-ohci pcmcia usb_storage \
++                 nvme hv-vmbus sdhci_acpi
++
++        instmods \
++            "=drivers/hid" \
++            "=drivers/input/serio" \
++            "=drivers/input/keyboard"
+ 
+         if [[ "$(uname -p)" == arm* ]]; then
+             # arm specific modules
+             hostonly='' instmods \
+ 	        connector-hdmi connector-dvi encoder-tfp410 \
+ 	        encoder-tpd12s015 i2c-tegra gpio-regulator \
+-		as3722-regulator orion-ehci ehci-tegra 
++		as3722-regulator orion-ehci ehci-tegra
++            instmods \
++                "=drivers/i2c/busses" \
++                "=drivers/regulator" \
++                "=drivers/rtc" \
++                "=drivers/usb/host" \
++                "=drivers/usb/phy" \
++                ${NULL}
+         fi
+ 
+         # install virtual machine support
diff --git a/SOURCES/0266-network-add-options-to-tweak-timeouts.patch b/SOURCES/0266-network-add-options-to-tweak-timeouts.patch
new file mode 100644
index 0000000..ff25ad9
--- /dev/null
+++ b/SOURCES/0266-network-add-options-to-tweak-timeouts.patch
@@ -0,0 +1,197 @@
+From d8ad687e1a4c0343eb076902b11aff2b2b2c4b85 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 13:30:40 +0200
+Subject: [PATCH] network: add options to tweak timeouts
+
+ rd.net.dhcp.retry=<cnt>
+     If this option is set, dracut will try to connect via dhcp
+     <cnt> times before failing. Default is 1.
+
+ rd.net.timeout.dhcp=<arg>
+     If this option is set, dhclient is called with "-timeout <arg>".
+
+ rd.net.timeout.iflink=<seconds>
+     Wait <seconds> until link shows up. Default is 60 seconds.
+
+ rd.net.timeout.ifup=<seconds>
+     Wait <seconds> until link has state "UP". Default is 20 seconds.
+
+ rd.net.timeout.route=<seconds>
+     Wait <seconds> until route shows up. Default is 20 seconds.
+
+ rd.net.timeout.ipv6dad=<seconds>
+     Wait <seconds> until IPv6 DAD is finished. Default is 50 seconds.
+
+ rd.net.timeout.ipv6auto=<seconds>
+     Wait <seconds> until IPv6 automatic addresses are assigned.
+     Default is 40 seconds.
+
+ rd.net.timeout.carrier=<seconds>
+     Wait <seconds> until carrier is recognized. Default is 5 seconds.
+---
+ dracut.cmdline.7.asc           | 25 +++++++++++++++++++++++++
+ modules.d/40network/ifup.sh    | 26 ++++++++++++++++++++++----
+ modules.d/40network/net-lib.sh | 36 ++++++++++++++++++++++++++++++------
+ 3 files changed, 77 insertions(+), 10 deletions(-)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index c7e3bd4..5f3dead 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -572,6 +572,31 @@ NFS
+ **rd.nfs.domain=**__<NFSv4 domain name>__::
+     Set the NFSv4 domain name. Will overwrite the settings in _/etc/idmap.conf_.
+ 
++**rd.net.dhcp.retry=**__<cnt>__::
++    If this option is set, dracut will try to connect via dhcp <cnt> times before failing.
++    Default is 1.
++
++**rd.net.timeout.dhcp=**__<arg>__::
++    If this option is set, dhclient is called with "-timeout <arg>".
++
++**rd.net.timeout.iflink=**__<seconds>__::
++    Wait <seconds> until link shows up. Default is 60 seconds.
++
++**rd.net.timeout.ifup=**__<seconds>__::
++    Wait <seconds> until link has state "UP". Default is 20 seconds.
++
++**rd.net.timeout.route=**__<seconds>__::
++    Wait <seconds> until route shows up. Default is 20 seconds.
++
++**rd.net.timeout.ipv6dad=**__<seconds>__::
++    Wait <seconds> until IPv6 DAD is finished. Default is 50 seconds.
++
++**rd.net.timeout.ipv6auto=**__<seconds>__::
++    Wait <seconds> until IPv6 automatic addresses are assigned. Default is 40 seconds.
++
++**rd.net.timeout.carrier=**__<seconds>__::
++    Wait <seconds> until carrier is recognized. Default is 5 seconds.
++
+ CIFS
+ ~~~
+ **root=**cifs://[__<username>__[:__<password>__]@]__<server-ip>__:__<root-dir>__::
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 3cff725..2f51e6d 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -98,15 +98,33 @@ do_dhcp() {
+     # event for nfsroot
+     # XXX add -V vendor class and option parsing per kernel
+ 
++    local _COUNT=0
++    local _timeout=$(getargs rd.net.timeout.dhcp=)
++    local _DHCPRETRY=$(getargs rd.net.dhcp.retry=)
++    _DHCPRETRY=${_DHCPRETRY:-1}
++
+     [ -e /tmp/dhclient.$netif.pid ] && return 0
+ 
+     if ! iface_has_link $netif; then
+-        echo "No carrier detected"
++        warn "No carrier detected on interface $netif"
+         return 1
+     fi
+-    echo "Starting dhcp for interface $netif"
+-    dhclient "$@" -1 -q -cf /etc/dhclient.conf -pf /tmp/dhclient.$netif.pid -lf /tmp/dhclient.$netif.lease $netif \
+-        || echo "dhcp failed"
++
++    while [ $_COUNT -lt $_DHCPRETRY ]; do
++        info "Starting dhcp for interface $netif"
++        dhclient "$@" \
++                 ${_timeout:+-timeout $_timeout} \
++                 -1 -q \
++                 -cf /etc/dhclient.conf \
++                 -pf /tmp/dhclient.$netif.pid \
++                 -lf /tmp/dhclient.$netif.lease \
++                 $netif \
++            && return 0
++        _COUNT=$(($_COUNT+1))
++        [ $_COUNT -lt $_DHCPRETRY ] && sleep 1
++    done
++    warn "dhcp for interface $netif failed"
++    return 1
+ }
+ 
+ load_ipv6() {
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 1f77a15..de5273c 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -486,7 +486,11 @@ parse_ifname_opts() {
+ wait_for_if_link() {
+     local cnt=0
+     local li
+-    while [ $cnt -lt 600 ]; do
++    local timeout="$(getargs rd.net.timeout.iflink=)"
++    timeout=${timeout:-60}
++    timeout=$(($timeout*10))
++
++    while [ $cnt -lt $timeout ]; do
+         li=$(ip -o link show dev $1 2>/dev/null)
+         [ -n "$li" ] && return 0
+         sleep 0.1
+@@ -498,7 +502,11 @@ wait_for_if_link() {
+ wait_for_if_up() {
+     local cnt=0
+     local li
+-    while [ $cnt -lt 200 ]; do
++    local timeout="$(getargs rd.net.timeout.ifup=)"
++    timeout=${timeout:-20}
++    timeout=$(($timeout*10))
++
++    while [ $cnt -lt $timeout ]; do
+         li=$(ip -o link show up dev $1)
+         [ -n "$li" ] && [ -z "${li##*state UP*}" ] && return 0
+         sleep 0.1
+@@ -509,7 +517,11 @@ wait_for_if_up() {
+ 
+ wait_for_route_ok() {
+     local cnt=0
+-    while [ $cnt -lt 200 ]; do
++    local timeout="$(getargs rd.net.timeout.route=)"
++    timeout=${timeout:-20}
++    timeout=$(($timeout*10))
++
++    while [ $cnt -lt $timeout ]; do
+         li=$(ip route show)
+         [ -n "$li" ] && [ -z "${li##*$1*}" ] && return 0
+         sleep 0.1
+@@ -521,7 +533,11 @@ wait_for_route_ok() {
+ wait_for_ipv6_dad() {
+     local cnt=0
+     local li
+-    while [ $cnt -lt 500 ]; do
++    local timeout="$(getargs rd.net.timeout.ipv6dad=)"
++    timeout=${timeout:-50}
++    timeout=$(($timeout*10))
++
++    while [ $cnt -lt $timeout ]; do
+         li=$(ip -6 addr show dev $1 scope link)
+         strstr "$li" "tentative" || return 0
+         sleep 0.1
+@@ -533,7 +549,11 @@ wait_for_ipv6_dad() {
+ wait_for_ipv6_auto() {
+     local cnt=0
+     local li
+-    while [ $cnt -lt 400 ]; do
++    local timeout="$(getargs rd.net.timeout.ipv6auto=)"
++    timeout=${timeout:-40}
++    timeout=$(($timeout*10))
++
++    while [ $cnt -lt $timeout ]; do
+         li=$(ip -6 addr show dev $1)
+         if ! strstr "$li" "tentative"; then
+             strstr "$li" "dynamic" && return 0
+@@ -561,8 +581,12 @@ iface_has_link() {
+     [ -n "$interface" ] || return 2
+     interface="/sys/class/net/$interface"
+     [ -d "$interface" ] || return 2
++    local timeout="$(getargs rd.net.timeout.carrier=)"
++    timeout=${timeout:-5}
++    timeout=$(($timeout*10))
++
+     linkup "$1"
+-    while [ $cnt -lt 50 ]; do
++    while [ $cnt -lt $timeout ]; do
+         [ "$(cat $interface/carrier)" = 1 ] && return 0
+         sleep 0.1
+         cnt=$(($cnt+1))
diff --git a/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch b/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch
new file mode 100644
index 0000000..b603e4a
--- /dev/null
+++ b/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch
@@ -0,0 +1,126 @@
+From d02f522089863af2a802cef9e63965349bfcc819 Mon Sep 17 00:00:00 2001
+From: Chris Leech <cleech@redhat.com>
+Date: Fri, 3 Jul 2015 13:40:12 +0200
+Subject: [PATCH] fcoe: start with fcoemon instead of fipvlan
+
+---
+ modules.d/95fcoe/fcoe-up.sh      | 30 ++++++++++++++++++++++++++++--
+ modules.d/95fcoe/module-setup.sh |  7 +++++--
+ modules.d/95fcoe/parse-fcoe.sh   |  4 ++--
+ 3 files changed, 35 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/95fcoe/fcoe-up.sh b/modules.d/95fcoe/fcoe-up.sh
+index edbfcc8..823d7ac 100755
+--- a/modules.d/95fcoe/fcoe-up.sh
++++ b/modules.d/95fcoe/fcoe-up.sh
+@@ -20,12 +20,28 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
+ 
+ netif=$1
+ dcb=$2
++vlan="yes"
+ 
+ linkup "$netif"
+ 
+ netdriver=$(readlink -f /sys/class/net/$netif/device/driver)
+ netdriver=${netdriver##*/}
+ 
++write_fcoemon_cfg() {
++    echo FCOE_ENABLE=\"yes\" > /etc/fcoe/cfg-$netif
++    if [ "$dcb" = "dcb" ]; then
++        echo DCB_REQUIRED=\"yes\" >> /etc/fcoe/cfg-$netif
++    else
++        echo DCB_REQUIRED=\"no\" >> /etc/fcoe/cfg-$netif
++    fi
++    if [ "$vlan" = "yes" ]; then
++	    echo AUTO_VLAN=\"yes\" >> /etc/fcoe/cfg-$netif
++    else
++	    echo AUTO_VLAN=\"no\" >> /etc/fcoe/cfg-$netif
++    fi
++    echo MODE=\"fabric\" >> /etc/fcoe/cfg-$netif
++}
++
+ if [ "$dcb" = "dcb" ]; then
+     # Note lldpad will stay running after switchroot, the system initscripts
+     # are to kill it and start a new lldpad to take over. Data is transfered
+@@ -52,6 +68,13 @@ if [ "$dcb" = "dcb" ]; then
+     done
+ 
+     while [ $i -lt 60 ]; do
++        dcbtool sc "$netif" pfc e:1 a:1 w:1 && break
++        info "Retrying to turn dcb on"
++        sleep 1
++        i=$(($i+1))
++    done
++
++    while [ $i -lt 60 ]; do
+         dcbtool sc "$netif" app:fcoe e:1 a:1 w:1 && break
+         info "Retrying to turn fcoe on"
+         sleep 1
+@@ -60,7 +83,8 @@ if [ "$dcb" = "dcb" ]; then
+ 
+     sleep 1
+ 
+-    fipvlan "$netif" -c -s
++    write_fcoemon_cfg
++    fcoemon --syslog
+ elif [ "$netdriver" = "bnx2x" ]; then
+     # If driver is bnx2x, do not use /sys/module/fcoe/parameters/create but fipvlan
+     modprobe 8021q
+@@ -69,7 +93,9 @@ elif [ "$netdriver" = "bnx2x" ]; then
+     sleep 3
+     fipvlan "$netif" -c -s
+ else
+-    echo -n "$netif" > /sys/module/fcoe/parameters/create
++    vlan="no"
++    write_fcoemon_cfg
++    fcoemon --syslog
+ fi
+ 
+ need_shutdown
+diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh
+index 8c6290d..ec573ea 100755
+--- a/modules.d/95fcoe/module-setup.sh
++++ b/modules.d/95fcoe/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ check() {
+-    require_binaries dcbtool fipvlan lldpad ip readlink || return 1
++    require_binaries dcbtool fipvlan lldpad ip readlink fcoemon fcoeadm || return 1
+     return 0
+ }
+ 
+@@ -17,9 +17,12 @@ installkernel() {
+ }
+ 
+ install() {
+-    inst_multiple ip dcbtool fipvlan lldpad readlink lldptool
++    inst_multiple ip dcbtool fipvlan lldpad readlink lldptool fcoemon fcoeadm
++    inst_libdir_file 'libhbalinux.so*'
++    inst "/etc/hba.conf" "/etc/hba.conf"
+ 
+     mkdir -m 0755 -p "$initdir/var/lib/lldpad"
++    mkdir -m 0755 -p "$initdir/etc/fcoe"
+ 
+     inst "$moddir/fcoe-up.sh" "/sbin/fcoe-up"
+     inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd"
+diff --git a/modules.d/95fcoe/parse-fcoe.sh b/modules.d/95fcoe/parse-fcoe.sh
+index dc40c82..7eca0b6 100755
+--- a/modules.d/95fcoe/parse-fcoe.sh
++++ b/modules.d/95fcoe/parse-fcoe.sh
+@@ -22,13 +22,13 @@
+ 
+ 
+ # BRCM: Later, should check whether bnx2x is loaded first before loading bnx2fc so do not load bnx2fc when there are no Broadcom adapters
+-[ -e /sys/module/fcoe/parameters/create ] || modprobe -a fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
++[ -e /sys/bus/fcoe/ctlr_create ] || modprobe -a fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
+ 
+ modprobe bnx2fc >/dev/null 2>&1
+ udevadm settle --timeout=30
+ 
+ # FCoE actually supported?
+-[ -e /sys/module/fcoe/parameters/create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
++[ -e /sys/bus/fcoe/ctlr_create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
+ 
+ parse_fcoe_opts() {
+     local IFS=:
diff --git a/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch b/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch
new file mode 100644
index 0000000..a6d7ce5
--- /dev/null
+++ b/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch
@@ -0,0 +1,35 @@
+From 4031a2fa642c1db897c1340ad2718301bf873fb3 Mon Sep 17 00:00:00 2001
+From: Chris Leech <cleech@redhat.com>
+Date: Fri, 3 Jul 2015 13:44:16 +0200
+Subject: [PATCH] fcoe: EDD parsing patch for i40e
+
+---
+ modules.d/95fcoe/fcoe-edd.sh | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/modules.d/95fcoe/fcoe-edd.sh b/modules.d/95fcoe/fcoe-edd.sh
+index 5a81a2e..d0ea60d 100755
+--- a/modules.d/95fcoe/fcoe-edd.sh
++++ b/modules.d/95fcoe/fcoe-edd.sh
+@@ -11,8 +11,21 @@ fi
+ 
+ for disk in /sys/firmware/edd/int13_*; do
+     [ -d $disk ] || continue
++    if [ -e ${disk}/pci_dev/driver ]; then
++	    driver=`readlink ${disk}/pci_dev/driver`
++	    driver=${driver##*/}
++    fi
++    # i40e uses dev_port 1 for a virtual fcoe function
++    if [ "${driver}" == "i40e" ]; then
++	    dev_port=1
++    fi
+     for nic in ${disk}/pci_dev/net/*; do
+         [ -d $nic ] || continue
++	if [ -n "${dev_port}" -a -e ${nic}/dev_port ]; then
++		if [ `cat ${nic}/dev_port` -ne ${dev_port} ]; then
++			continue
++		fi
++	fi
+         if [ -e ${nic}/address ]; then
+ 	    fcoe_interface=${nic##*/}
+ 	    if ! [ -e "/tmp/.fcoe-$fcoe_interface" ]; then
diff --git a/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch b/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch
new file mode 100644
index 0000000..4a09d1c
--- /dev/null
+++ b/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch
@@ -0,0 +1,86 @@
+From 34203d03c0d43aa0aed12988d2719455e80eae54 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 13:52:32 +0200
+Subject: [PATCH] fcoe/fcoe-edd.sh: cleanup the script
+
+- check if modprobe was successful
+- add a timeout for /sys/firmware/edd
+- only remove the module, if it was loaded by the script
+---
+ modules.d/95fcoe/fcoe-edd.sh | 46 ++++++++++++++++++++++++++++++--------------
+ 1 file changed, 32 insertions(+), 14 deletions(-)
+
+diff --git a/modules.d/95fcoe/fcoe-edd.sh b/modules.d/95fcoe/fcoe-edd.sh
+index d0ea60d..8607b56 100755
+--- a/modules.d/95fcoe/fcoe-edd.sh
++++ b/modules.d/95fcoe/fcoe-edd.sh
+@@ -2,37 +2,55 @@
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+-dcb=$1
++dcb="$1"
+ 
+-if ! [ -d /sys/firmware/edd ]; then
+-    modprobe edd
+-    while ! [ -d /sys/firmware/edd ]; do sleep 0.1; done
+-fi
++_modprobe_r_edd="0"
++
++check_edd() {
++    local cnt=0
++
++    [ -d /sys/firmware/edd ] && return 0
++
++    _modprobe_r_edd="1"
++    modprobe edd || return $?
++
++    while [ $cnt -lt 600 ]; do
++        [ -d /sys/firmware/edd ] && return 0
++        cnt=$(($cnt+1))
++        sleep 0.1
++    done
++    return 1
++}
++
++check_edd || exit 1
+ 
+ for disk in /sys/firmware/edd/int13_*; do
+-    [ -d $disk ] || continue
+-    if [ -e ${disk}/pci_dev/driver ]; then
+-	    driver=`readlink ${disk}/pci_dev/driver`
++    [ -d "$disk" ] || continue
++    if [ -e "${disk}/pci_dev/driver" ]; then
++	    driver=$(readlink "${disk}/pci_dev/driver")
+ 	    driver=${driver##*/}
+     fi
+     # i40e uses dev_port 1 for a virtual fcoe function
+     if [ "${driver}" == "i40e" ]; then
+ 	    dev_port=1
+     fi
+-    for nic in ${disk}/pci_dev/net/*; do
+-        [ -d $nic ] || continue
+-	if [ -n "${dev_port}" -a -e ${nic}/dev_port ]; then
+-		if [ `cat ${nic}/dev_port` -ne ${dev_port} ]; then
++    for nic in "${disk}"/pci_dev/net/*; do
++        [ -d "$nic" ] || continue
++	if [ -n "${dev_port}" -a -e "${nic}/dev_port" ]; then
++		if [ "$(cat ${nic}/dev_port)" -ne "${dev_port}" ]; then
+ 			continue
+ 		fi
+ 	fi
+         if [ -e ${nic}/address ]; then
+ 	    fcoe_interface=${nic##*/}
+ 	    if ! [ -e "/tmp/.fcoe-$fcoe_interface" ]; then
+-		/sbin/fcoe-up $fcoe_interface $dcb
++		/sbin/fcoe-up "$fcoe_interface" "$dcb"
+ 		> "/tmp/.fcoe-$fcoe_interface"
+ 	    fi
+         fi
+     done
+ done
+-modprobe -r edd
++
++[ "$_modprobe_r_edd" = "1" ] && modprobe -r edd
++
++unset _modprobe_r_edd
diff --git a/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch b/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch
new file mode 100644
index 0000000..1ba27ac
--- /dev/null
+++ b/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch
@@ -0,0 +1,37 @@
+From e5f4bbd804e337a7efaf3a0cb4fc3a37b7e33b47 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 14:00:33 +0200
+Subject: [PATCH] livenet: don't attempt to download the image for every
+ interface
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1152485
+---
+ modules.d/90livenet/livenetroot.sh | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh
+index 1bbee55..2e36ee9 100755
+--- a/modules.d/90livenet/livenetroot.sh
++++ b/modules.d/90livenet/livenetroot.sh
+@@ -7,12 +7,20 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ 
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
+ 
++[ -e /tmp/livenet.downloaded ] && exit 0
++
+ # args get passed from 40network/netroot
+ netroot="$2"
+ liveurl="${netroot#livenet:}"
+ info "fetching $liveurl"
+ imgfile=$(fetch_url "$liveurl")
+-[ $? = 0 ] || die "failed to download live image: error $?"
++
++if [ $? = 0 ]; then
++	warn "failed to download live image: error $?"
++	exit 1
++fi
++
++> /tmp/livenet.downloaded
+ 
+ # TODO: couldn't dmsquash-live-root handle this?
+ if [ ${imgfile##*.} = "iso" ]; then
diff --git a/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch b/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch
new file mode 100644
index 0000000..01043b2
--- /dev/null
+++ b/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch
@@ -0,0 +1,32 @@
+From 7b3178d9ad9b571312131bba34fd54460a7b4a25 Mon Sep 17 00:00:00 2001
+From: Hannes Reinecke <hare@suse.de>
+Date: Mon, 23 Mar 2015 17:12:18 +0100
+Subject: [PATCH] 95fcoe-uefi: Test for EFI firmware
+
+The fcoe-uefi module should test for EFI firmware when called
+in 'hostonly' mode; of no EFI firmware is found then the module
+doesn't need to be included.
+
+References: bnc#882412
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+(cherry picked from commit 6755c208556be7a85c76e731de48a56f56e81c4c)
+---
+ modules.d/95fcoe-uefi/module-setup.sh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules.d/95fcoe-uefi/module-setup.sh b/modules.d/95fcoe-uefi/module-setup.sh
+index 0fb06e2..f5277f4 100755
+--- a/modules.d/95fcoe-uefi/module-setup.sh
++++ b/modules.d/95fcoe-uefi/module-setup.sh
+@@ -4,6 +4,9 @@
+ 
+ # called by dracut
+ check() {
++    [[ $hostonly ]] || [[ $mount_needs ]] && {
++        [ -d /sys/firmware/efi ] || return 255
++    }
+     require_binaries dcbtool fipvlan lldpad ip readlink || return 1
+     return 0
+ }
diff --git a/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch b/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch
new file mode 100644
index 0000000..d779817
--- /dev/null
+++ b/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch
@@ -0,0 +1,75 @@
+From 589b4e61e2db2a5835b5aa425268f6f0f67c14e4 Mon Sep 17 00:00:00 2001
+From: Colin Guthrie <colin@mageia.org>
+Date: Fri, 15 May 2015 14:53:40 +0100
+Subject: [PATCH] base: Don't wait for swap devices in host-only mode.
+
+The only reason we add swap devices to host-only mode (added in
+dd5875499ece9dbc90e10eafd0073ee15d0c86a4) is to allow us to process
+resume= arguments passed on the kernel command line when the swap
+partition lives on something slightly more complex than a normal
+partion (e.g. in an LVM or RAID setup).
+
+By adding the device to host_devs, the necessary LVM and RAID hooks
+are added and thus the underlying storage will be initialised OK, and
+the 95resume module handles the waiting for the device (via udev rules
+creating the /dev/resume symlink).
+
+So ultimately, we do not need to hard-code the waiting for the swap
+devices into the initramfs at build time as the waiting part can be
+dynamic.
+
+This makes things more resiliant to swap partitions disappearing and
+being reformatted etc.
+
+Inspired by a patch by Martin Whitaker on Mageia bug:
+https://bugs.mageia.org/show_bug.cgi?id=12305
+
+(cherry picked from commit 3e3ed34f036a833ccc2150c6224d0a954e841e39)
+---
+ dracut.sh                        | 6 ++++--
+ modules.d/99base/module-setup.sh | 8 ++++++++
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index a214f81..90ac1fe 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1056,7 +1056,9 @@ if [[ $hostonly ]]; then
+                     done < /etc/crypttab
+                 fi
+ 
+-                push host_devs "$(readlink -f "$dev")"
++                _dev="$(readlink -f "$dev")"
++                push host_devs "$_dev"
++                push swap_devs "$_dev"
+                 break
+             done < /etc/fstab
+         done < /proc/swaps
+@@ -1181,7 +1183,7 @@ export initdir dracutbasedir \
+     omit_drivers mdadmconf lvmconf root_dev \
+     use_fstab fstab_lines libdirs fscks nofscks ro_mnt \
+     stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
+-    debug host_fs_types host_devs sshkey add_fstab \
++    debug host_fs_types host_devs swap_devs sshkey add_fstab \
+     DRACUT_VERSION udevdir prefix filesystems drivers \
+     systemdutildir systemdsystemunitdir systemdsystemconfdir \
+     host_modalias host_modules hostonly_cmdline loginstall \
+diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
+index fddf4b0..d5e7861 100755
+--- a/modules.d/99base/module-setup.sh
++++ b/modules.d/99base/module-setup.sh
+@@ -104,6 +104,14 @@ install() {
+ 
+                 for _dev in ${host_devs[@]}; do
+                     [[ "$_dev" == "$root_dev" ]] && continue
++
++                    # We only actually wait for real devs - swap is only needed
++                    # for resume and udev rules generated when parsing resume=
++                    # argument take care of the waiting for us
++                    for _dev2 in ${swap_devs[@]}; do
++                      [[ "$_dev" == "$_dev2" ]] && continue 2
++                    done
++
+                     _pdev=$(get_persistent_dev $_dev)
+ 
+                     case "$_pdev" in
diff --git a/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch b/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch
new file mode 100644
index 0000000..24b8df8
--- /dev/null
+++ b/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch
@@ -0,0 +1,45 @@
+From 900550c4e0c2a48a5d0c01db0adb23e73a6aa195 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 24 Nov 2014 15:17:45 +0100
+Subject: [PATCH] dracut-functions.sh: check if dinfo is a function
+
+If "dinfo" is an executable, dracut-logger.sh would never be sourced.
+
+See: https://bugzilla.redhat.com/show_bug.cgi?id=1167082
+(cherry picked from commit 26d14fb3d36d6091f64258a62c49939478405693)
+---
+ dracut-functions.sh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 31586ca..973e231 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -169,7 +169,13 @@ srcmods="/lib/modules/$kernel/"
+ }
+ export srcmods
+ 
+-if ! type dinfo >/dev/null 2>&1; then
++# is_func <command>
++# Check whether $1 is a function.
++is_func() {
++    [[ "$(type -t "$1")" = "function" ]]
++}
++
++if ! is_func dinfo >/dev/null 2>&1; then
+     . "$dracutbasedir/dracut-logger.sh"
+     dlog_init
+ fi
+@@ -202,12 +208,6 @@ mksubdirs() {
+     [[ -e ${1%/*} ]] || mkdir -m 0755 -p -- "${1%/*}"
+ }
+ 
+-# is_func <command>
+-# Check whether $1 is a function.
+-is_func() {
+-    [[ "$(type -t "$1")" = "function" ]]
+-}
+-
+ # Function prints global variables in format name=value line by line.
+ # $@ = list of global variables' name
+ print_vars() {
diff --git a/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch b/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch
new file mode 100644
index 0000000..e07b422
--- /dev/null
+++ b/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch
@@ -0,0 +1,38 @@
+From 2af6708641bb896f0c117ae49906783cfd46f0a8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Nov 2014 13:44:54 +0100
+Subject: [PATCH] dmsquash-live: do not abort, if user pressed ESC on
+ checkisomd5
+
+If the user pressed ESC while checkisomd5 runs the media check, it will
+exit with "2". Previously that would mean, that the media check was not
+successful.
+
+(cherry picked from commit 370035d561baa6852bcb02161ef736a78b62b336)
+---
+ modules.d/90dmsquash-live/checkisomd5@.service  | 1 +
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/90dmsquash-live/checkisomd5@.service b/modules.d/90dmsquash-live/checkisomd5@.service
+index 20e40bd..c4ca10f 100644
+--- a/modules.d/90dmsquash-live/checkisomd5@.service
++++ b/modules.d/90dmsquash-live/checkisomd5@.service
+@@ -11,3 +11,4 @@ StandardInput=tty-force
+ StandardOutput=inherit
+ StandardError=inherit
+ TimeoutSec=0
++SuccessExitStatus=2
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index 64abc0b..8d5476c 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -46,7 +46,7 @@ if [ -n "$check" ]; then
+     else
+         checkisomd5 --verbose $livedev
+     fi
+-    if [ $? -ne 0 ]; then
++    if [ $? -eq 1 ]; then
+         die "CD check failed!"
+         exit 1
+     fi
diff --git a/SOURCES/0275-Add-rd.live.overlay.size-option.patch b/SOURCES/0275-Add-rd.live.overlay.size-option.patch
new file mode 100644
index 0000000..cb9df23
--- /dev/null
+++ b/SOURCES/0275-Add-rd.live.overlay.size-option.patch
@@ -0,0 +1,32 @@
+From ccebb4c045a7cc6c22977c9b23b95108030901ea Mon Sep 17 00:00:00 2001
+From: Radek Vykydal <rvykydal@redhat.com>
+Date: Tue, 13 Jan 2015 15:14:10 +0100
+Subject: [PATCH] Add rd.live.overlay.size option
+
+(cherry picked from commit 18423f7951de7b9cb4007438b58b6067aa6f2e93)
+---
+ modules.d/90dmsquash-live/dmsquash-live-root.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index 8d5476c..6631d9a 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -29,6 +29,8 @@ getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes"
+ getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay=""
+ overlay=$(getarg rd.live.overlay -d overlay)
+ getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes"
++overlay_size=$(getarg rd.live.overlay.size=)
++[ -z "$overlay_size" ] && overlay_size=512
+ 
+ getargbool 0 rd.live.overlay.thin && thin_snapshot="yes"
+ 
+@@ -129,7 +131,7 @@ do_live_overlay() {
+             sleep 5
+         fi
+ 
+-        dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((512*1024)) 2> /dev/null
++        dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((overlay_size*1024)) 2> /dev/null
+         if [ -n "$setup" -a -n "$readonly_overlay" ]; then
+             RO_OVERLAY_LOOPDEV=$( losetup -f )
+             losetup $RO_OVERLAY_LOOPDEV /overlay
diff --git a/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch b/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch
new file mode 100644
index 0000000..591d9ed
--- /dev/null
+++ b/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch
@@ -0,0 +1,43 @@
+From 34b49be88219519f678f665987787784751b11bd Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 19 Mar 2015 12:33:03 +0100
+Subject: [PATCH] base/dracut-lib.sh: read /proc/cmdline with multiple lines
+
+also parse cmdline files without an ending newline
+
+(cherry picked from commit 9f0878540bdc8054dc2b45427eed957b9bd25f2d)
+---
+ modules.d/99base/dracut-lib.sh | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index 69f7079..3ffbb02 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -115,6 +115,7 @@ getcmdline() {
+     local _i
+     local CMDLINE_ETC_D
+     local CMDLINE_ETC
++    local CMDLINE_PROC
+     unset _line
+ 
+     if [ -e /etc/cmdline ]; then
+@@ -124,13 +125,15 @@ getcmdline() {
+     fi
+     for _i in /etc/cmdline.d/*.conf; do
+         [ -e "$_i" ] || continue
+-        while read -r _line; do
++        while read -r _line || [ -n "$_line" ]; do
+             CMDLINE_ETC_D="$CMDLINE_ETC_D $_line";
+         done <"$_i";
+     done
+     if [ -e /proc/cmdline ]; then
+-        read -r CMDLINE </proc/cmdline;
+-        CMDLINE="$CMDLINE_ETC_D $CMDLINE_ETC $CMDLINE"
++        while read -r _line || [ -n "$_line" ]; do
++            CMDLINE_PROC="$CMDLINE_PROC $_line"
++        done </proc/cmdline;
++        CMDLINE="$CMDLINE_ETC_D $CMDLINE_ETC $CMDLINE_PROC"
+     fi
+     printf "%s" "$CMDLINE"
+ }
diff --git a/SOURCES/0277-multipath-install-all-multipath-path-selector-kernel.patch b/SOURCES/0277-multipath-install-all-multipath-path-selector-kernel.patch
new file mode 100644
index 0000000..9105aa7
--- /dev/null
+++ b/SOURCES/0277-multipath-install-all-multipath-path-selector-kernel.patch
@@ -0,0 +1,35 @@
+From f11d7a81e2eec37ed5b6708ed8cd359f0a5eaa69 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 14:24:50 +0200
+Subject: [PATCH] multipath: install all multipath path selector kernel modules
+
+By default, dracut only builds in dm-service-time into the initramfs as
+that is the default multipath.conf path selector. If the user changes
+the path selector to "round robin" on the fly and runs dracut, multipath
+does not find any paths on boot and the user will be dropped into a
+shell.
+
+Apparently, in RHEL7 dracut defaults to "hostonly" mode, i.e. modules
+not currently in use at the time dracut runs do not get built into
+initramfs. This is definitely one case where this doesn't work. A change
+to reconfigure multipath probably should not render the system
+unbootable.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1195392
+---
+ modules.d/90multipath/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh
+index d37f958..acfc56f 100755
+--- a/modules.d/90multipath/module-setup.sh
++++ b/modules.d/90multipath/module-setup.sh
+@@ -64,7 +64,7 @@ installkernel() {
+     }
+ 
+     ( find_kernel_modules_by_path drivers/scsi; if [ "$_arch" = "s390" -o "$_arch" = "s390x" ]; then find_kernel_modules_by_path drivers/s390/scsi; fi;
+-      find_kernel_modules_by_path drivers/md )  |  mp_mod_filter  |  instmods
++      find_kernel_modules_by_path drivers/md )  |  mp_mod_filter  |  hostonly='' instmods
+ }
+ 
+ install() {
diff --git a/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch b/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch
new file mode 100644
index 0000000..0252ffd
--- /dev/null
+++ b/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch
@@ -0,0 +1,70 @@
+From 77c0b308259d3b91c536de9a49c0b99427c5924e Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 14:28:55 +0200
+Subject: [PATCH] man page: changed grub.conf to grub2.cfg
+
+---
+ dracut.usage.asc | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/dracut.usage.asc b/dracut.usage.asc
+index bee9e2e..15dc244 100644
+--- a/dracut.usage.asc
++++ b/dracut.usage.asc
+@@ -99,7 +99,7 @@ raid with encryption and LVM on top), as long as you specify the correct
+ filesystem LABEL or UUID on the kernel command line for your root device, dracut
+ will find it and boot from it.
+ 
+-The kernel command line usually can be configured in _/boot/grub/grub.conf_, if
++The kernel command line usually can be configured in _/boot/grub2/grub.cfg_, if
+ grub is your bootloader and it also can be edited in the real boot process in
+ the grub menu.
+ 
+@@ -325,7 +325,7 @@ stick and mount that. Then you can store the output for later inspection.
+ In all cases, the following should be mentioned and attached to your bug report:
+ 
+ * The exact kernel command-line used. Typically from the bootloader
+-configuration file (e.g. _/etc/grub.conf_) or from _/proc/cmdline_.
++configuration file (e.g. _/boot/grub2/grub.cfg_) or from _/proc/cmdline_.
+ * A copy of your disk partition information from _/etc/fstab_, which might be
+ obtained booting an old working initramfs or a rescue medium.
+ * Turn on dracut debugging (see _the 'debugging dracut' section_), and attach
+@@ -360,7 +360,7 @@ logging during the system boot.  This section documents configuring a
+ serial console connection to record boot messages.
+ 
+ . First, enable serial console output for both the kernel and the bootloader.
+-. Open the file _/etc/grub.conf_ for editing. Below the line ''timeout=5'', add
++. Open the file _/boot/grub2/grub.cfg_ for editing. Below the line ''timeout=5'', add
+ the following:
+ +
+ ----
+@@ -368,14 +368,14 @@ serial --unit=0 --speed=9600
+ terminal --timeout=5 serial console
+ ----
+ +
+-. Also in _/etc/grub.conf_, add the following boot arguemnts to the ''kernel''
++. Also in _/boot/grub2/grub.cfg_, add the following boot arguemnts to the ''kernel''
+ line:
+ +
+ ----
+ console=tty0 console=ttyS0,9600
+ ----
+ +
+-. When finished, the _/etc/grub.conf_ file should look similar to the example
++. When finished, the _/boot/grub2/grub.cfg_ file should look similar to the example
+ below.
+ +
+ ----
+@@ -410,10 +410,10 @@ dracut offers a shell for interactive debugging in the event dracut fails to
+ locate your root filesystem. To enable the shell:
+ 
+ . Add the boot parameter ''rd.shell'' to your bootloader configuration file
+-(e.g. _/etc/grub.conf_)
++(e.g. _/boot/grub2/grub.cfg_)
+ . Remove the boot arguments ''rhgb'' and ''quiet''
+ +
+-A sample _/etc/grub.conf_ bootloader configuration file is listed below.
++A sample _/boot/grub2/grub.cfg_ bootloader configuration file is listed below.
+ +
+ ----
+ default=0
diff --git a/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch b/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch
new file mode 100644
index 0000000..b932177
--- /dev/null
+++ b/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch
@@ -0,0 +1,61 @@
+From 3cf4ec08e51c6b6c6d21d4b1cf67b98bb7878558 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 3 Jul 2015 14:35:25 +0200
+Subject: [PATCH] lsinitrd.sh: ignore "cat: write error: Broken pipe"
+
+---
+ lsinitrd.sh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/lsinitrd.sh b/lsinitrd.sh
+index b086a63..88fe983 100755
+--- a/lsinitrd.sh
++++ b/lsinitrd.sh
+@@ -116,7 +116,7 @@ extract_files()
+     for f in ${!filenames[@]}; do
+         [[ $nofileinfo ]] || echo "initramfs:/$f"
+         [[ $nofileinfo ]] || echo "========================================================================"
+-        $CAT $image | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null
++        $CAT $image 2>/dev/null | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null
+         ((ret+=$?))
+         [[ $nofileinfo ]] || echo "========================================================================"
+         [[ $nofileinfo ]] || echo
+@@ -126,7 +126,7 @@ extract_files()
+ list_modules()
+ {
+     echo "dracut modules:"
+-    $CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/modules.txt' 'usr/lib/dracut/modules.txt' 2>/dev/null
++    $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/modules.txt' 'usr/lib/dracut/modules.txt' 2>/dev/null
+     ((ret+=$?))
+ }
+ 
+@@ -134,9 +134,9 @@ list_files()
+ {
+     echo "========================================================================"
+     if [ "$sorted" -eq 1 ]; then
+-        $CAT "$image" | cpio --extract --verbose --quiet --list | sort -n -k5
++        $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --list | sort -n -k5
+     else
+-        $CAT "$image" | cpio --extract --verbose --quiet --list | sort -k9
++        $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --list | sort -k9
+     fi
+     ((ret+=$?))
+     echo "========================================================================"
+@@ -220,7 +220,7 @@ ret=0
+ if (( ${#filenames[@]} > 0 )); then
+     extract_files
+ else
+-    version=$($CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/dracut-*' 'usr/lib/dracut/dracut-*' 2>/dev/null)
++    version=$($CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/dracut-*' 'usr/lib/dracut/dracut-*' 2>/dev/null)
+     ((ret+=$?))
+     echo "Version: $version"
+     echo
+@@ -229,7 +229,7 @@ else
+         echo "========================================================================"
+     else
+         echo -n "Arguments: "
+-        $CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/build-parameter.txt' 'usr/lib/dracut/build-parameter.txt' 2>/dev/null
++        $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/build-parameter.txt' 'usr/lib/dracut/build-parameter.txt' 2>/dev/null
+         echo
+         list_modules
+         list_files
diff --git a/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch b/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch
new file mode 100644
index 0000000..6cf2019
--- /dev/null
+++ b/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch
@@ -0,0 +1,32 @@
+From 968c66b609f1e894d7522d622ddc95d14d49d66d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 28 May 2015 19:44:55 +0200
+Subject: [PATCH] network: setup gateway after setting up resolv.conf
+
+If a daemon listens for route changes and wants to use the interface
+afterwards, it should be able to resolve DNS
+
+(cherry picked from commit 0b7bfacfeaf86c4001dc2ea46cecdc65c9cdfff1)
+---
+ modules.d/40network/net-lib.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index de5273c..cfc06fe 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -96,13 +96,13 @@ setup_net() {
+     [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
+     [ -z "$IFACES" ] && IFACES="$netif"
+     # run the scripts written by ifup
+-    [ -e /tmp/net.$netif.gw ]            && . /tmp/net.$netif.gw
+     [ -e /tmp/net.$netif.hostname ]      && . /tmp/net.$netif.hostname
+     [ -e /tmp/net.$netif.override ]      && . /tmp/net.$netif.override
+     [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
+     # set up resolv.conf
+     [ -e /tmp/net.$netif.resolv.conf ] && \
+         cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf
++    [ -e /tmp/net.$netif.gw ]            && . /tmp/net.$netif.gw
+ 
+     # add static route
+     for _p in $(getargs rd.route); do
diff --git a/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch b/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch
new file mode 100644
index 0000000..8375bd4
--- /dev/null
+++ b/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch
@@ -0,0 +1,46 @@
+From 28be8992c3c1facfd80dfcc6afad951f33098783 Mon Sep 17 00:00:00 2001
+From: Gerd von Egidy <gerd.von.egidy@intra2net.com>
+Date: Thu, 5 Mar 2015 12:07:57 +0100
+Subject: [PATCH] Add support for ethernet point-to-point connections
+ configured via DHCP
+
+When current dracut receives an ip with netmask of 255.255.255.255 via DHCP,
+setting the also supplied default gateway fails (because it is obviously not
+within the netmask).
+
+The setup with a netmask of /32 is quite common in colocation datacenters
+where you don't want the machines of two different customers to directly talk
+to each other. At least two of the biggest colocation providers in Germany
+(1&1 and Strato) do it that way. NetworkManager supports this kind of setup
+and the dhclient-scripts of several distributions too.
+
+In this patch I have implemented a simple approach very similar to what is
+found in Debian. The dhclient-script from Fedora uses a more sophisticated
+approach, but that relies on the ipcalc utility which would introduce a
+dependency on Fedora-initscripts for dracut.
+
+Signed-off-by: Gerd von Egidy <gerd.von.egidy@intra2net.com>
+(cherry picked from commit 99ccbc30dff9fa51dd3187dc10f8f632e5e54e4b)
+---
+ modules.d/40network/dhclient-script.sh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index 7972af9..12e2869 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -49,7 +49,13 @@ setup_interface() {
+         ${lease_time:+valid_lft $lease_time} \
+         ${preferred_lft:+preferred_lft ${preferred_lft}}
+ 
+-    [ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw
++    if [ -n "$gw" ] ; then
++        if [ "$mask" == "255.255.255.255" ] ; then
++            # point-to-point connection => set explicit route to gateway
++            echo ip route add $gw dev $netif > /tmp/net.$netif.gw
++        fi
++        echo ip route replace default via $gw dev $netif >> /tmp/net.$netif.gw
++    fi
+ 
+     [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
+     if  [ -n "$namesrv" ] ; then
diff --git a/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch b/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch
new file mode 100644
index 0000000..9a2a975
--- /dev/null
+++ b/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch
@@ -0,0 +1,40 @@
+From 77ffc465b9c5615040b427dfdf35a3487ef9943c Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 28 Jan 2015 13:25:09 +0000
+Subject: [PATCH] lvm: add cache tools for dm-cache usage
+
+(cherry picked from commit 70598ac292bce6e554cf0dc327426a7dbf92c65f)
+---
+ modules.d/90lvm/module-setup.sh | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
+index 5ec6281..90bc39f 100755
+--- a/modules.d/90lvm/module-setup.sh
++++ b/modules.d/90lvm/module-setup.sh
+@@ -107,12 +107,19 @@ install() {
+             dev=$(</sys/block/${dev#/dev/}/dm/name)
+             eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev" 2>/dev/null)
+             [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || continue
+-            if [[ "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" == *thin* ]] ; then
+-                inst_multiple -o thin_dump thin_restore thin_check thin_repair
+-                break
+-            fi
++            case "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" in
++                *thin*|*cache*|*era*)
++                    inst_multiple -o thin_dump thin_restore thin_check thin_repair \
++                                  cache_dump cache_restore cache_check cache_repair \
++                                  era_check era_dump era_invalidate era_restore
++                    break;;
++            esac
+         done
+-    else
+-        inst_multiple -o thin_dump thin_restore thin_check thin_repair
++    fi
++
++    if ! [[ $hostonly ]]; then
++        inst_multiple -o thin_dump thin_restore thin_check thin_repair \
++                      cache_dump cache_restore cache_check cache_repair \
++                      era_check era_dump era_invalidate era_restore
+     fi
+ }
diff --git a/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch b/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch
new file mode 100644
index 0000000..020014c
--- /dev/null
+++ b/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch
@@ -0,0 +1,33 @@
+From a6470f332f1b522f8d1c159a9c15b520d35ef6d4 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 5 Mar 2014 12:23:49 +0100
+Subject: [PATCH] dracut-functions.sh: degrade info about missing binaries to
+ info
+
+(cherry picked from commit 83a3cba777efb71be6c368a65e2ed5794395168e)
+---
+ dracut-functions.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 973e231..65ccebe 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -44,7 +44,7 @@ require_binaries() {
+ 
+     for cmd in "$@"; do
+         if ! find_binary "$cmd" &>/dev/null; then
+-            dwarning "$_module_name: Could not find command '$cmd'!"
++            dinfo "$_module_name: Could not find command '$cmd'!"
+             ((_ret++))
+         fi
+     done
+@@ -68,7 +68,7 @@ require_any_binary() {
+     done
+ 
+     if (( $_ret != 0 )); then
+-        dwarning "$_module_name: Could not find any command of '$@'!"
++        dinfo "$_module_name: Could not find any command of '$@'!"
+         return 1
+     fi
+ 
diff --git a/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch b/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch
new file mode 100644
index 0000000..18d4312
--- /dev/null
+++ b/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch
@@ -0,0 +1,29 @@
+From 1db0d1f78ba67e61ca3fafbec44f8bc79c75eb94 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 20 May 2014 13:23:43 +0200
+Subject: [PATCH] dracut-functions.sh:require_binaries() clarify message
+
+The info message written by require_binaries() was a bit frighten to
+users. So just be a little bit more verbose.
+
+If you have ideas on how to improve the message for these "soft"
+dependency modules, please submit patches.
+
+(cherry picked from commit 0fa5dbedc5b222435f51f7460a81232ee120c4e1)
+---
+ dracut-functions.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 65ccebe..585b683 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -44,7 +44,7 @@ require_binaries() {
+ 
+     for cmd in "$@"; do
+         if ! find_binary "$cmd" &>/dev/null; then
+-            dinfo "$_module_name: Could not find command '$cmd'!"
++            dinfo "dracut module '${_module_name#[0-9][0-9]}' will not be installed, because command '$cmd' could not be found!"
+             ((_ret++))
+         fi
+     done
diff --git a/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch b/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch
new file mode 100644
index 0000000..7b7fc65
--- /dev/null
+++ b/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch
@@ -0,0 +1,24 @@
+From c643f4e8abb4ea65b219414b23555772160ab41e Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:27:39 +0200
+Subject: [PATCH] dracut-systemd/dracut-initqueue.sh: be verbose about timeout
+
+Issue a warning, if timeout scripts are executed
+
+(cherry picked from commit 8ba684be1c04976204d2b671ab90cb27791f467b)
+---
+ modules.d/98systemd/dracut-initqueue.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/modules.d/98systemd/dracut-initqueue.sh b/modules.d/98systemd/dracut-initqueue.sh
+index 37bc18f..5822556 100755
+--- a/modules.d/98systemd/dracut-initqueue.sh
++++ b/modules.d/98systemd/dracut-initqueue.sh
+@@ -57,6 +57,7 @@ while :; do
+     done
+ 
+     if [ $main_loop -gt $((2*$RDRETRY/3)) ]; then
++        warn "dracut-initqueue timeout - starting timeout scripts"
+         for job in $hookdir/initqueue/timeout/*.sh; do
+             [ -e "$job" ] || break
+             job=$job . $job
diff --git a/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch b/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch
new file mode 100644
index 0000000..c8a92ed
--- /dev/null
+++ b/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch
@@ -0,0 +1,24 @@
+From 2bb564073b2a4953572b8162b220e8fa2b7eeb4d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:27:01 +0200
+Subject: [PATCH] nfs/parse-nfsroot.sh: silence useless warning if netroot is
+ not nfs
+
+(cherry picked from commit 50e86bf02be003f3de6214f8012e62edde0085fc)
+---
+ modules.d/95nfs/parse-nfsroot.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh
+index a84cd43..865e62b 100755
+--- a/modules.d/95nfs/parse-nfsroot.sh
++++ b/modules.d/95nfs/parse-nfsroot.sh
+@@ -40,7 +40,7 @@ if [ -n "$netroot" ] ; then
+         [ "$n" = "$netroot" ] && break
+     done
+     if [ "$n" = "$netroot" ]; then
+-        warn "Ignoring netroot argument for NFS"
++        #warn "Ignoring netroot argument for NFS"
+         netroot=$root
+     fi
+ else
diff --git a/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch b/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch
new file mode 100644
index 0000000..40e4289
--- /dev/null
+++ b/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch
@@ -0,0 +1,39 @@
+From 53ecce179b2a5b01ba9d62527200712bba2b2032 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:25:23 +0200
+Subject: [PATCH] network/parse-ip-opts.sh: assume rd.neednet for multiple ip
+ options
+
+set rd.neednet on the kernel cmdline to disable this behaviour
+
+(cherry picked from commit 4e9ba952bfa607ac47bfe3cf4943ae3386da22bc)
+---
+ modules.d/40network/parse-ip-opts.sh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh
+index 5b96e06..faee8f9 100755
+--- a/modules.d/40network/parse-ip-opts.sh
++++ b/modules.d/40network/parse-ip-opts.sh
+@@ -38,8 +38,10 @@ unset count
+ # If needed, check if bootdev= contains anything usable
+ BOOTDEV=$(getarg bootdev=)
+ 
+-if [ -n "$NEEDBOOTDEV" ] ; then
+-    [ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines"
++if [ -n "$NEEDBOOTDEV" ] && getargbool 1 rd.neednet; then
++    #[ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines"
++    echo "rd.neednet=1" > /etc/cmdline.d/dracut-neednet.conf
++    info "Multiple ip= arguments: assuming rd.neednet=1"
+ fi
+ 
+ # Check ip= lines
+@@ -50,7 +52,7 @@ for p in $(getargs ip=); do
+     # make first device specified the BOOTDEV
+     if [ -z "$BOOTDEV" ] && [ -n "$dev" ]; then
+         BOOTDEV="$dev"
+-        [ -n "$NEEDBOOTDEV" ] && warn "Setting bootdev to '$BOOTDEV'"
++        [ -n "$NEEDBOOTDEV" ] && info "Setting bootdev to '$BOOTDEV'"
+     fi
+ 
+     # skip ibft since we did it above
diff --git a/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch b/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch
new file mode 100644
index 0000000..c334014
--- /dev/null
+++ b/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch
@@ -0,0 +1,21 @@
+From fc0ead21c9cc4aaf569f61dda998d81cab2a18c9 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 13 Aug 2015 15:24:53 +0200
+Subject: [PATCH] systemd: add systemd-run and systemd-escape
+
+---
+ modules.d/98systemd/module-setup.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
+index d0271f1..a656fe0 100755
+--- a/modules.d/98systemd/module-setup.sh
++++ b/modules.d/98systemd/module-setup.sh
+@@ -123,6 +123,7 @@ install() {
+         \
+         $tmpfilesdir/systemd.conf \
+         \
++        systemd-run systemd-escape \
+         journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles
+ 
+     inst_multiple -o \
diff --git a/SOURCES/0290-network-net-lib.sh-add-is_ip.patch b/SOURCES/0290-network-net-lib.sh-add-is_ip.patch
new file mode 100644
index 0000000..4da3898
--- /dev/null
+++ b/SOURCES/0290-network-net-lib.sh-add-is_ip.patch
@@ -0,0 +1,35 @@
+From d5447330844a1f16d927d42cd1d96c5425133aad Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:24:05 +0200
+Subject: [PATCH] network/net-lib.sh: add is_ip()
+
+add function to test if string is a valid IP
+
+(cherry picked from commit 01b23b6900eabefbfd1f589b9f12c8ff38c5afc0)
+---
+ modules.d/40network/net-lib.sh | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index cfc06fe..44c1bf0 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -2,6 +2,18 @@
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
++is_ip() {
++    echo "$1" | {
++        IFS=. read a b c d
++        test "$a" -ge 0 -a "$a" -le 255 \
++             -a "$b" -ge 0 -a "$b" -le 255 \
++             -a "$c" -ge 0 -a "$c" -le 255 \
++             -a "$d" -ge 0 -a "$d" -le 255 \
++             2> /dev/null
++    } && return 0
++    return 1
++}
++
+ get_ip() {
+     local iface="$1" ip=""
+     ip=$(ip -o -f inet addr show $iface)
diff --git a/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch b/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch
new file mode 100644
index 0000000..ce210da
--- /dev/null
+++ b/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch
@@ -0,0 +1,312 @@
+From e25c3dbb6f91ed999399c981f00ab1dd1b30d6f1 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:33:49 +0200
+Subject: [PATCH] iscsi: integrate with systemd and improve robustness
+
+parse-cmdline sets up an initial initiator-name to let iscsid start.
+
+iscsid is started before doing any iscsistart business.
+
+iscsistart is done with systemd-run asynchrone to do things in
+paralllel. Also restarted for every new interface which shows up.
+
+If rd.iscsi.waitnet (default) is set, iscsistart is done only
+after all interfaces are up.
+
+If not all interfaces are up and rd.iscsi.testroute (default) is set,
+the route to a iscsi target IP is checked and skipped, if there is none.
+
+If all things fail, we issue a "dummy" interface iscsiroot to retry
+everything in the initqueue/timeout.
+
+(cherry picked from commit d94050ddaea8343d8adb8f151c8f4cad591d29d9)
+---
+ modules.d/95iscsi/cleanup-iscsi.sh   |   2 +-
+ modules.d/95iscsi/iscsiroot.sh       | 116 ++++++++++++++++++++++++-----------
+ modules.d/95iscsi/module-setup.sh    |  31 ++++++++++
+ modules.d/95iscsi/parse-iscsiroot.sh |  27 ++++++--
+ 4 files changed, 134 insertions(+), 42 deletions(-)
+
+diff --git a/modules.d/95iscsi/cleanup-iscsi.sh b/modules.d/95iscsi/cleanup-iscsi.sh
+index a2d5951..88a63e0 100755
+--- a/modules.d/95iscsi/cleanup-iscsi.sh
++++ b/modules.d/95iscsi/cleanup-iscsi.sh
+@@ -2,5 +2,5 @@
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+-[ -e /sys/module/bnx2i ] && killproc iscsiuio
++[ -z "${DRACUT_SYSTEMD}" ] && [ -e /sys/module/bnx2i ] && killproc iscsiuio
+ 
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 1de6fb7..68da9dd 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -38,7 +38,7 @@ iroot=${iroot#:}
+ # figured out a way how to check whether this is built-in or not
+ modprobe crc32c 2>/dev/null
+ 
+-if [ -e /sys/module/bnx2i ] && ! [ -e /tmp/iscsiuio-started ]; then
++if [ -z "${DRACUT_SYSTEMD}" ] && [ -e /sys/module/bnx2i ] && ! [ -e /tmp/iscsiuio-started ]; then
+         iscsiuio
+         > /tmp/iscsiuio-started
+ fi
+@@ -107,28 +107,47 @@ handle_netroot()
+ 
+     parse_iscsi_root "$1" || return 1
+ 
++    # Bail out early, if there is no route to the destination
++    if is_ip "$iscsi_target_ip" && [ "$netif" != "dummy" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then
++        ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0
++    fi
++
+ # XXX is this needed?
+     getarg ro && iscsirw=ro
+     getarg rw && iscsirw=rw
+     fsopts=${fsopts:+$fsopts,}${iscsirw}
+ 
++    if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
++           iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name)
++           echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++           rm -f /etc/iscsi/initiatorname.iscsi
++           mkdir -p /etc/iscsi
++           ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++           systemctl restart iscsid
++           sleep 1
++           > /tmp/iscsi_set_initiator
++    fi
++
+     if [ -z $iscsi_initiator ]; then
+-    # XXX Where are these from?
++        [ -f /run/initiatorname.iscsi ] && . /run/initiatorname.iscsi
+         [ -f /etc/initiatorname.iscsi ] && . /etc/initiatorname.iscsi
+         [ -f /etc/iscsi/initiatorname.iscsi ] && . /etc/iscsi/initiatorname.iscsi
+         iscsi_initiator=$InitiatorName
+-
+-    # XXX rfc3720 says 'SCSI Initiator Name: The iSCSI Initiator Name specifies
+-    # the worldwide unique name of the initiator.' Could we use hostname/ip
+-    # if missing?
+     fi
+ 
+     if [ -z $iscsi_initiator ]; then
+-       if [ -f /sys/firmware/ibft/initiator/initiator-name ]; then
+-           iscsi_initiator=$(while read line; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name)
+-       fi
++        iscsi_initiator=$(iscsi-iname)
++        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++        rm -f /etc/iscsi/initiatorname.iscsi
++        mkdir -p /etc/iscsi
++        ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++        systemctl restart iscsid
++        > /tmp/iscsi_set_initiator
++        # FIXME: iscsid is not yet ready, when the service is :-/
++        sleep 1
+     fi
+ 
++
+     if [ -z $iscsi_target_port ]; then
+         iscsi_target_port=3260
+     fi
+@@ -137,23 +156,21 @@ handle_netroot()
+         iscsi_target_group=1
+     fi
+ 
+-    if [ -z $iscsi_initiator ]; then
+-    # XXX is this correct?
+-        iscsi_initiator=$(iscsi-iname)
+-    fi
+-
+     if [ -z $iscsi_lun ]; then
+         iscsi_lun=0
+     fi
+ 
+-    echo "InitiatorName='$iscsi_initiator'" > /run/initiatorname.iscsi
++    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
+     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
+-
++    if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then
++        mkdir -p /etc/iscsi
++        ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++    fi
+ # FIXME $iscsi_protocol??
+ 
+-    if [ "$root" = "dhcp" ]; then
++    if [ "$root" = "dhcp" ] || [ "$netroot" = "dhcp" ]; then
+         # if root is not specified try to mount the whole iSCSI LUN
+-        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' $iscsi_lun >> /etc/udev/rules.d/99-iscsi-root.rules
++        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$iscsi_lun" >> /etc/udev/rules.d/99-iscsi-root.rules
+         udevadm control --reload
+         write_fs_tab /dev/root
+         wait_for_dev -n /dev/root
+@@ -163,29 +180,58 @@ handle_netroot()
+             echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh
+     fi
+ 
+-    # force udevsettle to break
+-    > $hookdir/initqueue/work
+-
+-    iscsistart -i $iscsi_initiator -t $iscsi_target_name        \
+-        -g $iscsi_target_group -a $iscsi_target_ip      \
+-        -p $iscsi_target_port \
+-        ${iscsi_username:+-u $iscsi_username} \
+-        ${iscsi_password:+-w $iscsi_password} \
+-        ${iscsi_in_username:+-U $iscsi_in_username} \
+-        ${iscsi_in_password:+-W $iscsi_in_password} \
+-	${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \
+-	${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \
+-        ${iscsi_param} \
+-	|| :
+-
++    if [ -n "$DRACUT_SYSTEMD" ] && command -v systemd-run >/dev/null 2>&1; then
++        netroot_enc=$(systemd-escape "iscsistart_${1}")
++        status=$(systemctl is-active "$netroot_enc" 2>/dev/null)
++        is_active=$?
++        if [ $is_active -ne 0 ]; then
++            if [ "$status" != "activating" ] && ! systemctl is-failed "$netroot_enc" >/dev/null 2>&1; then
++                systemd-run --no-block --service-type=oneshot --remain-after-exit --quiet \
++                            --description="Login iSCSI Target $iscsi_target_name" \
++                            --unit="$netroot_enc" -- \
++                            $(command -v iscsistart) \
++                            -i $iscsi_initiator -t $iscsi_target_name        \
++                            -g $iscsi_target_group -a $iscsi_target_ip      \
++                            -p $iscsi_target_port \
++                            ${iscsi_username:+-u $iscsi_username} \
++                            ${iscsi_password:+-w $iscsi_password} \
++                            ${iscsi_in_username:+-U $iscsi_in_username} \
++                            ${iscsi_in_password:+-W $iscsi_in_password} \
++	                    ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \
++	                    ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \
++                            ${iscsi_param} >/dev/null 2>&1
++            else
++                systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1
++            fi
++        fi
++    else
++        > $hookdir/initqueue/work
++        iscsistart -i $iscsi_initiator -t $iscsi_target_name        \
++                   -g $iscsi_target_group -a $iscsi_target_ip      \
++                   -p $iscsi_target_port \
++                   ${iscsi_username:+-u $iscsi_username} \
++                   ${iscsi_password:+-w $iscsi_password} \
++                   ${iscsi_in_username:+-U $iscsi_in_username} \
++                   ${iscsi_in_password:+-W $iscsi_in_password} \
++	           ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \
++	           ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \
++                   ${iscsi_param} \
++	    || :
++    fi
+     netroot_enc=$(str_replace "$1" '/' '\2f')
+     echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}"
++    return 0
+ }
+ 
+ ret=0
+ 
++if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then
++    all_ifaces_up || exit 0
++fi
++
+ # loop over all netroot parameter
+-if getarg netroot; then
++netroot=$(getarg netroot)
++if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then
+     for nroot in $(getargs netroot); do
+         [ "${nroot%%:*}" = "iscsi" ] || continue
+         nroot="${nroot##iscsi:}"
+@@ -212,6 +258,6 @@ fi
+ 
+ need_shutdown
+ 
+-# now we have a root filesystem somewhere in /dev/sda*
++# now we have a root filesystem somewhere in /dev/sd*
+ # let the normal block handler handle root=
+ exit $ret
+diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
+index 49f9a0e..d12eb7d 100755
+--- a/modules.d/95iscsi/module-setup.sh
++++ b/modules.d/95iscsi/module-setup.sh
+@@ -83,6 +83,37 @@ install() {
+     inst "$moddir/iscsiroot.sh" "/sbin/iscsiroot"
+     if ! dracut_module_included "systemd"; then
+         inst "$moddir/mount-lun.sh" "/bin/mount-lun.sh"
++    else
++        inst_multiple -o \
++                      $systemdsystemunitdir/iscsi.service \
++                      $systemdsystemunitdir/iscsid.service \
++                      $systemdsystemunitdir/iscsid.socket \
++                      $systemdsystemunitdir/iscsiuio.service \
++                      $systemdsystemunitdir/iscsiuio.socket \
++                      iscsiadm iscsid
++
++        mkdir -p "${initdir}/$systemdsystemunitdir/sockets.target.wants"
++        for i in \
++                iscsiuio.socket \
++            ; do
++            ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/sockets.target.wants/${i}"
++        done
++
++        mkdir -p "${initdir}/$systemdsystemunitdir/basic.target.wants"
++        for i in \
++                iscsid.service \
++            ; do
++            ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/basic.target.wants/${i}"
++        done
++
++        # Make sure iscsid is started after dracut-cmdline and ready for the initqueue
++        mkdir -p "${initdir}/$systemdsystemunitdir/iscsid.service.d"
++        (
++            echo "[Unit]"
++            echo "After=dracut-cmdline.service"
++            echo "Before=dracut-initqueue.service"
++        ) > "${initdir}/$systemdsystemunitdir/iscsid.service.d/dracut.conf"
+     fi
++
+     dracut_need_initqueue
+ }
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index b48be38..6a21b50 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -61,12 +61,13 @@ fi
+ 
+ # iscsi_firmware does not need argument checking
+ if [ -n "$iscsi_firmware" ] ; then
+-    netroot=${netroot:-iscsi:}
+-    modprobe -q iscsi_boot_sysfs 2>/dev/null
+-    modprobe -q iscsi_ibft
+-    initqueue --onetime --timeout /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
++    [ -z "$netroot" ] && netroot=iscsi:
++    modprobe -b -q iscsi_boot_sysfs 2>/dev/null
++    modprobe -b -q iscsi_ibft
+ fi
+ 
++initqueue --onetime --timeout /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
++
+ # If it's not iscsi we don't continue
+ [ "${netroot%%:*}" = "iscsi" ] || return
+ 
+@@ -92,8 +93,22 @@ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; the
+     fi
+ fi
+ 
+-netroot_enc=$(str_replace "$netroot" '/' '\2f')
+-echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh
++if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then
++    iscsi_initiator=$arg
++    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++    ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
++    if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then
++        mkdir -p /etc/iscsi
++        ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++    fi
++fi
++
++if [ -n "$iscsi_firmware" ] ; then
++    echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
++else
++    netroot_enc=$(str_replace "$netroot" '/' '\2f')
++    echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh
++fi
+ 
+ # Done, all good!
+ rootok=1
diff --git a/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch b/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch
new file mode 100644
index 0000000..3df3b35
--- /dev/null
+++ b/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch
@@ -0,0 +1,28 @@
+From a9a38f9f6014fd0b8c6e1779793da74c88b85b10 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 15:11:17 +0200
+Subject: [PATCH] dracut.cmdline.7.asc: document rd.iscsi.waitnet and
+ rd.iscsi.testroute
+
+(cherry picked from commit 69171aa8fa4bdd196709318582d73076677bd16c)
+---
+ dracut.cmdline.7.asc | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
+index 5f3dead..1cf962e 100644
+--- a/dracut.cmdline.7.asc
++++ b/dracut.cmdline.7.asc
+@@ -704,6 +704,12 @@ iscsistart -b --param node.session.timeo.replacement_timeout=30
+ **rd.iscsi.ibft** **rd.iscsi.ibft=1**:
+     Turn on iBFT autoconfiguration for the interfaces
+ 
++**rd.iscsi.waitnet=0**:
++    Turn off waiting for all interfaces to be up before trying to login to the iSCSI targets.
++
++**rd.iscsi.testroute=0**:
++    Turn off checking, if the route to the iSCSI target IP is possible before trying to login.
++
+ FCoE
+ ~~~~
+ **fcoe=**__<edd|interface|MAC>__:__{dcb|nodcb}__::
diff --git a/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch b/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch
new file mode 100644
index 0000000..f209692
--- /dev/null
+++ b/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch
@@ -0,0 +1,42 @@
+From d9b00731c81fa2facd5c6088a08bdd579d550eba Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 15:14:11 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: use iBFT initiator name
+
+(cherry picked from commit feb8dc685dca1229c517de9ec9854367b8c49524)
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 6a21b50..2939e58 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -60,7 +60,7 @@ if [ -n "$iscsiroot" ] ; then
+ fi
+ 
+ # iscsi_firmware does not need argument checking
+-if [ -n "$iscsi_firmware" ] ; then
++if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
+     [ -z "$netroot" ] && netroot=iscsi:
+     modprobe -b -q iscsi_boot_sysfs 2>/dev/null
+     modprobe -b -q iscsi_ibft
+@@ -103,6 +103,18 @@ if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then
+     fi
+ fi
+ 
++# If not given on the cmdline and initiator-name available via iBFT
++if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
++    iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name)
++    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++    rm -f /etc/iscsi/initiatorname.iscsi
++    mkdir -p /etc/iscsi
++    ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++    systemctl restart iscsid
++    sleep 1
++    > /tmp/iscsi_set_initiator
++fi
++
+ if [ -n "$iscsi_firmware" ] ; then
+     echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
+ else
diff --git a/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch b/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch
new file mode 100644
index 0000000..9116ac0
--- /dev/null
+++ b/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch
@@ -0,0 +1,58 @@
+From 543a6d5cab7538cd9cf94b43b97ac96d995c7d2f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 13 Aug 2015 11:53:21 +0200
+Subject: [PATCH] iscsi/iscsiroot.sh: handle timeout with all interfaces up
+
+restart iscsid, because it may disbehaved
+
+(cherry picked from commit 6802cf23499b05544079b26a39e339bb3476d38d)
+---
+ modules.d/95iscsi/iscsiroot.sh | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 68da9dd..9452afe 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -199,13 +199,14 @@ handle_netroot()
+                             ${iscsi_in_password:+-W $iscsi_in_password} \
+ 	                    ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \
+ 	                    ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \
+-                            ${iscsi_param} >/dev/null 2>&1
++                            ${iscsi_param} >/dev/null 2>&1 \
++	            && { > $hookdir/initqueue/work ; }
+             else
+-                systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1
++                systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1 \
++	            && { > $hookdir/initqueue/work ; }
+             fi
+         fi
+     else
+-        > $hookdir/initqueue/work
+         iscsistart -i $iscsi_initiator -t $iscsi_target_name        \
+                    -g $iscsi_target_group -a $iscsi_target_ip      \
+                    -p $iscsi_target_port \
+@@ -216,7 +217,7 @@ handle_netroot()
+ 	           ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \
+ 	           ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \
+                    ${iscsi_param} \
+-	    || :
++	    && { > $hookdir/initqueue/work ; }
+     fi
+     netroot_enc=$(str_replace "$1" '/' '\2f')
+     echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}"
+@@ -229,6 +230,14 @@ if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then
+     all_ifaces_up || exit 0
+ fi
+ 
++if [ "$netif" = "dummy" ] && all_ifaces_up; then
++    # s.th. went wrong and the timeout script hits
++    # restart
++    systemctl restart iscsid
++    # damn iscsid is not ready after unit says it's ready
++    sleep 2
++fi
++
+ # loop over all netroot parameter
+ netroot=$(getarg netroot)
+ if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then
diff --git a/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch b/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch
new file mode 100644
index 0000000..21b517f
--- /dev/null
+++ b/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch
@@ -0,0 +1,25 @@
+From 99b9b4896e751fa17d64ded496aba3161f665ffb Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:40:42 +0200
+Subject: [PATCH] TEST-30-ISCSI/dhcpd.conf: set the LUN
+
+set the LUN, so the udev rule to mount the disk matches
+
+(cherry picked from commit 52b91b66980d0de18a52c6c1c5334364b115fee2)
+---
+ test/TEST-30-ISCSI/dhcpd.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/TEST-30-ISCSI/dhcpd.conf b/test/TEST-30-ISCSI/dhcpd.conf
+index 6eb035b..22c1790 100644
+--- a/test/TEST-30-ISCSI/dhcpd.conf
++++ b/test/TEST-30-ISCSI/dhcpd.conf
+@@ -15,7 +15,7 @@ subnet 192.168.50.0 netmask 255.255.255.0 {
+ 	# NFSv3: last octect starts at 0x00 and works up
+ 
+ 	group {
+-		option root-path "iscsi:192.168.50.1::::iqn.2009-06.dracut:target0";
++		option root-path "iscsi:192.168.50.1:::1:iqn.2009-06.dracut:target0";
+ 
+ 		host iscsi-1 {
+ 			hardware ethernet 52:54:00:12:34:00;
diff --git a/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch b/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch
new file mode 100644
index 0000000..b7896a7
--- /dev/null
+++ b/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch
@@ -0,0 +1,349 @@
+From 1a2c9bbd2d611c801df3f342d5302f91602d77d6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 12 Aug 2015 14:42:03 +0200
+Subject: [PATCH] TEST-30-ISCSI: switch to scsi-target-utils
+
+netbsd-iscsi is not available on RHEL
+
+Beef up the testsuite to use the two targets over different
+interfaces.
+
+Test the new iSCSI parameters rd.iscsi.waitnet and rd.iscsi.testroute.
+
+(cherry picked from commit c22c43f81a5f15c8759e6aa69773d0e9010c4741)
+---
+ README.testsuite                  |  20 ++++---
+ test/TEST-30-ISCSI/server-init.sh |  24 +++++++-
+ test/TEST-30-ISCSI/targets        |  25 --------
+ test/TEST-30-ISCSI/test.sh        | 119 +++++++++++++++++++++++++++-----------
+ 4 files changed, 117 insertions(+), 71 deletions(-)
+ delete mode 100644 test/TEST-30-ISCSI/targets
+
+diff --git a/README.testsuite b/README.testsuite
+index f4955e0..247ed3a 100644
+--- a/README.testsuite
++++ b/README.testsuite
+@@ -1,14 +1,16 @@
+ For the testsuite to work, you will have to install at least the following software packages:
+-dash
+-asciidoc
+-mdadm
+-lvm2
+-cryptsetup
+-nfs-utils
+-netbsd-iscsi
+-nbd
+-dhcp (dhcp-server on openSUSE)
++dash \
++bridge-utils \
++asciidoc \
++mdadm \
++lvm2 \
++cryptsetup \
++nfs-utils \
++nbd \
++dhcp-server \
++scsi-target-utils \
+ iscsi-initiator-utils
++
+ TEST-04-FULL-SYSTEMD: systemd >= 187
+ 
+ How to run the testsuite:
+diff --git a/test/TEST-30-ISCSI/server-init.sh b/test/TEST-30-ISCSI/server-init.sh
+index 4bdd5e3..64a4755 100755
+--- a/test/TEST-30-ISCSI/server-init.sh
++++ b/test/TEST-30-ISCSI/server-init.sh
+@@ -12,10 +12,30 @@ ip link set lo up
+ ip link set dev eth0 name ens3
+ ip addr add 192.168.50.1/24 dev ens3
+ ip link set ens3 up
++ip link set dev eth1 name ens4
++ip addr add 192.168.51.1/24 dev ens4
++ip link set ens4 up
+ >/var/lib/dhcpd/dhcpd.leases
+ chmod 777 /var/lib/dhcpd/dhcpd.leases
+-dhcpd -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases
++dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases &
++
++tgtd
++tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2009-06.dracut:target0
++tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2009-06.dracut:target1
++tgtadm --lld iscsi --mode target --op new --tid 3 --targetname iqn.2009-06.dracut:target2
++tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sdb
++tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 2 -b /dev/sdc
++tgtadm --lld iscsi --mode logicalunit --op new --tid 3 --lun 3 -b /dev/sdd
++tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.50.101
++tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.51.101
++tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.50.101
++
++
+ # Wait forever for the VM to die
+-/usr/sbin/iscsi-target -D -t iqn.2009-06.dracut
++echo "Serving iSCSI"
++while :; do
++	[ -n "$(jobs -rp)" ] && echo > /dev/watchdog
++	sleep 10
++done
+ mount -n -o remount,ro /
+ poweroff -f
+diff --git a/test/TEST-30-ISCSI/targets b/test/TEST-30-ISCSI/targets
+deleted file mode 100644
+index 6a6872e..0000000
+--- a/test/TEST-30-ISCSI/targets
++++ /dev/null
+@@ -1,25 +0,0 @@
+-# $NetBSD: targets,v 1.2 2006/03/04 21:53:16 agc Exp $
+-#
+-# Structure of this file:
+-#
+-# + an extent is a straight (offset, length) pair of a file or device
+-#   it's the lowest common storage denominator
+-#   at least one is needed
+-# + a device is made up of one or more extents or other devices
+-#   devices can be added in a hierachical manner, to enhance resilience
+-# + in this example, no device definitions are necessary, as the target
+-#   will just use a simple extent for persistent storage
+-# + a target is made up of 1 or more devices
+-# The code does not support RAID1 recovery at present
+-
+-# Simple file showing 1 extent, mapped straight into 1 target
+-
+-# extents	file			start	length
+-extent0		/dev/sdb	0	20971520
+-extent1		/dev/sdc	0	20971520
+-extent2		/dev/sdd	0	20971520
+-
+-# target	flags	storage		netmask
+-target0		rw	extent0		192.168.50.0/24
+-target1		rw	extent1		192.168.50.0/24
+-target2		rw	extent2		192.168.50.0/24
+diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh
+index a258c04..be3399a 100755
+--- a/test/TEST-30-ISCSI/test.sh
++++ b/test/TEST-30-ISCSI/test.sh
+@@ -3,8 +3,10 @@ TEST_DESCRIPTION="root filesystem over iSCSI"
+ 
+ KVERSION=${KVERSION-$(uname -r)}
+ 
+-#DEBUGFAIL="rd.shell"
+-#SERIAL="tcp:127.0.0.1:9999"
++#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
++DEBUGFAIL="loglevel=1"
++#SERVER_DEBUG="rd.debug loglevel=7"
++SERIAL="tcp:127.0.0.1:9999"
+ SERIAL="null"
+ 
+ run_server() {
+@@ -12,17 +14,17 @@ run_server() {
+     echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"
+ 
+     $testdir/run-qemu \
+-        -hda $TESTDIR/server.ext3 \
+-        -hdb $TESTDIR/root.ext3 \
+-        -hdc $TESTDIR/iscsidisk2.img \
+-        -hdd $TESTDIR/iscsidisk3.img \
+-        -m 256M  -smp 2 \
++        -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \
++        -drive format=raw,index=1,media=disk,file=$TESTDIR/root.ext3 \
++        -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \
++        -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \
++        -m 512M  -smp 2 \
+         -display none \
+         -serial $SERIAL \
+         -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
++        -net nic,macaddr=52:54:00:12:34:57,model=e1000 \
+         -net socket,listen=127.0.0.1:12330 \
+-        -kernel /boot/vmlinuz-$KVERSION \
+-        -append "root=/dev/sda rootfstype=ext3 rw rd.debug loglevel=77 console=ttyS0,115200n81 selinux=0" \
++        -append "root=/dev/sda rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
+         -initrd $TESTDIR/initramfs.server \
+         -pidfile $TESTDIR/server.pid -daemonize || return 1
+     sudo chmod 644 $TESTDIR/server.pid || return 1
+@@ -41,12 +43,12 @@ run_client() {
+     dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1
+ 
+     $testdir/run-qemu \
+-        -hda $TESTDIR/client.img \
+-        -m 256M -smp 2 -nographic \
++        -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \
++        -m 512M -smp 2 -nographic \
+         -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
++        -net nic,macaddr=52:54:00:12:34:01,model=e1000 \
+         -net socket,connect=127.0.0.1:12330 \
+-        -kernel /boot/vmlinuz-$KVERSION \
+-        -append "$* rw quiet rd.auto rd.retry=5 rd.debug rd.info  console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \
++        -append "rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \
+         -initrd $TESTDIR/initramfs.testing
+     if ! grep -F -m 1 -q iscsi-OK $TESTDIR/client.img; then
+ 	echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
+@@ -58,20 +60,58 @@ run_client() {
+ }
+ 
+ do_test_run() {
++    initiator=$(iscsi-iname)
+ 
+     run_client "root=dhcp" \
+-        "root=dhcp" \
++               "root=/dev/root netroot=dhcp ip=ens3:dhcp" \
++               "rd.iscsi.initiator=$initiator" \
++        || return 1
++
++    run_client "netroot=iscsi target0"\
++               "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
++               "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \
++               "rd.iscsi.initiator=$initiator" \
++        || return 1
++
++    run_client "netroot=iscsi target1 target2" \
++               "root=LABEL=sysroot" \
++               "ip=192.168.50.101:::255.255.255.0::ens3:off" \
++               "ip=192.168.51.101:::255.255.255.0::ens4:off" \
++               "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
++               "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.initiator=$initiator" \
++        || return 1
++
++    run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \
++	       "root=LABEL=sysroot" \
++               "ip=192.168.50.101:::255.255.255.0::ens3:off" \
++               "ip=192.168.51.101:::255.255.255.0::ens4:off" \
++	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
++               "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.initiator=$initiator" \
++               "rd.waitnet=0 rd.retry=30" \
+ 	|| return 1
+ 
+-    run_client "root=iscsi" \
+-	"root=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
+-	"ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \
++    run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
++	       "root=LABEL=sysroot" \
++               "ip=192.168.50.101:::255.255.255.0::ens3:off" \
++               "ip=192.168.51.101:::255.255.255.0::ens4:off" \
++	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
++               "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.initiator=$initiator" \
++               "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \
+ 	|| return 1
+ 
+-    run_client "netroot=iscsi" \
+-	"iscsi_firmware root=LABEL=sysroot ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \
+-	"netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target1 netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++    run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \
++	       "root=LABEL=sysroot" \
++               "ip=192.168.50.101::192.168.50.1:255.255.255.0::ens3:off" \
++               "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens4:off" \
++	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
++               "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.initiator=$initiator" \
++               "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \
+ 	|| return 1
++
+     return 0
+ }
+ 
+@@ -105,15 +145,23 @@ test_setup() {
+     (
+         export initdir=$TESTDIR/overlay/source
+         . $basedir/dracut-init.sh
++        (
++            cd "$initdir"
++            mkdir -p -- dev sys proc etc var/run tmp
++            mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
++            for i in bin sbin lib lib64; do
++                ln -sfnr usr/$i $i
++            done
++            mkdir -p -- var/lib/nfs/rpc_pipefs
++        )
+         inst_multiple sh shutdown poweroff stty cat ps ln ip \
+-            mount dmesg mkdir cp ping grep
++            mount dmesg mkdir cp ping grep setsid
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+             [ -f ${_terminfodir}/l/linux ] && break
+         done
+         inst_multiple -o ${_terminfodir}/l/linux
+         inst_simple /etc/os-release
+         inst ./client-init.sh /sbin/init
+-        (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+         cp -a /etc/ld.so.conf* $initdir/etc
+         sudo ldconfig -r "$initdir"
+     )
+@@ -122,7 +170,7 @@ test_setup() {
+     (
+         export initdir=$TESTDIR/overlay
+         . $basedir/dracut-init.sh
+-        inst_multiple sfdisk mkfs.ext3 poweroff cp umount
++        inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid
+         inst_hook initqueue 01 ./create-root.sh
+         inst_hook initqueue/finished 01 ./finished-false.sh
+         inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -132,8 +180,9 @@ test_setup() {
+     # We do it this way so that we do not risk trashing the host mdraid
+     # devices, volume groups, encrypted partitions, etc.
+     $basedir/dracut.sh -l -i $TESTDIR/overlay / \
+-        -m "dash crypt lvm mdraid udev-rules base rootfs-block kernel-modules" \
++        -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules" \
+         -d "piix ide-gd_mod ata_piix ext3 sd_mod" \
++        --no-hostonly-cmdline -N \
+         -f $TESTDIR/initramfs.makeroot $KVERSION || return 1
+     rm -rf -- $TESTDIR/overlay
+ 
+@@ -145,12 +194,11 @@ test_setup() {
+     fi
+     # Invoke KVM and/or QEMU to actually create the target filesystem.
+     $testdir/run-qemu \
+-        -hda $TESTDIR/root.ext3 \
+-        -hdb $TESTDIR/client.img \
+-        -hdc $TESTDIR/iscsidisk2.img \
+-        -hdd $TESTDIR/iscsidisk3.img \
++        -drive format=raw,index=0,media=disk,file=$TESTDIR/root.ext3 \
++        -drive format=raw,index=1,media=disk,file=$TESTDIR/client.img \
++        -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \
++        -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \
+         -smp 2 -m 256M -nographic -net none \
+-        -kernel "/boot/vmlinuz-$kernel" \
+         -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
+         -initrd $TESTDIR/initramfs.makeroot  || return 1
+     grep -F -m 1 -q dracut-root-block-created $TESTDIR/client.img || return 1
+@@ -163,9 +211,10 @@ test_setup() {
+         inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+     )
+     sudo $basedir/dracut.sh -l -i $TESTDIR/overlay / \
+-        -o "dash plymouth dmraid" \
++        -o "dash plymouth dmraid nfs" \
+         -a "debug" \
+         -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \
++        --no-hostonly-cmdline -N \
+         -f $TESTDIR/initramfs.testing $KVERSION || return 1
+ 
+     # Make server root
+@@ -185,15 +234,14 @@ test_setup() {
+         inst /etc/passwd /etc/passwd
+         inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+             dmesg mkdir cp ping \
+-            modprobe tcpdump \
++            modprobe tcpdump setsid \
+             /etc/services sleep mount chmod
+-        inst_multiple /usr/sbin/iscsi-target
++        inst_multiple tgtd tgtadm
+         for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+             [ -f ${_terminfodir}/l/linux ] && break
+         done
+         inst_multiple -o ${_terminfodir}/l/linux
+         instmods iscsi_tcp crc32c ipv6
+-        inst ./targets /etc/iscsi/targets
+         [ -f /etc/netconfig ] && inst_multiple /etc/netconfig
+         type -P dhcpd >/dev/null && inst_multiple dhcpd
+         [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
+@@ -214,8 +262,9 @@ test_setup() {
+ 
+     # Make server's dracut image
+     $basedir/dracut.sh -l -i $TESTDIR/overlay / \
+-        -m "dash udev-rules base rootfs-block debug kernel-modules" \
+-        -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000" \
++        -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \
++        -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
++        --no-hostonly-cmdline -N \
+         -f $TESTDIR/initramfs.server $KVERSION || return 1
+ 
+ }
diff --git a/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch b/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch
new file mode 100644
index 0000000..becd7c8
--- /dev/null
+++ b/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch
@@ -0,0 +1,24 @@
+From 88329f6b4f4581a50842d1fe82f11cb052e7f100 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Sat, 15 Aug 2015 13:21:29 +0200
+Subject: [PATCH] iscsi/iscsiroot.sh: systemd-run does not understand
+ --no-block
+
+not yet on RHEL-7
+---
+ modules.d/95iscsi/iscsiroot.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 9452afe..2ac9ed3 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -186,7 +186,7 @@ handle_netroot()
+         is_active=$?
+         if [ $is_active -ne 0 ]; then
+             if [ "$status" != "activating" ] && ! systemctl is-failed "$netroot_enc" >/dev/null 2>&1; then
+-                systemd-run --no-block --service-type=oneshot --remain-after-exit --quiet \
++                systemd-run --service-type=oneshot --remain-after-exit --quiet \
+                             --description="Login iSCSI Target $iscsi_target_name" \
+                             --unit="$netroot_enc" -- \
+                             $(command -v iscsistart) \
diff --git a/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch b/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch
new file mode 100644
index 0000000..a78f500
--- /dev/null
+++ b/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch
@@ -0,0 +1,21 @@
+From f74b0a9f38838dddcf6f56daa9f20fc3e86087ca Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Sat, 15 Aug 2015 13:22:07 +0200
+Subject: [PATCH] iscsi/module-setup.sh: iscsid need /var/lib/iscsi
+
+---
+ modules.d/95iscsi/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
+index d12eb7d..4ecba05 100755
+--- a/modules.d/95iscsi/module-setup.sh
++++ b/modules.d/95iscsi/module-setup.sh
+@@ -114,6 +114,6 @@ install() {
+             echo "Before=dracut-initqueue.service"
+         ) > "${initdir}/$systemdsystemunitdir/iscsid.service.d/dracut.conf"
+     fi
+-
++    inst_dir /var/lib/iscsi
+     dracut_need_initqueue
+ }
diff --git a/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch b/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch
new file mode 100644
index 0000000..fc14c06
--- /dev/null
+++ b/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch
@@ -0,0 +1,99 @@
+From 836ca3f47eb0b0a4c97ae704b0b9619a00dbfa87 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Sat, 15 Aug 2015 13:22:44 +0200
+Subject: [PATCH] TEST-30-ISCSI: fix test to run with new iscsi
+
+---
+ test/TEST-30-ISCSI/client-init.sh |  8 +++++++-
+ test/TEST-30-ISCSI/create-root.sh |  2 +-
+ test/TEST-30-ISCSI/test.sh        | 10 +++++-----
+ 3 files changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/test/TEST-30-ISCSI/client-init.sh b/test/TEST-30-ISCSI/client-init.sh
+index e78db27..2e422cd 100755
+--- a/test/TEST-30-ISCSI/client-init.sh
++++ b/test/TEST-30-ISCSI/client-init.sh
+@@ -1,14 +1,20 @@
+ #!/bin/sh
+ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ exec >/dev/console 2>&1
++strstr() { [ "${1##*"$2"*}" != "$1" ]; }
++CMDLINE=$(while read line || [ -n "$line" ]; do echo $line;done < /proc/cmdline)
+ export TERM=linux
+ export PS1='initramfs-test:\w\$ '
+ stty sane
+ echo "made it to the rootfs! Powering down."
+-while read dev fs fstype opts rest; do
++while read dev fs fstype opts rest || [ -n "$dev" ]; do
+     [ "$fstype" != "ext3" ] && continue
+     echo "iscsi-OK $dev $fstype $opts" > /dev/sda
+     break
+ done < /proc/mounts
+ #sh -i
++if strstr "$CMDLINE" "rd.shell"; then
++	strstr "$(setsid --help)" "control" && CTTY="-c"
++	setsid $CTTY sh -i
++fi
+ poweroff -f
+diff --git a/test/TEST-30-ISCSI/create-root.sh b/test/TEST-30-ISCSI/create-root.sh
+index 2a4b920..5f4b32a 100755
+--- a/test/TEST-30-ISCSI/create-root.sh
++++ b/test/TEST-30-ISCSI/create-root.sh
+@@ -5,7 +5,7 @@ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
+ done
+ rm -f -- /etc/lvm/lvm.conf
+ udevadm control --reload
+-mkfs.ext3 -j -F /dev/sda && \
++mkfs.ext3 -j -L singleroot -F /dev/sda && \
+ mkdir -p /sysroot && \
+ mount /dev/sda /sysroot && \
+ cp -a -t /sysroot /source/* && \
+diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh
+index be3399a..92ddc86 100755
+--- a/test/TEST-30-ISCSI/test.sh
++++ b/test/TEST-30-ISCSI/test.sh
+@@ -3,7 +3,7 @@ TEST_DESCRIPTION="root filesystem over iSCSI"
+ 
+ KVERSION=${KVERSION-$(uname -r)}
+ 
+-#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
++DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
+ DEBUGFAIL="loglevel=1"
+ #SERVER_DEBUG="rd.debug loglevel=7"
+ SERIAL="tcp:127.0.0.1:9999"
+@@ -48,7 +48,7 @@ run_client() {
+         -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
+         -net nic,macaddr=52:54:00:12:34:01,model=e1000 \
+         -net socket,connect=127.0.0.1:12330 \
+-        -append "rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \
++        -append "rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \
+         -initrd $TESTDIR/initramfs.testing
+     if ! grep -F -m 1 -q iscsi-OK $TESTDIR/client.img; then
+ 	echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
+@@ -89,7 +89,7 @@ do_test_run() {
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
+                "rd.iscsi.initiator=$initiator" \
+-               "rd.waitnet=0 rd.retry=30" \
++               "rd.iscsi.waitnet=0" \
+ 	|| return 1
+ 
+     run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
+@@ -99,7 +99,7 @@ do_test_run() {
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
+                "rd.iscsi.initiator=$initiator" \
+-               "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \
++               "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
+ 	|| return 1
+ 
+     run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \
+@@ -109,7 +109,7 @@ do_test_run() {
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
+                "rd.iscsi.initiator=$initiator" \
+-               "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \
++               "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
+ 	|| return 1
+ 
+     return 0
diff --git a/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch b/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch
new file mode 100644
index 0000000..85b9ba7
--- /dev/null
+++ b/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch
@@ -0,0 +1,22 @@
+From 415d0c68ab1aaff7892e2187f8a18341bfeef796 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Sat, 15 Aug 2015 15:42:51 +0200
+Subject: [PATCH] dracut-logger.sh: log also rest of line without return
+
+---
+ dracut-logger.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dracut-logger.sh b/dracut-logger.sh
+index 70b0da4..ffa5616 100755
+--- a/dracut-logger.sh
++++ b/dracut-logger.sh
+@@ -367,7 +367,7 @@ dlog() {
+     if (( $# > 1 )); then
+         _do_dlog "$@"
+     else
+-        while read line; do
++        while read line || [ -n "$line" ]; do
+             _do_dlog "$1" "$line"
+         done
+     fi
diff --git a/SOURCES/0301-iscsi-handle-timeout-case-better.patch b/SOURCES/0301-iscsi-handle-timeout-case-better.patch
new file mode 100644
index 0000000..8512509
--- /dev/null
+++ b/SOURCES/0301-iscsi-handle-timeout-case-better.patch
@@ -0,0 +1,124 @@
+From bfe65f913a4bc6bc5fdb7aa75234c229a2ceef8f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 11:50:15 +0200
+Subject: [PATCH] iscsi: handle timeout case better
+
+---
+ modules.d/95iscsi/iscsiroot.sh       |  6 +++---
+ modules.d/95iscsi/parse-iscsiroot.sh | 41 +++++++++++++++++++++---------------
+ 2 files changed, 27 insertions(+), 20 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 2ac9ed3..b7370f6 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -108,7 +108,7 @@ handle_netroot()
+     parse_iscsi_root "$1" || return 1
+ 
+     # Bail out early, if there is no route to the destination
+-    if is_ip "$iscsi_target_ip" && [ "$netif" != "dummy" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then
++    if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then
+         ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0
+     fi
+ 
+@@ -226,11 +226,11 @@ handle_netroot()
+ 
+ ret=0
+ 
+-if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then
++if [ "$netif" != "timeout" ] && getargbool 1 rd.iscsi.waitnet; then
+     all_ifaces_up || exit 0
+ fi
+ 
+-if [ "$netif" = "dummy" ] && all_ifaces_up; then
++if [ "$netif" = "timeout" ] && all_ifaces_up; then
+     # s.th. went wrong and the timeout script hits
+     # restart
+     systemctl restart iscsid
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 2939e58..91cd463 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -42,7 +42,11 @@ if [ "${root%%:*}" = "iscsi" ] ; then
+ fi
+ 
+ # If it's not empty or iscsi we don't continue
+-[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return
++for nroot in $(getargs netroot); do
++    [ "${nroot%%:*}" = "iscsi" ] || continue
++    netroot="$nroot"
++    break
++done
+ 
+ if [ -n "$iscsiroot" ] ; then
+     [ -z "$netroot" ]  && netroot=$root
+@@ -64,12 +68,16 @@ if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
+     [ -z "$netroot" ] && netroot=iscsi:
+     modprobe -b -q iscsi_boot_sysfs 2>/dev/null
+     modprobe -b -q iscsi_ibft
++    # if no ip= is given, but firmware
++    echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
++    initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
++    initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
+ fi
+ 
+-initqueue --onetime --timeout /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
+ 
+-# If it's not iscsi we don't continue
+-[ "${netroot%%:*}" = "iscsi" ] || return
++[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1
++
++initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
+ 
+ modprobe -q qla4xxx
+ modprobe -q cxgb3i
+@@ -77,11 +85,6 @@ modprobe -q cxgb4i
+ modprobe -q bnx2i
+ modprobe -q be2iscsi
+ 
+-if [ -z "$iscsi_firmware" ] ; then
+-    type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh
+-    parse_iscsi_root "$netroot" || return
+-fi
+-
+ # ISCSI actually supported?
+ if ! [ -e /sys/module/iscsi_tcp ]; then
+     modprobe -q iscsi_tcp || die "iscsiroot requested but kernel/initrd does not support iscsi"
+@@ -89,7 +92,7 @@ fi
+ 
+ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
+     if ! getargbool 1 rd.neednet >/dev/null || ! getarg "ip="; then
+-        initqueue --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
++        initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
+     fi
+ fi
+ 
+@@ -110,17 +113,21 @@ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ]
+     rm -f /etc/iscsi/initiatorname.iscsi
+     mkdir -p /etc/iscsi
+     ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+-    systemctl restart iscsid
+-    sleep 1
+     > /tmp/iscsi_set_initiator
++    if systemctl --quiet is-active iscsid.service; then
++        systemctl restart iscsid
++        sleep 1
++    fi
+ fi
+ 
+-if [ -n "$iscsi_firmware" ] ; then
+-    echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
+-else
+-    netroot_enc=$(str_replace "$netroot" '/' '\2f')
++
++for nroot in $(getargs netroot); do
++    [ "${nroot%%:*}" = "iscsi" ] || continue
++    type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh
++    parse_iscsi_root "$nroot" || return 1
++    netroot_enc=$(str_replace "$nroot" '/' '\2f')
+     echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh
+-fi
++done
+ 
+ # Done, all good!
+ rootok=1
diff --git a/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch b/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch
new file mode 100644
index 0000000..54e6405
--- /dev/null
+++ b/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch
@@ -0,0 +1,29 @@
+From ad565584a3b7d5795be80aee34307f1752a093b4 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 11:50:40 +0200
+Subject: [PATCH] base/dracut-lib.sh:vinfo/vwarn handle lines without newline
+
+---
+ modules.d/99base/dracut-lib.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index 3ffbb02..b6593a0 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -67,13 +67,13 @@ else
+ fi
+ 
+ vwarn() {
+-    while read line; do
++    while read line || [ -n "$line" ]; do
+         warn $line;
+     done
+ }
+ 
+ vinfo() {
+-    while read line; do
++    while read line || [ -n "$line" ]; do
+         info $line;
+     done
+ }
diff --git a/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch b/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch
new file mode 100644
index 0000000..d3d9fb3
--- /dev/null
+++ b/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch
@@ -0,0 +1,23 @@
+From 93a5a3d3ca6738e3f0282c4d3fc8be3f38f150d3 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 11:52:56 +0200
+Subject: [PATCH] systemd/dracut-cmdline.sh: print out cmdline in one line
+
+---
+ modules.d/98systemd/dracut-cmdline.sh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/modules.d/98systemd/dracut-cmdline.sh b/modules.d/98systemd/dracut-cmdline.sh
+index 8a5ab2f..9d15663 100755
+--- a/modules.d/98systemd/dracut-cmdline.sh
++++ b/modules.d/98systemd/dracut-cmdline.sh
+@@ -15,8 +15,7 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ [ -f /etc/initrd-release ] && . /etc/initrd-release
+ [ -n "$VERSION" ] && info "dracut-$VERSION"
+ 
+-info "Using kernel command line parameters:"
+-getcmdline | vinfo
++info "Using kernel command line parameters:" $(getcmdline)
+ 
+ getargbool 0 rd.udev.log-priority=info -d rd.udev.info -d -n -y rdudevinfo && echo 'udev_log="info"' >> /etc/udev/udev.conf
+ getargbool 0 rd.udev.log-priority=debug -d rd.udev.debug -d -n -y rdudevdebug && echo 'udev_log="debug"' >> /etc/udev/udev.conf
diff --git a/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch b/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch
new file mode 100644
index 0000000..1055d3e
--- /dev/null
+++ b/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch
@@ -0,0 +1,23 @@
+From fb2d643a385f1b02fbac6c2782b0026029c6bde7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 11:53:31 +0200
+Subject: [PATCH] network/ifup.sh: let dhcp client run in the background
+
+we need to renew the lease
+---
+ modules.d/40network/ifup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 2f51e6d..ab87578 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -114,7 +114,7 @@ do_dhcp() {
+         info "Starting dhcp for interface $netif"
+         dhclient "$@" \
+                  ${_timeout:+-timeout $_timeout} \
+-                 -1 -q \
++                 -q \
+                  -cf /etc/dhclient.conf \
+                  -pf /tmp/dhclient.$netif.pid \
+                  -lf /tmp/dhclient.$netif.lease \
diff --git a/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch b/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch
new file mode 100644
index 0000000..ee6d6d8
--- /dev/null
+++ b/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch
@@ -0,0 +1,24 @@
+From 38180271c587f3053710bf38a6cda829d3a7c00f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:07:41 +0200
+Subject: [PATCH] network/ifup.sh: arping for static IPv4 addresses
+
+---
+ modules.d/40network/ifup.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index ab87578..8a5a606 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -163,6 +163,10 @@ do_static() {
+         ip addr add $ip/$mask ${srv:+peer $srv} dev $netif
+         wait_for_ipv6_dad $netif
+     else
++        if ! arping -f -q -D -c 2 -I $netif $ip; then
++            warn "Duplicate address detected for $ip for interface $netif."
++            return 1
++        fi
+         ip addr flush dev $netif
+         ip addr add $ip/$mask ${srv:+peer $srv} brd + dev $netif
+     fi
diff --git a/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch b/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch
new file mode 100644
index 0000000..1134509
--- /dev/null
+++ b/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch
@@ -0,0 +1,31 @@
+From 2eb3b00133d572183ca022b626d200549ce4ffa8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:13:55 +0200
+Subject: [PATCH] network/parse-ip-opts.sh: bind enx* interface to the MAC
+
+do it automatically for the persistent naming scheme
+---
+ modules.d/40network/parse-ip-opts.sh | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh
+index faee8f9..7c403f7 100755
+--- a/modules.d/40network/parse-ip-opts.sh
++++ b/modules.d/40network/parse-ip-opts.sh
+@@ -113,6 +113,16 @@ for p in $(getargs ip=); do
+         die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
+     fi
+ 
++    if str_starts "$dev" "enx" && [ ${#dev} -eq 15 ]; then
++        printf -- "ifname=%s:%s:%s:%s:%s:%s:%s\n" \
++               "$dev" \
++               "${dev:3:2}" \
++               "${dev:5:2}" \
++               "${dev:7:2}" \
++               "${dev:9:2}" \
++               "${dev:11:2}" \
++               "${dev:13:2}" >> /etc/cmdline.d/80-enx.conf
++    fi
+ done
+ 
+ # put BOOTIF in IFACES to make sure it comes up
diff --git a/SOURCES/0307-udev-rules-install-40-redhat.rules.patch b/SOURCES/0307-udev-rules-install-40-redhat.rules.patch
new file mode 100644
index 0000000..5bff134
--- /dev/null
+++ b/SOURCES/0307-udev-rules-install-40-redhat.rules.patch
@@ -0,0 +1,47 @@
+From 0c0abf97ccc2306a7089d53a0a1f92e80b2e733c Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:25:53 +0200
+Subject: [PATCH] udev-rules: install 40-redhat.rules
+
+---
+ modules.d/95udev-rules/module-setup.sh | 25 ++++++++++++++++++-------
+ 1 file changed, 18 insertions(+), 7 deletions(-)
+
+diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh
+index fdea8c6..e0f2e38 100755
+--- a/modules.d/95udev-rules/module-setup.sh
++++ b/modules.d/95udev-rules/module-setup.sh
+@@ -26,15 +26,26 @@ install() {
+         exit 1
+     fi
+ 
+-    inst_rules 50-udev-default.rules 60-persistent-storage.rules \
+-        61-persistent-storage-edd.rules 80-drivers.rules 95-udev-late.rules \
+-        60-pcmcia.rules \
+-        50-udev.rules 95-late.rules \
++    inst_rules \
++        40-redhat.rules \
+         50-firmware.rules \
+-        70-uaccess.rules 71-seat.rules 73-seat-late.rules \
+-        75-net-description.rules 80-net-name-slot.rules \
++        50-udev-default.rules \
++        50-udev.rules \
+         "$moddir/59-persistent-storage.rules" \
+-        "$moddir/61-persistent-storage.rules"
++        /59-persistent-storage.rules \
++        60-pcmcia.rules \
++        60-persistent-storage.rules \
++        61-persistent-storage-edd.rules \
++        "$moddir/61-persistent-storage.rules" \
++        70-uaccess.rules \
++        71-seat.rules \
++        73-seat-late.rules \
++        75-net-description.rules \
++        80-drivers.rules \
++        80-net-name-slot.rules \
++        95-late.rules \
++        95-udev-late.rules \
++        ${NULL}
+ 
+     prepare_udev_rules 59-persistent-storage.rules 61-persistent-storage.rules
+     # debian udev rules
diff --git a/SOURCES/0308-fcoe-cleanup-lldpad.patch b/SOURCES/0308-fcoe-cleanup-lldpad.patch
new file mode 100644
index 0000000..0c4503d
--- /dev/null
+++ b/SOURCES/0308-fcoe-cleanup-lldpad.patch
@@ -0,0 +1,40 @@
+From 69c437dd1c3b877f60ced307068e01619124fef4 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:27:32 +0200
+Subject: [PATCH] fcoe: cleanup lldpad
+
+Resolves: rhbz#1246217
+---
+ modules.d/95fcoe/cleanup-fcoe.sh | 10 ++++++++++
+ modules.d/95fcoe/module-setup.sh |  1 +
+ 2 files changed, 11 insertions(+)
+ create mode 100644 modules.d/95fcoe/cleanup-fcoe.sh
+
+diff --git a/modules.d/95fcoe/cleanup-fcoe.sh b/modules.d/95fcoe/cleanup-fcoe.sh
+new file mode 100644
+index 0000000..5ff4d05
+--- /dev/null
++++ b/modules.d/95fcoe/cleanup-fcoe.sh
+@@ -0,0 +1,10 @@
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++if [ -e /var/run/lldpad.pid ]; then
++    lldpad -k
++    mkdir -m 0755 -p /run/initramfs/state/dev/shm
++    cp /dev/shm/lldpad.state /run/initramfs/state/dev/shm/ > /dev/null 2>&1
++    echo "files /dev/shm/lldpad.state" >> /run/initramfs/rwtab
++fi
+diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh
+index ec573ea..646cfa8 100755
+--- a/modules.d/95fcoe/module-setup.sh
++++ b/modules.d/95fcoe/module-setup.sh
+@@ -28,6 +28,7 @@ install() {
+     inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd"
+     inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh"
+     inst_hook cmdline 99 "$moddir/parse-fcoe.sh"
++    inst_hook cleanup 90 "$moddir/cleanup-fcoe.sh"
+     dracut_need_initqueue
+ }
+ 
diff --git a/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch b/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch
new file mode 100644
index 0000000..5337ab6
--- /dev/null
+++ b/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch
@@ -0,0 +1,27 @@
+From 942d60d8afad4eb8b131a33fe9618e3e8392d33f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:40:01 +0200
+Subject: [PATCH] network/net-lib.sh:ibft unset gateway or dns, if set to
+ 0.0.0.0
+
+---
+ modules.d/40network/net-lib.sh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 44c1bf0..c820356 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -236,9 +236,12 @@ ibft_to_cmdline() {
+                 # skip not assigned ip adresses
+                 [ "$ip" = "0.0.0.0" ] && continue
+                 [ -e ${iface}/gateway ] && gw=$(read a < ${iface}/gateway; echo $a)
++                [ "$gateway" = "0.0.0.0" ] && unset $gateway
+                 [ -e ${iface}/subnet-mask ] && mask=$(read a < ${iface}/subnet-mask; echo $a)
+                 [ -e ${iface}/primary-dns ] && dns1=$(read a < ${iface}/primary-dns; echo $a)
++                [ "$dns1" = "0.0.0.0" ] && unset $dns1
+                 [ -e ${iface}/secondary-dns ] && dns2=$(read a < ${iface}/secondary-dns; echo $a)
++                [ "$dns2" = "0.0.0.0" ] && unset $dns2
+                 [ -e ${iface}/hostname ] && hostname=$(read a < ${iface}/hostname; echo $a)
+                 if [ -n "$ip" ] && [ -n "$mask" ]; then
+                     echo "ip=$ip::$gw:$mask:$hostname:$dev:none${dns1:+:$dns1}${dns2:+:$dns2}"
diff --git a/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch b/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch
new file mode 100644
index 0000000..b5e7dda
--- /dev/null
+++ b/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch
@@ -0,0 +1,22 @@
+From d6bfa7052a620ebdd37f78655462120871c49ebd Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 12:41:12 +0200
+Subject: [PATCH] network/dhclient: exit arping immediatly, if we get an answer
+
+---
+ modules.d/40network/dhclient-script.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index 12e2869..18b4100 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -117,7 +117,7 @@ case $reason in
+             read layer2 < /sys/class/net/$netif/device/layer2
+         fi
+         if [ "$layer2" != "0" ]; then
+-            if ! arping -q -D -c 2 -I $netif $new_ip_address ; then
++            if ! arping -f -q -D -c 2 -I $netif $new_ip_address ; then
+                 warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
+                 exit 1
+             fi
diff --git a/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch b/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch
new file mode 100644
index 0000000..367160a
--- /dev/null
+++ b/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch
@@ -0,0 +1,40 @@
+From 80153acc0f8bbb3829575201e2a0ba3da41268a8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 15:04:31 +0200
+Subject: [PATCH] dmraid: only scan once because of one device
+
+---
+ modules.d/90dmraid/61-dmraid-imsm.rules | 2 +-
+ modules.d/90dmraid/dmraid.sh            | 7 +++++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/90dmraid/61-dmraid-imsm.rules b/modules.d/90dmraid/61-dmraid-imsm.rules
+index 33e060b..de7e97e 100644
+--- a/modules.d/90dmraid/61-dmraid-imsm.rules
++++ b/modules.d/90dmraid/61-dmraid-imsm.rules
+@@ -24,6 +24,6 @@ PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] &&
+ ENV{DEVTYPE}!="partition", \
+     RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}"
+ 
+-RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan"
++RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan $env{DEVNAME}"
+ 
+ LABEL="dm_end"
+diff --git a/modules.d/90dmraid/dmraid.sh b/modules.d/90dmraid/dmraid.sh
+index 3753ddd..ce9a6b2 100755
+--- a/modules.d/90dmraid/dmraid.sh
++++ b/modules.d/90dmraid/dmraid.sh
+@@ -4,6 +4,13 @@
+ 
+ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ 
++dev="$1"
++devenc=$(str_replace "$1" '/' '\2f')
++
++[ -e /tmp/dmraid.$devenc ] && exit 0
++
++>/tmp/dmraid.$devenc
++
+ DM_RAIDS=$(getargs rd.dm.uuid -d rd_DM_UUID=)
+ 
+ if [ -n "$DM_RAIDS" ] || getargbool 0 rd.auto; then
diff --git a/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch b/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch
new file mode 100644
index 0000000..9e97eb6
--- /dev/null
+++ b/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch
@@ -0,0 +1,22 @@
+From 65977ef1d107c8741d9f2633b8618aa3aee2a49d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 15:05:11 +0200
+Subject: [PATCH] test/TEST-04-FULL-SYSTEMD/create-root.sh: modprobe btrfs
+
+why so ever... it used to load automatically
+---
+ test/TEST-04-FULL-SYSTEMD/create-root.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/TEST-04-FULL-SYSTEMD/create-root.sh b/test/TEST-04-FULL-SYSTEMD/create-root.sh
+index 86ad449..bfec5bf 100755
+--- a/test/TEST-04-FULL-SYSTEMD/create-root.sh
++++ b/test/TEST-04-FULL-SYSTEMD/create-root.sh
+@@ -4,6 +4,7 @@ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
+     > "/etc/udev/rules.d/$x"
+ done
+ rm -f -- /etc/lvm/lvm.conf
++modprobe btrfs
+ udevadm control --reload
+ set -e
+ # save a partition at the beginning for future flagging purposes
diff --git a/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch b/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch
new file mode 100644
index 0000000..896a8c5
--- /dev/null
+++ b/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch
@@ -0,0 +1,21 @@
+From d9b5a98532b6823adb35f7c68766f4df9db8a3c9 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 18 Aug 2015 15:26:23 +0200
+Subject: [PATCH] TEST-15-BTRFS: load btrfs module
+
+---
+ test/TEST-15-BTRFSRAID/create-root.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/TEST-15-BTRFSRAID/create-root.sh b/test/TEST-15-BTRFSRAID/create-root.sh
+index b92f9c0..ba3b54e 100755
+--- a/test/TEST-15-BTRFSRAID/create-root.sh
++++ b/test/TEST-15-BTRFSRAID/create-root.sh
+@@ -3,6 +3,7 @@
+ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
+     > "/etc/udev/rules.d/$x"
+ done
++modprobe btrfs
+ udevadm control --reload
+ # save a partition at the beginning for future flagging purposes
+ sfdisk  -C 327800 -H 2 -S 32 -L /dev/sda <<EOF
diff --git a/SOURCES/0314-network-ifup.sh-do_static-error-out-if-interface-cou.patch b/SOURCES/0314-network-ifup.sh-do_static-error-out-if-interface-cou.patch
new file mode 100644
index 0000000..26d4d46
--- /dev/null
+++ b/SOURCES/0314-network-ifup.sh-do_static-error-out-if-interface-cou.patch
@@ -0,0 +1,27 @@
+From 77f46adf5e5ab1f6da2e459bb55435d4b70842c5 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 19 Aug 2015 13:59:40 +0200
+Subject: [PATCH] network/ifup.sh:do_static(): error out, if interface could
+ not be brought up
+
+---
+ modules.d/40network/ifup.sh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 8a5a606..1ee89bf 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -155,7 +155,11 @@ do_ipv6auto() {
+ do_static() {
+     strstr $ip '*:*:*' && load_ipv6
+ 
+-    linkup $netif
++    if ! linkup $netif; then
++        warn "Could bring interface $netif up!"
++        return 1
++    fi
++
+     [ -n "$macaddr" ] && ip link set address $macaddr dev $netif
+     [ -n "$mtu" ] && ip link set mtu $mtu dev $netif
+     if strstr $ip '*:*:*'; then
diff --git a/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch b/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch
new file mode 100644
index 0000000..1c850c0
--- /dev/null
+++ b/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch
@@ -0,0 +1,30 @@
+From 32770ca79a1f6828ca9fdf4b6841e6a6d4e4754a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 19 Aug 2015 14:00:28 +0200
+Subject: [PATCH] network/ifup.sh:do_static(): error out, if IP is already
+ assigned
+
+---
+ modules.d/40network/ifup.sh | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 1ee89bf..e51b453 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -160,6 +160,15 @@ do_static() {
+         return 1
+     fi
+ 
++    ip route get "$ip" | {
++        read a rest
++        if [ "$a" = "local" ]; then
++            warn "Not assigning $ip to interface $netif, cause it is already assigned!"
++            return 1
++        fi
++        return 0
++    } || return 1
++
+     [ -n "$macaddr" ] && ip link set address $macaddr dev $netif
+     [ -n "$mtu" ] && ip link set mtu $mtu dev $netif
+     if strstr $ip '*:*:*'; then
diff --git a/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch b/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch
new file mode 100644
index 0000000..eb2765b
--- /dev/null
+++ b/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch
@@ -0,0 +1,37 @@
+From b70b81f1c4dc0cc13851feefe870788290cff0a7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 19 Aug 2015 16:18:23 +0200
+Subject: [PATCH] crypt/module-setup.sh: fixed parsing crypttab with no ending
+ newline
+
+---
+ dracut.sh                         | 2 +-
+ modules.d/90crypt/module-setup.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 90ac1fe..65824ec 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1045,7 +1045,7 @@ if [[ $hostonly ]]; then
+                 [[ "$_d" -ef "$dev" ]] || continue
+ 
+                 if [[ -f /etc/crypttab ]]; then
+-                    while read _mapper _a _p _o; do
++                    while read _mapper _a _p _o || [ -n "$_mapper" ]; do
+                         [[ $_mapper = \#* ]] && continue
+                         [[ "$_d" -ef /dev/mapper/"$_mapper" ]] || continue
+                         [[ "$_o" ]] || _o="$_p"
+diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
+index bd37d9a..f8422fa 100755
+--- a/modules.d/90crypt/module-setup.sh
++++ b/modules.d/90crypt/module-setup.sh
+@@ -63,7 +63,7 @@ install() {
+ 
+     if [[ $hostonly ]] && [[ -f /etc/crypttab ]]; then
+         # filter /etc/crypttab for the devices we need
+-        while read _mapper _dev _rest; do
++        while read _mapper _dev _rest || [ -n "$_mapper" ]; do
+             [[ $_mapper = \#* ]] && continue
+             [[ $_dev ]] || continue
+ 
diff --git a/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch b/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch
new file mode 100644
index 0000000..927433c
--- /dev/null
+++ b/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch
@@ -0,0 +1,64 @@
+From 310574f7eaf68412035eb19855afe4ce2973b784 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:12:59 +0200
+Subject: [PATCH] TEST-30-ISCSI: add rd.scsi.firmware
+
+---
+ test/TEST-30-ISCSI/test.sh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh
+index 92ddc86..fc4bdce 100755
+--- a/test/TEST-30-ISCSI/test.sh
++++ b/test/TEST-30-ISCSI/test.sh
+@@ -3,8 +3,9 @@ TEST_DESCRIPTION="root filesystem over iSCSI"
+ 
+ KVERSION=${KVERSION-$(uname -r)}
+ 
+-DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
+ DEBUGFAIL="loglevel=1"
++#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
++#DEBUGFAIL="rd.debug loglevel=7 "
+ #SERVER_DEBUG="rd.debug loglevel=7"
+ SERIAL="tcp:127.0.0.1:9999"
+ SERIAL="null"
+@@ -70,6 +71,7 @@ do_test_run() {
+     run_client "netroot=iscsi target0"\
+                "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \
+                "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \
++               "rd.iscsi.firmware" \
+                "rd.iscsi.initiator=$initiator" \
+         || return 1
+ 
+@@ -79,6 +81,7 @@ do_test_run() {
+                "ip=192.168.51.101:::255.255.255.0::ens4:off" \
+                "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.firmware" \
+                "rd.iscsi.initiator=$initiator" \
+         || return 1
+ 
+@@ -88,6 +91,7 @@ do_test_run() {
+                "ip=192.168.51.101:::255.255.255.0::ens4:off" \
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.firmware" \
+                "rd.iscsi.initiator=$initiator" \
+                "rd.iscsi.waitnet=0" \
+ 	|| return 1
+@@ -98,6 +102,7 @@ do_test_run() {
+                "ip=192.168.51.101:::255.255.255.0::ens4:off" \
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.firmware" \
+                "rd.iscsi.initiator=$initiator" \
+                "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
+ 	|| return 1
+@@ -108,6 +113,7 @@ do_test_run() {
+                "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens4:off" \
+ 	       "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
+                "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
++               "rd.iscsi.firmware" \
+                "rd.iscsi.initiator=$initiator" \
+                "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
+ 	|| return 1
diff --git a/SOURCES/0318-initqueue-add-online-queue.patch b/SOURCES/0318-initqueue-add-online-queue.patch
new file mode 100644
index 0000000..e06293c
--- /dev/null
+++ b/SOURCES/0318-initqueue-add-online-queue.patch
@@ -0,0 +1,31 @@
+From d3f61fb5cdaa56053ae8de0203a13722a7fe717a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:13:23 +0200
+Subject: [PATCH] initqueue: add online queue
+
+---
+ modules.d/99base/initqueue.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/99base/initqueue.sh b/modules.d/99base/initqueue.sh
+index 854a36a..0f96fac 100755
+--- a/modules.d/99base/initqueue.sh
++++ b/modules.d/99base/initqueue.sh
+@@ -15,6 +15,8 @@ while [ $# -gt 0 ]; do
+     case "$1" in
+         --onetime)
+             onetime="yes";;
++        --online)
++            qname="/online";;
+         --settled)
+             qname="/settled";;
+         --finished)
+@@ -48,7 +50,7 @@ shift
+ {
+     [ -n "$onetime" ] && echo '[ -e "$job" ] && rm -f -- "$job"'
+     [ -n "$env" ] && echo "$env"
+-    echo "$exe $@"
++    echo "$exe" "$@"
+ } > "/tmp/$$-${job}.sh"
+ 
+ mv -f "/tmp/$$-${job}.sh" "$hookdir/initqueue${qname}/${job}.sh"
diff --git a/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch b/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch
new file mode 100644
index 0000000..63f4244
--- /dev/null
+++ b/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch
@@ -0,0 +1,23 @@
+From 35f40b75e444adae3b3c9bb610d635d9c17a753d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:13:38 +0200
+Subject: [PATCH] dracut.spec: raise systemd requirement to >= 219
+
+needs systemd-escape
+---
+ dracut.spec | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dracut.spec b/dracut.spec
+index d22f586..ad737c2 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -94,7 +94,7 @@ Requires: kpartx
+ 
+ %if 0%{?fedora} || 0%{?rhel} > 6
+ Requires: util-linux >= 2.21
+-Requires: systemd >= 199
++Requires: systemd >= 219
+ Requires: procps-ng
+ Conflicts: grubby < 8.23
+ %else
diff --git a/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch b/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch
new file mode 100644
index 0000000..0cac4d5
--- /dev/null
+++ b/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch
@@ -0,0 +1,58 @@
+From 3bd3bbec319eccd28145f77e42b83b479286ff34 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:14:38 +0200
+Subject: [PATCH] iscsi/iscsiroot.sh: handle firmware in online queue
+
+otherwise it does not get called, if no netroot is set
+---
+ modules.d/95iscsi/iscsiroot.sh | 32 +++++++++++++++-----------------
+ 1 file changed, 15 insertions(+), 17 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index b7370f6..7688b28 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -238,28 +238,26 @@ if [ "$netif" = "timeout" ] && all_ifaces_up; then
+     sleep 2
+ fi
+ 
+-# loop over all netroot parameter
+-netroot=$(getarg netroot)
+-if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then
+-    for nroot in $(getargs netroot); do
+-        [ "${nroot%%:*}" = "iscsi" ] || continue
+-        nroot="${nroot##iscsi:}"
+-        if [ -n "$nroot" ]; then
+-            handle_netroot "$nroot"
+-            ret=$(($ret + $?))
+-        fi
+-    done
++if [ "$netif" = "online" ]; then
+     if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
+         handle_firmware
+-        ret=$(($ret + $?))
++        ret=$?
+     fi
+ else
+-    if [ -n "$iroot" ]; then
+-        handle_netroot "$iroot"
+-        ret=$?
++    # loop over all netroot parameter
++    nroot=$(getarg netroot)
++    if [ $? -eq 0 ] && [ "$nroot" != "dhcp" ]; then
++        for nroot in $(getargs netroot); do
++            [ "${nroot%%:*}" = "iscsi" ] || continue
++            nroot="${nroot##iscsi:}"
++            if [ -n "$nroot" ]; then
++                handle_netroot "$nroot"
++                ret=$(($ret + $?))
++            fi
++        done
+     else
+-        if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
+-            handle_firmware
++        if [ -n "$iroot" ]; then
++            handle_netroot "$iroot"
+             ret=$?
+         fi
+     fi
diff --git a/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch b/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch
new file mode 100644
index 0000000..12851b5
--- /dev/null
+++ b/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch
@@ -0,0 +1,45 @@
+From 197e4c90b95f2d9e57104d3b462918c335494697 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:15:59 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: do not modify netroot
+
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 91cd463..e9444a5 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -16,10 +16,17 @@
+ # This script is sourced, so root should be set. But let's be paranoid
+ [ -z "$root" ] && root=$(getarg root=)
+ if [ -z "$netroot" ]; then
+-    for netroot in $(getargs netroot=); do
+-        [ "${netroot%%:*}" = "iscsi" ] && break
++    for nroot in $(getargs netroot=); do
++        [ "${nroot%%:*}" = "iscsi" ] && break
+     done
+-    [ "${netroot%%:*}" = "iscsi" ] || unset netroot
++    if [ "${nroot%%:*}" = "iscsi" ]; then
++        netroot="$nroot"
++    else
++        for nroot in $(getargs netroot=); do
++            [ "${nroot%%:*}" = "dhcp" ] && break
++        done
++        netroot="$nroot"
++    fi
+ fi
+ [ -z "$iscsiroot" ] && iscsiroot=$(getarg iscsiroot=)
+ [ -z "$iscsi_firmware" ] && getargbool 0 rd.iscsi.firmware -y iscsi_firmware && iscsi_firmware="1"
+@@ -65,7 +72,9 @@ fi
+ 
+ # iscsi_firmware does not need argument checking
+ if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
+-    [ -z "$netroot" ] && netroot=iscsi:
++    if [ "$root" != "dhcp" ] && [ "$netroot" != "dhcp" ]; then
++        [ -z "$netroot" ] && netroot=iscsi:
++    fi
+     modprobe -b -q iscsi_boot_sysfs 2>/dev/null
+     modprobe -b -q iscsi_ibft
+     # if no ip= is given, but firmware
diff --git a/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch b/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch
new file mode 100644
index 0000000..c1446b4
--- /dev/null
+++ b/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch
@@ -0,0 +1,28 @@
+From 7f59cbd31817c81fa5aec9f86c33dfe1ce23ec6a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:16:29 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: handle firmware in online queue
+
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index e9444a5..13a9502 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -79,11 +79,11 @@ if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
+     modprobe -b -q iscsi_ibft
+     # if no ip= is given, but firmware
+     echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
+-    initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
+-    initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
++    initqueue --unique --online /sbin/iscsiroot online "iscsi:" "$NEWROOT"
++    initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "iscsi:" "$NEWROOT"
++    initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'"
+ fi
+ 
+-
+ [ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1
+ 
+ initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
diff --git a/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch b/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch
new file mode 100644
index 0000000..00f6f85
--- /dev/null
+++ b/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch
@@ -0,0 +1,34 @@
+From a6befb52eb5eeb87c0c41303fe08e50bd2fde0d3 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:16:46 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: restart iscsid with try-restart
+
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 13a9502..6dd929f 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -105,7 +105,7 @@ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; the
+     fi
+ fi
+ 
+-if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then
++if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ] && ! [ -f /run/initiatorname.iscsi ] ; then
+     iscsi_initiator=$arg
+     echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
+     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
+@@ -123,10 +123,7 @@ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ]
+     mkdir -p /etc/iscsi
+     ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+     > /tmp/iscsi_set_initiator
+-    if systemctl --quiet is-active iscsid.service; then
+-        systemctl restart iscsid
+-        sleep 1
+-    fi
++    systemctl try-restart iscsid && sleep 1
+ fi
+ 
+ 
diff --git a/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch b/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch
new file mode 100644
index 0000000..fcc2203
--- /dev/null
+++ b/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch
@@ -0,0 +1,30 @@
+From b4006781e8a59dc69a0dd3836fce137f08b23001 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:20:30 +0200
+Subject: [PATCH] network/ifup.sh: save return value of ifup
+
+---
+ modules.d/40network/ifup.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index e51b453..2562af6 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -396,6 +396,7 @@ for p in $(getargs ip=); do
+                 do_static ;;
+         esac
+     done
++    ret=$?
+ 
+     > /tmp/net.${netif}.up
+ 
+@@ -403,7 +404,7 @@ for p in $(getargs ip=); do
+         dhcp|on|any|dhcp6)
+             ;;
+         *)
+-            if [ $? -eq 0 ]; then
++            if [ $ret -eq 0 ]; then
+                 setup_net $netif
+                 source_hook initqueue/online $netif
+                 if [ -z "$manualup" ]; then
diff --git a/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch b/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch
new file mode 100644
index 0000000..7a15b3e
--- /dev/null
+++ b/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch
@@ -0,0 +1,50 @@
+From 53537f4d23091457f644ab8b3edf09c2dca4351c Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:30:00 +0200
+Subject: [PATCH] network: also mark interfaces up with their MAC
+
+---
+ modules.d/40network/dhclient-script.sh | 7 +++++++
+ modules.d/40network/ifup.sh            | 4 ++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index 18b4100..761b0cd 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -139,6 +139,10 @@ case $reason in
+ 
+         echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
+         >/tmp/net.$netif.up
++        if [ -e /sys/class/net/${netif}/address ]; then
++            > /tmp/net.$(cat /sys/class/net/${netif}/address).up
++        fi
++
+         ;;
+ 
+     RENEW|REBIND)
+@@ -171,6 +175,9 @@ case $reason in
+ 
+         echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh
+         >/tmp/net.$netif.up
++        if [ -e /sys/class/net/${netif}/address ]; then
++            > /tmp/net.$(cat /sys/class/net/${netif}/address).up
++        fi
+         ;;
+ 
+     RENEW6|REBIND6)
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 2562af6..d944126 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -400,6 +400,10 @@ for p in $(getargs ip=); do
+ 
+     > /tmp/net.${netif}.up
+ 
++    if [ -e /sys/class/net/${netif}/address ]; then
++        > /tmp/net.$(cat /sys/class/net/${netif}/address).up
++    fi
++
+     case $autoconf in
+         dhcp|on|any|dhcp6)
+             ;;
diff --git a/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch b/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch
new file mode 100644
index 0000000..23e0a4a
--- /dev/null
+++ b/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch
@@ -0,0 +1,23 @@
+From 7c24815034241e490422691b5f18671c4b9812a9 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 11:37:16 +0200
+Subject: [PATCH] network/ifup.sh: only use dhcp on unknown interfaces for
+ ip=dhcp
+
+---
+ modules.d/40network/ifup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index d944126..005c2cc 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -433,7 +433,7 @@ if [ ! -e /tmp/net.${netif}.up ]; then
+     if getargs 'ip=dhcp6'; then
+         load_ipv6
+         do_dhcp -6
+-    else
++    elif getargs 'ip=dhcp'; then
+         do_dhcp -4
+     fi
+ fi
diff --git a/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch b/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch
new file mode 100644
index 0000000..b1a36ef
--- /dev/null
+++ b/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch
@@ -0,0 +1,83 @@
+From 3d1bd59eb09780fe156bb24fc6709ce844f68052 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 25 Aug 2015 13:49:10 +0200
+Subject: [PATCH] multipath: add hostonly multipath.conf
+
+Resolves: rhbz#994702
+---
+ modules.d/90multipath/module-setup.sh | 43 ++++++++++++++++++++++++++++-------
+ 1 file changed, 35 insertions(+), 8 deletions(-)
+
+diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh
+index acfc56f..4971d18 100755
+--- a/modules.d/90multipath/module-setup.sh
++++ b/modules.d/90multipath/module-setup.sh
+@@ -2,18 +2,29 @@
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
++is_mpath() {
++    local _dev=$1
++    [ -e /sys/dev/block/$_dev/dm/uuid ] || return 1
++    [[ $(cat /sys/dev/block/$_dev/dm/uuid) =~ mpath- ]] && return 0
++    return 1
++}
++
++majmin_to_mpath_dev() {
++    local _dev
++    for i in `ls -1 /dev/mapper/mpath*`; do
++        dev=$(get_maj_min $i)
++        if [ "$dev" = "$1" ]; then
++            echo $i
++            return
++        fi
++    done
++}
++
+ check() {
+     local _rootdev
+     # if there's no multipath binary, no go.
+     require_binaries multipath || return 1
+ 
+-    is_mpath() {
+-        local _dev=$1
+-        [ -e /sys/dev/block/$_dev/dm/uuid ] || return 1
+-        [[ $(cat /sys/dev/block/$_dev/dm/uuid) =~ mpath- ]] && return 0
+-        return 1
+-    }
+-
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for_each_host_dev_and_slaves is_mpath || return 255
+     }
+@@ -68,7 +79,18 @@ installkernel() {
+ }
+ 
+ install() {
+-    local _f
++    local _f _allow
++    add_hostonly_mpath_conf() {
++        is_mpath $1 && {
++            local _dev
++
++            _dev=$(majmin_to_mpath_dev $1)
++            [ -z "$_dev" ] && return
++            strstr "$_allow" "$_dev" && return
++            _allow="$_allow --allow $_dev"
++        }
++    }
++
+     inst_multiple -o  \
+         dmsetup \
+         kpartx \
+@@ -82,6 +104,11 @@ install() {
+         /etc/multipath.conf \
+         /etc/multipath/*
+ 
++    [[ $hostonly ]] && {
++        for_each_host_dev_and_slaves_all add_hostonly_mpath_conf
++        [ -n "$_allow" ] && mpathconf $_allow --outfile ${initdir}/etc/multipath.conf
++    }
++
+     inst $(command -v partx) /sbin/partx
+ 
+     inst_libdir_file "libmultipath*" "multipath/*"
diff --git a/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch b/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch
new file mode 100644
index 0000000..2f99ac4
--- /dev/null
+++ b/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch
@@ -0,0 +1,20 @@
+From 0852c38b7a2b893e4f9e5894ba09eebc649f047f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 17:21:53 +0200
+Subject: [PATCH] cms/cmsifup.sh: do not use ifup -m
+
+we don't want to bring the interface up several times
+---
+ modules.d/80cms/cmsifup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/80cms/cmsifup.sh b/modules.d/80cms/cmsifup.sh
+index b361650..9ffe971 100755
+--- a/modules.d/80cms/cmsifup.sh
++++ b/modules.d/80cms/cmsifup.sh
+@@ -37,4 +37,4 @@ fi
+ IFACES="$IFACES $DEVICE"
+ echo "$IFACES" >> /tmp/net.ifaces
+ 
+-ifup $DEVICE -m
++exec ifup "$DEVICE"
diff --git a/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch b/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch
new file mode 100644
index 0000000..440cdf7
--- /dev/null
+++ b/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch
@@ -0,0 +1,22 @@
+From 70f3c07846e92d11484a1f7b5cb84aacc47489b4 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 17:22:37 +0200
+Subject: [PATCH] network/ifup: fix warning about not bringing interface up
+
+---
+ modules.d/40network/ifup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 005c2cc..db9fb08 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -156,7 +156,7 @@ do_static() {
+     strstr $ip '*:*:*' && load_ipv6
+ 
+     if ! linkup $netif; then
+-        warn "Could bring interface $netif up!"
++        warn "Could not bring interface $netif up!"
+         return 1
+     fi
+ 
diff --git a/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch b/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch
new file mode 100644
index 0000000..264bdd3
--- /dev/null
+++ b/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch
@@ -0,0 +1,39 @@
+From d8572e0bf4d49a8d2ec71726d0fd38d1c73ca3f7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 17:22:56 +0200
+Subject: [PATCH] network/net-lib.sh: fix wait_for_if_up()
+
+wait for <*UP*> and not "state UP"
+
+state can be UNKNOWN
+---
+ modules.d/40network/net-lib.sh | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index c820356..6034a09 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -523,7 +523,21 @@ wait_for_if_up() {
+ 
+     while [ $cnt -lt $timeout ]; do
+         li=$(ip -o link show up dev $1)
+-        [ -n "$li" ] && [ -z "${li##*state UP*}" ] && return 0
++        if [ -n "$li" ]; then
++            case "$li" in
++                *\<UP*)
++                    return 0;;
++                *\<*,UP\>*)
++                    return 0;;
++                *\<*,UP,*\>*)
++                    return 0;;
++            esac
++        fi
++        if strstr "$li" "LOWER_UP" \
++                && strstr "$li" "state UNKNOWN" \
++                && ! strstr "$li" "DORMANT"; then
++            return 0
++        fi
+         sleep 0.1
+         cnt=$(($cnt+1))
+     done
diff --git a/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch b/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch
new file mode 100644
index 0000000..dd3686f
--- /dev/null
+++ b/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch
@@ -0,0 +1,22 @@
+From a4c47ce0ddc7f7b46c2395709cf83f731f90685b Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 17:25:34 +0200
+Subject: [PATCH] network/net-lib.sh: fix IPv6 route parsing
+
+---
+ modules.d/40network/net-lib.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 6034a09..9d22ec1 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -121,7 +121,7 @@ setup_net() {
+         route_to_var "$_p" || continue
+         [ -n "$route_dev" ] && [ "$route_dev" != "$netif" ] && continue
+         ip route add "$route_mask" ${route_gw:+via "$route_gw"} ${route_dev:+dev "$route_dev"}
+-        if strstr ":" "$route_mask"; then
++        if strstr "$route_mask" ":"; then
+             printf -- "%s\n" "$route_mask ${route_gw:+via $route_gw} ${route_dev:+dev $route_dev}" \
+                 > /tmp/net.route6."$netif"
+         else
diff --git a/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch b/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch
new file mode 100644
index 0000000..b8c66e8
--- /dev/null
+++ b/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch
@@ -0,0 +1,39 @@
+From 7316d68353cfd6e08f007d10ea3e32fa4d083487 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 19:05:37 +0200
+Subject: [PATCH] network/ifup: do DHCP for BOOTDEV
+
+---
+ modules.d/40network/ifup.sh | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index db9fb08..0471c42 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -430,11 +430,20 @@ fi
+ 
+ # no ip option directed at our interface?
+ if [ ! -e /tmp/net.${netif}.up ]; then
+-    if getargs 'ip=dhcp6'; then
+-        load_ipv6
+-        do_dhcp -6
+-    elif getargs 'ip=dhcp'; then
+-        do_dhcp -4
++    if [ -e /tmp/net.bootdev ]; then
++        BOOTDEV=$(cat /tmp/net.bootdev)
++        if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat /sys/class/net/${netif}/address)" ]; then
++            load_ipv6
++            do_dhcp
++        fi
++    else
++        if getargs 'ip=dhcp6'; then
++            load_ipv6
++            do_dhcp -6
++        fi
++        if getargs 'ip=dhcp'; then
++            do_dhcp -4
++        fi
+     fi
+ fi
+ 
diff --git a/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch b/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch
new file mode 100644
index 0000000..79d4ce9
--- /dev/null
+++ b/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch
@@ -0,0 +1,20 @@
+From 2182945a9e02683fe04654150a55618d0943ae28 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 1 Sep 2015 20:27:13 +0200
+Subject: [PATCH] qemu: add spapr-vscsi kernel module
+
+---
+ modules.d/90qemu/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh
+index 6779642..64eac9e 100755
+--- a/modules.d/90qemu/module-setup.sh
++++ b/modules.d/90qemu/module-setup.sh
+@@ -25,5 +25,5 @@ installkernel() {
+         hostonly='' instmods \
+             ata_piix ata_generic pata_acpi cdrom sr_mod ahci \
+             virtio_blk virtio virtio_ring virtio_pci \
+-            virtio_scsi virtio_console
++            virtio_scsi virtio_console spapr-vscsi
+ }
diff --git a/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch b/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch
new file mode 100644
index 0000000..42ef646
--- /dev/null
+++ b/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch
@@ -0,0 +1,23 @@
+From b813b1b3064d4951c5403bb0f96480de9a355d8e Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 2 Sep 2015 09:47:35 +0200
+Subject: [PATCH] livenet/livenetroot.sh: fixed error condition
+
+copy&paste error
+---
+ modules.d/90livenet/livenetroot.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh
+index 2e36ee9..b7592bc 100755
+--- a/modules.d/90livenet/livenetroot.sh
++++ b/modules.d/90livenet/livenetroot.sh
+@@ -15,7 +15,7 @@ liveurl="${netroot#livenet:}"
+ info "fetching $liveurl"
+ imgfile=$(fetch_url "$liveurl")
+ 
+-if [ $? = 0 ]; then
++if [ $? != 0 ]; then
+ 	warn "failed to download live image: error $?"
+ 	exit 1
+ fi
diff --git a/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch b/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch
new file mode 100644
index 0000000..91c913a
--- /dev/null
+++ b/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch
@@ -0,0 +1,35 @@
+From eb87dc91d078ee942ef9c8bbc8e82f4ee4ccf0c6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 3 Sep 2015 12:41:06 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: only set initiator-name, if not
+ empty
+
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 6dd929f..6aa14f5 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -118,12 +118,14 @@ fi
+ # If not given on the cmdline and initiator-name available via iBFT
+ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
+     iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name)
+-    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
+-    rm -f /etc/iscsi/initiatorname.iscsi
+-    mkdir -p /etc/iscsi
+-    ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+-    > /tmp/iscsi_set_initiator
+-    systemctl try-restart iscsid && sleep 1
++    if [ -n "$iscsi_initiator" ]; then
++        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++        rm -f /etc/iscsi/initiatorname.iscsi
++        mkdir -p /etc/iscsi
++        ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
++        > /tmp/iscsi_set_initiator
++        systemctl try-restart iscsid && sleep 1
++    fi
+ fi
+ 
+ 
diff --git a/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch b/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch
new file mode 100644
index 0000000..d8bd0ee
--- /dev/null
+++ b/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch
@@ -0,0 +1,48 @@
+From b334c83e4abdc1dd87276fa7de4617cd349a5a4f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 3 Sep 2015 12:41:44 +0200
+Subject: [PATCH] network: move "ip=ibft" handling to network module
+
+---
+ modules.d/40network/module-setup.sh  | 1 +
+ modules.d/40network/parse-ibft.sh    | 2 ++
+ modules.d/95iscsi/parse-iscsiroot.sh | 2 +-
+ 3 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
+index 3134b5f..6cbbe8f 100755
+--- a/modules.d/40network/module-setup.sh
++++ b/modules.d/40network/module-setup.sh
+@@ -64,6 +64,7 @@ installkernel() {
+         =drivers/net/team \
+         =drivers/net/ethernet \
+         ecb arc4 bridge stp llc ipv6 bonding 8021q af_packet virtio_net
++    hostonly="" instmods iscsi_ibft crc32c iscsi_boot_sysfs
+ }
+ 
+ install() {
+diff --git a/modules.d/40network/parse-ibft.sh b/modules.d/40network/parse-ibft.sh
+index 643313d..6f7f4e9 100755
+--- a/modules.d/40network/parse-ibft.sh
++++ b/modules.d/40network/parse-ibft.sh
+@@ -6,5 +6,7 @@ command -v getarg >/dev/null          || . /lib/dracut-lib.sh
+ command -v ibft_to_cmdline >/dev/null || . /lib/net-lib.sh
+ 
+ if getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
++    modprobe -b -q iscsi_boot_sysfs 2>/dev/null
++    modprobe -b -q iscsi_ibft
+     ibft_to_cmdline
+ fi
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 6aa14f5..9546f12 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -71,7 +71,7 @@ if [ -n "$iscsiroot" ] ; then
+ fi
+ 
+ # iscsi_firmware does not need argument checking
+-if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
++if [ -n "$iscsi_firmware" ]; then
+     if [ "$root" != "dhcp" ] && [ "$netroot" != "dhcp" ]; then
+         [ -z "$netroot" ] && netroot=iscsi:
+     fi
diff --git a/SOURCES/0337-dracut.usage.asc-update-man-page.patch b/SOURCES/0337-dracut.usage.asc-update-man-page.patch
new file mode 100644
index 0000000..ffd3d02
--- /dev/null
+++ b/SOURCES/0337-dracut.usage.asc-update-man-page.patch
@@ -0,0 +1,137 @@
+From c850879b862058a644a05f8fe2fc2206e0e317e8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 3 Sep 2015 16:25:23 +0200
+Subject: [PATCH] dracut.usage.asc: update man page
+
+- clarify grub2 config for debugging
+- clarify hostonly mode
+---
+ dracut.usage.asc | 74 ++++++++++++++++++--------------------------------------
+ 1 file changed, 23 insertions(+), 51 deletions(-)
+
+diff --git a/dracut.usage.asc b/dracut.usage.asc
+index 15dc244..45cbf12 100644
+--- a/dracut.usage.asc
++++ b/dracut.usage.asc
+@@ -37,10 +37,14 @@ the --hostonly or -H option. Using this option, the resulting image will
+ contain only those dracut modules, kernel modules and filesystems, which are
+ needed to boot this specific machine. This has the drawback, that you can't put
+ the disk on another controller or machine, and that you can't switch to another
+-root filesystem, without recreating the initramfs image. The usage of the
+---hostonly option is only for experts and you will have to keep the broken
+-pieces. At least keep a copy of a general purpose image (and corresponding
+-kernel) as a fallback to rescue your system.
++root filesystem, without recreating the initramfs image.
++
++[NOTE]
++===============================
++On RHEL-7 the hostonly mode is the default mode. Generic "non-hostonly" images
++are created, if the dracut-config-generic rpm is installed. The rescue kernel
++entry in the bootloader menu is also a generic image.
++===============================
+ 
+ === Inspecting the Contents
+ To see the contents of the image created by dracut, you can use the lsinitrd
+@@ -99,8 +103,9 @@ raid with encryption and LVM on top), as long as you specify the correct
+ filesystem LABEL or UUID on the kernel command line for your root device, dracut
+ will find it and boot from it.
+ 
+-The kernel command line usually can be configured in _/boot/grub2/grub.cfg_, if
+-grub is your bootloader and it also can be edited in the real boot process in
++The kernel command line usually can be configured in _/boot/grub2/grub.cfg_
++(or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems), if
++grub2 is your bootloader and it also can be edited in the real boot process in
+ the grub menu.
+ 
+ The kernel command line can also be provided by the dhcp server with the
+@@ -325,7 +330,8 @@ stick and mount that. Then you can store the output for later inspection.
+ In all cases, the following should be mentioned and attached to your bug report:
+ 
+ * The exact kernel command-line used. Typically from the bootloader
+-configuration file (e.g. _/boot/grub2/grub.cfg_) or from _/proc/cmdline_.
++configuration file (e.g. _/boot/grub2/grub.cfg_ (or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems))
++or from _/proc/cmdline_.
+ * A copy of your disk partition information from _/etc/fstab_, which might be
+ obtained booting an old working initramfs or a rescue medium.
+ * Turn on dracut debugging (see _the 'debugging dracut' section_), and attach
+@@ -359,49 +365,17 @@ Successfully debugging dracut will require some form of console
+ logging during the system boot.  This section documents configuring a
+ serial console connection to record boot messages.
+ 
+-. First, enable serial console output for both the kernel and the bootloader.
+-. Open the file _/boot/grub2/grub.cfg_ for editing. Below the line ''timeout=5'', add
+-the following:
+-+
+-----
+-serial --unit=0 --speed=9600
+-terminal --timeout=5 serial console
+-----
+-+
+-. Also in _/boot/grub2/grub.cfg_, add the following boot arguemnts to the ''kernel''
++. In _/boot/grub2/grub.cfg_ (or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems),
++add the following boot arguments to the ''linux16''
+ line:
+ +
+ ----
+ console=tty0 console=ttyS0,9600
+ ----
+ +
+-. When finished, the _/boot/grub2/grub.cfg_ file should look similar to the example
+-below.
+-+
+-----
+-default=0
+-timeout=5
+-serial --unit=0 --speed=9600
+-terminal --timeout=5 serial console
+-title Fedora (2.6.29.5-191.fc11.x86_64)
+-  root (hd0,0)
+-  kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 console=ttyS0,9600
+-  initrd /dracut-2.6.29.5-191.fc11.x86_64.img
+-----
+-+
+ . More detailed information on how to configure the kernel for console output
+ can be found at
+ http://www.faqs.org/docs/Linux-HOWTO/Remote-Serial-Console-HOWTO.html#CONFIGURE-KERNEL.
+-. Redirecting non-interactive output
+-+
+---
+-NOTE: You can redirect all non-interactive output to _/dev/kmsg_ and the kernel
+-will put it out on the console when it reaches the kernel buffer by doing
+-
+-----
+-# exec >/dev/kmsg 2>&1 </dev/console
+-----
+---
+ 
+ [[using-the-dracut-shell]]
+ ==== Using the dracut shell
+@@ -410,20 +384,18 @@ dracut offers a shell for interactive debugging in the event dracut fails to
+ locate your root filesystem. To enable the shell:
+ 
+ . Add the boot parameter ''rd.shell'' to your bootloader configuration file
+-(e.g. _/boot/grub2/grub.cfg_)
++(e.g. _/boot/grub2/grub.cfg_ (or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems))
+ . Remove the boot arguments ''rhgb'' and ''quiet''
+ +
+-A sample _/boot/grub2/grub.cfg_ bootloader configuration file is listed below.
++A sample _grub.cfg_ bootloader configuration file snippet is listed below.
+ +
+ ----
+-default=0
+-timeout=5
+-serial --unit=0 --speed=9600
+-terminal --timeout=5 serial console
+-title Fedora (2.6.29.5-191.fc11.x86_64)
+-  root (hd0,0)
+-  kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 rd.shell
+-  initrd /dracut-2.6.29.5-191.fc11.x86_64.img
++menuentry 'Red Hat Enterprise Linux Server (3.10.0-308.el7.x86_64) 7.0 (Maipo)' […] {
++  […]
++  linux16 /vmlinuz-3.10.0-308.el7.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 rd.shell
++  initrd16 /initramfs-3.10.0-308.el7.x86_64.img
++  […]
++}
+ ----
+ +
+ . If system boot fails, you will be dropped into a shell as seen in the example
diff --git a/SOURCES/0338-network-dhclient-script.sh-fix-RENEW.patch b/SOURCES/0338-network-dhclient-script.sh-fix-RENEW.patch
new file mode 100644
index 0000000..28f22a9
--- /dev/null
+++ b/SOURCES/0338-network-dhclient-script.sh-fix-RENEW.patch
@@ -0,0 +1,35 @@
+From 52845b168d0909d72b4c2f0b6511ed18877a31e8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 8 Sep 2015 11:44:13 +0200
+Subject: [PATCH] network/dhclient-script.sh: fix RENEW
+
+Remove check, if interface is already up. It is for RENEW.
+
+new_prefix is apparently new_subnet_mask
+---
+ modules.d/40network/dhclient-script.sh | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh
+index 761b0cd..6d4b9dd 100755
+--- a/modules.d/40network/dhclient-script.sh
++++ b/modules.d/40network/dhclient-script.sh
+@@ -10,9 +10,6 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
+ # We already need a set netif here
+ netif=$interface
+ 
+-# Huh? Interface configured?
+-[ -f "/tmp/net.$netif.up" ] && exit 0
+-
+ setup_interface() {
+     ip=$new_ip_address
+     mtu=$new_interface_mtu
+@@ -151,7 +148,7 @@ case $reason in
+         [ -n "$new_max_life" ] && lease_time=$new_max_life
+         preferred_lft=$lease_time
+         [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+-        ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \
++        ip -4 addr change ${new_ip_address}/${new_subnet_mask} broadcast ${new_broadcast_address} dev ${interface} \
+            ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
+            >/dev/null 2>&1
+         ;;
diff --git a/SOURCES/0339-network-add-all_ifaces_setup.patch b/SOURCES/0339-network-add-all_ifaces_setup.patch
new file mode 100644
index 0000000..2c5a920
--- /dev/null
+++ b/SOURCES/0339-network-add-all_ifaces_setup.patch
@@ -0,0 +1,32 @@
+From 63e75dc4cdb14e392e38a8973126c9a29b266411 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 10 Sep 2015 13:20:18 +0200
+Subject: [PATCH] network: add all_ifaces_setup()
+
+all_ifaces_up() is true, if all interfaces are up.
+
+all_ifaces_setup() is true, if all interfaces are up and the gateways
+and nameserver are setup.
+---
+ modules.d/40network/net-lib.sh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 9d22ec1..60d3579 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -74,6 +74,14 @@ all_ifaces_up() {
+     done
+ }
+ 
++all_ifaces_setup() {
++    local iface="" IFACES=""
++    [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
++    for iface in $IFACES; do
++        [ -e /tmp/net.$iface.did-setup ] || return 1
++    done
++}
++
+ get_netroot_ip() {
+     local prefix="" server="" rest=""
+     splitsep "$1" ":" prefix server rest
diff --git a/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch b/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch
new file mode 100644
index 0000000..55263ad
--- /dev/null
+++ b/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch
@@ -0,0 +1,36 @@
+From 7cddfbbadbc40a4b6d331be25a3c38ad3a52239b Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 10 Sep 2015 13:21:53 +0200
+Subject: [PATCH] iscsi/iscsiroot.sh: use all_ifaces_setup()
+
+we want the route and gateway setup
+---
+ modules.d/95iscsi/iscsiroot.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 7688b28..424d216 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -108,7 +108,7 @@ handle_netroot()
+     parse_iscsi_root "$1" || return 1
+ 
+     # Bail out early, if there is no route to the destination
+-    if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then
++    if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_setup && getargbool 1 rd.iscsi.testroute; then
+         ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0
+     fi
+ 
+@@ -227,10 +227,10 @@ handle_netroot()
+ ret=0
+ 
+ if [ "$netif" != "timeout" ] && getargbool 1 rd.iscsi.waitnet; then
+-    all_ifaces_up || exit 0
++    all_ifaces_setup || exit 0
+ fi
+ 
+-if [ "$netif" = "timeout" ] && all_ifaces_up; then
++if [ "$netif" = "timeout" ] && all_ifaces_setup; then
+     # s.th. went wrong and the timeout script hits
+     # restart
+     systemctl restart iscsid
diff --git a/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch b/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch
new file mode 100644
index 0000000..3ecfe72
--- /dev/null
+++ b/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch
@@ -0,0 +1,59 @@
+From 17cee31b115a146bca5519b6ac4b422080d764c7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 10 Sep 2015 13:23:32 +0200
+Subject: [PATCH] network/netroot.sh: better handling of $netroot and dhcp
+
+if $netroot is emtpy, get it from cmdline
+
+check cmdline directly for root=dhcp(6) and netroot=dhcp(6)
+---
+ modules.d/40network/netroot.sh | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh
+index 8f6945f..3aa5a0d 100755
+--- a/modules.d/40network/netroot.sh
++++ b/modules.d/40network/netroot.sh
+@@ -14,6 +14,11 @@ command -v setup_net >/dev/null || . /lib/net-lib.sh
+ # no sense in doing something if no (net)root info is available
+ # or root is already there
+ [ -d $NEWROOT/proc ] && exit 0
++
++if [ -z "$netroot" ]; then
++    netroot=$(getarg netroot=)
++fi
++
+ [ -z "$netroot" ] && exit 1
+ 
+ # Set or override primary interface
+@@ -35,7 +40,7 @@ esac
+ # Figure out the handler for root=dhcp by recalling all netroot cmdline
+ # handlers when this is not called from manually network bringing up.
+ if [ -z "$2" ]; then
+-    if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then
++    if getarg "root=dhcp" || getarg "netroot=dhcp" || getarg "root=dhcp6" || getarg "netroot=dhcp6"; then
+         # Load dhcp options
+         [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
+ 
+@@ -47,6 +52,8 @@ if [ -z "$2" ]; then
+             exit 1
+         fi
+ 
++        rm -f -- $hookdir/initqueue/finished/dhcp.sh
++
+         # Set netroot to new_root_path, so cmdline parsers don't call
+         netroot=$new_root_path
+ 
+@@ -76,9 +83,7 @@ source_hook netroot $netif
+ 
+ # Run the handler; don't store the root, it may change from device to device
+ # XXX other variables to export?
+-if $handler $netif $netroot $NEWROOT; then
+-    rm -f -- $hookdir/initqueue/finished/dhcp.sh
+-    # Network rootfs mount successful - save interface info for ifcfg etc.
+-    save_netinfo $netif
+-fi
++[ -n "$handler" ] && "$handler" "$netif" "$netroot" "$NEWROOT"
++save_netinfo $netif
++
+ exit 0
diff --git a/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch b/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch
new file mode 100644
index 0000000..5daae9f
--- /dev/null
+++ b/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch
@@ -0,0 +1,81 @@
+From fd3eddf06990a617a2f90b0a699947ab3faf2cc2 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 10 Sep 2015 13:25:13 +0200
+Subject: [PATCH] iscsi/iscsiroot.sh: handle iscsi_firmware in online and
+ timeout queue
+
+The return code of iscsi_firmware is broken, so set the marker
+unconditionally.
+---
+ modules.d/95iscsi/iscsiroot.sh | 43 +++++++++++++++++++-----------------------
+ 1 file changed, 19 insertions(+), 24 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 424d216..ea1bead 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -45,29 +45,23 @@ fi
+ 
+ handle_firmware()
+ {
+-    if ! [ -e /tmp/iscsistarted-firmware ]; then
+-        if ! iscsistart -f; then
+-            warn "iscistart: Could not get list of targets from firmware."
+-            return 1
+-        fi
++    if ! iscsistart -f; then
++        warn "iscistart: Could not get list of targets from firmware."
++        return 1
++    fi
+ 
+-        for p in $(getargs rd.iscsi.param -d iscsi_param); do
+-	    iscsi_param="$iscsi_param --param $p"
+-        done
++    for p in $(getargs rd.iscsi.param -d iscsi_param); do
++	iscsi_param="$iscsi_param --param $p"
++    done
+ 
+-        if ! iscsistart -b $iscsi_param; then
+-            warn "'iscsistart -b $iscsi_param' failed"
+-        fi
++    if ! iscsistart -b $iscsi_param; then
++        warn "'iscsistart -b $iscsi_param' failed with return code $?"
++    fi
+ 
+-        if [ -d /sys/class/iscsi_session ]; then
+-            echo 'started' > "/tmp/iscsistarted-iscsi:"
+-            echo 'started' > "/tmp/iscsistarted-firmware"
+-        else
+-            return 1
+-        fi
++    echo 'started' > "/tmp/iscsistarted-iscsi:"
++    echo 'started' > "/tmp/iscsistarted-firmware"
+ 
+-        need_shutdown
+-    fi
++    need_shutdown
+     return 0
+ }
+ 
+@@ -238,15 +232,16 @@ if [ "$netif" = "timeout" ] && all_ifaces_setup; then
+     sleep 2
+ fi
+ 
+-if [ "$netif" = "online" ]; then
+-    if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
++if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
++    if [ "$netif" = "timeout" ] || [ "$netif" = "online" ]; then
+         handle_firmware
+         ret=$?
+     fi
+-else
++fi
++
++if ! [ "$netif" = "online" ]; then
+     # loop over all netroot parameter
+-    nroot=$(getarg netroot)
+-    if [ $? -eq 0 ] && [ "$nroot" != "dhcp" ]; then
++    if nroot=$(getarg netroot) && [ "$nroot" != "dhcp" ]; then
+         for nroot in $(getargs netroot); do
+             [ "${nroot%%:*}" = "iscsi" ] || continue
+             nroot="${nroot##iscsi:}"
diff --git a/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch b/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch
new file mode 100644
index 0000000..6ffb31d
--- /dev/null
+++ b/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch
@@ -0,0 +1,27 @@
+From 7c0b1d864dda88befa458b34d9408605883e2c74 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 14 Aug 2014 12:56:53 +0200
+Subject: [PATCH] i18n: check for $i18n_install_all == "yes" rather than being
+ set
+
+i18n_install_all="no" does not have the expected effect without this
+patch
+
+(cherry picked from commit ae488efa5e6103ffc1be8b8782f8a1c7a5aa90b4)
+---
+ modules.d/10i18n/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh
+index 2c0a275..4fd8116 100755
+--- a/modules.d/10i18n/module-setup.sh
++++ b/modules.d/10i18n/module-setup.sh
+@@ -241,7 +241,7 @@ install() {
+     if checks; then
+         install_base
+ 
+-        if [[ ${hostonly} ]] && ! [[ ${i18n_install_all} ]]; then
++        if [[ ${hostonly} ]] && ! [[ ${i18n_install_all} == "yes" ]]; then
+             install_local_i18n || install_all_kbd
+         else
+             install_all_kbd
diff --git a/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch b/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch
new file mode 100644
index 0000000..a775ecd
--- /dev/null
+++ b/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch
@@ -0,0 +1,43 @@
+From 34b551a1c4d4513189807ee2a639c9214d887ddb Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 15 Sep 2015 16:04:09 +0200
+Subject: [PATCH] dracut.sh: add command line option for install_i18_all
+
+--no-hostonly-i18n -> install_i18n_all=yes
+--hostonly-i18n -> install_i18n_all=no
+---
+ dracut.sh | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index 65824ec..d5f864f 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -369,6 +369,8 @@ rearrange_params()
+         --long noimageifnotneeded \
+         --long early-microcode \
+         --long no-early-microcode \
++        --long no-hostonly-i18n \
++        --long hostonly-i18n \
+         -- "$@")
+ 
+     if (( $? != 0 )); then
+@@ -528,6 +530,10 @@ while :; do
+                        hostonly_l="no" ;;
+         --hostonly-cmdline)
+                        hostonly_cmdline_l="yes" ;;
++        --hostonly-i18n)
++                       i18n_install_all_l="no" ;;
++        --no-hostonly-i18n)
++                       i18n_install_all_l="yes" ;;
+         --no-hostonly-cmdline)
+                        hostonly_cmdline_l="no" ;;
+         --persistent-policy)
+@@ -769,6 +775,7 @@ stdloglvl=$((stdloglvl + verbosity_mod_l))
+ [[ $prefix = "/" ]] && unset prefix
+ [[ $hostonly_l ]] && hostonly=$hostonly_l
+ [[ $hostonly_cmdline_l ]] && hostonly_cmdline=$hostonly_cmdline_l
++[[ $i18n_install_all_l ]] && i18n_install_all=$i18n_install_all_l
+ [[ $persistent_policy_l ]] && persistent_policy=$persistent_policy_l
+ [[ $use_fstab_l ]] && use_fstab=$use_fstab_l
+ [[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l
diff --git a/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch b/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch
new file mode 100644
index 0000000..3bb7823
--- /dev/null
+++ b/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch
@@ -0,0 +1,25 @@
+From 13b5c1d09e0e242f1817057501292fe9d7e9ad92 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 15 Sep 2015 16:08:25 +0200
+Subject: [PATCH] dracut.sh: do not create microcode, if no firmware is
+ available
+
+---
+ dracut.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index d5f864f..980c7ff 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1493,6 +1493,10 @@ if [[ $early_microcode = yes ]]; then
+                         break;
+                     fi
+                 fi
++                for i in $_fwdir/$_fw/$_src; do
++                    [ -e $i ] && break
++                    break 2
++                done
+                 cat $_fwdir/$_fw/$_src > $_dest_dir/${ucode_dest[$idx]}
+                 create_early_cpio="yes"
+             fi
diff --git a/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch b/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch
new file mode 100644
index 0000000..1deee7b
--- /dev/null
+++ b/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch
@@ -0,0 +1,31 @@
+From bcc2132dab5bf276a0bd4dce606f4ef534b27800 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 17 Sep 2015 12:32:07 +0200
+Subject: [PATCH] scsi/parse-iscsiroot.sh: call modprobe with "-b"
+
+honor, if a module is blacklisted
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index 9546f12..f19147f 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -88,11 +88,11 @@ fi
+ 
+ initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
+ 
+-modprobe -q qla4xxx
+-modprobe -q cxgb3i
+-modprobe -q cxgb4i
+-modprobe -q bnx2i
+-modprobe -q be2iscsi
++modprobe -b -q qla4xxx
++modprobe -b -q cxgb3i
++modprobe -b -q cxgb4i
++modprobe -b -q bnx2i
++modprobe -b -q be2iscsi
+ 
+ # ISCSI actually supported?
+ if ! [ -e /sys/module/iscsi_tcp ]; then
diff --git a/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch b/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch
new file mode 100644
index 0000000..896e87f
--- /dev/null
+++ b/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch
@@ -0,0 +1,26 @@
+From 7fd112f20e63def6d274ab445b5eb82138348901 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 17 Sep 2015 15:41:12 +0200
+Subject: [PATCH] iscsi/parse-iscsiroot.sh: correct handling if netroot isn't
+ set
+
+corrects bfe65f913a4bc6bc5fdb7aa75234c229a2ceef8f
+---
+ modules.d/95iscsi/parse-iscsiroot.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
+index f19147f..3d74ff2 100755
+--- a/modules.d/95iscsi/parse-iscsiroot.sh
++++ b/modules.d/95iscsi/parse-iscsiroot.sh
+@@ -84,7 +84,9 @@ if [ -n "$iscsi_firmware" ]; then
+     initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'"
+ fi
+ 
+-[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1
++if [ -z "$netroot" ] || ! [ "${netroot%%:*}" = "iscsi" ]; then
++    return 1
++fi
+ 
+ initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
+ 
diff --git a/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch b/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch
new file mode 100644
index 0000000..da5d948
--- /dev/null
+++ b/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch
@@ -0,0 +1,31 @@
+From 327d765512135721a323822a8b10ac1539bd20c6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Thu, 17 Sep 2015 20:03:54 +0200
+Subject: [PATCH] dracut.sh: no microcode, if get_ucode_file returns empty file
+
+check, if get_ucode_file() returned an empty string.
+---
+ dracut.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 980c7ff..4e4f222 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1489,12 +1489,12 @@ if [[ $early_microcode = yes ]]; then
+                 dinfo "*** Constructing ${ucode_dest[$idx]} ****"
+                 if [[ $hostonly ]]; then
+                     _src=$(get_ucode_file)
+-                    if ! [[ -r $_fwdir/$_fw/$_src ]];then
+-                        break;
+-                    fi
++                    [[ $src ]] || break
++                    [[ -r $_fwdir/$_fw/$_src ]] || break
+                 fi
++
+                 for i in $_fwdir/$_fw/$_src; do
+-                    [ -e $i ] && break
++                    [ -e "$i" ] && break
+                     break 2
+                 done
+                 cat $_fwdir/$_fw/$_src > $_dest_dir/${ucode_dest[$idx]}
diff --git a/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch b/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch
new file mode 100644
index 0000000..e3c1d19
--- /dev/null
+++ b/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch
@@ -0,0 +1,51 @@
+From f059985b14f80a41f3b8103b67cb8fae0d3fc2fc Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 25 Sep 2015 10:14:33 -0400
+Subject: [PATCH] network:wait_for_ifup() handle "NO-CARRIER" output
+
+if "NO-CARRIER" is one of the flags, we surely have no link yet.
+---
+ modules.d/40network/net-lib.sh | 30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 60d3579..995d32f 100755
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -531,20 +531,22 @@ wait_for_if_up() {
+ 
+     while [ $cnt -lt $timeout ]; do
+         li=$(ip -o link show up dev $1)
+-        if [ -n "$li" ]; then
+-            case "$li" in
+-                *\<UP*)
+-                    return 0;;
+-                *\<*,UP\>*)
+-                    return 0;;
+-                *\<*,UP,*\>*)
+-                    return 0;;
+-            esac
+-        fi
+-        if strstr "$li" "LOWER_UP" \
+-                && strstr "$li" "state UNKNOWN" \
+-                && ! strstr "$li" "DORMANT"; then
+-            return 0
++        if ! strstr "$li" "NO-CARRIER"; then
++            if [ -n "$li" ]; then
++                case "$li" in
++                    *\<UP*)
++                        return 0;;
++                    *\<*,UP\>*)
++                        return 0;;
++                    *\<*,UP,*\>*)
++                        return 0;;
++                esac
++            fi
++            if strstr "$li" "LOWER_UP" \
++                    && strstr "$li" "state UNKNOWN" \
++                    && ! strstr "$li" "DORMANT"; then
++                return 0
++            fi
+         fi
+         sleep 0.1
+         cnt=$(($cnt+1))
diff --git a/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch b/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch
new file mode 100644
index 0000000..fd43e1d
--- /dev/null
+++ b/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch
@@ -0,0 +1,39 @@
+From fe74a7069bb24ecfb8d2d948955236ff31ae7571 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 25 Sep 2015 11:07:07 -0400
+Subject: [PATCH] base/dracut-lib.sh:info() be more quiet
+
+---
+ modules.d/99base/dracut-lib.sh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index b6593a0..50bcf84 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -61,7 +61,9 @@ else
+     }
+ 
+     info() {
+-        echo "$*" >&2
++        check_quiet
++        [ "$DRACUT_QUIET" != "yes" ] && \
++            echo "$*" >&2
+     }
+ 
+ fi
+@@ -461,9 +463,11 @@ check_quiet() {
+         DRACUT_QUIET="yes"
+         getargbool 0 rd.info -d -y rdinfo && DRACUT_QUIET="no"
+         getargbool 0 rd.debug -d -y rdinitdebug && DRACUT_QUIET="no"
+-        getarg quiet || DRACUT_QUIET="yes"
+-        a=$(getarg loglevel=)
+-        [ -n "$a" ] && [ $a -ge 28 ] && DRACUT_QUIET="yes"
++        if [ -z "$DRACUT_SYSTEMD" ]; then
++            getarg quiet || DRACUT_QUIET="yes"
++            a=$(getarg loglevel=)
++            [ -n "$a" ] && [ $a -ge 28 ] && DRACUT_QUIET="yes"
++        fi
+         export DRACUT_QUIET
+     fi
+ }
diff --git a/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch b/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch
new file mode 100644
index 0000000..e260a00
--- /dev/null
+++ b/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch
@@ -0,0 +1,43 @@
+From 5263556ff3314d61e7e9da685bbd59bebc79efe1 Mon Sep 17 00:00:00 2001
+From: Lubomir Rintel <lkundrak@v3.sk>
+Date: Tue, 23 Dec 2014 22:03:10 +0100
+Subject: [PATCH] dracut-functions.sh: avoid tokenizing ldconfig output with
+ 'read'
+
+The space does not separate the elements reliably, spaces can be
+embedded in parenthesized expressions too:
+
+  libgmpxx.so.4 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmpxx.so.4
+  libgmp.so.10 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmp.so.10
+
+This results in dracut creating '0x0000000004000000' and '=>'
+directories in the initramfs image.
+
+(cherry picked from commit c59779cf9337bc0fc48c7a4d8437f7253f6822c3)
+---
+ dracut-functions.sh | 12 +-----------
+ 1 file changed, 1 insertion(+), 11 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 585b683..9218779 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -97,17 +97,7 @@ fi
+ 
+ ldconfig_paths()
+ {
+-    local a i
+-    declare -A a
+-    for i in $(
+-        ldconfig -pN 2>/dev/null | grep -F '=>' | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | while read a b c d; do
+-            d=${d%/*}
+-            printf "%s\n" "$d";
+-        done
+-    ); do
+-        a["$i"]=1;
+-    done;
+-    printf "%s\n" ${!a[@]}
++    ldconfig -pN 2>/dev/null | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | sed -n 's,.* => \(.*\)/.*,\1,p' | sort | uniq
+ }
+ 
+ # Detect lib paths
diff --git a/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch b/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch
new file mode 100644
index 0000000..abe8c32
--- /dev/null
+++ b/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch
@@ -0,0 +1,22 @@
+From a594b4e357bc63dd22ae04346dbca648e0d62744 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 25 Sep 2015 14:10:20 -0400
+Subject: [PATCH] dracut.sh: fixed typo in microcode generation
+
+---
+ dracut.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 4e4f222..5b72221 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1489,7 +1489,7 @@ if [[ $early_microcode = yes ]]; then
+                 dinfo "*** Constructing ${ucode_dest[$idx]} ****"
+                 if [[ $hostonly ]]; then
+                     _src=$(get_ucode_file)
+-                    [[ $src ]] || break
++                    [[ $_src ]] || break
+                     [[ -r $_fwdir/$_fw/$_src ]] || break
+                 fi
+ 
diff --git a/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch b/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch
new file mode 100644
index 0000000..27d527c
--- /dev/null
+++ b/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch
@@ -0,0 +1,40 @@
+From 5f24e4340171913248a6965ff2153e2517cb892a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 31 Jul 2015 09:05:51 +0200
+Subject: [PATCH] 90qemu: fixed systemd-detect-virt output parsing
+
+redirecting systemd-detect-virt to /dev/null doesn't help with parsing
+the output :-/
+
+Also, add "Red Hat" as a vendor.
+
+(cherry picked from commit 4135eea634b20c7f7285d134bd6dfe6b799fe226)
+---
+ modules.d/90qemu/module-setup.sh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh
+index 64eac9e..46b7ae2 100755
+--- a/modules.d/90qemu/module-setup.sh
++++ b/modules.d/90qemu/module-setup.sh
+@@ -4,7 +4,7 @@
+ 
+ check() {
+     if type -P systemd-detect-virt >/dev/null 2>&1; then
+-        vm=$(systemd-detect-virt --vm >/dev/null 2>&1)
++        vm=$(systemd-detect-virt --vm 2>/dev/null)
+         (($? != 0)) && return 255
+         [[ $vm = "qemu" ]] && return 0
+         [[ $vm = "kvm" ]] && return 0
+@@ -14,8 +14,9 @@ check() {
+     for i in /sys/class/dmi/id/*_vendor; do
+         [[ -f $i ]] || continue
+         read vendor < $i
+-        [[  "$vendor" == "QEMU" ]] && return 0
+-        [[  "$vendor" == "Bochs" ]] && return 0
++        [[ "$vendor" == "QEMU" ]] && return 0
++        [[ "$vendor" == "Red Hat" ]] && return 0
++        [[ "$vendor" == "Bochs" ]] && return 0
+     done
+     return 255
+ }
diff --git a/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch b/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch
new file mode 100644
index 0000000..ba671b7
--- /dev/null
+++ b/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch
@@ -0,0 +1,26 @@
+From 7de064b57cda7ca3d117c5faebc7636858dfc2f2 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 21 Apr 2015 10:34:31 +0200
+Subject: [PATCH] ifcfg/write-ifcfg.sh: unset vlan
+
+clear the vlan flag, if a previous interface in the loop
+was a vlan interface
+
+(cherry picked from commit 23446ef1e0a6eda79049a655cb1645691b129645)
+---
+ modules.d/45ifcfg/write-ifcfg.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
+index b2462da..ed66370 100755
+--- a/modules.d/45ifcfg/write-ifcfg.sh
++++ b/modules.d/45ifcfg/write-ifcfg.sh
+@@ -140,6 +140,8 @@ for netup in /tmp/net.*.did-setup ; do
+     unset macaddr
+     unset slave
+     unset ethname
++    unset vlan
++
+     [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info
+     [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info
+ 
diff --git a/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch b/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch
new file mode 100644
index 0000000..2691908
--- /dev/null
+++ b/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch
@@ -0,0 +1,25 @@
+From d1f7f2ac046c77913d1ca97cf8414d9226ae1286 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 9 Oct 2015 11:30:03 +0200
+Subject: [PATCH] base/dracut-lib.sh:getargs() don't return 1 for empty values
+
+getargs() is only used with real values and not booleans.
+
+So, return the values only.
+---
+ modules.d/99base/dracut-lib.sh | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index 50bcf84..cb1ddd7 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -320,8 +320,6 @@ getargs() {
+     if [ -n "$_gfound" ]; then
+         if [ $# -gt 0 ]; then
+             echo -n "$@"
+-        else
+-            echo -n 1
+         fi
+         debug_on
+         return 0
diff --git a/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch b/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch
new file mode 100644
index 0000000..071e739
--- /dev/null
+++ b/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch
@@ -0,0 +1,33 @@
+From 3bce34dfd780b9aa9b93c0a09358096b48806c05 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 9 Oct 2015 11:31:28 +0200
+Subject: [PATCH] ifcfg/write-ifcfg.sh: don't bind interface, if physical
+ device is set
+
+If a physical device is defined, we don't need to bind the interface to
+the MAC address or something else.
+---
+ modules.d/45ifcfg/write-ifcfg.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
+index ed66370..1e7f694 100755
+--- a/modules.d/45ifcfg/write-ifcfg.sh
++++ b/modules.d/45ifcfg/write-ifcfg.sh
+@@ -141,6 +141,7 @@ for netup in /tmp/net.*.did-setup ; do
+     unset slave
+     unset ethname
+     unset vlan
++    unset phydevice
+ 
+     [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info
+     [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info
+@@ -164,7 +165,7 @@ for netup in /tmp/net.*.did-setup ; do
+     {
+         echo "# Generated by dracut initrd"
+         echo "NAME=\"$netif\""
+-        interface_bind "$netif" "$macaddr"
++        [ -z "$phydevice" ] && interface_bind "$netif" "$macaddr"
+         echo "ONBOOT=yes"
+         echo "NETBOOT=yes"
+         echo "UUID=\"$uuid\""
diff --git a/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch b/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch
new file mode 100644
index 0000000..21a8599
--- /dev/null
+++ b/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch
@@ -0,0 +1,35 @@
+From e65825117377a8e1e730912aa4c0e786122d892a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 9 Oct 2015 11:35:43 +0200
+Subject: [PATCH] network/ifup.sh: skip empty nameserver values
+
+---
+ modules.d/40network/ifup.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index 0471c42..7c06cd8 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -336,8 +336,8 @@ fi
+ ip=$(getarg ip)
+ 
+ if [ -z "$ip" ]; then
+-    namesrv=$(getargs nameserver)
+-    for s in $namesrv; do
++    for s in $(getargs nameserver); do
++        [ -n "$s" ] || continue
+         echo nameserver $s >> /tmp/net.$netif.resolv.conf
+     done
+ 
+@@ -373,8 +373,8 @@ for p in $(getargs ip=); do
+     [ "$use_vlan" != 'true' ] && continue
+ 
+     # setup nameserver
+-    namesrv="$dns1 $dns2 $(getargs nameserver)"
+-    for s in $namesrv; do
++    for s in "$dns1" "$dns2" $(getargs nameserver); do
++        [ -n "$s" ] || continue
+         echo nameserver $s >> /tmp/net.$netif.resolv.conf
+     done
+ 
diff --git a/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch b/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch
new file mode 100644
index 0000000..25f7eef
--- /dev/null
+++ b/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch
@@ -0,0 +1,44 @@
+From efd5178b6395f4994d005fd437ca916616d2f1ba Mon Sep 17 00:00:00 2001
+From: Fedora dracut team <dracut-maint@redhat.com>
+Date: Mon, 19 Oct 2015 18:27:11 +0200
+Subject: [PATCH 358/359] write-ifcfg: fix creating configuration for VLAN
+
+Currently the physdev is unset before it is somehow applied.
+Also there is no DEVICE in the output.
+---
+ modules.d/45ifcfg/write-ifcfg.sh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
+index 1e7f694..f3a1c10 100755
+--- a/modules.d/45ifcfg/write-ifcfg.sh
++++ b/modules.d/45ifcfg/write-ifcfg.sh
+@@ -141,7 +141,6 @@ for netup in /tmp/net.*.did-setup ; do
+     unset slave
+     unset ethname
+     unset vlan
+-    unset phydevice
+ 
+     [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info
+     [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info
+@@ -165,7 +164,7 @@ for netup in /tmp/net.*.did-setup ; do
+     {
+         echo "# Generated by dracut initrd"
+         echo "NAME=\"$netif\""
+-        [ -z "$phydevice" ] && interface_bind "$netif" "$macaddr"
++        [ -z "$vlan" ] && interface_bind "$netif" "$macaddr"
+         echo "ONBOOT=yes"
+         echo "NETBOOT=yes"
+         echo "UUID=\"$uuid\""
+@@ -219,7 +218,7 @@ for netup in /tmp/net.*.did-setup ; do
+     if [ -n "$vlan" ] ; then
+         {
+             echo "TYPE=Vlan"
+-            echo "NAME=\"$netif\""
++            echo "DEVICE=\"$netif\""
+             echo "VLAN=yes"
+             echo "PHYSDEV=\"$phydevice\""
+         } >> /tmp/ifcfg/ifcfg-$netif
+-- 
+2.4.3
+
diff --git a/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch b/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch
new file mode 100644
index 0000000..63088ef
--- /dev/null
+++ b/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch
@@ -0,0 +1,27 @@
+From fda9e5f8571e57d4cdf5e63d48194499e2a90228 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn@redhat.com>
+Date: Tue, 20 Oct 2015 15:30:12 +0200
+Subject: [PATCH 359/359] 90qemu: also add ibmvscsi on qemu
+
+Without this module following scenario does not work:
+1. Install the guest with virtio-scsi-pci as system disk and no other
+data disk.
+2. Change the system disk from virtio-scsi to spapr-vscsi.
+---
+ modules.d/90qemu/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh
+index 46b7ae2..4dd5a73 100755
+--- a/modules.d/90qemu/module-setup.sh
++++ b/modules.d/90qemu/module-setup.sh
+@@ -26,5 +26,5 @@ installkernel() {
+         hostonly='' instmods \
+             ata_piix ata_generic pata_acpi cdrom sr_mod ahci \
+             virtio_blk virtio virtio_ring virtio_pci \
+-            virtio_scsi virtio_console spapr-vscsi
++            virtio_scsi virtio_console spapr-vscsi ibmvscsi
+ }
+-- 
+2.4.3
+
diff --git a/SPECS/dracut.spec b/SPECS/dracut.spec
index 35cb38a..94ed238 100644
--- a/SPECS/dracut.spec
+++ b/SPECS/dracut.spec
@@ -10,7 +10,7 @@
 
 Name: dracut
 Version: 033
-Release: 241%{?dist}.5
+Release: 359%{?dist}
 
 Summary: Initramfs generator using udev
 %if 0%{?fedora} || 0%{?rhel}
@@ -269,13 +269,126 @@ Patch237: 0237-network-net-lib.sh-parse_iscsi_root-fix-c-p-bug.patch
 Patch238: 0238-network-ifup-source-team-info-if-present.patch
 Patch239: 0239-fips-add-drbg-kernel-module.patch
 Patch240: 0240-network-do-not-destroy-the-team-interface-on-teamd-s.patch
-
+Patch241: 0241-do-not-symlink-var-log-to-run-log.patch
+Patch242: 0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch
 Patch243: 0243-fips-add-some-s390-kernel-modules.patch
 Patch244: 0244-rearrange-fips-module-ordering-due-to-zlib.patch
-
+Patch245: 0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch
+Patch246: 0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch
+Patch247: 0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch
+Patch248: 0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch
 Patch249: 0249-crypt-add-drbg-kernel-module.patch
-
+Patch250: 0250-dracut-lib.sh-info-output-info-to-stderr.patch
+Patch251: 0251-Factor-out-all-the-type-V-commands.patch
+Patch252: 0252-network-dhclient-script.sh-add-RENEW-REBIND.patch
+Patch253: 0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch
+Patch254: 0254-network-don-t-use-ifup-m.patch
+Patch255: 0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch
+Patch256: 0256-Change-the-fs_passno-of-nfs-to-0.patch
+Patch257: 0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch
+Patch258: 0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch
+Patch259: 0259-Adding-support-for-read-write-filesystem-images.patch
+Patch260: 0260-dmsquash-Add-rd.live.overlay.thin.patch
+Patch261: 0261-dmsquash-live-setup-the-images-in-run-initramfs.patch
+Patch262: 0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch
+Patch263: 0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch
+Patch264: 0264-50drm-add-hyperv_fb-kernel-module.patch
+Patch265: 0265-kernel-modules-install-all-HID-drivers.patch
+Patch266: 0266-network-add-options-to-tweak-timeouts.patch
+Patch267: 0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch
+Patch268: 0268-fcoe-EDD-parsing-patch-for-i40e.patch
+Patch269: 0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch
+Patch270: 0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch
+Patch271: 0271-95fcoe-uefi-Test-for-EFI-firmware.patch
+Patch272: 0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch
+Patch273: 0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch
+Patch274: 0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch
+Patch275: 0275-Add-rd.live.overlay.size-option.patch
+Patch276: 0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch
+Patch277: 0277-multipath-install-all-multipath-path-selector-kernel.patch
+Patch278: 0278-man-page-changed-grub.conf-to-grub2.cfg.patch
+Patch279: 0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch
+Patch280: 0280-network-setup-gateway-after-setting-up-resolv.conf.patch
+Patch281: 0281-Add-support-for-ethernet-point-to-point-connections-.patch
+Patch282: 0282-lvm-add-cache-tools-for-dm-cache-usage.patch
 Patch283: 0283-crypt-install-drbg-unconditionally-in-hostonly-mode.patch
+Patch284: 0284-dracut-functions.sh-degrade-info-about-missing-binar.patch
+Patch285: 0285-dracut-functions.sh-require_binaries-clarify-message.patch
+Patch286: 0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch
+Patch287: 0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch
+Patch288: 0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch
+Patch289: 0289-systemd-add-systemd-run-and-systemd-escape.patch
+Patch290: 0290-network-net-lib.sh-add-is_ip.patch
+Patch291: 0291-iscsi-integrate-with-systemd-and-improve-robustness.patch
+Patch292: 0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch
+Patch293: 0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch
+Patch294: 0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch
+Patch295: 0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch
+Patch296: 0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch
+Patch297: 0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch
+Patch298: 0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch
+Patch299: 0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch
+Patch300: 0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch
+Patch301: 0301-iscsi-handle-timeout-case-better.patch
+Patch302: 0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch
+Patch303: 0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch
+Patch304: 0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch
+Patch305: 0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch
+Patch306: 0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch
+Patch307: 0307-udev-rules-install-40-redhat.rules.patch
+Patch308: 0308-fcoe-cleanup-lldpad.patch
+Patch309: 0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch
+Patch310: 0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch
+Patch311: 0311-dmraid-only-scan-once-because-of-one-device.patch
+Patch312: 0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch
+Patch313: 0313-TEST-15-BTRFS-load-btrfs-module.patch
+Patch314: 0314-network-ifup.sh-do_static-error-out-if-interface-cou.patch
+Patch315: 0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch
+Patch316: 0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch
+Patch317: 0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch
+Patch318: 0318-initqueue-add-online-queue.patch
+Patch319: 0319-dracut.spec-raise-systemd-requirement-to-219.patch
+Patch320: 0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch
+Patch321: 0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch
+Patch322: 0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch
+Patch323: 0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch
+Patch324: 0324-network-ifup.sh-save-return-value-of-ifup.patch
+Patch325: 0325-network-also-mark-interfaces-up-with-their-MAC.patch
+Patch326: 0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch
+Patch327: 0327-multipath-add-hostonly-multipath.conf.patch
+Patch328: 0328-cms-cmsifup.sh-do-not-use-ifup-m.patch
+Patch329: 0329-network-ifup-fix-warning-about-not-bringing-interfac.patch
+Patch330: 0330-network-net-lib.sh-fix-wait_for_if_up.patch
+Patch331: 0331-network-net-lib.sh-fix-IPv6-route-parsing.patch
+Patch332: 0332-network-ifup-do-DHCP-for-BOOTDEV.patch
+Patch333: 0333-qemu-add-spapr-vscsi-kernel-module.patch
+Patch334: 0334-livenet-livenetroot.sh-fixed-error-condition.patch
+Patch335: 0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch
+Patch336: 0336-network-move-ip-ibft-handling-to-network-module.patch
+Patch337: 0337-dracut.usage.asc-update-man-page.patch
+Patch338: 0338-network-dhclient-script.sh-fix-RENEW.patch
+Patch339: 0339-network-add-all_ifaces_setup.patch
+Patch340: 0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch
+Patch341: 0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch
+Patch342: 0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch
+Patch343: 0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch
+Patch344: 0344-dracut.sh-add-command-line-option-for-install_i18_al.patch
+Patch345: 0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch
+Patch346: 0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch
+Patch347: 0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch
+Patch348: 0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch
+Patch349: 0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch
+Patch350: 0350-base-dracut-lib.sh-info-be-more-quiet.patch
+Patch351: 0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch
+Patch352: 0352-dracut.sh-fixed-typo-in-microcode-generation.patch
+Patch353: 0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch
+Patch354: 0354-ifcfg-write-ifcfg.sh-unset-vlan.patch
+Patch355: 0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch
+Patch356: 0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch
+Patch357: 0357-network-ifup.sh-skip-empty-nameserver-values.patch
+Patch358: 0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch
+Patch359: 0359-90qemu-also-add-ibmvscsi-on-qemu.patch
+
 
 BuildRequires: bash git
 
@@ -341,7 +454,7 @@ Requires: kpartx
 
 %if 0%{?fedora} || 0%{?rhel} > 6
 Requires: util-linux >= 2.21
-Requires: systemd >= 199
+Requires: systemd >= 219
 Requires: procps-ng
 Conflicts: grubby < 8.23
 %else
@@ -543,6 +656,7 @@ rm -rf -- $RPM_BUILD_ROOT
 %endif
 %dir %{dracutlibdir}
 %dir %{dracutlibdir}/modules.d
+%{dracutlibdir}/dracut-init.sh
 %{dracutlibdir}/dracut-functions.sh
 %{dracutlibdir}/dracut-functions
 %{dracutlibdir}/dracut-version.sh
@@ -701,21 +815,177 @@ rm -rf -- $RPM_BUILD_ROOT
 %endif
 
 %changelog
-* Thu Jul 09 2015 Harald Hoyer <harald@redhat.com> 033-241.5
+* Tue Oct 20 2015 Lukáš Nykrýn <lnykryn@redhat.com> - 033-359
+- write-ifcfg: fix creating configuration for VLAN
+Resolves: rhbz#1267311
+- 90qemu: also add ibmvscsi on qemu
+Resolves: rhbz#1245959
+
+* Fri Oct 09 2015 Harald Hoyer <harald@redhat.com> 033-358
+- fixed qemu detection
+Resolves: rhbz#1245959
+- fixed vlan ifcfg generation and nameserver handling
+Resolves: rhbz#1267311
+
+* Wed Sep 30 2015 Harald Hoyer <harald@redhat.com> 033-353
+- fix network wait_for_if_up() to parse NO-CARRIER
+Resolves: rhbz#1249507
+- don't create garbage directories because of ldconfig
+  misparsing
+Resolves: rhbz#1264725
+
+* Thu Sep 17 2015 Harald Hoyer <harald@redhat.com> 033-349
+- no iSCSI timeout and modprobe, if iSCSI is not used
+- modprobe iSCSI modules with "-b" to allow blacklisting
+Resolves: rhbz#1263984
+- check for firmware file existance, before crafting
+  microcode cpio
+Resolves: rhbz#1263798
+
+* Tue Sep 15 2015 Harald Hoyer <harald@redhat.com> 033-346
+- slim down the image by not including microcode header, if
+  not needed
+- add command line parameter for hostonly keyboard layouts
+   --hostonly-i18n
+Resolves: rhbz#1262208
+
+* Thu Sep 10 2015 Harald Hoyer <harald@redhat.com> 033-343
+- fixed more iscsi_firmware / ibft handling
+Resolves: rhbz#1256814
+
+* Tue Sep 08 2015 Harald Hoyer <harald@redhat.com> 033-339
+- fixed dhcp lease RENEW
+Resolves: rhbz#1144277
+
+* Thu Sep 03 2015 Harald Hoyer <harald@redhat.com> 033-338
+- updated the man page for grub config file modifications
+Resolves: rhbz#1209962
+
+* Thu Sep 03 2015 Harald Hoyer <harald@redhat.com> 033-337
+- more "ip=ibft" fixes
+Resolves: rhbz#1256814
+
+* Wed Sep 02 2015 Harald Hoyer <harald@redhat.com> 033-335
+- fixed livenet exit code
+Related: rhbz#1256814
+
+* Wed Sep 02 2015 Harald Hoyer <harald@redhat.com> 033-334
+- add spapr-vscsi kernel module for qemu
+Resolves: rhbz#1245959
+
+* Tue Sep 01 2015 Harald Hoyer <harald@redhat.com> 033-333
+- fixed more iSCSI handling
+Resolves: rhbz#1114966 rhbz#1189891
+- fixed "ip=ibft"
+Resolves: rhbz#1256814
+- fixed cmsifup and s390 ifup
+Resolves: rhbz#1245660
+
+* Tue Aug 25 2015 Harald Hoyer <harald@redhat.com> 033-328
+- add hostonly multipath.conf (to save memory in kdump)
+Resolves: rhbz#994702
+- increase version number of systemd dependency
+- fixed more iSCSI handling
+Resolves: rhbz#1114966 rhbz#1189891
+- check for duplicate IPv4 address
+Resolves: rhbz#1202553
+
+* Tue Aug 18 2015 Harald Hoyer <harald@redhat.com> 033-314
+- fixed iSCSI handling
+Resolves: rhbz#1114966 rhbz#1189891
+- check for duplicate IPv4 address
+Resolves: rhbz#1202553
+- wait udev to be settled before transitioning to the real root
+Resolves: rhbz#1231373
+- support ip= parameter with enx* interface for autobinding to MAC
+Resolves: rhbz#1241102
+- include 40-redhat.rules in the initramfs
+Resolves: rhbz#1241547
+- degrade missing binaries for modules to info level
+Resolves: rhbz#1242845
+- cleanup lldpad cleanly to help out in state transition from initramfs
+Resolves: rhbz#1246217
+
+* Thu Jul 09 2015 Harald Hoyer <harald@redhat.com> 033-284
 - unconditionally install the drbg module in hostonly mode
-Resolves: rhbz#1241187
-
-* Wed Jul 08 2015 Harald Hoyer <harald@redhat.com> 033-241.4
-- add drbg to crypto
-Resolves: rhbz#1241187
-
-* Thu May 07 2015 Harald Hoyer <harald@redhat.com> 033-241.3
+Resolves: rhbz#1240438
+
+* Fri Jul 03 2015 Harald Hoyer <harald@redhat.com> 033-283
+- add support for "x-initrd.mount"
+Resolves: rhbz#1080405
+- add network timeout kernel command line arguments
+Resolves: rhbz#1088808
+- use fcoemon and write out fcoemon config
+Resolves: rhbz#1129884 rhbz#1129888
+- add fcoe module EDD parsing quirk for i40e
+Resolves: rhbz#1129886
+- add RENEW to dhclient-script
+Resolves: rhbz#1144277
+- only fetch squashfs.img once
+Resolves: rhbz#1152485
+- add more input kernel drivers
+Resolves: rhbz#1165585 rhbz#1194529
+- be more sloppy with swap partitions and don't fail without them
+Resolves: rhbz#1165736
+- don't call dinfo binary
+Resolves: rhbz#1167082
+- don't halt the system, if the media check is aborted
+Resolves: rhbz#1167735
+- add boot option to spcecify size of live image rw overlay
+Resolves: rhbz#1183566
+- fix nfs dracut module, to not alter rootok for non nfs root
+Resolves: rhbz#1186004
+- don't fsck nfs 
+Resolves: rhbz#1186699
+- correctly parse multi line kernel command line
+Resolves: rhbz#1186822
+- add hyperv_fb module
+Resolves: rhbz#1187428
+- fixup IPv6 NFS addresses parsing
+Resolves: rhbz#1190098
+- add drbg kernel module in fips mode
+Resolves: rhbz#1193147
+- add all multipath path selector kernel modules
+Resolves: rhbz#1195392
+- don't symlink /var/log /run/log
+Resolves: rhbz#1199645
+- wait for IPv6 link local addresses
+Resolves: rhbz#1209814
+- fix references to grub config file in dracut man page
+Resolves: rhbz#1209962
+- add s390 kernel crypto modules to dracut-fips
+Resolves: rhbz#1215766
+- suppress 'cat: write error: Broken pipe' for lsinitrd
+Resolves: rhbz#1223888
+- enable DNS before routes to avoid race conditions
+Resolves: rhbz#1226004
+- add point-to-point ethernet configured via DHCP
+Resolves: rhbz#1227813
+- add virtio-pci
+Resolves: rhbz#1231716
+- add cache tools for dm-cache usage
+Resolves: rhbz#1234407
+- dracut-functions: move non-function code to dracut-init.sh
+Resolves: rhbz#1235500
+- add more information why a dracut module could not be included
+Resolves: rhbz#1236190
+- fixup iBFT parsing
+Resolves: rhbz#1236610
+
+* Tue Jun 16 2015 Harald Hoyer <harald@redhat.com> 033-248
 - fips: rearrange fips modules due to zlib
 Resolves: rhbz#1216086
+- wait for IPV6 DAD in DHCP PREINIT6
+- wait 5s for an network link carrier to appear
+Resolves: rhbz#1088808
 
-* Tue Apr 28 2015 Harald Hoyer <harald@redhat.com> 033-241.2
+* Tue Apr 28 2015 Harald Hoyer <harald@redhat.com> 033-244
 - fips: add some s390 kernel modules
-Resolves: rhbz#1216086
+Resolves: rhbz#1215766
+
+* Thu Apr 02 2015 Harald Hoyer <harald@redhat.com> 033-243
+- /run/log is now symlinked to /run/initramfs/log
+Resolves: rhbz#1199645
 
 * Thu Feb 19 2015 Harald Hoyer <harald@redhat.com> 033-241.1
 - subversion inc