struct tevent_req *req;
struct smb_direct_connection_negotiate_connect_state *state;
struct smb_direct_io *rdma_read = NULL;
- struct smb_direct_io *neg_send = NULL;
- struct smb_direct_io *neg_recv = NULL;
- struct ibv_recv_wr *bad_recv_wr = NULL;
struct ibv_send_wr *bad_send_wr = NULL;
NTSTATUS status;
int ret;
return tevent_req_post(req, ev);
}
- neg_recv = smb_direct_io_create(c);
- if (tevent_req_nomem(neg_recv, req)) {
- return tevent_req_post(req, ev);
- }
- neg_recv->sge[0].addr = (uint64_t) (uintptr_t) neg_recv->data;
- neg_recv->sge[0].length = sizeof(neg_recv->data);
- neg_recv->sge[0].lkey = neg_recv->data_mr->lkey;
- neg_recv->recv_wr.sg_list = neg_recv->sge;
- neg_recv->recv_wr.num_sge = 1;
-
rdma_read = smb_direct_io_create(c);
if (tevent_req_nomem(rdma_read, req)) {
return tevent_req_post(req, ev);
rdma_read->send_wr.wr.rdma.rkey = 1;
rdma_read->send_wr.wr.rdma.remote_addr = 1;
- neg_send = smb_direct_io_create(c);
- if (tevent_req_nomem(neg_send, req)) {
- return tevent_req_post(req, ev);
- }
- SSVAL(neg_send->data, 0x00, 0x0100);
- SSVAL(neg_send->data, 0x02, 0x0100);
- SSVAL(neg_send->data, 0x04, 0x0000);
- SSVAL(neg_send->data, 0x06, c->state.send_credit_target);
- SIVAL(neg_send->data, 0x08, c->state.max_send_size);
- SIVAL(neg_send->data, 0x0C, c->state.max_receive_size);
- SIVAL(neg_send->data, 0x10, c->state.max_fragmented_size);
- neg_send->sge[0].addr = (uint64_t) (uintptr_t) neg_send->data;
- neg_send->sge[0].length = 0x14;
- neg_send->sge[0].lkey = neg_send->data_mr->lkey;
- neg_send->send_wr.opcode = IBV_WR_SEND;
- neg_send->send_wr.send_flags = IBV_SEND_SIGNALED;
- neg_send->send_wr.sg_list = neg_send->sge;
- neg_send->send_wr.num_sge = 1;
-
- errno = 0;
- ret = ibv_post_recv(c->ibv.qp, &neg_recv->recv_wr, &bad_recv_wr);
- if (ret != 0) {
- status = map_nt_error_from_unix_common(errno);
- DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
- __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
- tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
- }
-
- rdma_read->send_wr.next = &neg_send->send_wr;
errno = 0;
ret = ibv_post_send(c->ibv.qp, &rdma_read->send_wr, &bad_send_wr);
if (ret != 0) {
uint32_t max_fragmented_size;
uint32_t tmp;
struct smb_direct_io *io = NULL;
+ struct smb_direct_io *neg_send = NULL;
+ struct smb_direct_io *neg_recv = NULL;
+ struct ibv_recv_wr *bad_recv_wr = NULL;
+ struct ibv_send_wr *bad_send_wr = NULL;
errno = 0;
ret = ibv_get_cq_event(c->ibv.comp_channel,
struct smb_direct_io);
switch (wc.opcode) {
- case IBV_WC_SEND:
- DEBUG(0,("%s:%s: GOT SEND[%p] next[%p] ret[%d] errno[%d]\n",
+ case IBV_WC_RDMA_READ:
+ DEBUG(0,("%s:%s: GOT RDMA_READ[%p] next[%p] ret[%d] errno[%d]\n",
__location__, __FUNCTION__, io, io->send_wr.next, ret, errno));
TALLOC_FREE(io);
+
+ neg_recv = smb_direct_io_create(c);
+ if (tevent_req_nomem(neg_recv, req)) {
+ return;
+ }
+ neg_recv->sge[0].addr = (uint64_t) (uintptr_t) neg_recv->data;
+ neg_recv->sge[0].length = sizeof(neg_recv->data);
+ neg_recv->sge[0].lkey = neg_recv->data_mr->lkey;
+ neg_recv->recv_wr.sg_list = neg_recv->sge;
+ neg_recv->recv_wr.num_sge = 1;
+
+ neg_send = smb_direct_io_create(c);
+ if (tevent_req_nomem(neg_send, req)) {
+ return;
+ }
+ SSVAL(neg_send->data, 0x00, 0x0100);
+ SSVAL(neg_send->data, 0x02, 0x0100);
+ SSVAL(neg_send->data, 0x04, 0x0000);
+ SSVAL(neg_send->data, 0x06, c->state.send_credit_target);
+ SIVAL(neg_send->data, 0x08, c->state.max_send_size);
+ SIVAL(neg_send->data, 0x0C, c->state.max_receive_size);
+ SIVAL(neg_send->data, 0x10, c->state.max_fragmented_size);
+ neg_send->sge[0].addr = (uint64_t) (uintptr_t) neg_send->data;
+ neg_send->sge[0].length = 0x14;
+ neg_send->sge[0].lkey = neg_send->data_mr->lkey;
+ neg_send->send_wr.opcode = IBV_WR_SEND;
+ neg_send->send_wr.send_flags = IBV_SEND_SIGNALED;
+ neg_send->send_wr.sg_list = neg_send->sge;
+ neg_send->send_wr.num_sge = 1;
+
+ errno = 0;
+ ret = ibv_post_recv(c->ibv.qp, &neg_recv->recv_wr, &bad_recv_wr);
+ if (ret != 0) {
+ status = map_nt_error_from_unix_common(errno);
+ DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
+ __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
+ tevent_req_nterror(req, status);
+ return;
+ }
+
+ errno = 0;
+ ret = ibv_post_send(c->ibv.qp, &neg_send->send_wr, &bad_send_wr);
+ if (ret != 0) {
+ status = map_nt_error_from_unix_common(errno);
+ DEBUG(0,("%s:%s: ret[%d] errno[%d] status[%s]\n",
+ __location__, __FUNCTION__, ret, errno, nt_errstr(status)));
+ tevent_req_nterror(req, status);
+ return;
+ }
+
+ DEBUG(0,("%s:%s: ret[%d] errno[%d]\n",
+ __location__, __FUNCTION__, ret, errno));
break;
- case IBV_WC_RDMA_READ:
- DEBUG(0,("%s:%s: GOT RDMA_READ[%p] next[%p] ret[%d] errno[%d]\n",
+
+ case IBV_WC_SEND:
+ DEBUG(0,("%s:%s: GOT SEND[%p] next[%p] ret[%d] errno[%d]\n",
__location__, __FUNCTION__, io, io->send_wr.next, ret, errno));
TALLOC_FREE(io);
break;