From 800334db17a22029553488b41a5ede8af909c66d Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 19 Jul 2017 12:27:57 -0700 Subject: [PATCH] Correctly detect whether ioengine_load can exit early Just the presence of io_ops isn't enough - the requested ioengine may have changed. Signed-off-by: Ben Walker --- init.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/init.c b/init.c index 9b2b63d6..90cc0bcf 100644 --- a/init.c +++ b/init.c @@ -1000,16 +1000,24 @@ int ioengine_load(struct thread_data *td) { const char *engine; - /* - * Engine has already been loaded. - */ - if (td->io_ops) - return 0; if (!td->o.ioengine) { log_err("fio: internal fault, no IO engine specified\n"); return 1; } + if (td->io_ops) { + /* An engine is loaded, but the requested ioengine + * may have changed. + */ + if (!strcmp(td->io_ops->name, td->o.ioengine)) { + /* The right engine is already loaded */ + return 0; + } + + /* Unload the old engine. */ + free_ioengine(td); + } + engine = get_engine_name(td->o.ioengine); td->io_ops = load_ioengine(td, engine); if (!td->io_ops) { @@ -2530,7 +2538,6 @@ int parse_cmd_line(int argc, char *argv[], int client_type) } if (!ret && !strcmp(opt, "ioengine")) { - free_ioengine(td); if (ioengine_load(td)) { put_job(td); td = NULL; -- 2.25.1