diff --git a/0001-Grow-fix-removal-of-line-in-wrong-case.patch b/0001-Grow-fix-removal-of-line-in-wrong-case.patch new file mode 100644 index 0000000..2ab694f --- /dev/null +++ b/0001-Grow-fix-removal-of-line-in-wrong-case.patch @@ -0,0 +1,39 @@ +From e339dba2a1744dc6860a58e286ded39fc993c2db Mon Sep 17 00:00:00 2001 +From: Pawel Baldysiak +Date: Wed, 11 Jun 2014 15:18:44 +0000 +Subject: [PATCH] Grow: fix removal of line in wrong case + +Commit 18d9bcfa33939cee345d4d7735bc6081bcc409c8 +removed wrong line (in case RAID0->RAID4). +This patch corrects this mistake +(line should be removed in case RAID4->RAID4). + +Signed-off-by: Pawel Baldysiak +Signed-off-by: NeilBrown +--- + Grow.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Grow.c b/Grow.c +index 12730e26fd19..a2f4f1428787 100644 +--- a/Grow.c ++++ b/Grow.c +@@ -1324,6 +1324,7 @@ char *analyse_change(char *devname, struct mdinfo *info, struct reshape *re) + + switch (re->level) { + case 4: ++ re->before.layout = 0; + re->after.layout = 0; + break; + case 5: +@@ -1339,7 +1340,6 @@ char *analyse_change(char *devname, struct mdinfo *info, struct reshape *re) + + switch (re->level) { + case 4: +- re->before.layout = 0; + re->after.layout = 0; + break; + case 5: +-- +2.0.0 + diff --git a/mdadm.changes b/mdadm.changes index c742e13..d2b3a47 100644 --- a/mdadm.changes +++ b/mdadm.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Thu Jun 26 03:08:15 UTC 2014 - nfbrown@suse.com + +- 0001-Grow-fix-removal-of-line-in-wrong-case.patch + (bnc#881530) + +------------------------------------------------------------------- +Thu Jun 26 02:54:05 UTC 2014 - nfbrown@suse.com + +- add mkinitrd scripts back in. They are needed by + "guestfs" + (bnc#883873) + ------------------------------------------------------------------- Thu Jun 12 02:08:31 UTC 2014 - nfbrown@suse.com diff --git a/mdadm.spec b/mdadm.spec index f8bbb4d..7e64c80 100644 --- a/mdadm.spec +++ b/mdadm.spec @@ -37,9 +37,13 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: https://www.kernel.org/pub/linux/utils/raid/mdadm/%{name}-%{version}.tar.xz Source1: Software-RAID.HOWTO.tar.bz2 Source2: sysconfig.mdadm +Source5: mkinitrd-setup.sh +Source6: mkinitrd-boot.sh Source7: mdadm.cron # PATCH-FIX-UPSTREAM 0001-Makefile-install-mdadm-grow-continue-.service.patch nfbrown@suse.de Patch1: 0001-Makefile-install-mdadm-grow-continue-.service.patch +# PATCH-FIX-UPSTREAM 0001-Grow-fix-removal-of-line-in-wrong-case.patch bnc#881530 nfbrown@suse.de +Patch2: 0001-Grow-fix-removal-of-line-in-wrong-case.patch %define _udevdir %(pkg-config --variable=udevdir udev) %define _systemdshutdowndir %{_unitdir}/../system-shutdown @@ -52,6 +56,7 @@ programs but with a very different interface. %prep %setup -q -a1 %patch1 -p1 +%patch2 -p1 %build make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error" SUSE=yes @@ -64,6 +69,9 @@ make install install-systemd install-udev DESTDIR=%{buildroot} SYSTEMD_DIR=%{_un rm -rf %{buildroot}/lib/udev install -d %{buildroot}%{_var}/adm/fillup-templates install -d %{buildroot}{%{_sbindir} +install -d %{buildroot}/lib/mkinitrd/scripts +install -m 755 %{S:5} %{buildroot}/lib/mkinitrd/scripts/setup-md.sh +install -m 755 %{S:6} %{buildroot}/lib/mkinitrd/scripts/boot-md.sh install -d %{buildroot}/etc/cron.daily install -m 755 %{S:7} %{buildroot}/etc/cron.daily/mdadm install -m 644 %{S:2} %{buildroot}%{_var}/adm/fillup-templates/ @@ -90,6 +98,10 @@ rm -rf %{buildroot} %doc %{_mandir}/man?/* /sbin/* %{_var}/adm/fillup-templates/sysconfig.mdadm +%dir /lib/mkinitrd +%dir /lib/mkinitrd/scripts +/lib/mkinitrd/scripts/setup-md.sh +/lib/mkinitrd/scripts/boot-md.sh %{_udevdir}/rules.d/63-md-raid-arrays.rules %{_udevdir}/rules.d/64-md-raid-assembly.rules %dir /etc/cron.daily diff --git a/mkinitrd-boot.sh b/mkinitrd-boot.sh new file mode 100644 index 0000000..b9e9d66 --- /dev/null +++ b/mkinitrd-boot.sh @@ -0,0 +1,32 @@ +#!/bin/bash +#%stage: boot +#%depends: start +#%programs: /sbin/mdadm /sbin/mdmon +#%modules: raid0 raid1 raid10 raid456 +#%if: -n "$need_mdadm" +# +##### MD (Software-)Raid +## +## This only sets the 'start_ro' module parameter to ensure +## arrays don't start resync until after the first write. +## All array assembly is performed by udev -> "mdadm -I" +## +## Command line parameters +## ----------------------- +## +## need_mdadm=1 use MD raid +## + +# load the necessary module before we initialize the raid system +load_modules + +#check_for_device uses $md_major +#we depend on 'start' to ensure /proc/devices exists +md_major=$(sed -ne 's/\s*\([0-9]\+\)\s*md$/\1/p' /proc/devices) + +# Always start md devices read/only. They will get set to rw as soon +# as the first write occurs. This way we can guarantee that no +# restore occurs before resume. +if [ -f /sys/module/md_mod/parameters/start_ro ]; then + echo 1 > /sys/module/md_mod/parameters/start_ro +fi diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh new file mode 100644 index 0000000..68e3d71 --- /dev/null +++ b/mkinitrd-setup.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# +#%stage: softraid +# +mdblockdev= + +# Full mdadm.conf generated by mdadm. +# Contains all created MD RAIDs +mdadm_conf= + +cont_list= +md_devs= + +declare -A md_conf +# blockdev contains real devices (/dev/X) for root, resume, journal, dumb +for bd in $blockdev ; do + is_part_dev=false + case $bd in + /dev/md[_0-9]*p[0-9]* ) + # Partitionable MD RAID. This is partition on RAID. Get the RAID + bd=${bd%%p[0-9]*} + is_part_dev=true + ;; + /dev/md[0-9_]*) + ;; + *) + mdblockdev="$mdblockdev $bd" + continue + ;; + esac + # Check if this device is already added (possible for partitionable). + md_dev=`mdadm -D --export $bd | sed -n -e 's/^MD_DEVNAME=//p'` + if [ -z "$md_dev" ]; then + md_dev=${bd##/dev/} + else + bd="/dev/md/$md_dev" + fi + dup_found=false + for dup in $md_devs; do + if [ x"$dup" = x"$md_dev" ]; then + dup_found=true + break + fi + done + if $dup_found; then + if ! $is_part_dev; then + echo "setup-md.sh: $md_dev found multiple times" >&2 + fi + continue + fi + mdconf=$(mdadm -Db "$bd") + if test -z "$mdconf"; then + mdblockdev="$mdblockdev $bd" + continue + fi + md_tmpblockdev=$(mdadm -Dbv $bd | sed -n "1D;s/,/ /g;s/^ *devices=//p") + mdblockdev="$mdblockdev $md_tmpblockdev" + md_devs="$md_devs $md_dev" + container=$(echo "$mdconf" | sed -rn 's/.* container=([^ ]*) .*/\1/p') + for cnt in $cont_list; do + if [ x"$container" = x"$cnt" ]; then + container= + break + fi + done + case "$container" in + "") + ;; + /dev/*) + mdconf="$(mdadm -Db "$container")\\n$mdconf" + cont_list="$cont_list $container" + ;; + [0-9a-f]*[0-9a-f]) + if test -z "$mdadm_conf"; then + mdadm_conf=$(mdadm --examine --brief --scan) + fi + mdconf="$(echo "$mdadm_conf" | grep "UUID=$container")\\n$mdconf" + cont_list="$cont_list $container" + ;; + *) + echo "unrecognized container for $md_dev: $container" + ;; + esac + # If /etc/mdadm.conf contains a different name for this + # array, then use that. + md_uuid=`echo $mdconf | sed -n -e 's/.* UUID=\([0-9a-f:]*\).*/\1/p'` + if [ -f /etc/mdadm.conf -a -n "$md_uuid" ]; then + md_devname=`sed -n -e 's,^ARRAY */dev/\([^ ]*\) .*[Uu][Uu][Ii][Dd]='$md_uuid'.*,\1,p' /etc/mdadm.conf` + if [ -n "$md_devname" ]; then + mdconf=`echo $mdconf | sed -e 's,^ARRAY /dev/\([^ ]*\),ARRAY /dev/'$md_devname','` + fi + fi + md_conf["$md_dev"]="$mdconf" + root_md=1 +done + +# Any 'md' device is replaced by it's component disks. +blockdev="$mdblockdev" + +if [ -n "$root_md" ] ; then + need_mdadm=1 + echo "AUTO -all" > $tmp_mnt/etc/mdadm.conf + for md in $md_devs; do + echo -e "${md_conf["$md"]}" >> $tmp_mnt/etc/mdadm.conf + done +fi + +if [ "x$need_mdadm" = "x1" ] ; then + for rule in \ + 63-md-raid-arrays.rules \ + 64-md-raid-assembly.rules; do + if [ -f /usr/lib/udev/rules.d/$rule ]; then + cp /usr/lib/udev/rules.d/$rule $tmp_mnt/usr/lib/udev/rules.d + elif [ -f /lib/udev/rules.d/$rule ]; then + cp /lib/udev/rules.d/$rule $tmp_mnt/lib/udev/rules.d + fi + done +fi + +save_var need_mdadm