]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - util.c
Monitor: fix inconsistencies in values for ->percent
[thirdparty/mdadm.git] / util.c
diff --git a/util.c b/util.c
index e5f7a202ba66fd02de8a0bbe5b54bd8b3e931f9e..ac0f78c50189d14e910caf7ed4e4245aac9a62f1 100644 (file)
--- a/util.c
+++ b/util.c
@@ -194,6 +194,7 @@ long long parse_size(char *size)
         * followed by 'K', 'M', or 'G'.
         * Without a suffix, K is assumed.
         * Number returned is in sectors (half-K)
+        * -1 returned on error.
         */
        char *c;
        long long s = strtoll(size, &c, 10);
@@ -215,7 +216,7 @@ long long parse_size(char *size)
                }
        }
        if (*c)
-               s = 0;
+               s = -1;
        return s;
 }
 
@@ -377,7 +378,7 @@ int enough_fd(int fd)
            array.raid_disks <= 0)
                return 0;
        avail = calloc(array.raid_disks, 1);
-       for (i=0; i < 1024 && array.nr_disks > 0; i++) {
+       for (i=0; i < MAX_DISKS && array.nr_disks > 0; i++) {
                disk.number = i;
                if (ioctl(fd, GET_DISK_INFO, &disk) != 0)
                        continue;
@@ -711,6 +712,8 @@ void print_r10_layout(int layout)
 unsigned long long calc_array_size(int level, int raid_disks, int layout,
                                   int chunksize, unsigned long long devsize)
 {
+       if (level == 1)
+               return devsize;
        devsize &= ~(unsigned long long)((chunksize>>9)-1);
        return get_data_disks(level, layout, raid_disks) * devsize;
 }
@@ -966,9 +969,10 @@ struct supertype *super_by_fd(int fd, char **subarrayp)
                char *dev = verstr+1;
 
                subarray = strchr(dev, '/');
-               if (subarray)
+               if (subarray) {
                        *subarray++ = '\0';
-               subarray = strdup(subarray);
+                       subarray = strdup(subarray);
+               }
                container = devname2devnum(dev);
                if (sra)
                        sysfs_free(sra);
@@ -1271,7 +1275,7 @@ void get_one_disk(int mdfd, mdu_array_info_t *ainf, mdu_disk_info_t *disk)
        int d;
 
        ioctl(mdfd, GET_ARRAY_INFO, ainf);
-       for (d = 0 ; d < 1024 ; d++) {
+       for (d = 0 ; d < MAX_DISKS ; d++) {
                if (ioctl(mdfd, GET_DISK_INFO, disk) == 0 &&
                    (disk->major || disk->minor))
                        return;