X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fsg.c;h=57c3834add235362acdd18ee672c176456ae9e16;hp=8856c6f9dc6c98c874c0a51dcd90daf51fadfacf;hb=a1c58075279454a91ec43366846b93e8dcf9753c;hpb=946ff86535e86f9b1be618bd4b8ae925343f1df3 diff --git a/engines/sg.c b/engines/sg.c index 8856c6f9..57c3834a 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,8 +61,8 @@ 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) { struct sgio_data *sd = td->io_ops->data; int left = max, ret, r = 0; @@ -241,9 +240,14 @@ static int fio_sgio_prep(struct thread_data *td, struct io_u *io_u) static int fio_sgio_queue(struct thread_data *td, struct io_u *io_u) { struct sg_io_hdr *hdr = &io_u->hdr; - int ret; + int ret, do_sync = 0; + + fio_ro_check(td, io_u); + + if (td->o.sync_io || td->o.odirect || ddir_sync(io_u->ddir)) + do_sync = 1; - ret = fio_sgio_doio(td, io_u, io_u->ddir == DDIR_SYNC); + ret = fio_sgio_doio(td, io_u, do_sync); if (ret < 0) io_u->error = errno; @@ -276,7 +280,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; @@ -310,8 +314,6 @@ static void fio_sgio_cleanup(struct thread_data *td) free(sd->pfds); free(sd->sgbuf); free(sd); - - td->io_ops->data = NULL; } } @@ -363,7 +365,7 @@ static int fio_sgio_type_check(struct thread_data *td, struct fio_file *f) if (ret) return 1; } else { - log_err("ioengine sgio only works on block devices\n"); + log_err("ioengine sg only works on block devices\n"); return 1; } @@ -387,7 +389,7 @@ static int fio_sgio_open(struct thread_data *td, struct fio_file *f) return ret; if (sd && !sd->type_checked && fio_sgio_type_check(td, f)) { - generic_close_file(td, f); + ret = generic_close_file(td, f); return 1; } @@ -405,6 +407,7 @@ static struct ioengine_ops ioengine = { .cleanup = fio_sgio_cleanup, .open_file = fio_sgio_open, .close_file = generic_close_file, + .get_file_size = generic_get_file_size, .flags = FIO_SYNCIO | FIO_RAWIO, }; @@ -417,12 +420,12 @@ static struct ioengine_ops ioengine = { */ static int fio_sgio_init(struct thread_data fio_unused *td) { - fprintf(stderr, "fio: sgio not available\n"); + fprintf(stderr, "fio: ioengine sg not available\n"); return 1; } static struct ioengine_ops ioengine = { - .name = "sgio", + .name = "sg", .version = FIO_IOOPS_VERSION, .init = fio_sgio_init, };