X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=backend.c;h=b05e5437705ccf7cb4957b9c656a84cd76eaaa11;hb=73a467e6899315b1f78cf8f16bb1b1ac6d21505e;hp=5e7a388b9d5f2d5c43022485305ec3868231311a;hpb=243bfe190245a10e9d0981bf2a7c722edc4c43d4;p=fio.git diff --git a/backend.c b/backend.c index 5e7a388b..b05e5437 100644 --- a/backend.c +++ b/backend.c @@ -1110,7 +1110,8 @@ static int switch_ioscheduler(struct thread_data *td) /* * Read back and check that the selected scheduler is now the default. */ - ret = fread(tmp, 1, sizeof(tmp), f); + memset(tmp, 0, sizeof(tmp)); + ret = fread(tmp, 1, sizeof(tmp) - 1, f); if (ferror(f) || ret < 0) { td_verror(td, errno, "fread"); fclose(f); @@ -1223,120 +1224,6 @@ static uint64_t do_dry_run(struct thread_data *td) return bytes_done[DDIR_WRITE] + bytes_done[DDIR_TRIM]; } -static int write_this_log(struct thread_data *td, struct io_log *log, - const char *log_file, const char *name, int try) -{ - int ret; - - if (!log) - return 0; - - if (log_file) - ret = finish_log_named(td, log, log_file, name, try); - else - ret = finish_log(td, log, name, try); - - return ret; -} - -static int write_iops_log(struct thread_data *td, struct thread_options *o, - int try) -{ - return write_this_log(td, td->iops_log, o->iops_log_file, "iops", try); -} - -static int write_slat_log(struct thread_data *td, struct thread_options *o, - int try) -{ - return write_this_log(td, td->slat_log, o->lat_log_file, "slat", try); -} - -static int write_clat_log(struct thread_data *td, struct thread_options *o, - int try) -{ - return write_this_log(td, td->clat_log, o->lat_log_file, "clat" , try); -} - -static int write_lat_log(struct thread_data *td, struct thread_options *o, - int try) -{ - return write_this_log(td, td->lat_log, o->lat_log_file, "lat", try); -} - -static int write_bandw_log(struct thread_data *td, struct thread_options *o, - int try) -{ - return write_this_log(td, td->bw_log, o->bw_log_file, "bw", try); -} - -enum { - BW_LOG_MASK = 1, - LAT_LOG_MASK = 2, - SLAT_LOG_MASK = 4, - CLAT_LOG_MASK = 8, - IOPS_LOG_MASK = 16, - - ALL_LOG_MASK = 31, - ALL_LOG_NR = 5, -}; - -static void writeout_logs(struct thread_data *td) -{ - struct thread_options *o = &td->o; - unsigned int log_mask = ALL_LOG_MASK; - unsigned int log_left = ALL_LOG_NR; - int old_state; - - old_state = td_bump_runstate(td, TD_FINISHING); - - finalize_logs(td); - - while (log_left) { - int ret, prev_log_left = log_left; - - if (log_mask & BW_LOG_MASK) { - ret = write_bandw_log(td, o, log_left != 1); - if (!ret) { - log_left--; - log_mask &= ~BW_LOG_MASK; - } - } - if (log_mask & LAT_LOG_MASK) { - ret = write_lat_log(td, o, log_left != 1); - if (!ret) { - log_left--; - log_mask &= ~LAT_LOG_MASK; - } - } - if (log_mask & SLAT_LOG_MASK) { - ret = write_slat_log(td, o, log_left != 1); - if (!ret) { - log_left--; - log_mask &= ~SLAT_LOG_MASK; - } - } - if (log_mask & CLAT_LOG_MASK) { - ret = write_clat_log(td, o, log_left != 1); - if (!ret) { - log_left--; - log_mask &= ~CLAT_LOG_MASK; - } - } - if (log_mask & IOPS_LOG_MASK) { - ret = write_iops_log(td, o, log_left != 1); - if (!ret) { - log_left--; - log_mask &= ~IOPS_LOG_MASK; - } - } - - if (prev_log_left == log_left) - usleep(5000); - } - - td_restore_runstate(td, old_state); -} - /* * Entry point for the thread based jobs. The process based jobs end up * here as well, after a little setup. @@ -1603,7 +1490,7 @@ static void *thread_main(void *data) fio_unpin_memory(td); - writeout_logs(td); + fio_writeout_logs(td); if (o->exec_postrun) exec_string(o, o->exec_postrun, (const char *)"postrun");