X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fsg.c;h=72bbc4e82b99c9d8666f4c875fb0c1bf6f95d8e8;hp=99c5856a5082d816863af2b693c3effb100edb48;hb=28cfeb6851703cf12b54b3a06bf3ff611198933e;hpb=2dc1bbeb58edc85f2829eed6729862c438ea2353 diff --git a/engines/sg.c b/engines/sg.c index 99c5856a..72bbc4e8 100644 --- a/engines/sg.c +++ b/engines/sg.c @@ -12,7 +12,6 @@ #include #include "../fio.h" -#include "../os.h" #ifdef FIO_HAVE_SGIO @@ -62,18 +61,14 @@ static int pollin_events(struct pollfd *pfds, int fds) return 0; } -static int fio_sgio_getevents(struct thread_data *td, int min, int max, - struct timespec fio_unused *t) +static int fio_sgio_getevents(struct thread_data *td, unsigned int min, + unsigned int max, struct timespec fio_unused *t) { - /* - * normally hard coding &td->files[0] is a bug that needs to be fixed, - * but it's ok here as all files should point to the same device. - */ - struct fio_file *f = &td->files[0]; struct sgio_data *sd = td->io_ops->data; int left = max, ret, r = 0; void *buf = sd->sgbuf; unsigned int i, events; + struct fio_file *f; /* * Fill in the file descriptors @@ -166,7 +161,7 @@ static int fio_sgio_ioctl_doio(struct thread_data *td, ret = ioctl(f->fd, SG_IO, hdr); if (ret < 0) - return -errno; + return ret; return FIO_Q_COMPLETED; } @@ -178,12 +173,12 @@ static int fio_sgio_rw_doio(struct fio_file *f, struct io_u *io_u, int sync) ret = write(f->fd, hdr, sizeof(*hdr)); if (ret < 0) - return errno; + return ret; if (sync) { ret = read(f->fd, hdr, sizeof(*hdr)); if (ret < 0) - return -errno; + return ret; return FIO_Q_COMPLETED; } @@ -247,6 +242,8 @@ static int fio_sgio_queue(struct thread_data *td, struct io_u *io_u) struct sg_io_hdr *hdr = &io_u->hdr; int ret; + fio_ro_check(td, io_u); + ret = fio_sgio_doio(td, io_u, io_u->ddir == DDIR_SYNC); if (ret < 0) @@ -280,7 +277,7 @@ static int fio_sgio_get_bs(struct thread_data *td, unsigned int *bs) int ret; io_u = __get_io_u(td); - io_u->file = &td->files[0]; + io_u->file = td->files[0]; assert(io_u); hdr = &io_u->hdr; @@ -390,8 +387,8 @@ static int fio_sgio_open(struct thread_data *td, struct fio_file *f) if (ret) return ret; - if (!sd->type_checked && fio_sgio_type_check(td, f)) { - generic_close_file(td, f); + if (sd && !sd->type_checked && fio_sgio_type_check(td, f)) { + ret = generic_close_file(td, f); return 1; }