]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super-ddf.c
Update man page info about files used by mdmon
[thirdparty/mdadm.git] / super-ddf.c
index 0e6f1e53394de81a9aace6a3a5c8999ed00cb2a0..6dd3173efc1f953b87f1dc967616540e9322512f 100644 (file)
@@ -845,10 +845,18 @@ static int load_super_ddf(struct supertype *st, int fd,
        }
 
        if (st->subarray[0]) {
+               unsigned long val;
                struct vcl *v;
+               char *ep;
+
+               val = strtoul(st->subarray, &ep, 10);
+               if (*ep != '\0') {
+                       free(super);
+                       return 1;
+               }
 
                for (v = super->conflist; v; v = v->next)
-                       if (v->vcnum == atoi(st->subarray))
+                       if (v->vcnum == val)
                                super->currentconf = v;
                if (!super->currentconf) {
                        free(super);
@@ -1357,6 +1365,7 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info)
                                                         (ddf->anchor.guid+16));
        info->array.utime         = 0;
        info->array.chunk_size    = 0;
+       info->container_enough    = 0;
 
 
        info->disk.major = 0;
@@ -2806,14 +2815,8 @@ static int load_super_ddf_all(struct supertype *st, int fd,
        int seq;
        char nm[20];
        int dfd;
-       int devnum = fd2devnum(fd);
-       enum sysfs_read_flags flags;
 
-       flags = GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE;
-       if (mdmon_running(devnum))
-               flags |= SKIP_GONE_DEVS;
-
-       sra = sysfs_read(fd, 0, flags);
+       sra = sysfs_read(fd, 0, GET_LEVEL|GET_VERSION|GET_DEVS|GET_STATE);
        if (!sra)
                return 1;
        if (sra->array.major_version != -1 ||
@@ -2870,14 +2873,25 @@ static int load_super_ddf_all(struct supertype *st, int fd,
                        return 1;
        }
        if (st->subarray[0]) {
+               unsigned long val;
                struct vcl *v;
+               char *ep;
+
+               val = strtoul(st->subarray, &ep, 10);
+               if (*ep != '\0') {
+                       free(super);
+                       return 1;
+               }
 
                for (v = super->conflist; v; v = v->next)
-                       if (v->vcnum == atoi(st->subarray))
+                       if (v->vcnum == val)
                                super->currentconf = v;
-               if (!super->currentconf)
+               if (!super->currentconf) {
+                       free(super);
                        return 1;
+               }
        }
+
        *sbp = super;
        if (st->ss == NULL) {
                st->ss = &super_ddf;