Sync README with fio usage output
[fio.git] / init.c
diff --git a/init.c b/init.c
index cc33bf06d60dd2c340dcfaa2410cc325cd4db446..d12b75d5ee33108075731d879d2870b5a11a34ff 100644 (file)
--- a/init.c
+++ b/init.c
 #include "server.h"
 #include "idletime.h"
 #include "filelock.h"
+#include "steadystate.h"
 
 #include "oslib/getopt.h"
 #include "oslib/strcasestr.h"
 
 #include "crc/test.h"
+#include "lib/pow2.h"
 
 const char fio_version_string[] = FIO_VERSION;
 
@@ -47,7 +49,6 @@ static char **job_sections;
 static int nr_job_sections;
 
 int exitall_on_terminate = 0;
-int exitall_on_terminate_error = 0;
 int output_format = FIO_OUTPUT_NORMAL;
 int eta_print = FIO_ETA_AUTO;
 int eta_new_line = 0;
@@ -104,7 +105,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = {
        },
        {
                .name           = (char *) "bandwidth-log",
-               .has_arg        = required_argument,
+               .has_arg        = no_argument,
                .val            = 'b' | FIO_CLIENT_FLAG,
        },
        {
@@ -114,7 +115,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = {
        },
        {
                .name           = (char *) "output-format",
-               .has_arg        = optional_argument,
+               .has_arg        = required_argument,
                .val            = 'F' | FIO_CLIENT_FLAG,
        },
        {
@@ -299,7 +300,6 @@ void free_threads_shm(void)
 static void free_shm(void)
 {
        if (threads) {
-               file_hash_exit();
                flow_exit();
                fio_debug_jobp = NULL;
                free_threads_shm();
@@ -310,8 +310,9 @@ static void free_shm(void)
        free(trigger_remote_cmd);
        trigger_file = trigger_cmd = trigger_remote_cmd = NULL;
 
-       options_free(fio_options, &def_thread);
+       options_free(fio_options, &def_thread.o);
        fio_filelock_exit();
+       file_hash_exit();
        scleanup();
 }
 
@@ -323,8 +324,6 @@ static void free_shm(void)
  */
 static int setup_thread_area(void)
 {
-       void *hash;
-
        if (threads)
                return 0;
 
@@ -335,7 +334,6 @@ static int setup_thread_area(void)
        do {
                size_t size = max_jobs * sizeof(struct thread_data);
 
-               size += file_hash_size;
                size += sizeof(unsigned int);
 
 #ifndef CONFIG_NO_SHM
@@ -367,10 +365,8 @@ static int setup_thread_area(void)
 #endif
 
        memset(threads, 0, max_jobs * sizeof(struct thread_data));
-       hash = (void *) threads + max_jobs * sizeof(struct thread_data);
-       fio_debug_jobp = (void *) hash + file_hash_size;
+       fio_debug_jobp = (void *) threads + max_jobs * sizeof(struct thread_data);
        *fio_debug_jobp = -1;
-       file_hash_init(hash);
 
        flow_init();
 
@@ -677,7 +673,7 @@ static int fixup_options(struct thread_data *td)
                        "verify limited\n");
                ret = warnings_fatal;
        }
-       if (o->bs_unaligned && (o->odirect || td->io_ops->flags & FIO_RAWIO))
+       if (o->bs_unaligned && (o->odirect || td_ioengine_flagged(td, FIO_RAWIO)))
                log_err("fio: bs_unaligned may not work with raw io\n");
 
        /*
@@ -764,7 +760,7 @@ static int fixup_options(struct thread_data *td)
 
        if (o->pre_read) {
                o->invalidate_cache = 0;
-               if (td->io_ops->flags & FIO_PIPEIO) {
+               if (td_ioengine_flagged(td, FIO_PIPEIO)) {
                        log_info("fio: cannot pre-read files with an IO engine"
                                 " that isn't seekable. Pre-read disabled.\n");
                        ret = warnings_fatal;
@@ -772,7 +768,7 @@ static int fixup_options(struct thread_data *td)
        }
 
        if (!o->unit_base) {
-               if (td->io_ops->flags & FIO_BIT_BASED)
+               if (td_ioengine_flagged(td, FIO_BIT_BASED))
                        o->unit_base = 1;
                else
                        o->unit_base = 8;
@@ -795,7 +791,7 @@ static int fixup_options(struct thread_data *td)
         * Windows doesn't support O_DIRECT or O_SYNC with the _open interface,
         * so fail if we're passed those flags
         */
-       if ((td->io_ops->flags & FIO_SYNCIO) && (td->o.odirect || td->o.sync_io)) {
+       if (td_ioengine_flagged(td, FIO_SYNCIO) && (td->o.odirect || td->o.sync_io)) {
                log_err("fio: Windows does not support direct or non-buffered io with"
                                " the synchronous ioengines. Use the 'windowsaio' ioengine"
                                " with 'direct=1' and 'iodepth=1' instead.\n");
@@ -828,7 +824,8 @@ static int fixup_options(struct thread_data *td)
         * If size is set but less than the min block size, complain
         */
        if (o->size && o->size < td_min_bs(td)) {
-               log_err("fio: size too small, must be larger than the IO size: %llu\n", (unsigned long long) o->size);
+               log_err("fio: size too small, must not be less than minimum block size: %llu < %u\n",
+                       (unsigned long long) o->size, td_min_bs(td));
                ret = 1;
        }
 
@@ -844,7 +841,7 @@ static int fixup_options(struct thread_data *td)
        if (fio_option_is_set(&td->o, rand_seed))
                td->o.rand_repeatable = 0;
 
-       if ((td->io_ops->flags & FIO_NOEXTEND) && td->o.file_append) {
+       if (td_ioengine_flagged(td, FIO_NOEXTEND) && td->o.file_append) {
                log_err("fio: can't append/extent with IO engine %s\n", td->io_ops->name);
                ret = 1;
        }
@@ -860,7 +857,7 @@ static int fixup_options(struct thread_data *td)
                td->loops = 1;
 
        if (td->o.block_error_hist && td->o.nr_files != 1) {
-               log_err("fio: block error histogram only available with "
+               log_err("fio: block error histogram only available "
                        "with a single file per job, but %d files "
                        "provided\n", td->o.nr_files);
                ret = 1;
@@ -869,27 +866,6 @@ static int fixup_options(struct thread_data *td)
        return ret;
 }
 
-/*
- * This function leaks the buffer
- */
-char *fio_uint_to_kmg(unsigned int val)
-{
-       char *buf = malloc(32);
-       char post[] = { 0, 'K', 'M', 'G', 'P', 'E', 0 };
-       char *p = post;
-
-       do {
-               if (val & 1023)
-                       break;
-
-               val >>= 10;
-               p++;
-       } while (*p);
-
-       snprintf(buf, 32, "%u%c", val, *p);
-       return buf;
-}
-
 /* External engines are specified by "external:name.o") */
 static const char *get_engine_name(const char *str)
 {
@@ -904,19 +880,34 @@ static const char *get_engine_name(const char *str)
        return p;
 }
 
-static int exists_and_not_file(const char *filename)
+static void init_rand_file_service(struct thread_data *td)
 {
-       struct stat sb;
+       unsigned long nranges = td->o.nr_files << FIO_FSERVICE_SHIFT;
+       const unsigned int seed = td->rand_seeds[FIO_RAND_FILE_OFF];
+
+       if (td->o.file_service_type == FIO_FSERVICE_ZIPF) {
+               zipf_init(&td->next_file_zipf, nranges, td->zipf_theta, seed);
+               zipf_disable_hash(&td->next_file_zipf);
+       } else if (td->o.file_service_type == FIO_FSERVICE_PARETO) {
+               pareto_init(&td->next_file_zipf, nranges, td->pareto_h, seed);
+               zipf_disable_hash(&td->next_file_zipf);
+       } else if (td->o.file_service_type == FIO_FSERVICE_GAUSS) {
+               gauss_init(&td->next_file_gauss, nranges, td->gauss_dev, seed);
+               gauss_disable_hash(&td->next_file_gauss);
+       }
+}
 
-       if (lstat(filename, &sb) == -1)
-               return 0;
+void td_fill_verify_state_seed(struct thread_data *td)
+{
+       bool use64;
 
-       /* \\.\ is the device namespace in Windows, where every file
-        * is a device node */
-       if (S_ISREG(sb.st_mode) && strncmp(filename, "\\\\.\\", 4) != 0)
-               return 0;
+       if (td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE64)
+               use64 = 1;
+       else
+               use64 = 0;
 
-       return 1;
+       init_rand_seed(&td->verify_state, td->rand_seeds[FIO_RAND_VER_OFF],
+               use64);
 }
 
 static void td_fill_rand_seeds_internal(struct thread_data *td, bool use64)
@@ -924,11 +915,13 @@ static void td_fill_rand_seeds_internal(struct thread_data *td, bool use64)
        int i;
 
        init_rand_seed(&td->bsrange_state, td->rand_seeds[FIO_RAND_BS_OFF], use64);
-       init_rand_seed(&td->verify_state, td->rand_seeds[FIO_RAND_VER_OFF], use64);
+       td_fill_verify_state_seed(td);
        init_rand_seed(&td->rwmix_state, td->rand_seeds[FIO_RAND_MIX_OFF], false);
 
        if (td->o.file_service_type == FIO_FSERVICE_RANDOM)
                init_rand_seed(&td->next_file_state, td->rand_seeds[FIO_RAND_FILE_OFF], use64);
+       else if (td->o.file_service_type & __FIO_FSERVICE_NONUNIFORM)
+               init_rand_file_service(td);
 
        init_rand_seed(&td->file_size_state, td->rand_seeds[FIO_RAND_FILE_SIZE_OFF], use64);
        init_rand_seed(&td->trim_state, td->rand_seeds[FIO_RAND_TRIM_OFF], use64);
@@ -1032,6 +1025,10 @@ int ioengine_load(struct thread_data *td)
                *(struct thread_data **)td->eo = td;
        }
 
+       if (td->o.odirect)
+               td->io_ops->flags |= FIO_RAWIO;
+
+       td_set_ioengine_flags(td);
        return 0;
 }
 
@@ -1207,7 +1204,7 @@ static char *make_filename(char *buf, size_t buf_size,struct thread_options *o,
        return buf;
 }
 
-int parse_dryrun(void)
+bool parse_dryrun(void)
 {
        return dump_cmdline || parse_only;
 }
@@ -1303,14 +1300,11 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
        if (ioengine_load(td))
                goto err;
 
-       if (o->odirect)
-               td->io_ops->flags |= FIO_RAWIO;
-
        file_alloced = 0;
        if (!o->filename && !td->files_index && !o->read_iolog_file) {
                file_alloced = 1;
 
-               if (o->nr_files == 1 && exists_and_not_file(jobname))
+               if (o->nr_files == 1 && exists_and_not_regfile(jobname))
                        add_file(td, jobname, job_add_num, 0);
                else {
                        for (i = 0; i < o->nr_files; i++)
@@ -1336,7 +1330,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
        if (td->eo)
                *(struct thread_data **)td->eo = NULL;
 
-       if (td->io_ops->flags & FIO_DISKLESSIO) {
+       if (td_ioengine_flagged(td, FIO_DISKLESSIO)) {
                struct fio_file *f;
 
                for_each_file(td, f, i)
@@ -1377,15 +1371,18 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
        if (setup_rate(td))
                goto err;
 
-       if (o->lat_log_file) {
+       if (o->write_lat_log) {
                struct log_params p = {
                        .td = td,
                        .avg_msec = o->log_avg_msec,
+                       .hist_msec = o->log_hist_msec,
+                       .hist_coarseness = o->log_hist_coarseness,
                        .log_type = IO_LOG_TYPE_LAT,
                        .log_offset = o->log_offset,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
+               const char *pre = o->lat_log_file ? o->lat_log_file : o->name;
                const char *suf;
 
                if (p.log_gz_store)
@@ -1393,55 +1390,109 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                else
                        suf = "log";
 
-               gen_log_name(logname, sizeof(logname), "lat", o->lat_log_file,
+               gen_log_name(logname, sizeof(logname), "lat", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->lat_log, &p, logname);
 
-               gen_log_name(logname, sizeof(logname), "slat", o->lat_log_file,
+               gen_log_name(logname, sizeof(logname), "slat", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->slat_log, &p, logname);
 
-               gen_log_name(logname, sizeof(logname), "clat", o->lat_log_file,
+               gen_log_name(logname, sizeof(logname), "clat", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->clat_log, &p, logname);
        }
-       if (o->bw_log_file) {
+
+       if (o->write_hist_log) {
                struct log_params p = {
                        .td = td,
                        .avg_msec = o->log_avg_msec,
+                       .hist_msec = o->log_hist_msec,
+                       .hist_coarseness = o->log_hist_coarseness,
+                       .log_type = IO_LOG_TYPE_HIST,
+                       .log_offset = o->log_offset,
+                       .log_gz = o->log_gz,
+                       .log_gz_store = o->log_gz_store,
+               };
+               const char *pre = o->hist_log_file ? o->hist_log_file : o->name;
+               const char *suf;
+
+#ifndef CONFIG_ZLIB
+               if (td->client_type) {
+                       log_err("fio: --write_hist_log requires zlib in client/server mode\n");
+                       goto err;
+               }
+#endif
+
+               if (p.log_gz_store)
+                       suf = "log.fz";
+               else
+                       suf = "log";
+
+               gen_log_name(logname, sizeof(logname), "clat_hist", pre,
+                               td->thread_number, suf, o->per_job_logs);
+               setup_log(&td->clat_hist_log, &p, logname);
+       }
+
+       if (o->write_bw_log) {
+               struct log_params p = {
+                       .td = td,
+                       .avg_msec = o->log_avg_msec,
+                       .hist_msec = o->log_hist_msec,
+                       .hist_coarseness = o->log_hist_coarseness,
                        .log_type = IO_LOG_TYPE_BW,
                        .log_offset = o->log_offset,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
+               const char *pre = o->bw_log_file ? o->bw_log_file : o->name;
                const char *suf;
 
+               if (fio_option_is_set(o, bw_avg_time))
+                       p.avg_msec = min(o->log_avg_msec, o->bw_avg_time);
+               else
+                       o->bw_avg_time = p.avg_msec;
+       
+               p.hist_msec = o->log_hist_msec;
+               p.hist_coarseness = o->log_hist_coarseness;
+
                if (p.log_gz_store)
                        suf = "log.fz";
                else
                        suf = "log";
 
-               gen_log_name(logname, sizeof(logname), "bw", o->bw_log_file,
+               gen_log_name(logname, sizeof(logname), "bw", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->bw_log, &p, logname);
        }
-       if (o->iops_log_file) {
+       if (o->write_iops_log) {
                struct log_params p = {
                        .td = td,
                        .avg_msec = o->log_avg_msec,
+                       .hist_msec = o->log_hist_msec,
+                       .hist_coarseness = o->log_hist_coarseness,
                        .log_type = IO_LOG_TYPE_IOPS,
                        .log_offset = o->log_offset,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
+               const char *pre = o->iops_log_file ? o->iops_log_file : o->name;
                const char *suf;
 
+               if (fio_option_is_set(o, iops_avg_time))
+                       p.avg_msec = min(o->log_avg_msec, o->iops_avg_time);
+               else
+                       o->iops_avg_time = p.avg_msec;
+       
+               p.hist_msec = o->log_hist_msec;
+               p.hist_coarseness = o->log_hist_coarseness;
+
                if (p.log_gz_store)
                        suf = "log.fz";
                else
                        suf = "log";
 
-               gen_log_name(logname, sizeof(logname), "iops", o->iops_log_file,
+               gen_log_name(logname, sizeof(logname), "iops", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->iops_log, &p, logname);
        }
@@ -1454,18 +1505,19 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        if (is_backend && !recursed)
                                fio_server_send_add_job(td);
 
-                       if (!(td->io_ops->flags & FIO_NOIO)) {
+                       if (!td_ioengine_flagged(td, FIO_NOIO)) {
                                char *c1, *c2, *c3, *c4;
                                char *c5 = NULL, *c6 = NULL;
+                               int i2p = is_power_of_2(o->kb_base);
 
-                               c1 = fio_uint_to_kmg(o->min_bs[DDIR_READ]);
-                               c2 = fio_uint_to_kmg(o->max_bs[DDIR_READ]);
-                               c3 = fio_uint_to_kmg(o->min_bs[DDIR_WRITE]);
-                               c4 = fio_uint_to_kmg(o->max_bs[DDIR_WRITE]);
+                               c1 = num2str(o->min_bs[DDIR_READ], 4, 1, i2p, N2S_BYTE);
+                               c2 = num2str(o->max_bs[DDIR_READ], 4, 1, i2p, N2S_BYTE);
+                               c3 = num2str(o->min_bs[DDIR_WRITE], 4, 1, i2p, N2S_BYTE);
+                               c4 = num2str(o->max_bs[DDIR_WRITE], 4, 1, i2p, N2S_BYTE);
 
                                if (!o->bs_is_seq_rand) {
-                                       c5 = fio_uint_to_kmg(o->min_bs[DDIR_TRIM]);
-                                       c6 = fio_uint_to_kmg(o->max_bs[DDIR_TRIM]);
+                                       c5 = num2str(o->min_bs[DDIR_TRIM], 4, 1, i2p, N2S_BYTE);
+                                       c6 = num2str(o->max_bs[DDIR_TRIM], 4, 1, i2p, N2S_BYTE);
                                }
 
                                log_info("%s: (g=%d): rw=%s, ", td->o.name,
@@ -1473,10 +1525,10 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                                                        ddir_str(o->td_ddir));
 
                                if (o->bs_is_seq_rand)
-                                       log_info("bs(seq/rand)=%s-%s/%s-%s, ",
+                                       log_info("bs=%s-%s,%s-%s, bs_is_seq_rand, ",
                                                        c1, c2, c3, c4);
                                else
-                                       log_info("bs=%s-%s/%s-%s/%s-%s, ",
+                                       log_info("bs=%s-%s,%s-%s,%s-%s, ",
                                                        c1, c2, c3, c4, c5, c6);
 
                                log_info("ioengine=%s, iodepth=%u\n",
@@ -1493,6 +1545,9 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        log_info("...\n");
        }
 
+       if (td_steadystate_init(td))
+               goto err;
+
        /*
         * recurse add identical jobs, clear numjobs and stonewall options
         * as they don't apply to sub-jobs
@@ -1508,6 +1563,8 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                td_new->o.stonewall = 0;
                td_new->o.new_group = 0;
                td_new->subjob_number = numjobs;
+               td_new->o.ss_dur = o->ss_dur * 1000000l;
+               td_new->o.ss_limit = o->ss_limit;
 
                if (file_alloced) {
                        if (td_new->files) {
@@ -1610,7 +1667,7 @@ static int is_empty_or_comment(char *line)
 /*
  * This is our [ini] type file parser.
  */
-int __parse_jobs_ini(struct thread_data *td,
+static int __parse_jobs_ini(struct thread_data *td,
                char *file, int is_buf, int stonewall_flag, int type,
                int nested, char *name, char ***popts, int *aopts, int *nopts)
 {
@@ -1936,14 +1993,15 @@ static void usage(const char *name)
        printf("  --parse-only\t\tParse options only, don't start any IO\n");
        printf("  --output\t\tWrite output to file\n");
        printf("  --runtime\t\tRuntime in seconds\n");
-       printf("  --bandwidth-log\tGenerate per-job bandwidth logs\n");
+       printf("  --bandwidth-log\tGenerate aggregate bandwidth logs\n");
        printf("  --minimal\t\tMinimal (terse) output\n");
-       printf("  --output-format=x\tOutput format (terse,json,json+,normal)\n");
-       printf("  --terse-version=x\tSet terse version output format to 'x'\n");
+       printf("  --output-format=type\tOutput format (terse,json,json+,normal)\n");
+       printf("  --terse-version=type\tSet terse version output format"
+               " (default 3, or 2 or 4)\n");
        printf("  --version\t\tPrint version info and exit\n");
        printf("  --help\t\tPrint this page\n");
        printf("  --cpuclock-test\tPerform test/validation of CPU clock\n");
-       printf("  --crctest\t\tTest speed of checksum functions\n");
+       printf("  --crctest=type\tTest speed of checksum functions\n");
        printf("  --cmdhelp=cmd\t\tPrint command help, \"all\" for all of"
                " them\n");
        printf("  --enghelp=engine\tPrint ioengine help, or list"
@@ -1959,14 +2017,15 @@ static void usage(const char *name)
        printf(" 't' period passed\n");
        printf("  --readonly\t\tTurn on safety read-only checks, preventing"
                " writes\n");
-       printf("  --section=name\tOnly run specified section in job file\n");
+       printf("  --section=name\tOnly run specified section in job file,"
+               " multiple sections can be specified\n");
        printf("  --alloc-size=kb\tSet smalloc pool to this size in kb"
-               " (def 1024)\n");
+               " (def 16384)\n");
        printf("  --warnings-fatal\tFio parser warnings are fatal\n");
        printf("  --max-jobs=nr\t\tMaximum number of threads/processes to support\n");
        printf("  --server=args\t\tStart a backend fio server\n");
        printf("  --daemonize=pidfile\tBackground fio server, write pid to file\n");
-       printf("  --client=hostname\tTalk to remote backend fio server at hostname\n");
+       printf("  --client=hostname\tTalk to remote backend(s) fio server at hostname\n");
        printf("  --remote-config=file\tTell fio server to load this local job file\n");
        printf("  --idle-prof=option\tReport cpu idleness on a system or percpu basis\n"
                "\t\t\t(option=system,percpu) or run unit work\n"
@@ -2050,6 +2109,14 @@ struct debug_level debug_levels[] = {
          .help = "Log compression logging",
          .shift = FD_COMPRESS,
        },
+       { .name = "steadystate",
+         .help = "Steady state detection logging",
+         .shift = FD_STEADYSTATE,
+       },
+       { .name = "helperthread",
+         .help = "Helper thread logging",
+         .shift = FD_HELPERTHREAD,
+       },
        { .name = NULL, },
 };
 
@@ -2219,7 +2286,7 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
        struct thread_data *td = NULL;
        int c, ini_idx = 0, lidx, ret = 0, do_exit = 0, exit_val = 0;
        char *ostr = cmd_optstr;
-       void *pid_file = NULL;
+       char *pid_file = NULL;
        void *cur_client = NULL;
        int backend = 0;
 
@@ -2238,6 +2305,8 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                switch (c) {
                case 'a':
                        smalloc_pool_size = atoi(optarg);
+                       smalloc_pool_size <<= 10;
+                       sinit();
                        break;
                case 't':
                        if (check_str_time(optarg, &def_timeout, 1)) {
@@ -2269,12 +2338,6 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                        output_format = FIO_OUTPUT_TERSE;
                        break;
                case 'F':
-                       if (!optarg) {
-                               log_err("fio: missing --output-format argument\n");
-                               exit_val = 1;
-                               do_exit++;
-                               break;
-                       }
                        if (parse_output_format(optarg)) {
                                log_err("fio: failed parsing output-format\n");
                                exit_val = 1;
@@ -2552,14 +2615,14 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                                    !strncmp(argv[optind], "-", 1))
                                        break;
 
-                               if (fio_client_add_ini_file(cur_client, argv[optind], 0))
+                               if (fio_client_add_ini_file(cur_client, argv[optind], false))
                                        break;
                                optind++;
                        }
                        break;
                case 'R':
                        did_arg = 1;
-                       if (fio_client_add_ini_file(cur_client, optarg, 1)) {
+                       if (fio_client_add_ini_file(cur_client, optarg, true)) {
                                do_exit++;
                                exit_val = 1;
                        }