Merge branch 'doc-patches' of https://github.com/vincentkfu/fio
[fio.git] / engines / rdma.c
index 7fbfad99fa3fa28d3ed9a30d8d31202542144a91..da00cba8b66b3f6db0bcd3a9cba8b45b9362ffa7 100644 (file)
@@ -44,7 +44,6 @@
 #include "../optgroup.h"
 
 #include <rdma/rdma_cma.h>
-#include <infiniband/arch.h>
 
 #define FIO_RDMA_MAX_IO_DEPTH    512
 
@@ -191,7 +190,7 @@ struct rdmaio_data {
 
 static int client_recv(struct thread_data *td, struct ibv_wc *wc)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        unsigned int max_bs;
 
        if (wc->byte_len != sizeof(rd->recv_buf)) {
@@ -216,7 +215,7 @@ static int client_recv(struct thread_data *td, struct ibv_wc *wc)
                rd->rmt_nr = ntohl(rd->recv_buf.nr);
 
                for (i = 0; i < rd->rmt_nr; i++) {
-                       rd->rmt_us[i].buf = ntohll(rd->recv_buf.rmt_us[i].buf);
+                       rd->rmt_us[i].buf = be64_to_cpu(rd->recv_buf.rmt_us[i].buf);
                        rd->rmt_us[i].rkey = ntohl(rd->recv_buf.rmt_us[i].rkey);
                        rd->rmt_us[i].size = ntohl(rd->recv_buf.rmt_us[i].size);
 
@@ -232,7 +231,7 @@ static int client_recv(struct thread_data *td, struct ibv_wc *wc)
 
 static int server_recv(struct thread_data *td, struct ibv_wc *wc)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        unsigned int max_bs;
 
        if (wc->wr_id == FIO_RDMA_MAX_IO_DEPTH) {
@@ -257,7 +256,7 @@ static int server_recv(struct thread_data *td, struct ibv_wc *wc)
 
 static int cq_event_handler(struct thread_data *td, enum ibv_wc_opcode opcode)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_wc wc;
        struct rdma_io_u_data *r_io_u_d;
        int ret;
@@ -368,7 +367,7 @@ static int cq_event_handler(struct thread_data *td, enum ibv_wc_opcode opcode)
  */
 static int rdma_poll_wait(struct thread_data *td, enum ibv_wc_opcode opcode)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_cq *ev_cq;
        void *ev_ctx;
        int ret;
@@ -405,7 +404,7 @@ again:
 
 static int fio_rdmaio_setup_qp(struct thread_data *td)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_qp_init_attr init_attr;
        int qp_depth = td->o.iodepth * 2;       /* 2 times of io depth */
 
@@ -485,7 +484,7 @@ err1:
 
 static int fio_rdmaio_setup_control_msg_buffers(struct thread_data *td)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
 
        rd->recv_mr = ibv_reg_mr(rd->pd, &rd->recv_buf, sizeof(rd->recv_buf),
                                 IBV_ACCESS_LOCAL_WRITE);
@@ -529,7 +528,7 @@ static int get_next_channel_event(struct thread_data *td,
                                  struct rdma_event_channel *channel,
                                  enum rdma_cm_event_type wait_event)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct rdma_cm_event *event;
        int ret;
 
@@ -561,7 +560,7 @@ static int get_next_channel_event(struct thread_data *td,
 
 static int fio_rdmaio_prep(struct thread_data *td, struct io_u *io_u)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct rdma_io_u_data *r_io_u_d;
 
        r_io_u_d = io_u->engine_data;
@@ -604,7 +603,7 @@ static int fio_rdmaio_prep(struct thread_data *td, struct io_u *io_u)
 
 static struct io_u *fio_rdmaio_event(struct thread_data *td, int event)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct io_u *io_u;
        int i;
 
@@ -622,7 +621,7 @@ static struct io_u *fio_rdmaio_event(struct thread_data *td, int event)
 static int fio_rdmaio_getevents(struct thread_data *td, unsigned int min,
                                unsigned int max, const struct timespec *t)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        enum ibv_wc_opcode comp_opcode;
        struct ibv_cq *ev_cq;
        void *ev_ctx;
@@ -684,7 +683,7 @@ again:
 static int fio_rdmaio_send(struct thread_data *td, struct io_u **io_us,
                           unsigned int nr)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_send_wr *bad_wr;
 #if 0
        enum ibv_wc_opcode comp_opcode;
@@ -747,7 +746,7 @@ static int fio_rdmaio_send(struct thread_data *td, struct io_u **io_us,
 static int fio_rdmaio_recv(struct thread_data *td, struct io_u **io_us,
                           unsigned int nr)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_recv_wr *bad_wr;
        struct rdma_io_u_data *r_io_u_d;
        int i;
@@ -783,7 +782,7 @@ static int fio_rdmaio_recv(struct thread_data *td, struct io_u **io_us,
 
 static int fio_rdmaio_queue(struct thread_data *td, struct io_u *io_u)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
 
        fio_ro_check(td, io_u);
 
@@ -801,8 +800,8 @@ static int fio_rdmaio_queue(struct thread_data *td, struct io_u *io_u)
 static void fio_rdmaio_queued(struct thread_data *td, struct io_u **io_us,
                              unsigned int nr)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
-       struct timeval now;
+       struct rdmaio_data *rd = td->io_ops_data;
+       struct timespec now;
        unsigned int i;
 
        if (!fio_fill_issue_time(td))
@@ -824,7 +823,7 @@ static void fio_rdmaio_queued(struct thread_data *td, struct io_u **io_us,
 
 static int fio_rdmaio_commit(struct thread_data *td)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct io_u **io_us;
        int ret;
 
@@ -856,7 +855,7 @@ static int fio_rdmaio_commit(struct thread_data *td)
 
 static int fio_rdmaio_connect(struct thread_data *td, struct fio_file *f)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct rdma_conn_param conn_param;
        struct ibv_send_wr *bad_wr;
 
@@ -881,7 +880,7 @@ static int fio_rdmaio_connect(struct thread_data *td, struct fio_file *f)
        rd->send_buf.nr = htonl(td->o.iodepth);
 
        if (ibv_post_send(rd->qp, &rd->sq_wr, &bad_wr) != 0) {
-               log_err("fio: ibv_post_send fail: %m");
+               log_err("fio: ibv_post_send fail: %m\n");
                return 1;
        }
 
@@ -907,7 +906,7 @@ static int fio_rdmaio_connect(struct thread_data *td, struct fio_file *f)
 
 static int fio_rdmaio_accept(struct thread_data *td, struct fio_file *f)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct rdma_conn_param conn_param;
        struct ibv_send_wr *bad_wr;
        int ret = 0;
@@ -932,7 +931,7 @@ static int fio_rdmaio_accept(struct thread_data *td, struct fio_file *f)
        ret = rdma_poll_wait(td, IBV_WC_RECV) < 0;
 
        if (ibv_post_send(rd->qp, &rd->sq_wr, &bad_wr) != 0) {
-               log_err("fio: ibv_post_send fail: %m");
+               log_err("fio: ibv_post_send fail: %m\n");
                return 1;
        }
 
@@ -952,7 +951,7 @@ static int fio_rdmaio_open_file(struct thread_data *td, struct fio_file *f)
 
 static int fio_rdmaio_close_file(struct thread_data *td, struct fio_file *f)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_send_wr *bad_wr;
 
        /* unregister rdma buffer */
@@ -965,7 +964,7 @@ static int fio_rdmaio_close_file(struct thread_data *td, struct fio_file *f)
                                     || (rd->rdma_protocol ==
                                         FIO_RDMA_MEM_READ))) {
                if (ibv_post_send(rd->qp, &rd->sq_wr, &bad_wr) != 0) {
-                       log_err("fio: ibv_post_send fail: %m");
+                       log_err("fio: ibv_post_send fail: %m\n");
                        return 1;
                }
 
@@ -1008,7 +1007,7 @@ static int fio_rdmaio_close_file(struct thread_data *td, struct fio_file *f)
 static int fio_rdmaio_setup_connect(struct thread_data *td, const char *host,
                                    unsigned short port)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_recv_wr *bad_wr;
        int err;
 
@@ -1072,7 +1071,7 @@ static int fio_rdmaio_setup_connect(struct thread_data *td, const char *host,
 
 static int fio_rdmaio_setup_listen(struct thread_data *td, short port)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct ibv_recv_wr *bad_wr;
        int state = td->runstate;
 
@@ -1207,7 +1206,7 @@ bad_host:
 
 static int fio_rdmaio_init(struct thread_data *td)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
        struct rdmaio_options *o = td->eo;
        unsigned int max_bs;
        int ret, i;
@@ -1300,7 +1299,7 @@ static int fio_rdmaio_init(struct thread_data *td)
                }
 
                rd->send_buf.rmt_us[i].buf =
-                   htonll((uint64_t) (unsigned long)io_u->buf);
+                   cpu_to_be64((uint64_t) (unsigned long)io_u->buf);
                rd->send_buf.rmt_us[i].rkey = htonl(io_u->mr->rkey);
                rd->send_buf.rmt_us[i].size = htonl(max_bs);
 
@@ -1316,7 +1315,7 @@ static int fio_rdmaio_init(struct thread_data *td)
 
 static void fio_rdmaio_cleanup(struct thread_data *td)
 {
-       struct rdmaio_data *rd = td->io_ops->data;
+       struct rdmaio_data *rd = td->io_ops_data;
 
        if (rd)
                free(rd);
@@ -1332,12 +1331,12 @@ static int fio_rdmaio_setup(struct thread_data *td)
                td->o.open_files++;
        }
 
-       if (!td->io_ops->data) {
+       if (!td->io_ops_data) {
                rd = malloc(sizeof(*rd));
 
                memset(rd, 0, sizeof(*rd));
                init_rand_seed(&rd->rand_state, (unsigned int) GOLDEN_RATIO_PRIME, 0);
-               td->io_ops->data = rd;
+               td->io_ops_data = rd;
        }
 
        return 0;