engines/xnvme: user space vfio based backend
[fio.git] / engines / pmemblk.c
index 5d2191557f91bef8f9aecb821cf7068c1ae88db8..849d8a15a0da59d07209c2475b78a1e4098c143a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * pmemblk: IO engine that uses NVML libpmemblk to read and write data
+ * pmemblk: IO engine that uses PMDK libpmemblk to read and write data
  *
  * Copyright (C) 2016 Hewlett Packard Enterprise Development LP
  *
@@ -220,6 +220,8 @@ static fio_pmemblk_file_t pmb_open(const char *pathspec, int flags)
                pmb->pmb_nblocks = pmemblk_nblock(pmb->pmb_pool);
 
                fio_pmemblk_cache_insert(pmb);
+       } else {
+               free(path);
        }
 
        pmb->pmb_refcnt += 1;
@@ -342,7 +344,8 @@ static int fio_pmemblk_get_file_size(struct thread_data *td, struct fio_file *f)
        return 0;
 }
 
-static int fio_pmemblk_queue(struct thread_data *td, struct io_u *io_u)
+static enum fio_q_status fio_pmemblk_queue(struct thread_data *td,
+                                          struct io_u *io_u)
 {
        struct fio_file *f = io_u->file;
        fio_pmemblk_file_t pmb = FILE_ENG_DATA(f);
@@ -372,10 +375,11 @@ static int fio_pmemblk_queue(struct thread_data *td, struct io_u *io_u)
                off /= pmb->pmb_bsize;
                len /= pmb->pmb_bsize;
                while (0 < len) {
-                       if (io_u->ddir == DDIR_READ &&
-                          0 != pmemblk_read(pmb->pmb_pool, buf, off)) {
-                               io_u->error = errno;
-                               break;
+                       if (io_u->ddir == DDIR_READ) {
+                               if (0 != pmemblk_read(pmb->pmb_pool, buf, off)) {
+                                       io_u->error = errno;
+                                       break;
+                               }
                        } else if (0 != pmemblk_write(pmb->pmb_pool, buf, off)) {
                                io_u->error = errno;
                                break;
@@ -423,7 +427,7 @@ static int fio_pmemblk_unlink_file(struct thread_data *td, struct fio_file *f)
        return 0;
 }
 
-static struct ioengine_ops ioengine = {
+FIO_STATIC struct ioengine_ops ioengine = {
        .name = "pmemblk",
        .version = FIO_IOOPS_VERSION,
        .queue = fio_pmemblk_queue,