options: warn if we exceed the supported number of split entries
[fio.git] / options.c
index d979f804d76c7f694e746956af3fd48e55cb2ac4..3fa646c0f364c97c3671cb676e8f5ec830ac3a89 100644 (file)
--- a/options.c
+++ b/options.c
@@ -54,16 +54,15 @@ static int bs_cmp(const void *p1, const void *p2)
        return (int) bsp1->perc - (int) bsp2->perc;
 }
 
-#define SPLIT_MAX_ENTRY        100
-
 struct split {
        unsigned int nr;
-       unsigned int val1[SPLIT_MAX_ENTRY];
-       unsigned long long val2[SPLIT_MAX_ENTRY];
+       unsigned int val1[ZONESPLIT_MAX];
+       unsigned long long val2[ZONESPLIT_MAX];
 };
 
 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;
@@ -111,8 +110,10 @@ static int split_parse_ddir(struct thread_options *o, struct split *split,
                split->val1[i] = val;
                split->val2[i] = perc;
                i++;
-               if (i == SPLIT_MAX_ENTRY)
+               if (i == max_splits) {
+                       log_err("fio: hit max of %d split entries\n", i);
                        break;
+               }
        }
 
        split->nr = i;
@@ -128,7 +129,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;
@@ -848,7 +849,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;
@@ -1129,9 +1130,9 @@ static int str_steadystate_cb(void *data, const char *str)
                if (parse_dryrun())
                        return 0;
 
-               td->o.ss_state |= __FIO_SS_PCT;
+               td->o.ss_state |= FIO_SS_PCT;
                td->o.ss_limit.u.f = val;
-       } else if (td->o.ss_state & __FIO_SS_IOPS) {
+       } else if (td->o.ss_state & FIO_SS_IOPS) {
                if (!str_to_float(nr, &val, 0)) {
                        log_err("fio: steadystate IOPS threshold postfix parsing failed\n");
                        free(nr);
@@ -3460,8 +3461,8 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
        },
        {
                .name   = "max_latency",
-               .lname  = "Max Latency",
-               .type   = FIO_OPT_INT,
+               .lname  = "Max Latency (usec)",
+               .type   = FIO_OPT_STR_VAL_TIME,
                .off1   = offsetof(struct thread_options, max_latency),
                .help   = "Maximum tolerated IO latency (usec)",
                .is_time = 1,