]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Initialize st->devnum and st->container_dev in super_by_fd
authorDan Williams <dan.j.williams@intel.com>
Tue, 23 Nov 2010 04:31:18 +0000 (15:31 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 23 Nov 2010 04:31:18 +0000 (15:31 +1100)
Precludes needing to deduce this information later, like in Detail.c and
soon in Grow.c.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Detail.c
util.c

index 2cd4e9d30ee8abac462c4c982c9486578edaedf1..94156288a19fc50be64fd1c881cf6371c64bfdb7 100644 (file)
--- a/Detail.c
+++ b/Detail.c
@@ -98,16 +98,13 @@ int Detail(char *dev, int brief, int export, int test, char *homehost)
        if (st)
                max_disks = st->max_devs;
 
-       if (sra && is_subarray(sra->text_version) &&
-               strchr(sra->text_version+1, '/')) {
+       if (subarray) {
                /* This is a subarray of some container.
                 * We want the name of the container, and the member
                 */
-               char *s = strchr(sra->text_version+1, '/');
-               int dn;
-               *s++ = '\0';
-               member = s;
-               dn = devname2devnum(sra->text_version+1);
+               int dn = st->container_dev;
+
+               member = subarray;
                container = map_dev(dev2major(dn), dev2minor(dn), 1);
        }
 
diff --git a/util.c b/util.c
index e26aba9128587d21302816323b8b6f7d139d0193..b018d2998158c4096d415c2783b8174a295cfc86 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1068,6 +1068,7 @@ struct supertype *super_by_fd(int fd, char **subarrayp)
        char version[20];
        int i;
        char *subarray = NULL;
+       int container = NoMdDev;
 
        sra = sysfs_read(fd, 0, GET_VERSION);
 
@@ -1089,15 +1090,15 @@ struct supertype *super_by_fd(int fd, char **subarrayp)
        }
        if (minor == -2 && is_subarray(verstr)) {
                char *dev = verstr+1;
+
                subarray = strchr(dev, '/');
-               int devnum;
                if (subarray)
                        *subarray++ = '\0';
-               devnum = devname2devnum(dev);
                subarray = strdup(subarray);
+               container = devname2devnum(dev);
                if (sra)
                        sysfs_free(sra);
-               sra = sysfs_read(-1, devnum, GET_VERSION);
+               sra = sysfs_read(-1, container, GET_VERSION);
                if (sra && sra->text_version[0])
                        verstr = sra->text_version;
                else
@@ -1113,8 +1114,11 @@ struct supertype *super_by_fd(int fd, char **subarrayp)
                st->sb = NULL;
                if (subarrayp)
                        *subarrayp = subarray;
+               st->container_dev = container;
+               st->devnum = fd2devnum(fd);
        } else
                free(subarray);
+
        return st;
 }
 #endif /* !defined(MDASSEMBLE) || defined(MDASSEMBLE) && defined(MDASSEMBLE_AUTO) */