net/rds: Initialize ic->i_fastreg_wrs upon allocation
Otherwise, if an IB connection is torn down before "rds_ib_setup_qp" is called, the value of "ic->i_fastreg_wrs" is still at zero (as it wasn't initialized by "rds_ib_setup_qp"). Consequently "rds_ib_conn_path_shutdown" will spin forever, waiting for it to go back to "RDS_IB_DEFAULT_FR_WR", which of course will never happen as there are no outstanding work requests. Signed-off-by: Gerd Rausch <gerd.rausch@oracle.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3a2886cca7
commit
aa4948937b
|
@ -527,7 +527,6 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|||
attr.qp_type = IB_QPT_RC;
|
||||
attr.send_cq = ic->i_send_cq;
|
||||
attr.recv_cq = ic->i_recv_cq;
|
||||
atomic_set(&ic->i_fastreg_wrs, RDS_IB_DEFAULT_FR_WR);
|
||||
|
||||
/*
|
||||
* XXX this can fail if max_*_wr is too large? Are we supposed
|
||||
|
@ -1139,6 +1138,7 @@ int rds_ib_conn_alloc(struct rds_connection *conn, gfp_t gfp)
|
|||
spin_lock_init(&ic->i_ack_lock);
|
||||
#endif
|
||||
atomic_set(&ic->i_signaled_sends, 0);
|
||||
atomic_set(&ic->i_fastreg_wrs, RDS_IB_DEFAULT_FR_WR);
|
||||
|
||||
/*
|
||||
* rds_ib_conn_shutdown() waits for these to be emptied so they
|
||||
|
|
Loading…
Reference in New Issue