RDS: destroy the ib state earlier during shutdown
Destroy ib state early during shutdown. Otherwise we can get callbacks after the QP isn't really able to handle them. Reviewed-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com> Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
43962dd7ee
commit
1bc7b863f2
@@ -640,6 +640,16 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
|
|||||||
(atomic_read(&ic->i_signaled_sends) == 0));
|
(atomic_read(&ic->i_signaled_sends) == 0));
|
||||||
tasklet_kill(&ic->i_recv_tasklet);
|
tasklet_kill(&ic->i_recv_tasklet);
|
||||||
|
|
||||||
|
/* first destroy the ib state that generates callbacks */
|
||||||
|
if (ic->i_cm_id->qp)
|
||||||
|
rdma_destroy_qp(ic->i_cm_id);
|
||||||
|
if (ic->i_send_cq)
|
||||||
|
ib_destroy_cq(ic->i_send_cq);
|
||||||
|
if (ic->i_recv_cq)
|
||||||
|
ib_destroy_cq(ic->i_recv_cq);
|
||||||
|
rdma_destroy_id(ic->i_cm_id);
|
||||||
|
|
||||||
|
/* then free the resources that ib callbacks use */
|
||||||
if (ic->i_send_hdrs)
|
if (ic->i_send_hdrs)
|
||||||
ib_dma_free_coherent(dev,
|
ib_dma_free_coherent(dev,
|
||||||
ic->i_send_ring.w_nr *
|
ic->i_send_ring.w_nr *
|
||||||
@@ -663,14 +673,6 @@ void rds_ib_conn_shutdown(struct rds_connection *conn)
|
|||||||
if (ic->i_recvs)
|
if (ic->i_recvs)
|
||||||
rds_ib_recv_clear_ring(ic);
|
rds_ib_recv_clear_ring(ic);
|
||||||
|
|
||||||
if (ic->i_cm_id->qp)
|
|
||||||
rdma_destroy_qp(ic->i_cm_id);
|
|
||||||
if (ic->i_send_cq)
|
|
||||||
ib_destroy_cq(ic->i_send_cq);
|
|
||||||
if (ic->i_recv_cq)
|
|
||||||
ib_destroy_cq(ic->i_recv_cq);
|
|
||||||
rdma_destroy_id(ic->i_cm_id);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Move connection back to the nodev list.
|
* Move connection back to the nodev list.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user