diff --git a/engines/librpma_gpspm.c b/engines/librpma_gpspm.c index 64962dda4c..70116d0d6e 100644 --- a/engines/librpma_gpspm.c +++ b/engines/librpma_gpspm.c @@ -2,7 +2,7 @@ * 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, @@ -16,7 +16,11 @@ #include "librpma_fio.h" +#ifdef CONFIG_LIBPMEM2_INSTALLED +#include +#else #include +#endif /* Generated by the protocol buffer compiler from: librpma_gpspm_flush.proto */ #include "librpma_gpspm_flush.pb-c.h" @@ -361,6 +365,8 @@ FIO_STATIC struct ioengine_ops ioengine_client = { #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; @@ -373,6 +379,8 @@ struct server_data { /* 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) @@ -400,6 +408,13 @@ 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 @@ -594,7 +609,7 @@ static int server_qe_process(struct thread_data *td, struct ibv_wc *wc) 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.