engines/windowsaio: fix silly thinky on IO thread creation
[fio.git] / engines / e4defrag.c
index e53636eb26e382b3e318abef48bd3b211d2695f1..0a0004d0477fc795dd415d417a6c935f4cfb3131 100644 (file)
@@ -9,11 +9,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/uio.h>
 #include <errno.h>
-#include <assert.h>
 #include <fcntl.h>
 
 #include "../fio.h"
@@ -76,7 +72,7 @@ static int fio_e4defrag_init(struct thread_data *td)
        struct stat stub;
        char donor_name[PATH_MAX];
 
-       if (!strlen(o->donor_name)) {
+       if (!o->donor_name || !strlen(o->donor_name)) {
                log_err("'donorname' options required\n");
                return 1;
        }
@@ -95,7 +91,7 @@ static int fio_e4defrag_init(struct thread_data *td)
        ed->donor_fd = open(donor_name, O_CREAT|O_WRONLY, 0644);
        if (ed->donor_fd < 0) {
                td_verror(td, errno, "io_queue_init");
-               log_err("Can't open donor file %s err:%d", donor_name, ed->donor_fd);
+               log_err("Can't open donor file %s err:%d\n", donor_name, ed->donor_fd);
                free(ed);
                return 1;
        }
@@ -131,7 +127,8 @@ static void fio_e4defrag_cleanup(struct thread_data *td)
 }
 
 
-static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u)
+static enum fio_q_status fio_e4defrag_queue(struct thread_data *td,
+                                           struct io_u *io_u)
 {
 
        int ret;
@@ -172,8 +169,13 @@ static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u)
                len = io_u->xfer_buflen;
 
        if (len != io_u->xfer_buflen) {
-               io_u->resid = io_u->xfer_buflen - len;
-               io_u->error = 0;
+               if (len) {
+                       io_u->resid = io_u->xfer_buflen - len;
+                       io_u->error = 0;
+               } else {
+                       /* access beyond i_size */
+                       io_u->error = EINVAL;
+               }
        }
        if (ret)
                io_u->error = errno;