projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Link in known io engines
[fio.git]
/
engines
/
fio-engine-sg.c
diff --git
a/engines/fio-engine-sg.c
b/engines/fio-engine-sg.c
index fafc326968df8019f7485880732d13cbc7484b84..9c5037f5d11fb0391cc25eda994a44366e3297ce 100644
(file)
--- a/
engines/fio-engine-sg.c
+++ b/
engines/fio-engine-sg.c
@@
-8,8
+8,9
@@
#include <errno.h>
#include <assert.h>
#include <sys/poll.h>
#include <errno.h>
#include <assert.h>
#include <sys/poll.h>
-#include "fio.h"
-#include "os.h"
+
+#include "../fio.h"
+#include "../os.h"
#ifdef FIO_HAVE_SGIO
#ifdef FIO_HAVE_SGIO
@@
-266,29
+267,32
@@
static int fio_sgio_init(struct thread_data *td)
int ret;
sd = malloc(sizeof(*sd));
int ret;
sd = malloc(sizeof(*sd));
+ memset(sd, 0, sizeof(*sd));
sd->cmds = malloc(td->iodepth * sizeof(struct sgio_cmd));
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 *));
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);
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);
}
} 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)
}
ret = fio_sgio_get_bs(td, &bs);
if (ret)
-
return ret
;
+
goto err
;
} else {
log_err("ioengine sgio only works on block devices\n");
} else {
log_err("ioengine sgio only works on block devices\n");
-
return 1
;
+
goto err
;
}
sd->bs = bs;
}
sd->bs = bs;
@@
-303,9
+307,14
@@
static int fio_sgio_init(struct thread_data *td)
*/
td->override_sync = 1;
return 0;
*/
td->override_sync = 1;
return 0;
+err:
+ free(sd->events);
+ free(sd->cmds);
+ free(sd);
+ return 1;
}
}
-struct ioengine_ops ioengine = {
+st
atic st
ruct ioengine_ops ioengine = {
.name = "sg",
.version = FIO_IOOPS_VERSION,
.init = fio_sgio_init,
.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;
}
return 1;
}
-struct ioengine_ops ioengine = {
+st
atic st
ruct ioengine_ops ioengine = {
.name = "sgio",
.version = FIO_IOOPS_VERSION,
.init = fio_sgio_init,
};
#endif
.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);
+}