* to make sure we don't have conflicts, and initializes various
* members of td.
*/
-static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
+static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
+ int recursed)
{
unsigned int i;
char fname[PATH_MAX];
if (!terse_output) {
if (!job_add_num) {
- if (is_backend)
+ if (is_backend && !recursed)
fio_server_send_add_job(&td->o, td->io_ops->name);
if (!strcmp(td->io_ops->name, "cpuio")) {
job_add_num = numjobs - 1;
- if (add_job(td_new, jobname, job_add_num))
+ if (add_job(td_new, jobname, job_add_num, 1))
goto err;
}
if (!strncmp(o[i], "name", 4)) {
in_global = 0;
if (td)
- add_job(td, jobname, 0);
+ add_job(td, jobname, 0, 0);
td = NULL;
sprintf(jobname, "%s", o[i] + 5);
}
}
if (td)
- add_job(td, jobname, 0);
+ add_job(td, jobname, 0, 0);
}
static int skip_this_section(const char *name)
for (i = 0; i < num_opts; i++)
log_info("--%s ", opts[i]);
- ret = add_job(td, name, 0);
+ ret = add_job(td, name, 0, 0);
} else {
log_err("fio: job %s dropped\n", name);
put_job(td);
char *val = optarg;
if (!strncmp(opt, "name", 4) && td) {
- ret = add_job(td, td->o.name ?: "fio", 0);
+ ret = add_job(td, td->o.name ?: "fio", 0, 0);
if (ret)
return 0;
td = NULL;
if (td) {
if (!ret)
- ret = add_job(td, td->o.name ?: "fio", 0);
+ ret = add_job(td, td->o.name ?: "fio", 0, 0);
}
while (!ret && optind < argc) {
return 0;
}
+extern int fio_check_options(struct thread_options *);
+
int parse_options(int argc, char *argv[])
{
int job_files, i;
if (fio_init_options())
return 1;
+ if (fio_test_cconv(&def_thread.o))
+ log_err("fio: failed internal cconv test\n");
job_files = parse_cmd_line(argc, argv);