+int add_option(struct fio_option *o)
+{
+ struct fio_option *__o;
+ int opt_index = 0;
+
+ __o = options;
+ while (__o->name) {
+ opt_index++;
+ __o++;
+ }
+
+ memcpy(&options[opt_index], o, sizeof(*o));
+ return 0;
+}
+
+void invalidate_profile_options(const char *prof_name)
+{
+ struct fio_option *o;
+
+ o = options;
+ while (o->name) {
+ if (o->prof_name && !strcmp(o->prof_name, prof_name)) {
+ o->type = FIO_OPT_INVALID;
+ o->prof_name = NULL;
+ }
+ o++;
+ }
+}
+
+void add_opt_posval(const char *optname, const char *ival, const char *help)
+{
+ struct fio_option *o;
+ unsigned int i;
+
+ o = find_option(options, optname);
+ if (!o)
+ return;
+
+ for (i = 0; i < PARSE_MAX_VP; i++) {
+ if (o->posval[i].ival)
+ continue;
+
+ o->posval[i].ival = ival;
+ o->posval[i].help = help;
+ break;
+ }
+}
+
+void del_opt_posval(const char *optname, const char *ival)
+{
+ struct fio_option *o;
+ unsigned int i;
+
+ o = find_option(options, optname);
+ if (!o)
+ return;
+
+ for (i = 0; i < PARSE_MAX_VP; i++) {
+ if (!o->posval[i].ival)
+ continue;
+ if (strcmp(o->posval[i].ival, ival))
+ continue;
+
+ o->posval[i].ival = NULL;
+ o->posval[i].help = NULL;
+ }
+}
+
+void fio_options_free(struct thread_data *td)