parse: dump option type when using --debug=parse
authorJens Axboe <axboe@kernel.dk>
Fri, 15 Dec 2017 15:41:03 +0000 (08:41 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 15 Dec 2017 15:41:03 +0000 (08:41 -0700)
Currently we do things like:

parse    8731  __handle_option=dummy, type=10, ptr=1

for the debug parsing, and then you have to look up what that
option type is. Add names to them so we get the below instead:

parse    9170  __handle_option=dummy, type=OPT_STR_SET, ptr=1

Signed-off-by: Jens Axboe <axboe@kernel.dk>
compiler/compiler.h
fio.h
parse.c
parse.h

index 20df21d..91a9883 100644 (file)
@@ -69,4 +69,9 @@
 
 #endif
 
+#ifdef FIO_INTERNAL
+#define ARRAY_SIZE(x)    (sizeof((x)) / (sizeof((x)[0])))
+#define FIELD_SIZE(s, f) (sizeof(((typeof(s))0)->f))
+#endif
+
 #endif
diff --git a/fio.h b/fio.h
index b3b95ef..334f203 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -800,11 +800,6 @@ static inline void td_flags_set(struct thread_data *td, unsigned int *flags,
 extern const char *fio_get_arch_string(int);
 extern const char *fio_get_os_string(int);
 
-#ifdef FIO_INTERNAL
-#define ARRAY_SIZE(x)    (sizeof((x)) / (sizeof((x)[0])))
-#define FIELD_SIZE(s, f) (sizeof(((typeof(s))0)->f))
-#endif
-
 enum {
        __FIO_OUTPUT_TERSE      = 0,
        __FIO_OUTPUT_JSON       = 1,
diff --git a/parse.c b/parse.c
index 68229d0..a9486de 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -12,6 +12,7 @@
 #include <math.h>
 #include <float.h>
 
+#include "compiler/compiler.h"
 #include "parse.h"
 #include "debug.h"
 #include "options.h"
 #include "y.tab.h"
 #endif
 
+static const char *opt_type_names[] = {
+       "OPT_INVALID",
+       "OPT_STR",
+       "OPT_STR_MULTI",
+       "OPT_STR_VAL",
+       "OPT_STR_VAL_TIME",
+       "OPT_STR_STORE",
+       "OPT_RANGE",
+       "OPT_INT",
+       "OPT_BOOL",
+       "OPT_FLOAT_LIST",
+       "OPT_STR_SET",
+       "OPT_DEPRECATED",
+       "OPT_UNSUPPORTED",
+};
+
 static struct fio_option *__fio_options;
 
 static int vp_cmp(const void *p1, const void *p2)
@@ -469,6 +486,17 @@ static int str_match_len(const struct value_pair *vp, const char *str)
                        *ptr = (val);                   \
        } while (0)
 
+static const char *opt_type_name(struct fio_option *o)
+{
+       compiletime_assert(ARRAY_SIZE(opt_type_names) - 1 == FIO_OPT_UNSUPPORTED,
+                               "opt_type_names[] index");
+
+       if (o->type >= 0 && o->type <= FIO_OPT_UNSUPPORTED)
+               return opt_type_names[o->type];
+
+       return "OPT_UNKNOWN?";
+}
+
 static int __handle_option(struct fio_option *o, const char *ptr, void *data,
                           int first, int more, int curr)
 {
@@ -483,8 +511,8 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data,
        struct value_pair posval[PARSE_MAX_VP];
        int i, all_skipped = 1;
 
-       dprint(FD_PARSE, "__handle_option=%s, type=%d, ptr=%s\n", o->name,
-                                                       o->type, ptr);
+       dprint(FD_PARSE, "__handle_option=%s, type=%s, ptr=%s\n", o->name,
+                                                       opt_type_name(o), ptr);
 
        if (!ptr && o->type != FIO_OPT_STR_SET && o->type != FIO_OPT_STR) {
                log_err("Option %s requires an argument\n", o->name);
diff --git a/parse.h b/parse.h
index dfe7f16..d05236b 100644 (file)
--- a/parse.h
+++ b/parse.h
@@ -20,7 +20,7 @@ enum fio_opt_type {
        FIO_OPT_FLOAT_LIST,
        FIO_OPT_STR_SET,
        FIO_OPT_DEPRECATED,
-       FIO_OPT_UNSUPPORTED,
+       FIO_OPT_UNSUPPORTED,    /* keep this last */
 };
 
 /*