ret = -io_u->error;
else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
+ struct fio_file *f = io_u->file;
/*
* zero read, fail
io_u->xfer_buflen = io_u->resid;
io_u->xfer_buf += bytes;
io_u->offset += bytes;
+ f->last_completed_pos = io_u->offset;
- if (io_u->offset == io_u->file->real_file_size)
+ if (io_u->offset == f->real_file_size)
goto sync_done;
requeue_io_u(td, &io_u);
ret = -io_u->error;
else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
+ struct fio_file *f = io_u->file;
/*
* zero read, fail
io_u->xfer_buflen = io_u->resid;
io_u->xfer_buf += bytes;
io_u->offset += bytes;
+ f->last_completed_pos = io_u->offset;
- if (io_u->offset == io_u->file->real_file_size)
+ if (io_u->offset == f->real_file_size)
goto sync_done;
requeue_io_u(td, &io_u);
void *buf;
unsigned long buflen;
unsigned long long offset;
+ unsigned long long endpos;
/*
* IO engine state, may be different from above when we get
/*
* Set io data pointers.
*/
+ io_u->endpos = io_u->offset + io_u->buflen;
out:
io_u->xfer_buf = io_u->buf;
io_u->xfer_buflen = io_u->buflen;
td->zone_bytes += bytes;
td->this_io_bytes[idx] += bytes;
- io_u->file->last_completed_pos = io_u->offset + io_u->buflen;
+ io_u->file->last_completed_pos = io_u->endpos;
msec = mtime_since(&io_u->issue_time, &icd->time);