fix re-open failure issue when using gluster ioengine
[fio.git] / engines / glusterfs.c
index b233b207eb49dec4e5477b16d83de48d1a7f31b0..52df9e8a0608f2d73b89a70c962a52cfe79abd63 100644 (file)
@@ -77,16 +77,12 @@ int fio_gf_setup(struct thread_data *td)
        }
        dprint(FD_FILE, "fio setup %p\n", g->fs);
        td->io_ops->data = g;
+       return 0;
 cleanup:
-       if (r) {
-               if (g) {
-                       if (g->fs) {
-                               glfs_fini(g->fs);
-                       }
-                       free(g);
-                       td->io_ops->data = NULL;
-               }
-       }
+       if (g->fs)
+               glfs_fini(g->fs);
+       free(g);
+       td->io_ops->data = NULL;
        return r;
 }
 
@@ -150,12 +146,19 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f)
                else
                        flags = O_RDONLY;
        }
+
+       if (td->o.odirect)
+               flags |= OS_O_DIRECT;
+       if (td->o.sync_io)
+               flags |= O_SYNC;
+
        dprint(FD_FILE, "fio file %s open mode %s td rw %s\n", f->file_name,
-              flags == O_RDONLY ? "ro" : "rw", td_read(td) ? "read" : "write");
+              flags & O_RDONLY ? "ro" : "rw", td_read(td) ? "read" : "write");
        g->fd = glfs_creat(g->fs, f->file_name, flags, 0644);
        if (!g->fd) {
-               log_err("glfs_creat failed.\n");
                ret = errno;
+               log_err("glfs_creat failed.\n");
+               return ret;
        }
        /* file for read doesn't exist or shorter than required, create/extend it */
        if (td_read(td)) {
@@ -257,7 +260,7 @@ int fio_gf_open_file(struct thread_data *td, struct fio_file *f)
        dprint(FD_FILE, "fio %p created %s\n", g->fs, f->file_name);
        f->fd = -1;
        f->shadow_fd = -1;
-
+       td->o.open_files ++;
        return ret;
 }