X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Ffio-engine-sg.c;h=9c5037f5d11fb0391cc25eda994a44366e3297ce;hp=fafc326968df8019f7485880732d13cbc7484b84;hb=5f350952eff89948bfbf1eb6ac4d3d08a9109581;hpb=34cfcdafa994a0a75120e498c51eda08bde5df72 diff --git a/engines/fio-engine-sg.c b/engines/fio-engine-sg.c index fafc3269..9c5037f5 100644 --- a/engines/fio-engine-sg.c +++ b/engines/fio-engine-sg.c @@ -8,8 +8,9 @@ #include #include #include -#include "fio.h" -#include "os.h" + +#include "../fio.h" +#include "../os.h" #ifdef FIO_HAVE_SGIO @@ -266,29 +267,32 @@ static int fio_sgio_init(struct thread_data *td) int ret; sd = malloc(sizeof(*sd)); + memset(sd, 0, sizeof(*sd)); sd->cmds = malloc(td->iodepth * sizeof(struct sgio_cmd)); + memset(sd->cmds, 0, td->iodepth * sizeof(struct sgio_cmd)); sd->events = malloc(td->iodepth * sizeof(struct io_u *)); + memset(sd->events, 0, td->iodepth * sizeof(struct io_u *)); td->io_ops->data = sd; if (td->filetype == FIO_TYPE_BD) { if (ioctl(f->fd, BLKSSZGET, &bs) < 0) { td_verror(td, errno); - return 1; + goto err; } } else if (td->filetype == FIO_TYPE_CHAR) { int version; if (ioctl(f->fd, SG_GET_VERSION_NUM, &version) < 0) { td_verror(td, errno); - return 1; + goto err; } ret = fio_sgio_get_bs(td, &bs); if (ret) - return ret; + goto err; } else { log_err("ioengine sgio only works on block devices\n"); - return 1; + goto err; } sd->bs = bs; @@ -303,9 +307,14 @@ static int fio_sgio_init(struct thread_data *td) */ td->override_sync = 1; return 0; +err: + free(sd->events); + free(sd->cmds); + free(sd); + return 1; } -struct ioengine_ops ioengine = { +static struct ioengine_ops ioengine = { .name = "sg", .version = FIO_IOOPS_VERSION, .init = fio_sgio_init, @@ -330,10 +339,20 @@ static int fio_sgio_init(struct thread_data fio_unused *td) return 1; } -struct ioengine_ops ioengine = { +static struct ioengine_ops ioengine = { .name = "sgio", .version = FIO_IOOPS_VERSION, .init = fio_sgio_init, }; #endif + +static void fio_init fio_sgio_register(void) +{ + register_ioengine(&ioengine); +} + +static void fio_exit fio_sgio_unregister(void) +{ + unregister_ioengine(&ioengine); +}