Hello community,

here is the log from the commit of package mdadm for openSUSE:Factory checked 
in at 2013-09-13 14:45:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mdadm (Old)
 and      /work/SRC/openSUSE:Factory/.mdadm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mdadm"

Changes:
--------
--- /work/SRC/openSUSE:Factory/mdadm/mdadm.changes      2013-09-09 
19:45:26.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.mdadm.new/mdadm.changes 2013-09-13 
14:45:22.000000000 +0200
@@ -1,0 +2,46 @@
+Fri Sep 13 01:46:00 UTC 2013 - [email protected]
+
+- boot.md - simplify boot.
+  As array assembly is done by udev, it shouldn't
+  be done by boot.md.  This will avoid some problems
+  with arrays getting started degraded.
+
+-------------------------------------------------------------------
+Fri Sep 13 00:59:15 UTC 2013 - [email protected]
+
+- Make-IRs-and-run-work-properly-for-containers.patch
+- mdmon-honour-offroot-again.patch
+- DDF-allow-for-possibility-that-there-is-no-secondary.patch
+  Upstream fixes
+
+-------------------------------------------------------------------
+Thu Sep 12 01:12:36 UTC 2013 - [email protected]
+
+- config-set-auto_seen-after-processing-the-auto-line.patch
+  Fix bug which causes "AUTO -all" in mdadm.conf
+  in initrd to be ignored, so array might be
+  auto-assembled too early.
+
+-------------------------------------------------------------------
+Thu Sep 12 01:05:03 UTC 2013 - [email protected]
+
+- mkinitrd-boot.sh: simplify boot sequence by relying
+  completely on udev running "mdadm -I".  Thus
+  mkinitrd-boot.sh needs to do very little.
+  The devfunction script in the mkinitrd package has
+  been modified to start newly degraded array after
+  a suitable timeout.
+- mkinitrd-setup.sh:
+   - don't save md_devs as it isn't used any more
+   - allow md device names like "/dev/md_foo" which will
+     need to be supported in due course.
+
+-------------------------------------------------------------------
+Mon Sep  9 03:06:20 UTC 2013 - [email protected]
+
+- mkinitd-boot.sh: Clear {root,resume}_major variable
+
+  If multipath is in use, md is always on top of it. Therefore, the root
+  device is always an md device. (bnc#786526)
+
+-------------------------------------------------------------------

New:
----
  DDF-allow-for-possibility-that-there-is-no-secondary.patch
  Make-IRs-and-run-work-properly-for-containers.patch
  config-set-auto_seen-after-processing-the-auto-line.patch
  mdmon-honour-offroot-again.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mdadm.spec ++++++
--- /var/tmp/diff_new_pack.c0FGNc/_old  2013-09-13 14:45:23.000000000 +0200
+++ /var/tmp/diff_new_pack.c0FGNc/_new  2013-09-13 14:45:23.000000000 +0200
@@ -43,6 +43,14 @@
 Source6:        mkinitrd-boot.sh
 Source7:        mdadm.cron
 Source8:        mdadm.shutdown
+# PATCH-FIX-UPSTREAM config-set-auto_seen-after-processing-the-auto-line.patch 
upstream-bugfix [email protected]
+Patch1:         config-set-auto_seen-after-processing-the-auto-line.patch
+# PATCH-FIX-UPSTREAM 
DDF-allow-for-possibility-that-there-is-no-secondary.patch upstream-bugfix 
[email protected]
+Patch2:         DDF-allow-for-possibility-that-there-is-no-secondary.patch
+# PATCH-FIX-UPSTREAM Make-IRs-and-run-work-properly-for-containers.patch 
upstream-bugfix [email protected]
+Patch3:         Make-IRs-and-run-work-properly-for-containers.patch
+# PATCH-FIX-UPSTREAM mdmon-honour-offroot-again.patch upstream-bugfix 
[email protected]
+Patch4:         mdmon-honour-offroot-again.patch
 
 %define _udevdir %(pkg-config --variable=udevdir udev)
 %define _systemdshutdowndir %{_unitdir}/../system-shutdown
@@ -54,6 +62,10 @@
 
 %prep
 %setup -q -a1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
 
 %build
 make %{?_smp_mflags} CC="%__cc" CXFLAGS="$RPM_OPT_FLAGS -Wno-error"

++++++ DDF-allow-for-possibility-that-there-is-no-secondary.patch ++++++
>From b95cb4b9d88c8adf2adb7f2efef3ae3f72b27b8e Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Thu, 12 Sep 2013 14:57:28 +1000
Subject: [PATCH] DDF: allow for possibility that there is no secondary copy of
 metadata.

If there isn't, we currently write the second copy at some
random location :-)

Reported-and-tested-by:  Francis Moreau <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
---
 super-ddf.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/super-ddf.c b/super-ddf.c
index 636d7b4..d2cdda4 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -880,7 +880,8 @@ static int load_ddf_headers(int fd, struct ddf_super 
*super, char *devname)
                        super->primary.openflag && !super->secondary.openflag)
                        )
                        super->active = &super->secondary;
-       } else if (devname)
+       } else if (devname &&
+                  be64_to_cpu(super->anchor.secondary_lba) != ~(__u64)0)
                pr_err("Failed to load secondary DDF header on %s\n",
                       devname);
        if (super->active == NULL)
@@ -2810,7 +2811,9 @@ static int add_to_super_ddf(struct supertype *st,
        } while (0)
        __calc_lba(dd, ddf->dlist, workspace_lba, 32);
        __calc_lba(dd, ddf->dlist, primary_lba, 16);
-       __calc_lba(dd, ddf->dlist, secondary_lba, 32);
+       if (ddf->dlist == NULL ||
+           be64_to_cpu(ddf->dlist->secondary_lba) != ~(__u64)0)
+               __calc_lba(dd, ddf->dlist, secondary_lba, 32);
        pde->config_size = dd->workspace_lba;
 
        sprintf(pde->path, "%17.17s","Information: nil") ;
@@ -2892,6 +2895,8 @@ static int __write_ddf_structure(struct dl *d, struct 
ddf_super *ddf, __u8 type)
        default:
                return 0;
        }
+       if (sector == ~(__u64)0)
+               return 0;
 
        header->type = type;
        header->openflag = 1;
-- 
1.8.3.1.487.g3e7a5b4

++++++ Make-IRs-and-run-work-properly-for-containers.patch ++++++
>From d5a4041647d2b3328ce45ff727afe37477f07c75 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Fri, 13 Sep 2013 10:51:20 +1000
Subject: [PATCH] Make -IRs and --run work properly for containers.

We really need to make sure assemble_container_content()
gets called to finished the assembly of these.

Reported-by: Francis Moreau <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
---
 Assemble.c    |  2 +-
 Incremental.c | 53 +++++++++++++++++++++++++++++++++++++++++++++--------
 Manage.c      |  4 ++--
 mdadm.c       |  7 ++++---
 mdadm.h       |  4 ++--
 5 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/Assemble.c b/Assemble.c
index bc85603..86b4c89 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -1817,7 +1817,7 @@ int assemble_container_content(struct supertype *st, int 
mdfd,
                                working++;
                } else if (errno == EEXIST)
                        preexist++;
-       if (working + expansion == 0)
+       if (working + expansion == 0 && c->runstop <= 0)
                return 1;/* Nothing new, don't try to start */
 
        map_update(&map, fd2devnm(mdfd),
diff --git a/Incremental.c b/Incremental.c
index f256b48..1bb3638 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -44,7 +44,7 @@ static int try_spare(char *devname, int *dfdp, struct 
dev_policy *pol,
                     struct supertype *st, int verbose);
 
 static int Incremental_container(struct supertype *st, char *devname,
-                                struct context *c);
+                                struct context *c, char *only);
 
 int Incremental(char *devname, struct context *c,
                struct supertype *st)
@@ -138,7 +138,7 @@ int Incremental(char *devname, struct context *c,
                        if (map_lock(&map))
                                pr_err("failed to get "
                                       "exclusive lock on mapfile\n");
-                       rv = Incremental_container(st, devname, c);
+                       rv = Incremental_container(st, devname, c, NULL);
                        map_unlock(&map);
                        return rv;
                }
@@ -478,7 +478,7 @@ int Incremental(char *devname, struct context *c,
                close(mdfd);
                sysfs_free(sra);
                if (!rv)
-                       rv = Incremental_container(st, chosen_name, c);
+                       rv = Incremental_container(st, chosen_name, c, NULL);
                map_unlock(&map);
                if (rv == 1)
                        /* Don't fail the whole -I if a subarray didn't
@@ -1278,7 +1278,7 @@ static int try_spare(char *devname, int *dfdp, struct 
dev_policy *pol,
        return rv;
 }
 
-int IncrementalScan(int verbose, char *devnm)
+int IncrementalScan(struct context *c, char *devnm)
 {
        /* look at every device listed in the 'map' file.
         * If one is found that is not running then:
@@ -1290,10 +1290,13 @@ int IncrementalScan(int verbose, char *devnm)
        struct map_ent *me;
        struct mddev_ident *devs, *mddev;
        int rv = 0;
+       char container[32];
+       char *only = NULL;
 
        map_read(&mapl);
        devs = conf_get_ident(NULL);
 
+restart:
        for (me = mapl ; me ; me = me->next) {
                mdu_array_info_t array;
                mdu_bitmap_file_t bmf;
@@ -1302,10 +1305,42 @@ int IncrementalScan(int verbose, char *devnm)
 
                if (devnm && strcmp(devnm, me->devnm) != 0)
                        continue;
+               if (devnm && me->metadata[0] == '/') {
+                       char *sl;
+                       /* member array, need to work on container */
+                       strncpy(container, me->metadata+1, 32);
+                       container[31] = 0;
+                       sl = strchr(container, '/');
+                       if (sl)
+                               *sl = 0;
+                       only = devnm;
+                       devnm = container;
+                       goto restart;
+               }
                mdfd = open_dev(me->devnm);
 
                if (mdfd < 0)
                        continue;
+               if (!isdigit(me->metadata[0])) {
+                       /* must be a container */
+                       struct supertype *st = super_by_fd(mdfd, NULL);
+                       int ret = 0;
+                       struct map_ent *map = NULL;
+                       if (st)
+                               st->ignore_hw_compat = 1;
+                       if (st && st->ss->load_container)
+                               ret = st->ss->load_container(st, mdfd, NULL);
+                       close(mdfd);
+                       if (!ret && st->ss->container_content) {
+                               if (map_lock(&map))
+                                       pr_err("failed to get exclusive lock on 
mapfile\n");
+                               ret = Incremental_container(st, me->path, c, 
only);
+                               map_unlock(&map);
+                       }
+                       if (ret)
+                               rv = 1;
+                       continue;
+               }
                if (ioctl(mdfd, GET_ARRAY_INFO, &array) == 0 ||
                    errno != ENODEV) {
                        close(mdfd);
@@ -1330,7 +1365,7 @@ int IncrementalScan(int verbose, char *devnm)
                                        close(bmfd);
                                }
                        }
-                       if (verbose >= 0) {
+                       if (c->verbose >= 0) {
                                if (added == 0)
                                        pr_err("Added bitmap %s to %s\n",
                                               mddev->bitmap_file, me->path);
@@ -1346,7 +1381,7 @@ int IncrementalScan(int verbose, char *devnm)
                if (sra) {
                        if (sysfs_set_str(sra, NULL,
                                          "array_state", "read-auto") == 0) {
-                               if (verbose >= 0)
+                               if (c->verbose >= 0)
                                        pr_err("started array %s\n",
                                               me->path ?: me->devnm);
                        } else {
@@ -1387,7 +1422,7 @@ static char *container2devname(char *devname)
 }
 
 static int Incremental_container(struct supertype *st, char *devname,
-                                struct context *c)
+                                struct context *c, char *only)
 {
        /* Collect the contents of this container and for each
         * array, choose a device name and assemble the array.
@@ -1458,7 +1493,7 @@ static int Incremental_container(struct supertype *st, 
char *devname,
                                strcpy(chosen_name, mp->path);
                        else
                                strcpy(chosen_name, mp->devnm);
-               } else {
+               } else if (!only) {
 
                        /* Check in mdadm.conf for container == devname and
                         * member == ra->text_version after second slash.
@@ -1515,6 +1550,8 @@ static int Incremental_container(struct supertype *st, 
char *devname,
                                            trustworthy,
                                            chosen_name);
                }
+               if (only && (!mp || strcmp(mp->devnm, only) != 0))
+                       continue;
 
                if (mdfd < 0) {
                        pr_err("failed to open %s: %s.\n",
diff --git a/Manage.c b/Manage.c
index 910caa6..c8276ca 100644
--- a/Manage.c
+++ b/Manage.c
@@ -170,7 +170,7 @@ static void remove_devices(char *devnm, char *path)
        free(path2);
 }
 
-int Manage_run(char *devname, int fd, int verbose)
+int Manage_run(char *devname, int fd, struct context *c)
 {
        /* Run the array.  Array must already be configured
         *  Requires >= 0.90.0
@@ -187,7 +187,7 @@ int Manage_run(char *devname, int fd, int verbose)
                return 1;
        }
        strcpy(nm, nmp);
-       return IncrementalScan(verbose, nm);
+       return IncrementalScan(c, nm);
 }
 
 int Manage_stop(char *devname, int fd, int verbose, int will_retry)
diff --git a/mdadm.c b/mdadm.c
index 1ada607..f55a035 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1293,7 +1293,7 @@ int main(int argc, char *argv[])
                if (!rv && c.readonly < 0)
                        rv = Manage_ro(devlist->devname, mdfd, c.readonly);
                if (!rv && c.runstop > 0)
-                       rv = Manage_run(devlist->devname, mdfd, c.verbose);
+                       rv = Manage_run(devlist->devname, mdfd, &c);
                if (!rv && c.runstop < 0)
                        rv = Manage_stop(devlist->devname, mdfd, c.verbose, 0);
                break;
@@ -1535,7 +1535,7 @@ int main(int argc, char *argv[])
                                pr_err("--incremental --scan --fail not 
supported.\n");
                                break;
                        }
-                       rv = IncrementalScan(c.verbose, NULL);
+                       rv = IncrementalScan(&c, NULL);
                }
                if (!devlist) {
                        if (!rebuild_map && !c.scan) {
@@ -1804,7 +1804,8 @@ static int misc_list(struct mddev_dev *devlist,
                if (mdfd>=0) {
                        switch(dv->disposition) {
                        case 'R':
-                               rv |= Manage_run(dv->devname, mdfd, 
c->verbose); break;
+                               c->runstop = 1;
+                               rv |= Manage_run(dv->devname, mdfd, c); break;
                        case 'S':
                                rv |= Manage_stop(dv->devname, mdfd, 
c->verbose, 0); break;
                        case 'o':
diff --git a/mdadm.h b/mdadm.h
index 2eca603..c90fe10 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1171,7 +1171,7 @@ struct stat64;
 extern int add_dev(const char *name, const struct stat *stb, int flag, struct 
FTW *s);
 
 extern int Manage_ro(char *devname, int fd, int readonly);
-extern int Manage_run(char *devname, int fd, int quiet);
+extern int Manage_run(char *devname, int fd, struct context *c);
 extern int Manage_stop(char *devname, int fd, int quiet,
                       int will_retry);
 extern int Manage_subdevs(char *devname, int fd,
@@ -1237,7 +1237,7 @@ extern int WaitClean(char *dev, int sock, int verbose);
 extern int Incremental(char *devname, struct context *c,
                       struct supertype *st);
 extern void RebuildMap(void);
-extern int IncrementalScan(int verbose, char *devnm);
+extern int IncrementalScan(struct context *c, char *devnm);
 extern int IncrementalRemove(char *devname, char *path, int verbose);
 extern int CreateBitmap(char *filename, int force, char uuid[16],
                        unsigned long chunksize, unsigned long daemon_sleep,
-- 
1.8.3.1.487.g3e7a5b4

++++++ boot.md ++++++
--- /var/tmp/diff_new_pack.c0FGNc/_old  2013-09-13 14:45:23.000000000 +0200
+++ /var/tmp/diff_new_pack.c0FGNc/_new  2013-09-13 14:45:23.000000000 +0200
@@ -3,17 +3,17 @@
 #     SUSE system startup script for MD RAID autostart
 #     Copyright (C) 1995--2005  Kurt Garloff, SUSE / Novell Inc.
 #     Copyright (C) 2006  Marian Jancar, SUSE / Novell Inc.
-#          
+#
 #     This library is free software; you can redistribute it and/or modify it
 #     under the terms of the GNU Lesser General Public License as published by
 #     the Free Software Foundation; either version 2.1 of the License, or (at
 #     your option) any later version.
-#                            
+#
 #     This library 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
 #     Lesser General Public License for more details.
-#      
+#
 #     You should have received a copy of the GNU Lesser General Public
 #     License along with this program; if not, write to the Free Software
 #     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
@@ -36,7 +36,7 @@
 ### END INIT INFO
 
 # Source LSB init functions
-# providing start_daemon, killproc, pidofproc, 
+# providing start_daemon, killproc, pidofproc,
 # log_success_msg, log_failure_msg and log_warning_msg.
 # This is currently not used by UnitedLinux based distributions and
 # not needed for init scripts for UnitedLinux only. If it is used,
@@ -70,7 +70,7 @@
 # 6       - program is not configured
 # 7       - program is not running
 # 8--199  - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
-# 
+#
 # Note that starting an already running service, stopping
 # or restarting a not-running service as well as the restart
 # with force-reload (in case signaling is not supported) are
@@ -97,16 +97,14 @@
 case "$1" in
     start)
        echo -n "Starting MD RAID "
-       
-       mkdir -p /run/mdadm
-       # restart mdmon (exits silently if there is nothing to monitor)
+
        /sbin/mdmon --all --takeover --offroot
        # Check for existence of needed config file and read it
        [ -r $mdadm_SYSCONFIG ] || _rc_exit 6 "... $mdadm_SYSCONFIG not 
existing "
 
        # Read config
        . $mdadm_SYSCONFIG
-       
+
        [ "x$MDADM_CONFIG" != x"" ] && mdadm_CONFIG="$MDADM_CONFIG"
 
        # Check for missing binaries (stale symlinks should not happen)
@@ -116,22 +114,8 @@
        [ ! -f /proc/mdstat -a -x /sbin/modprobe ] && /sbin/modprobe md_mod
        [ -f /proc/mdstat ] || _rc_exit 5 "... no MD support in kernel "
 
-       # Wait for udev to settle
-       if [ "$MDADM_DEVICE_TIMEOUT" -gt 0 ] ; then
-           /sbin/udevadm settle --timeout="$MDADM_DEVICE_TIMEOUT"
-       fi
-
-       if ! grep -qs '^[^#]*[^[:blank:]#]' $mdadm_CONFIG; then
-               # empty or missing /etc/mdadm.conf, "unused"
-               rc_status -u
-       else
-               # firstly finish any incremental assembly that has started.
-               $mdadm_BIN -IRs
-               $mdadm_BIN -A -s -c $mdadm_CONFIG
-               # a status of 2 is not an error
-               test $? -eq 0 -o $? -eq 2
-               rc_status -v
-       fi
+       # leave all array assembly to udev.
+       rc_status -v
        ;;
     stop)
        echo -n "Not shutting down MD RAID - reboot/halt scripts do this."
@@ -151,11 +135,12 @@
        rc_status -v
        ;;
     reload)
-       # We cannot really reload the kernel module, or reassemble the
-       # arrays, but we can restart mdmon.  It will replace existing
-       # mdmon, or exit quietly if there is nothing to do.
-       echo -n "MD RAID: restarting mdmon if it is needed."
-       /sbin/mdmon --all --takeover --offroot
+       # There isn't much that is useful to do.
+       # We cannot reload the kernel module, or reassemble the
+       # arrays.  Restarting mdmon is pointless and might be bad
+       # as mdmon might be running in the initrd.
+       # We could start and newly-degraded arrays.
+       /sbin/mdadm -IRs
        rc_status -v
        ;;
     *)

++++++ config-set-auto_seen-after-processing-the-auto-line.patch ++++++
>From dbdf3f15e7ed9d5462a6ece09dd1c57ca430d912 Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Tue, 10 Sep 2013 17:10:10 +1000
Subject: [PATCH] config: set "auto_seen" after processing the auto line.

Otherwise when we process an empty autoline (to be sure to
capture the MDADM_CONF_AUTO environment variable) we can end up
setting everything to 'yes' which over-rides 'no'.

Signed-off-by: NeilBrown <[email protected]>
---
 config.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/config.c b/config.c
index f1a70c5..a35807c 100644
--- a/config.c
+++ b/config.c
@@ -575,6 +575,7 @@ void autoline(char *line)
 
        if (auto_seen)
                return;
+       auto_seen = 1;
 
        /* Parse the 'auto' line creating policy statements for the 'auto' 
policy.
         *
-- 
1.8.3.1.487.g3e7a5b4

++++++ mdmon-honour-offroot-again.patch ++++++
>From 5d79c72e16b32d7d6d0f535348286a7f2a966092 Mon Sep 17 00:00:00 2001
From: "[email protected]" <[email protected]>
Date: Wed, 11 Sep 2013 22:15:19 +0200
Subject: [PATCH] mdmon: honour --offroot, again

commit 3e32ba9d removed support for --offroot, and a9c15847 made
mdmon use @ in argv[0] only when started from initrd.

This breaks mdadm in OpenSUSE 12.3, which starts mdmon from the
root file system and relies on --offroot to work as documented earlier.

Reintroducing --offroot as an undocumented option, as its use is going to
go away soon anyway.

If this can't be applied, it should probably be included as distro-specific
patch if mdadm 3.3 is built for OpenSUSE 12.3. I haven't checked if the
patch is necesary for OpenSUSE Factory, too.

Signed-off-by: Martin Wilck <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
---
 mdmon.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mdmon.c b/mdmon.c
index f0b0623..8cd53d8 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -320,7 +320,7 @@ int main(int argc, char *argv[])
                        dofork = 0;
                        break;
                case OffRootOpt:
-                       /* silently ignore old option */
+                       argv[0][0] = '@';
                        break;
                case 'h':
                default:
-- 
1.8.3.1.487.g3e7a5b4

++++++ mkinitrd-boot.sh ++++++
--- /var/tmp/diff_new_pack.c0FGNc/_old  2013-09-13 14:45:23.000000000 +0200
+++ /var/tmp/diff_new_pack.c0FGNc/_new  2013-09-13 14:45:23.000000000 +0200
@@ -1,32 +1,28 @@
 #!/bin/bash
-#%stage: softraid
-# grep needed for udev rules file.
+#%stage: boot
+#%depends: start
 #%programs: /sbin/mdadm /sbin/mdmon
 #%modules: raid0 raid1 raid10 raid456
 #%if: -n "$need_mdadm"
 #
 ##### MD (Software-)Raid
 ##
-## This activates and waits for an 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
 
-# Create dir for  socket and pid files
-mkdir -p /run/mdadm
-[ "$mduuid" ] && md_uuid="$mduuid"
-
+#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)
-if [ -n "$md_major" -a "$md_major" = "$maj" ]; then
-    md_minor="$min"
-    md_dev="/dev/md$md_minor"
-fi
 
 # 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
@@ -34,110 +30,3 @@
 if [ -f /sys/module/md_mod/parameters/start_ro ]; then
     echo 1 > /sys/module/md_mod/parameters/start_ro
 fi
-
-if test -n "$debug_linuxrc"; then
-       mdadm="mdadm -v"
-else
-       mdadm="mdadm"
-fi
-
-# uuid -> array name
-get_md_name()
-{
-       local uuid=$1 res
-
-       if ! test -f /etc/mdadm.conf; then
-               return 1
-       fi
-       res=$(sed -rn "s/^ARRAY +([^ ]+).* UUID=$uuid.*/\1/p" /etc/mdadm.conf)
-       case "$res" in
-       "" | \<* | *=*)
-               return 1
-               ;;
-       /*)
-               echo "$res"
-               ;;
-       *)
-               echo "/dev/md/$res"
-               ;;
-       esac
-       return 0
-}
-
-md_assemble()
-{
-       local dev=$1 uuid mdconf container container_name
-
-       if test -e "$dev"; then
-               return
-       fi
-       case "$dev" in
-       /dev/md[0-9]*p[0-9]*)
-               dev=${dev%p[0-9]*}
-               ;;
-       /dev/md*)
-               ;;
-       /dev/disk/by-id/md-uuid-*)
-               uuid=${dev#/dev/disk/by-id/md-uuid-}
-               uuid=${uuid%-part*}
-               dev=
-               ;;
-       *)
-               return
-       esac
-       if test -f /etc/mdadm.conf; then
-               mdconf="-c /etc/mdadm.conf"
-               local line
-               if test -n "$dev"; then
-                       line=$(sed -rn "\:^ARRAY +$dev :p" /etc/mdadm.conf)
-               else
-                       line=$(sed -rn "/^ARRAY .* UUID=$uuid/p" 
/etc/mdadm.conf)
-               fi
-               container=$(echo "$line" | \
-                       sed -rn 's/.* container=([^ ]*).*/\1/p')
-       else
-               mdconf="-c partitions"
-       fi
-       case "$container" in
-       "")
-               ;;
-       /dev/*)
-               $mdadm -A $mdconf $container --offroot
-               ;;
-       [0-9a-f]*[0-9a-f])
-               container_name=$(get_md_name "$container")
-               if test -z "$container_name"; then
-                       container_name=/dev/md/container
-               fi
-               $mdadm -A $mdconf --uuid="$container" "$container_name" 
--offroot
-               ;;
-       *)
-               echo "unrecognized container for $dev: $container"
-       esac
-       if test -n "$dev"; then
-               $mdadm -A $mdconf "$dev" --offroot
-       else
-               dev=$(get_md_name "$uuid")
-               if test -z "$dev"; then
-                       # mdadm will pick a device name
-                       $mdadm -A $mdconf --uuid=$uuid --offroot
-               else
-                       $mdadm -A $mdconf --uuid=$uuid "$dev" --offroot
-               fi
-       fi
-}
-
-# run any degraded arrays assembled incrementally
-wait_for_events
-$mdadm --incremental --run --scan --offroot
-md_assemble "$resumedev"
-md_assemble "$rootdev"
-if [ -n "$md_dev" ] ; then
-       md_assemble "$md_dev"
-fi
-# assemble any md devices seen by setup-md.sh at initrd build time
-for dev in $md_devs; do
-       md_assemble "$dev"
-done
-
-wait_for_events

++++++ mkinitrd-setup.sh ++++++
--- /var/tmp/diff_new_pack.c0FGNc/_old  2013-09-13 14:45:23.000000000 +0200
+++ /var/tmp/diff_new_pack.c0FGNc/_new  2013-09-13 14:45:23.000000000 +0200
@@ -16,12 +16,12 @@
 for bd in $blockdev ; do
     is_part_dev=false
     case $bd in
-       /dev/md[0-9]*p[0-9]*)
+       /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]*)
+       /dev/md[0-9_]*)
            ;;
        *)
            mdblockdev="$mdblockdev $bd"
@@ -95,12 +95,6 @@
         echo -e "${md_conf["$md"]}" >> $tmp_mnt/etc/mdadm.conf
     done
 fi
-# Remember which arrays are needed for the root or swap device and assemble
-# them all during boot. The root= or resume= option might not directly refer to
-# the array.
-if test -n "$md_devs"; then
-    md_devs=$(printf '/dev/%s ' $md_devs)
-fi
 
 if [ "x$need_mdadm" = "x1" ] ; then
     for rule in \
@@ -115,4 +109,3 @@
 fi
 
 save_var need_mdadm
-save_var md_devs

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to