We always do blocking io, so regard nothing read/written as an error
condition.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
case FIO_Q_COMPLETED:
if (io_u->error)
ret = -io_u->error;
- else if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
+ else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
+ /*
+ * zero read, fail
+ */
+ if (!bytes) {
+ td_verror(td, ENODATA, "full resid");
+ put_io_u(td, io_u);
+ break;
+ }
io_u->xfer_buflen = io_u->resid;
io_u->xfer_buf += bytes;
requeue_io_u(td, &io_u);
case FIO_Q_COMPLETED:
if (io_u->error)
ret = -io_u->error;
- else if (io_u->xfer_buflen != io_u->resid && io_u->resid) {
+ else if (io_u->resid) {
int bytes = io_u->xfer_buflen - io_u->resid;
+ /*
+ * zero read, fail
+ */
+ if (!bytes) {
+ td_verror(td, ENODATA, "full resid");
+ put_io_u(td, io_u);
+ break;
+ }
+
io_u->xfer_buflen = io_u->resid;
io_u->xfer_buf += bytes;
requeue_io_u(td, &io_u);