ops = find_profile(profile);
if (ops) {
- ops->prep_cmd();
- add_job_opts(ops->cmdline);
+ if (ops->prep_cmd()) {
+ log_err("fio: profile %s prep failed\n", profile);
+ return 1;
+ }
+ add_job_opts(ops->cmdline, FIO_CLIENT_TYPE_CLI);
return 0;
}
static int add_profile_options(struct profile_ops *ops)
{
struct fio_option *o;
-
+
if (!ops->options)
return 0;
o = ops->options;
while (o->name) {
o->prof_name = ops->name;
+ o->prof_opts = ops->opt_data;
if (add_option(o))
return 1;
o++;
if (!ops)
return;
- td->fill_io_u_off = ops->fill_io_u_off;
- td->fill_io_u_size = ops->fill_io_u_size;
+ if (ops->io_ops) {
+ td->prof_io_ops = *ops->io_ops;
+ td->flags |= TD_F_PROFILE_OPS;
+ }
+}
+
+int profile_td_init(struct thread_data *td)
+{
+ struct prof_io_ops *ops = &td->prof_io_ops;
+
+ if (ops->td_init)
+ return ops->td_init(td);
+
+ return 0;
+}
+
+void profile_td_exit(struct thread_data *td)
+{
+ struct prof_io_ops *ops = &td->prof_io_ops;
+
+ if (ops->td_exit)
+ ops->td_exit(td);
}