#include <sys/poll.h>
#include "../fio.h"
-#include "../os.h"
#ifdef FIO_HAVE_SGIO
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
ret = ioctl(f->fd, SG_IO, hdr);
if (ret < 0)
- return -errno;
+ return ret;
return FIO_Q_COMPLETED;
}
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;
}
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)
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;
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;
}