Commit 450d06c0 authored by Sherman Pun's avatar Sherman Pun Committed by David S. Miller

RDS: Properly unmap when getting a remote access error

If the RDMA op has aborted with a remote access error,
in addition to what we already do (tell userspace it has
completed with an error) also unmap it and put() the rm.

Otherwise, hangs may occur on arches that track maps and
will not exit without proper cleanup.
Signed-off-by: default avatarAndy Grover <andy.grover@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b98ba52f
...@@ -243,8 +243,12 @@ void rds_ib_send_cq_comp_handler(struct ib_cq *cq, void *context) ...@@ -243,8 +243,12 @@ void rds_ib_send_cq_comp_handler(struct ib_cq *cq, void *context)
struct rds_message *rm; struct rds_message *rm;
rm = rds_send_get_message(conn, send->s_op); rm = rds_send_get_message(conn, send->s_op);
if (rm) if (rm) {
if (rm->m_rdma_op)
rds_ib_send_unmap_rdma(ic, rm->m_rdma_op);
rds_ib_send_rdma_complete(rm, wc.status); rds_ib_send_rdma_complete(rm, wc.status);
rds_message_put(rm);
}
} }
oldest = (oldest + 1) % ic->i_send_ring.w_nr; oldest = (oldest + 1) % ic->i_send_ring.w_nr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment