]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mapinfo: simplify subarray handling.
authorNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 08:35:25 +0000 (19:35 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 22 Nov 2010 08:35:25 +0000 (19:35 +1100)
We don't need ->container_dev here, and we will soon be passing
subarray as an explicit arg to load_super.
So simplify extraction of subarray and move the strcpy close to
->load_super.

Signed-off-by: NeilBrown <neilb@suse.de>
mapfile.c

index b22772c4cf5bf748f1ae824cda23d55325b33202..2645aa95fbfef4e5a84b61ddec73fccca6f0d51d 100644 (file)
--- a/mapfile.c
+++ b/mapfile.c
@@ -334,31 +334,20 @@ struct map_ent *map_by_name(struct map_ent **map, char *name)
  * version super_by_fd does this automatically, this routine is meant as
  * a supplement for guess_super()
  */
-static void set_member_info(struct supertype *st, struct mdstat_ent *ent)
+static char *get_member_info(struct mdstat_ent *ent)
 {
 
-       st->subarray[0] = '\0';
-
        if (ent->metadata_version == NULL ||
            strncmp(ent->metadata_version, "external:", 9) != 0)
-               return;
+               return NULL;
 
        if (is_subarray(&ent->metadata_version[9])) {
-               char version[strlen(ent->metadata_version)+1];
                char *subarray;
-               char *name = &version[10];
-
-               strcpy(version, ent->metadata_version);
-               subarray = strrchr(version, '/');
-               name = &version[10];
 
-               if (!subarray)
-                       return;
-               *subarray++ = '\0';
-
-               st->container_dev = devname2devnum(name);
-               strncpy(st->subarray, subarray, sizeof(st->subarray));
+               subarray = strrchr(ent->metadata_version, '/');
+               return subarray + 1;
        }
+       return NULL;
 }
 
 void RebuildMap(void)
@@ -402,7 +391,8 @@ void RebuildMap(void)
                        if ( st == NULL)
                                ok = -1;
                        else {
-                               set_member_info(st, md);
+                               char *subarray = get_member_info(md);
+                               strcpy(st->subarray, subarray);
                                ok = st->ss->load_super(st, dfd, NULL);
                        }
                        close(dfd);