]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Incremental.c
wait_for improvement.
[thirdparty/mdadm.git] / Incremental.c
index f8a5d326d8be27148d4e8aa698fb490fdef24f7b..b1cee23fe0c94285047789ee3bb7c1bf3747d29e 100644 (file)
@@ -392,14 +392,14 @@ int Incremental(char *devname, int verbose, int runstop,
        /* 7a/ if not, finish with success. */
        if (info.array.level == LEVEL_CONTAINER) {
                /* Try to assemble within the container */
-               close(mdfd);
                map_unlock(&map);
                sysfs_uevent(&info, "change");
                if (verbose >= 0)
                        fprintf(stderr, Name
                                ": container %s now has %d devices\n",
                                chosen_name, info.array.working_disks);
-               wait_for(chosen_name);
+               wait_for(chosen_name, mdfd);
+               close(mdfd);
                if (runstop < 0)
                        return 0; /* don't try to assemble */
                return Incremental(chosen_name, verbose, runstop,
@@ -474,7 +474,7 @@ int Incremental(char *devname, int verbose, int runstop,
                           ": %s attached to %s, which has been started.\n",
                                        devname, chosen_name);
                        rv = 0;
-                       wait_for(chosen_name);
+                       wait_for(chosen_name, mdfd);
                } else {
                        fprintf(stderr, Name
                              ": %s attached to %s, but failed to start: %s.\n",
@@ -733,7 +733,10 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
 
                mp = map_by_uuid(&map, ra->uuid);
 
-               if (!mp) {
+               if (mp) {
+                       mdfd = open_dev(mp->devnum);
+                       strcpy(chosen_name, mp->path);
+               } else {
 
                        /* Check in mdadm.conf for devices == devname and
                         * member == ra->text_version after second slash.
@@ -772,13 +775,13 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
                                                array_list->member);
                                break;
                        }
-               }
 
-               mdfd = create_mddev(match ? match->devname : NULL,
-                                   ra->name,
-                                   autof,
-                                   trustworthy,
-                                   chosen_name);
+                       mdfd = create_mddev(match ? match->devname : NULL,
+                                           ra->name,
+                                           autof,
+                                           trustworthy,
+                                           chosen_name);
+               }
 
                if (mdfd < 0) {
                        fprintf(stderr, Name ": failed to open %s: %s.\n",