X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengines.c;h=0c631e85e98806921568900f564295fa1e6e4a6e;hp=54aa5a623aafd42541dd1affdd0498c6014dba80;hb=81647a9a229b92635062e0a1ee570997634b7848;hpb=4fedf59af77492b2f9f70dedee6b2c7941ac1fe0 diff --git a/ioengines.c b/ioengines.c index 54aa5a62..0c631e85 100644 --- a/ioengines.c +++ b/ioengines.c @@ -125,26 +125,29 @@ static struct ioengine_ops *dlopen_ioengine(struct thread_data *td, struct ioengine_ops *load_ioengine(struct thread_data *td) { - struct ioengine_ops *ops; - char engine[64]; - char *name; - - name = td->o.ioengine_so_path ?: td->o.ioengine; + struct ioengine_ops *ops = NULL; + const char *name = NULL; - dprint(FD_IO, "load ioengine %s\n", name); + if (strcmp(td->o.ioengine, "external")) { + char engine[64]; - engine[sizeof(engine) - 1] = '\0'; - strncpy(engine, name, sizeof(engine) - 1); + name = td->o.ioengine; + engine[sizeof(engine) - 1] = '\0'; + strncpy(engine, name, sizeof(engine) - 1); - /* - * linux libaio has alias names, so convert to what we want - */ - if (!strncmp(engine, "linuxaio", 8) || !strncmp(engine, "aio", 3)) - strcpy(engine, "libaio"); + /* + * linux libaio has alias names, so convert to what we want + */ + if (!strncmp(engine, "linuxaio", 8) || !strncmp(engine, "aio", 3)) + strcpy(engine, "libaio"); - ops = find_ioengine(engine); - if (!ops) + dprint(FD_IO, "load ioengine %s\n", engine); + ops = find_ioengine(engine); + } else if (td->o.ioengine_so_path) { + name = td->o.ioengine_so_path; ops = dlopen_ioengine(td, name); + } else + log_err("fio: missing external ioengine path\n"); if (!ops) { log_err("fio: engine %s not loadable\n", name);