diff --git a/io_u.c b/io_u.c
index 309969a..136dc04 100644
--- a/io_u.c
+++ b/io_u.c
@@ -310,12 +310,6 @@
 static int fill_io_u(struct thread_data *td, struct io_u *io_u)
 {
 	/*
-	 * If using an iolog, grab next piece if any available.
-	 */
-	if (td->o.read_iolog_file)
-		return read_iolog_get(td, io_u);
-
-	/*
 	 * see if it's time to sync
 	 */
 	if (td->o.fsync_blocks &&
@@ -578,6 +572,50 @@
 	return f;
 }
 
+static int set_io_u_file(struct thread_data *td, struct io_u *io_u)
+{
+	struct fio_file *f;
+
+	do {
+		f = get_next_file(td);
+		if (!f)
+			return 1;
+
+set_file:
+		io_u->file = f;
+		get_file(f);
+
+		if (!fill_io_u(td, io_u))
+			break;
+
+		/*
+		 * td_io_close() does a put_file() as well, so no need to
+		 * do that here.
+		 */
+		io_u->file = NULL;
+		td_io_close_file(td, f);
+		f->flags |= FIO_FILE_DONE;
+		td->nr_done_files++;
+
+		/*
+		 * probably not the right place to do this, but see
+		 * if we need to open a new file
+		 */
+		if (td->nr_open_files < td->o.open_files &&
+		    td->o.open_files != td->o.nr_files) {
+			f = find_next_new_file(td);
+
+			if (!f || td_io_open_file(td, f))
+				return 1;
+
+			goto set_file;
+		}
+	} while (1);
+
+	return 0;
+}
+
+
 struct io_u *__get_io_u(struct thread_data *td)
 {
 	struct io_u *io_u = NULL;
@@ -614,7 +652,6 @@
 {
 	struct fio_file *f;
 	struct io_u *io_u;
-	int ret;
 
 	io_u = __get_io_u(td);
 	if (!io_u)
@@ -626,52 +663,21 @@
 	if (io_u->file)
 		goto out;
 
-	do {
-		f = get_next_file(td);
-		if (!f) {
-			put_io_u(td, io_u);
-			return NULL;
-		}
-
-set_file:
-		io_u->file = f;
-		get_file(f);
-
-		if (!fill_io_u(td, io_u))
-			break;
-
-		/*
-		 * td_io_close() does a put_file() as well, so no need to
-		 * do that here.
-		 */
-		io_u->file = NULL;
-		td_io_close_file(td, f);
-		f->flags |= FIO_FILE_DONE;
-		td->nr_done_files++;
-
-		/*
-		 * probably not the right place to do this, but see
-		 * if we need to open a new file
-		 */
-		if (td->nr_open_files < td->o.open_files &&
-		    td->o.open_files != td->o.nr_files) {
-			f = find_next_new_file(td);
-
-			if (!f || (ret = td_io_open_file(td, f))) {
-				put_io_u(td, io_u);
-				return NULL;
-			}
-			goto set_file;
-		}
-	} while (1);
-
-	assert(io_u->file->flags & FIO_FILE_OPEN);
+	/*
+	 * If using an iolog, grab next piece if any available.
+	 */
+	if (td->o.read_iolog_file) {
+		if (read_iolog_get(td, io_u))
+			goto err_put;
+	} else if (set_io_u_file(td, io_u))
+		goto err_put;
+	
+	f = io_u->file;
+	assert(f->flags & FIO_FILE_OPEN);
 
 	if (io_u->ddir != DDIR_SYNC) {
-		if (!io_u->buflen) {
-			put_io_u(td, io_u);
-			return NULL;
-		}
+		if (!io_u->buflen)
+			goto err_put;
 
 		f->last_pos = io_u->offset + io_u->buflen;
 
@@ -687,13 +693,13 @@
 	io_u->xfer_buf = io_u->buf;
 	io_u->xfer_buflen = io_u->buflen;
 
-	if (td_io_prep(td, io_u)) {
-		put_io_u(td, io_u);
-		return NULL;
+	if (!td_io_prep(td, io_u)) {
+		fio_gettime(&io_u->start_time, NULL);
+		return io_u;
 	}
-
-	fio_gettime(&io_u->start_time, NULL);
-	return io_u;
+err_put:
+	put_io_u(td, io_u);
+	return NULL;
 }
 
 void io_u_log_error(struct thread_data *td, struct io_u *io_u)
diff --git a/log.c b/log.c
index 07ba950..b5c6f69 100644
--- a/log.c
+++ b/log.c
@@ -61,15 +61,11 @@
 	if (!list_empty(&td->io_log_list)) {
 		ipo = list_entry(td->io_log_list.next, struct io_piece, list);
 		list_del(&ipo->list);
-		io_u->offset = ipo->offset;
-		io_u->buflen = ipo->len;
-		io_u->ddir = ipo->ddir;
-		io_u->file = ipo->file;
 
 		/*
 		 * invalid ddir, this is a file action
 		 */
-		if (io_u->ddir == DDIR_INVAL) {
+		if (ipo->ddir == DDIR_INVAL) {
 			struct fio_file *f = &td->files[ipo->fileno];
 
 			if (ipo->file_action == FIO_LOG_OPEN_FILE) {
@@ -83,14 +79,15 @@
 			}
 		}
 
+		io_u->offset = ipo->offset;
+		io_u->buflen = ipo->len;
+		io_u->ddir = ipo->ddir;
+		io_u->file = &td->files[ipo->fileno];
+		get_file(io_u->file);
+
 		if (ipo->delay)
 			iolog_delay(td, ipo->delay);
 
-		/*
-		 * work around, this needs a format change to work for > 1 file
-		 */
-		if (!io_u->file)
-			io_u->file = &td->files[0];
 		free(ipo);
 		return 0;
 	}
