>static void jm_cq_comp_handler(struct ib_cq *cq, void *context) {
> struct jm_rdma_conn *conn = context;
> struct ib_wc wc;
> struct jm_send_ctx *send;
>
> /* No idea why it should be called twice. */
> printk("cq comp for id %p\n", conn->jc_id);
> ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
> while (ib_poll_cq(cq, 1, &wc) == 1) {
> if (wc.opcode != IB_WC_RDMA_WRITE) {
> printk("completed unknown opcode %d\n", wc.opcode);
> /* continue; */
> }
> send = (struct jm_send_ctx *)wc.wr_id;
> printk("got send=%p\n", send);
> printk("completed RDMA_WRITE of IO(%Lu, %u)\n",
> send->s_offset, send->s_size);
> send->s_done = wc.status == IB_WC_SUCCESS ? 1 : -EIO;
> wake_up_all(&send->s_wait);
> }
> ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
unrelated to your problem, but this second call to ib_req_notify_cq isn't
necessary.
>static int jm_rdma_cm_event_handler(struct rdma_cm_id *id, struct rdma_cm_event
>*event) {
..
> case RDMA_CM_EVENT_DISCONNECTED:
> connstate = -ECONNABORTED;
> goto connected;
..
>connected:
> printk("%pI4:%u (event 0x%x)\n",
> &conn->jc_remoteaddr.sin_addr.s_addr,
> ntohs(conn->jc_remoteaddr.sin_port),
> event->event << 11);
> conn->jc_connstate = connstate;
> wake_up_all(&conn->jc_connect_wait);
> break;
How quickly do you respond to the disconnect event? The remote side will wait
until it receives a response or times out, which may be several seconds or
minutes.
- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html