Recent changes (master)
The following changes since commit 196ce5d5ff76af30cf93fd24240f12d8c4d24381:
Merge branch 'fixbug_glfs' of https://github.com/simon-rock/fio (2018-04-03 08:19:38 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 2b8b8f0dccb4c7e97aee3b7d7e13d8528467d64e:
Fix return value checking of fread() in iolog.c (2018-04-04 19:18:50 -0600)
----------------------------------------------------------------
Bart Van Assche (6):
engines/sg: Make I/O error messages more informative Rename TD_F_VER_NONE into TD_F_DO_VERIFY
Only populate the write buffer if necessary
parse.h: Remove a superfluous cast
option parsing: Mark arguments that are not modified as 'const' Ensure that .minfp and .maxfp are respected for FIO_OPT_FLOAT_LIST
Jens Axboe (1):
Merge branch 'master' of https://github.com/bvanassche/fio
Rebecca Cran (1):
Fix return value checking of fread() in iolog.c
backend.c | 4 +++ engines/sg.c | 4 +-- fio.h | 4 +-- init.c | 2 +- io_u.c | 9 ++--- iolog.c | 6 ++-- options.c | 16 ++++----- options.h | 9 +++-- parse.c | 112 +++++++++++++++++++++++++++++++---------------------------- parse.h | 25 +++++++------ 10 files changed, 103 insertions(+), 88 deletions(-)
---
Diff of recent changes:
backend.c +4 -0
@@ -723,6 +723,7 @@ static void do_verify(struct thread_data *td, uint64_t verify_bytes)break ; }else if (io_u->ddir ==DDIR_WRITE ) { io_u->ddir =DDIR_READ ; +populate_verify_io_u (td, io_u);break ; }else {put_io_u (td, io_u);
@@ -995,6 +996,9 @@ static void do_io(struct thread_data *td, uint64_t *bytes_done)break ; } +if (io_u->ddir ==DDIR_WRITE && td->flags &TD_F_DO_VERIFY ) +populate_verify_io_u (td, io_u); + ddir = io_u->ddir;/*
engines/sg.c +2 -2
@@ -287,11 +287,11 @@ static int fio_sgio_doio(struct thread_data *td, struct io_u *io_u, int do_sync)if (f->filetype ==FIO_TYPE_BLOCK ) { ret =fio_sgio_ioctl_doio (td, f, io_u); - td->error = io_u->error; +td_verror (td, io_u->error, __func__); }else { ret =fio_sgio_rw_doio (f, io_u, do_sync);if (do_sync) - td->error = io_u->error; +td_verror (td, io_u->error, __func__); }return ret;
fio.h +2 -2
@@ -79,7 +79,7 @@ enum { __TD_F_READ_IOLOG, __TD_F_REFILL_BUFFERS, __TD_F_SCRAMBLE_BUFFERS, - __TD_F_VER_NONE, + __TD_F_DO_VERIFY, __TD_F_PROFILE_OPS, __TD_F_COMPRESS, __TD_F_COMPRESS_LOG,
@@ -100,7 +100,7 @@ enum {TD_F_READ_IOLOG =1U << __TD_F_READ_IOLOG,TD_F_REFILL_BUFFERS =1U << __TD_F_REFILL_BUFFERS,TD_F_SCRAMBLE_BUFFERS =1U << __TD_F_SCRAMBLE_BUFFERS, -TD_F_VER_NONE =1U << __TD_F_VER_NONE, +TD_F_DO_VERIFY =1U << __TD_F_DO_VERIFY,TD_F_PROFILE_OPS =1U << __TD_F_PROFILE_OPS,TD_F_COMPRESS =1U << __TD_F_COMPRESS, TD_F_COMPRESS_LOG = 1U << __TD_F_COMPRESS_LOG,
init.c +1 -1
@@ -1184,7 +1184,7 @@ static void init_flags(struct thread_data *td) fio_option_is_set(o, zero_buffers))) td->flags |=TD_F_SCRAMBLE_BUFFERS ;if (o->verify !=VERIFY_NONE ) - td->flags |=TD_F_VER_NONE ; + td->flags |=TD_F_DO_VERIFY ;if (o->verify_async || o->io_submit_mode ==IO_MODE_OFFLOAD ) td->flags |=TD_F_NEED_LOCK ;
io_u.c +3 -6
@@ -1699,7 +1699,7 @@ static void small_content_scramble(struct io_u *io_u)/* * Return an io_u to be processed. Gets a buflen and offset, sets direction, -* etc. The returned io_u is fully ready to be prepped and submitted. +* etc. The returned io_u is fully ready to be prepped, populated and submitted. */ struct io_u *get_io_u (struct thread_data *td) {
@@ -1760,12 +1760,9 @@ struct io_u *get_io_u(struct thread_data *td) td->o.min_bs[DDIR_WRITE ], io_u->buflen); }else if ((td->flags &TD_F_SCRAMBLE_BUFFERS ) && - !(td->flags &TD_F_COMPRESS )) + !(td->flags &TD_F_COMPRESS ) && + !(td->flags &TD_F_DO_VERIFY )) do_scramble =1 ; -if (td->flags &TD_F_VER_NONE ) { -populate_verify_io_u (td, io_u); - do_scramble =0 ; - } }else if (io_u->ddir ==DDIR_READ ) {/* * Reset the buf_filled parameters so next time if the
iolog.c +3 -3
@@ -978,7 +978,7 @@ int iolog_file_inflate(const char *file)struct iolog_compress ic;z_stream stream;struct stat sb; -ssize_t ret; +size_t ret;size_t total;void *buf;FILE *f;
@@ -1000,12 +1000,12 @@ int iolog_file_inflate(const char *file) ic.seq =1 ; ret =fread (ic.buf, ic.len,1 , f); -if (ret <0 ) { +if (ret ==0 &&ferror (f)) {perror ("fread" );fclose (f);free (buf);return 1 ; - }else if (ret !=1 ) { + }else if (ferror (f) || (!feof (f) && ret !=1 )) {log_err ("fio: short read on reading log\n" );fclose (f);free (buf);
options.c +8 -8
@@ -1517,7 +1517,7 @@ static int str_ioengine_external_cb(void *data, const char *str)return 0 ; } -static int rw_verify (struct fio_option *o,void *data) +static int rw_verify (const struct fio_option *o,void *data) {struct thread_data *td =cb_data_to_td (data);
@@ -1530,7 +1530,7 @@ static int rw_verify(struct fio_option *o, void *data)return 0 ; } -static int gtod_cpu_verify (struct fio_option *o,void *data) +static int gtod_cpu_verify (const struct fio_option *o,void *data) {#ifndef FIO_HAVE_CPU_AFFINITY struct thread_data *td =cb_data_to_td (data);
@@ -4904,7 +4904,7 @@ int fio_options_parse(struct thread_data *td, char **opts, int num_opts) opts_copy =dup_and_sub_options (opts, num_opts);for (ret =0 , i =0 , unknown =0 ; i < num_opts; i++) { -struct fio_option *o; +const struct fio_option *o;int newret =parse_option (opts_copy[i], opts[i], fio_options, &o, &td->o, &td->opt_list);
@@ -4930,7 +4930,7 @@ int fio_options_parse(struct thread_data *td, char **opts, int num_opts) opts = opts_copy; }for (i =0 ; i < num_opts; i++) { -struct fio_option *o =NULL ; +const struct fio_option *o =NULL ;int newret =1 ;if (!opts_copy[i])
@@ -4961,9 +4961,9 @@ int fio_cmd_option_parse(struct thread_data *td, const char *opt, char *val) ret =parse_cmd_option (opt, val, fio_options, &td->o, &td->opt_list);if (!ret) { -struct fio_option *o; +const struct fio_option *o; - o =find_option (fio_options, opt); + o =find_option_c (fio_options, opt);if (o)fio_option_mark_set (&td->o, o); }
@@ -5028,7 +5028,7 @@ unsigned int fio_get_kb_base(void *data)return kb_base; } -int add_option (struct fio_option *o) +int add_option (const struct fio_option *o) {struct fio_option *__o;int opt_index =0 ;
@@ -5165,7 +5165,7 @@ bool __fio_option_is_set(struct thread_options *o, unsigned int off1)return false; } -void fio_option_mark_set (struct thread_options *o,struct fio_option *opt) +void fio_option_mark_set (struct thread_options *o,const struct fio_option *opt) {unsigned int opt_off, index, offset;
options.h +6 -3
@@ -8,7 +8,7 @@#include "parse.h" #include "lib/types.h" -int add_option (struct fio_option *); +int add_option (const struct fio_option *);void invalidate_profile_options (const char *);extern char *exec_profile;
@@ -31,9 +31,10 @@ extern bool __fio_option_is_set(struct thread_options *, unsigned int off); __r; \ }) -extern void fio_option_mark_set (struct thread_options *,struct fio_option *); +extern void fio_option_mark_set (struct thread_options *, +const struct fio_option *); -static inline bool o_match (struct fio_option *o,const char *opt) +static inline bool o_match (const struct fio_option *o,const char *opt) {if (!strcmp (o->name, opt))return true;
@@ -44,6 +45,8 @@ static inline bool o_match(struct fio_option *o, const char *opt) }extern struct fio_option *find_option (struct fio_option *,const char *); +extern const struct fio_option * +find_option_c (const struct fio_option *,const char *);extern struct fio_option *fio_option_find (const char *);extern unsigned int fio_get_kb_base (void *);
parse.c +59 -53
273 lines not on this page · raw message
parse.h +15 -10
@@ -68,7 +68,7 @@ struct fio_option {int hide_on_set;/* hide on set, not on unset */ const char *inverse;/* if set, apply opposite action to this option */ struct fio_option *inv_opt;/* cached lookup */ -int (*verify)(struct fio_option *,void *); +int (*verify)(const struct fio_option *,void *);const char *prof_name;/* only valid for specific profile */ void *prof_opts;uint64_t category;/* what type of option */
@@ -81,14 +81,18 @@ struct fio_option {int no_free; }; -extern int parse_option (char *,const char *,struct fio_option *,struct fio_option **,void *,struct flist_head *); -extern void sort_options (char **,struct fio_option *,int ); -extern int parse_cmd_option (const char *t,const char *l,struct fio_option *,void *,struct flist_head *); -extern int show_cmd_help (struct fio_option *,const char *); -extern void fill_default_options (void *,struct fio_option *); +extern int parse_option (char *,const char *,const struct fio_option *, +const struct fio_option **,void *, +struct flist_head *); +extern void sort_options (char **,const struct fio_option *,int ); +extern int parse_cmd_option (const char *t,const char *l, +const struct fio_option *,void *, +struct flist_head *); +extern int show_cmd_help (const struct fio_option *,const char *); +extern void fill_default_options (void *,const struct fio_option *);extern void options_init (struct fio_option *); -extern void options_mem_dupe (struct fio_option *,void *); -extern void options_free (struct fio_option *,void *); +extern void options_mem_dupe (const struct fio_option *,void *); +extern void options_free (const struct fio_option *,void *);extern void strip_blank_front (char **);extern void strip_blank_end (char *);
@@ -108,7 +112,8 @@ typedef int (fio_opt_str_val_fn)(void *, long long *);typedef int (fio_opt_int_fn )(void *,int *);struct thread_options ; -static inline void *td_var (void *to,struct fio_option *o,unsigned int offset) +static inline void *td_var (void *to,const struct fio_option *o, +unsigned int offset) {void *ret;
@@ -117,7 +122,7 @@ static inline void *td_var(void *to, struct fio_option *o, unsigned int offset)else ret = to; -return (char *) ret + offset; +return ret + offset; }static inline int parse_is_percent (unsigned long long val)