Merge branch 'master' of ssh://brick.kernel.dk/data/git/fio
diff --git a/fio.c b/fio.c
index bf903d9..45ed354 100644
--- a/fio.c
+++ b/fio.c
@@ -291,9 +291,8 @@
 		}
 
 		io_u->end_io = verify_io_u;
-requeue:
-		ret = td_io_queue(td, io_u);
 
+		ret = td_io_queue(td, io_u);
 		switch (ret) {
 		case FIO_Q_COMPLETED:
 			if (io_u->error)
@@ -303,11 +302,12 @@
 
 				io_u->xfer_buflen = io_u->resid;
 				io_u->xfer_buf += bytes;
-				goto requeue;
+				requeue_io_u(td, &io_u);
+			} else {
+				ret = io_u_sync_complete(td, io_u);
+				if (ret < 0)
+					break;
 			}
-			ret = io_u_sync_complete(td, io_u);
-			if (ret < 0)
-				break;
 			continue;
 		case FIO_Q_QUEUED:
 			break;
@@ -414,9 +414,8 @@
 			put_io_u(td, io_u);
 			break;
 		}
-requeue:
-		ret = td_io_queue(td, io_u);
 
+		ret = td_io_queue(td, io_u);
 		switch (ret) {
 		case FIO_Q_COMPLETED:
 			if (io_u->error)
@@ -426,12 +425,13 @@
 
 				io_u->xfer_buflen = io_u->resid;
 				io_u->xfer_buf += bytes;
-				goto requeue;
+				requeue_io_u(td, &io_u);
+			} else {
+				fio_gettime(&comp_time, NULL);
+				bytes_done = io_u_sync_complete(td, io_u);
+				if (bytes_done < 0)
+					ret = bytes_done;
 			}
-			fio_gettime(&comp_time, NULL);
-			bytes_done = io_u_sync_complete(td, io_u);
-			if (bytes_done < 0)
-				ret = bytes_done;
 			break;
 		case FIO_Q_QUEUED:
 			/*
diff --git a/ioengines.c b/ioengines.c
index a7ccad6..a395da1 100644
--- a/ioengines.c
+++ b/ioengines.c
@@ -195,6 +195,9 @@
 	assert((io_u->flags & IO_U_F_FLIGHT) == 0);
 	io_u->flags |= IO_U_F_FLIGHT;
 
+	io_u->error = 0;
+	io_u->resid = 0;
+
 	if (td->io_ops->flags & FIO_SYNCIO) {
 		fio_gettime(&io_u->issue_time, NULL);