]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mapfile.c
Use new container_content rather than passing subarray to load_super.
[thirdparty/mdadm.git] / mapfile.c
index 2645aa95fbfef4e5a84b61ddec73fccca6f0d51d..be58436c6e3ad78d0627cb3af80a130cbafcac4f 100644 (file)
--- a/mapfile.c
+++ b/mapfile.c
@@ -380,8 +380,9 @@ void RebuildMap(void)
                        int dfd;
                        int ok;
                        struct supertype *st;
+                       char *subarray;
                        char *path;
-                       struct mdinfo info;
+                       struct mdinfo *info;
 
                        sprintf(dn, "%d:%d", sd->disk.major, sd->disk.minor);
                        dfd = dev_open(dn, O_RDONLY);
@@ -391,14 +392,14 @@ void RebuildMap(void)
                        if ( st == NULL)
                                ok = -1;
                        else {
-                               char *subarray = get_member_info(md);
-                               strcpy(st->subarray, subarray);
+                               subarray = get_member_info(md);
                                ok = st->ss->load_super(st, dfd, NULL);
                        }
                        close(dfd);
                        if (ok != 0)
                                continue;
-                       st->ss->getinfo_super(st, &info, NULL);
+                       info = st->ss->container_content(st, subarray);
+
                        if (md->devnum >= 0)
                                path = map_dev(MD_MAJOR, md->devnum, 0);
                        else
@@ -418,7 +419,7 @@ void RebuildMap(void)
                                 *   find a unique name based on metadata name.
                                 *   
                                 */
-                               struct mddev_ident_s *match = conf_match(&info, st);
+                               struct mddev_ident_s *match = conf_match(info, st);
                                struct stat stb;
                                if (match && match->devname && match->devname[0] == '/') {
                                        path = match->devname;
@@ -436,13 +437,13 @@ void RebuildMap(void)
                                             st->ss->match_home(st, homehost) != 1) &&
                                            st->ss->match_home(st, "any") != 1 &&
                                            (require_homehost
-                                            || ! conf_name_is_free(info.name)))
+                                            || ! conf_name_is_free(info->name)))
                                                /* require a numeric suffix */
                                                unum = 0;
                                        else
                                                /* allow name to be used as-is if no conflict */
                                                unum = -1;
-                                       name = info.name;
+                                       name = info->name;
                                        if (!*name) {
                                                name = st->ss->name;
                                                if (!isdigit(name[strlen(name)-1]) &&
@@ -475,9 +476,10 @@ void RebuildMap(void)
                                }
                        }
                        map_add(&map, md->devnum,
-                               info.text_version,
-                               info.uuid, path);
+                               info->text_version,
+                               info->uuid, path);
                        st->ss->free_super(st);
+                       free(info);
                        break;
                }
                sysfs_free(sra);