• Home
  • Raw
  • Download

Lines Matching refs:io_u

24 	struct io_u **io_us;
34 static int fio_syncio_prep(struct thread_data *td, struct io_u *io_u) in fio_syncio_prep() argument
36 struct fio_file *f = io_u->file; in fio_syncio_prep()
38 if (!ddir_rw(io_u->ddir)) in fio_syncio_prep()
41 if (LAST_POS(f) != -1ULL && LAST_POS(f) == io_u->offset) in fio_syncio_prep()
44 if (lseek(f->fd, io_u->offset, SEEK_SET) == -1) { in fio_syncio_prep()
52 static int fio_io_end(struct thread_data *td, struct io_u *io_u, int ret) in fio_io_end() argument
54 if (io_u->file && ret >= 0 && ddir_rw(io_u->ddir)) in fio_io_end()
55 LAST_POS(io_u->file) = io_u->offset + ret; in fio_io_end()
57 if (ret != (int) io_u->xfer_buflen) { in fio_io_end()
59 io_u->resid = io_u->xfer_buflen - ret; in fio_io_end()
60 io_u->error = 0; in fio_io_end()
63 io_u->error = errno; in fio_io_end()
66 if (io_u->error) { in fio_io_end()
67 io_u_log_error(td, io_u); in fio_io_end()
68 td_verror(td, io_u->error, "xfer"); in fio_io_end()
75 static int fio_pvsyncio_queue(struct thread_data *td, struct io_u *io_u) in fio_pvsyncio_queue() argument
79 struct fio_file *f = io_u->file; in fio_pvsyncio_queue()
82 fio_ro_check(td, io_u); in fio_pvsyncio_queue()
84 iov->iov_base = io_u->xfer_buf; in fio_pvsyncio_queue()
85 iov->iov_len = io_u->xfer_buflen; in fio_pvsyncio_queue()
87 if (io_u->ddir == DDIR_READ) in fio_pvsyncio_queue()
88 ret = preadv(f->fd, iov, 1, io_u->offset); in fio_pvsyncio_queue()
89 else if (io_u->ddir == DDIR_WRITE) in fio_pvsyncio_queue()
90 ret = pwritev(f->fd, iov, 1, io_u->offset); in fio_pvsyncio_queue()
91 else if (io_u->ddir == DDIR_TRIM) { in fio_pvsyncio_queue()
92 do_io_u_trim(td, io_u); in fio_pvsyncio_queue()
95 ret = do_io_u_sync(td, io_u); in fio_pvsyncio_queue()
97 return fio_io_end(td, io_u, ret); in fio_pvsyncio_queue()
101 static int fio_psyncio_queue(struct thread_data *td, struct io_u *io_u) in fio_psyncio_queue() argument
103 struct fio_file *f = io_u->file; in fio_psyncio_queue()
106 fio_ro_check(td, io_u); in fio_psyncio_queue()
108 if (io_u->ddir == DDIR_READ) in fio_psyncio_queue()
109 ret = pread(f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset); in fio_psyncio_queue()
110 else if (io_u->ddir == DDIR_WRITE) in fio_psyncio_queue()
111 ret = pwrite(f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset); in fio_psyncio_queue()
112 else if (io_u->ddir == DDIR_TRIM) { in fio_psyncio_queue()
113 do_io_u_trim(td, io_u); in fio_psyncio_queue()
116 ret = do_io_u_sync(td, io_u); in fio_psyncio_queue()
118 return fio_io_end(td, io_u, ret); in fio_psyncio_queue()
121 static int fio_syncio_queue(struct thread_data *td, struct io_u *io_u) in fio_syncio_queue() argument
123 struct fio_file *f = io_u->file; in fio_syncio_queue()
126 fio_ro_check(td, io_u); in fio_syncio_queue()
128 if (io_u->ddir == DDIR_READ) in fio_syncio_queue()
129 ret = read(f->fd, io_u->xfer_buf, io_u->xfer_buflen); in fio_syncio_queue()
130 else if (io_u->ddir == DDIR_WRITE) in fio_syncio_queue()
131 ret = write(f->fd, io_u->xfer_buf, io_u->xfer_buflen); in fio_syncio_queue()
132 else if (io_u->ddir == DDIR_TRIM) { in fio_syncio_queue()
133 do_io_u_trim(td, io_u); in fio_syncio_queue()
136 ret = do_io_u_sync(td, io_u); in fio_syncio_queue()
138 return fio_io_end(td, io_u, ret); in fio_syncio_queue()
158 static struct io_u *fio_vsyncio_event(struct thread_data *td, int event) in fio_vsyncio_event()
165 static int fio_vsyncio_append(struct thread_data *td, struct io_u *io_u) in fio_vsyncio_append() argument
169 if (ddir_sync(io_u->ddir)) in fio_vsyncio_append()
172 if (io_u->offset == sd->last_offset && io_u->file == sd->last_file && in fio_vsyncio_append()
173 io_u->ddir == sd->last_ddir) in fio_vsyncio_append()
179 static void fio_vsyncio_set_iov(struct syncio_data *sd, struct io_u *io_u, in fio_vsyncio_set_iov() argument
182 sd->io_us[idx] = io_u; in fio_vsyncio_set_iov()
183 sd->iovecs[idx].iov_base = io_u->xfer_buf; in fio_vsyncio_set_iov()
184 sd->iovecs[idx].iov_len = io_u->xfer_buflen; in fio_vsyncio_set_iov()
185 sd->last_offset = io_u->offset + io_u->xfer_buflen; in fio_vsyncio_set_iov()
186 sd->last_file = io_u->file; in fio_vsyncio_set_iov()
187 sd->last_ddir = io_u->ddir; in fio_vsyncio_set_iov()
188 sd->queued_bytes += io_u->xfer_buflen; in fio_vsyncio_set_iov()
192 static int fio_vsyncio_queue(struct thread_data *td, struct io_u *io_u) in fio_vsyncio_queue() argument
196 fio_ro_check(td, io_u); in fio_vsyncio_queue()
198 if (!fio_vsyncio_append(td, io_u)) { in fio_vsyncio_queue()
206 if (ddir_sync(io_u->ddir)) { in fio_vsyncio_queue()
207 int ret = do_io_u_sync(td, io_u); in fio_vsyncio_queue()
209 return fio_io_end(td, io_u, ret); in fio_vsyncio_queue()
214 fio_vsyncio_set_iov(sd, io_u, 0); in fio_vsyncio_queue()
222 fio_vsyncio_set_iov(sd, io_u, sd->queued); in fio_vsyncio_queue()
235 struct io_u *io_u; in fio_vsyncio_end() local
247 io_u = sd->io_us[i]; in fio_vsyncio_end()
250 io_u->error = err; in fio_vsyncio_end()
255 if (this_io > io_u->xfer_buflen) in fio_vsyncio_end()
256 this_io = io_u->xfer_buflen; in fio_vsyncio_end()
258 io_u->resid = io_u->xfer_buflen - this_io; in fio_vsyncio_end()
259 io_u->error = 0; in fio_vsyncio_end()
310 sd->io_us = malloc(td->o.iodepth * sizeof(struct io_u *)); in fio_vsyncio_init()