From: Stefan Metzmacher Date: Tue, 18 Sep 2012 02:57:23 +0000 (+0200) Subject: smbdirect X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=refs%2Fheads%2Fmaster3-signing smbdirect --- diff --git a/libcli/smb/smb_transport_direct.c b/libcli/smb/smb_transport_direct.c index e0c63fd3503e..39d222e2ac5e 100644 --- a/libcli/smb/smb_transport_direct.c +++ b/libcli/smb/smb_transport_direct.c @@ -456,8 +456,9 @@ struct tevent_req *smb_direct_negotiate_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } + memset(state->rep.buffer, 0x1F, sizeof(state->rep.buffer)); 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].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); @@ -534,13 +535,17 @@ static void smb_direct_negotiate_ibv_handler(struct tevent_context *ev, switch (wc.opcode) { case IBV_WC_SEND: break; + case IBV_WC_RECV: + DEBUG(0,("%s:%s: ret[%d] errno[%d]\n", + __location__, __FUNCTION__, ret, errno)); + dump_data(0, state->rep.buffer, sizeof(state->rep.buffer)); + + //ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); + break; case IBV_WC_RDMA_WRITE: break; case IBV_WC_RDMA_READ: break; - case IBV_WC_RECV: - //ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr); - break; default: break; } @@ -585,6 +590,9 @@ static void smb_direct_negotiate_rdma_handler(struct tevent_context *ev, } switch (state->t->rdma.cm_event->event) { + case RDMA_CM_EVENT_DISCONNECTED: + status = NT_STATUS_CONNECTION_DISCONNECTED; + break; case RDMA_CM_EVENT_ADDR_RESOLVED: case RDMA_CM_EVENT_ADDR_ERROR: case RDMA_CM_EVENT_ROUTE_RESOLVED: @@ -595,13 +603,12 @@ static void smb_direct_negotiate_rdma_handler(struct tevent_context *ev, case RDMA_CM_EVENT_CONNECT_ERROR: case RDMA_CM_EVENT_UNREACHABLE: case RDMA_CM_EVENT_REJECTED: - case RDMA_CM_EVENT_DISCONNECTED: case RDMA_CM_EVENT_DEVICE_REMOVAL: case RDMA_CM_EVENT_MULTICAST_JOIN: case RDMA_CM_EVENT_MULTICAST_ERROR: case RDMA_CM_EVENT_ADDR_CHANGE: case RDMA_CM_EVENT_TIMEWAIT_EXIT: - //error + status = NT_STATUS_INVALID_NETWORK_RESPONSE; break; } @@ -609,6 +616,10 @@ static void smb_direct_negotiate_rdma_handler(struct tevent_context *ev, rdma_ack_cm_event(state->t->rdma.cm_event); state->t->rdma.cm_event = NULL; } + + TALLOC_FREE(state->t->ibv.fde_channel); + TALLOC_FREE(state->t->rdma.fde_channel); + tevent_req_nterror(req, status); } NTSTATUS smb_direct_negotiate_recv(struct tevent_req *req)