From: Jens Axboe Date: Tue, 15 Mar 2016 15:48:25 +0000 (-0600) Subject: Revert "options: move pattern_fmt_desc where we need it" X-Git-Tag: fio-2.8~2 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=4205998f8be13752f9857ef6e28b6c7f86a3c769 Revert "options: move pattern_fmt_desc where we need it" 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 --- diff --git a/options.c b/options.c index 7075d84d..062abb4e 100644 --- a/options.c +++ b/options.c @@ -20,6 +20,14 @@ 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;