options: don't overrun bssplit array
authorJens Axboe <axboe@kernel.dk>
Thu, 30 Nov 2017 23:49:23 +0000 (16:49 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 30 Nov 2017 23:49:23 +0000 (16:49 -0700)
Since we now have a different number of splits we support for
zones and block size splits, make sure we pass in the right
max.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
options.c

index 9e3e960..30f7962 100644 (file)
--- a/options.c
+++ b/options.c
@@ -61,7 +61,8 @@ struct split {
 };
 
 static int split_parse_ddir(struct thread_options *o, struct split *split,
-                           enum fio_ddir ddir, char *str, bool absolute)
+                           enum fio_ddir ddir, char *str, bool absolute,
+                           unsigned int max_splits)
 {
        unsigned long long perc;
        unsigned int i;
@@ -109,7 +110,7 @@ static int split_parse_ddir(struct thread_options *o, struct split *split,
                split->val1[i] = val;
                split->val2[i] = perc;
                i++;
-               if (i == ZONESPLIT_MAX)
+               if (i == max_splits)
                        break;
        }
 
@@ -126,7 +127,7 @@ static int bssplit_ddir(struct thread_options *o, enum fio_ddir ddir, char *str,
 
        memset(&split, 0, sizeof(split));
 
-       if (split_parse_ddir(o, &split, ddir, str, data))
+       if (split_parse_ddir(o, &split, ddir, str, data, BSSPLIT_MAX))
                return 1;
        if (!split.nr)
                return 0;
@@ -846,7 +847,7 @@ static int zone_split_ddir(struct thread_options *o, enum fio_ddir ddir,
 
        memset(&split, 0, sizeof(split));
 
-       if (split_parse_ddir(o, &split, ddir, str, absolute))
+       if (split_parse_ddir(o, &split, ddir, str, absolute, ZONESPLIT_MAX))
                return 1;
        if (!split.nr)
                return 0;