no array?
authorStefan Metzmacher <metze@samba.org>
Mon, 17 Sep 2012 01:29:41 +0000 (03:29 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 18 Sep 2012 03:10:25 +0000 (05:10 +0200)
libcli/smb/smb_transport_direct.c

index f949659eebcacae30cc8adf18469668b1d4dd38d..e6f5f2e1ac5884841a333915fdf751861cb042a5 100644 (file)
@@ -358,13 +358,16 @@ struct smb_direct_negotiate_state {
        struct {
                uint8_t buffer[0x14];
                struct ibv_mr *mr;
-               struct ibv_sge sge;
+/*             uint8_t buffer2[0x14];
+               struct ibv_mr *mr2;
+               struct ibv_sge sge[2];
+*/             struct ibv_sge sge[1];
                struct ibv_send_wr wr;
        } req;
        struct {
                uint8_t buffer[0x1C];
                struct ibv_mr *mr;
-               struct ibv_sge sge;
+               struct ibv_sge sge[1];
                struct ibv_recv_wr wr;
        } rep;
 };
@@ -433,13 +436,23 @@ struct tevent_req *smb_direct_negotiate_send(TALLOC_CTX *mem_ctx,
                return tevent_req_post(req, ev);
        }
 
-       state->req.sge.addr = (uint64_t) (uintptr_t) state->req.buffer;
-       state->req.sge.length = sizeof(state->req.buffer);;
-       state->req.sge.lkey = state->req.mr->lkey;
-       state->req.wr.opcode = IBV_WR_SEND;
+/*     state->req.mr2 = ibv_reg_mr(transport->ibv.pd,
+                                  state->req.buffer2,
+                                  sizeof(state->req.buffer2),
+                                  IBV_ACCESS_LOCAL_WRITE);
+       if (tevent_req_nomem(state->req.mr2, req)) {
+               return tevent_req_post(req, ev);
+       }
+*/     state->req.sge[0].addr = (uint64_t) (uintptr_t) state->req.buffer;
+       state->req.sge[0].length = sizeof(state->req.buffer);
+       state->req.sge[0].lkey = state->req.mr->lkey;
+/*     state->req.sge[1].addr = (uint64_t) (uintptr_t) state->req.buffer2;
+       state->req.sge[1].length = sizeof(state->req.buffer2);
+       state->req.sge[1].lkey = state->req.mr2->lkey;
+*/     state->req.wr.opcode = IBV_WR_SEND;
        state->req.wr.send_flags = IBV_SEND_SIGNALED;
-       state->req.wr.sg_list = &state->req.sge;
-       state->req.wr.num_sge = 1;
+       state->req.wr.sg_list = state->req.sge;
+       state->req.wr.num_sge = ARRAY_SIZE(state->req.sge);
 
        state->rep.mr = ibv_reg_mr(transport->ibv.pd,
                                   state->rep.buffer,
@@ -449,11 +462,11 @@ struct tevent_req *smb_direct_negotiate_send(TALLOC_CTX *mem_ctx,
                return tevent_req_post(req, ev);
        }
 
-       state->rep.sge.addr = (uint64_t) (uintptr_t) state->rep.buffer;
-       state->rep.sge.length = sizeof(state->rep.buffer);;
-       state->rep.sge.lkey = state->rep.mr->lkey;
-       state->rep.wr.sg_list = &state->rep.sge;
-       state->rep.wr.num_sge = 1;
+       state->rep.sge[0].addr = (uint64_t) (uintptr_t) state->rep.buffer;
+       state->rep.sge[0].length = sizeof(state->rep.buffer);;
+       state->rep.sge[0].lkey = state->rep.mr->lkey;
+       state->rep.wr.sg_list = state->rep.sge;
+       state->rep.wr.num_sge = ARRAY_SIZE(state->rep.sge);
 
        errno = 0;
        ret = ibv_post_recv(transport->ibv.qp, &state->rep.wr, &bad_recv_wr);