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: Andy Grover <andy.grover@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
b98ba52f96
Коммит
450d06c020
|
@ -243,8 +243,12 @@ void rds_ib_send_cq_comp_handler(struct ib_cq *cq, void *context)
|
|||
struct rds_message *rm;
|
||||
|
||||
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_message_put(rm);
|
||||
}
|
||||
}
|
||||
|
||||
oldest = (oldest + 1) % ic->i_send_ring.w_nr;
|
||||
|
|
Загрузка…
Ссылка в новой задаче