From 8edd973d57a311d4c590d7385796bbdf111ed04c Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Sat, 1 Mar 2014 08:24:03 -0700 Subject: [PATCH] Add runstate swap helpers Signed-off-by: Jens Axboe --- blktrace.c | 5 ++--- filesetup.c | 19 +++++++++---------- fio.h | 3 +++ libfio.c | 13 +++++++++++++ 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/blktrace.c b/blktrace.c index 107a65b2..4b5567ef 100644 --- a/blktrace.c +++ b/blktrace.c @@ -382,8 +382,7 @@ int load_blktrace(struct thread_data *td, const char *filename, int need_swap) fifo = fifo_alloc(TRACE_FIFO_SIZE); - old_state = td->runstate; - td_set_runstate(td, TD_SETTING_UP); + old_state = td_bump_runstate(td, TD_SETTING_UP); td->o.size = 0; @@ -463,7 +462,7 @@ int load_blktrace(struct thread_data *td, const char *filename, int need_swap) fifo_free(fifo); close(fd); - td_set_runstate(td, old_state); + td_restore_runstate(td, old_state); if (!td->files_index) { log_err("fio: did not find replay device(s)\n"); diff --git a/filesetup.c b/filesetup.c index 2744d4fc..4bfa470d 100644 --- a/filesetup.c +++ b/filesetup.c @@ -209,8 +209,7 @@ static int pre_read_file(struct thread_data *td, struct fio_file *f) did_open = 1; } - old_runstate = td->runstate; - td_set_runstate(td, TD_PRE_READING); + old_runstate = td_bump_runstate(td, TD_PRE_READING); bs = td->o.max_bs[DDIR_READ]; b = malloc(bs); @@ -234,7 +233,7 @@ static int pre_read_file(struct thread_data *td, struct fio_file *f) } } - td_set_runstate(td, old_runstate); + td_restore_runstate(td, old_runstate); if (did_open) td->io_ops->close_file(td, f); @@ -745,8 +744,7 @@ int setup_files(struct thread_data *td) dprint(FD_FILE, "setup files\n"); - old_state = td->runstate; - td_set_runstate(td, TD_SETTING_UP); + old_state = td_bump_runstate(td, TD_SETTING_UP); if (o->read_iolog_file) goto done; @@ -925,12 +923,12 @@ done: if (o->create_only) td->done = 1; - td_set_runstate(td, old_state); + td_restore_runstate(td, old_state); return 0; err_offset: log_err("%s: you need to specify valid offset=\n", o->name); err_out: - td_set_runstate(td, old_state); + td_restore_runstate(td, old_state); return 1; } @@ -980,11 +978,12 @@ static int init_rand_distribution(struct thread_data *td) if (td->o.random_distribution == FIO_RAND_DIST_RANDOM) return 0; - state = td->runstate; - td_set_runstate(td, TD_SETTING_UP); + state = td_bump_runstate(td, TD_SETTING_UP); + for_each_file(td, f, i) __init_rand_distribution(td, f); - td_set_runstate(td, state); + + td_restore_runstate(td, state); return 1; } diff --git a/fio.h b/fio.h index 6f5f29fb..52f1def7 100644 --- a/fio.h +++ b/fio.h @@ -475,6 +475,9 @@ enum { }; extern void td_set_runstate(struct thread_data *, int); +extern int td_bump_runstate(struct thread_data *, int); +extern void td_restore_runstate(struct thread_data *, int); + #define TERMINATE_ALL (-1) extern void fio_terminate_threads(int); diff --git a/libfio.c b/libfio.c index f4aac2ef..8eddab80 100644 --- a/libfio.c +++ b/libfio.c @@ -172,6 +172,19 @@ void td_set_runstate(struct thread_data *td, int runstate) td->runstate = runstate; } +int td_bump_runstate(struct thread_data *td, int new_state) +{ + int old_state = td->runstate; + + td_set_runstate(td, new_state); + return old_state; +} + +void td_restore_runstate(struct thread_data *td, int old_state) +{ + td_set_runstate(td, old_state); +} + void fio_terminate_threads(int group_id) { struct thread_data *td; -- 2.25.1