X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fsyslet-rw.c;h=0b2497a7e8c2029660825a1dc4aeb7ff533a64bb;hp=40298cbd24496a3811ee28950d4def7bf22df01a;hb=1760e679cfb99d95e783ba1c0a936b88c8a3d706;hpb=b5af82930ccfd7dda6a1b11794efb452eb76d8dc diff --git a/engines/syslet-rw.c b/engines/syslet-rw.c index 40298cbd..0b2497a7 100644 --- a/engines/syslet-rw.c +++ b/engines/syslet-rw.c @@ -1,5 +1,8 @@ /* - * read/write() engine that uses syslet to be async + * syslet engine + * + * IO engine that does regular pread(2)/pwrite(2) to transfer data, but + * with syslets to make the execution async. * */ #include @@ -7,12 +10,21 @@ #include #include #include +#include #include "../fio.h" #include "../os.h" #ifdef FIO_HAVE_SYSLET +#ifdef __NR_pread64 +#define __NR_fio_pread __NR_pread64 +#define __NR_fio_pwrite __NR_pwrite64 +#else +#define __NR_fio_pread __NR_pread +#define __NR_fio_pwrite __NR_pwrite +#endif + struct syslet_data { struct io_u **events; unsigned int nr_events; @@ -46,7 +58,7 @@ static void fio_syslet_complete_atom(struct thread_data *td, io_u = atom->private; ret = *atom->ret_ptr; - if (ret > 0) + if (ret >= 0) io_u->resid = io_u->xfer_buflen - ret; else if (ret < 0) io_u->error = ret; @@ -154,9 +166,9 @@ static void fio_syslet_prep_rw(struct io_u *io_u, struct fio_file *f) * prepare rw */ if (io_u->ddir == DDIR_READ) - nr = __NR_pread64; + nr = __NR_fio_pread; else - nr = __NR_pwrite64; + nr = __NR_fio_pwrite; init_atom(&io_u->req.atom, nr, &f->fd, &io_u->xfer_buf, &io_u->xfer_buflen, &io_u->offset, &io_u->req.ret, 0, io_u);