Revert "options: move pattern_fmt_desc where we need it"
authorJens Axboe <axboe@fb.com>
Tue, 15 Mar 2016 15:48:25 +0000 (09:48 -0600)
committerJens Axboe <axboe@fb.com>
Tue, 15 Mar 2016 15:48:25 +0000 (09:48 -0600)
This reverts commit 5f3bd0fd67254e3750681f0700a0cc162faee500.

We do need it to be globally reachable, otherwise we assign a
pointer to an on-stack structure. This causes the pattern filling
to read garbage, and segfault.

Signed-off-by: Jens Axboe <axboe@fb.com>
options.c

index 7075d84d42493b8bec52702151dbdb4be578fbdf..062abb4e163251b540b3dddcbdf91bcba1d2302c 100644 (file)
--- a/options.c
+++ b/options.c
 
 char client_sockaddr_str[INET6_ADDRSTRLEN] = { 0 };
 
+struct pattern_fmt_desc fmt_desc[] = {
+       {
+               .fmt   = "%o",
+               .len   = FIELD_SIZE(struct io_u *, offset),
+               .paste = paste_blockoff
+       }
+};
+
 /*
  * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
  */
@@ -1184,20 +1192,13 @@ static int str_dedupe_cb(void *data, unsigned long long *il)
 
 static int str_verify_pattern_cb(void *data, const char *input)
 {
-       struct pattern_fmt_desc fmt_desc[] = {
-               {
-                       .fmt   = "%o",
-                       .len   = FIELD_SIZE(struct io_u *, offset),
-                       .paste = paste_blockoff
-               }
-       };
        struct thread_data *td = data;
        int ret;
 
        td->o.verify_fmt_sz = ARRAY_SIZE(td->o.verify_fmt);
        ret = parse_and_fill_pattern(input, strlen(input), td->o.verify_pattern,
-                       MAX_PATTERN_SIZE, fmt_desc, sizeof(fmt_desc),
-                       td->o.verify_fmt, &td->o.verify_fmt_sz);
+                                    MAX_PATTERN_SIZE, fmt_desc, sizeof(fmt_desc),
+                                    td->o.verify_fmt, &td->o.verify_fmt_sz);
        if (ret < 0)
                return 1;