* librpma_gpspm: IO engine that uses PMDK librpma to write data,
* based on General Purpose Server Persistency Method
*
- * Copyright 2020-2021, Intel Corporation
+ * Copyright 2020-2022, Intel Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License,
#include "librpma_fio.h"
+#ifdef CONFIG_LIBPMEM2_INSTALLED
+#include <libpmem2.h>
+#else
#include <libpmem.h>
+#endif
/* Generated by the protocol buffer compiler from: librpma_gpspm_flush.proto */
#include "librpma_gpspm_flush.pb-c.h"
#define IO_U_BUFF_OFF_SERVER(i) (i * IO_U_BUF_LEN)
+typedef void (*librpma_fio_persist_fn)(const void *ptr, size_t size);
+
struct server_data {
/* aligned td->orig_buffer */
char *orig_buffer_aligned;
/* in-memory queues */
struct ibv_wc *msgs_queued;
uint32_t msg_queued_nr;
+
+ librpma_fio_persist_fn persist;
};
static int server_init(struct thread_data *td)
goto err_free_sd;
}
+#ifdef CONFIG_LIBPMEM2_INSTALLED
+ /* get libpmem2 persist function from pmem2_map */
+ sd->persist = pmem2_get_persist_fn(csd->mem.map);
+#else
+ sd->persist = pmem_persist;
+#endif
+
/*
* Assure a single io_u buffer can store both SEND and RECV messages and
* an io_us buffer allocation is page-size-aligned which is required
if (IS_NOT_THE_LAST_MESSAGE(flush_req)) {
op_ptr = csd->ws_ptr + flush_req->offset;
- pmem_persist(op_ptr, flush_req->length);
+ sd->persist(op_ptr, flush_req->length);
} else {
/*
* This is the last message - the client is done.