embed server address, not other end's address
[fio.git] / profile.c
index 3ed9127b9007e6a5978ef8008e90b62bd2bac59c..90c9ea8d14eb6c4d52c5a94bef7eab3e32fc0a0e 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -30,8 +30,11 @@ int load_profile(const char *profile)
 
        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;
        }
 
@@ -42,13 +45,14 @@ int load_profile(const char *profile)
 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++;
@@ -93,6 +97,26 @@ void profile_add_hooks(struct thread_data *td)
        if (!ops)
                return;
 
-       if (ops->io_ops)
+       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);
 }