|
|
@@ -382,7 +382,10 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|
|
* completion queue and send queue. This extra space is used for FRMR
|
|
|
* registration and invalidation work requests
|
|
|
*/
|
|
|
- fr_queue_space = (rds_ibdev->use_fastreg ? RDS_IB_DEFAULT_FR_WR : 0);
|
|
|
+ fr_queue_space = rds_ibdev->use_fastreg ?
|
|
|
+ (RDS_IB_DEFAULT_FR_WR + 1) +
|
|
|
+ (RDS_IB_DEFAULT_FR_INV_WR + 1)
|
|
|
+ : 0;
|
|
|
|
|
|
/* add the conn now so that connection establishment has the dev */
|
|
|
rds_ib_add_conn(rds_ibdev, conn);
|
|
|
@@ -444,6 +447,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
|
|
|
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);
|
|
|
+ atomic_set(&ic->i_fastunreg_wrs, RDS_IB_DEFAULT_FR_INV_WR);
|
|
|
|
|
|
/*
|
|
|
* XXX this can fail if max_*_wr is too large? Are we supposed
|
|
|
@@ -766,7 +770,8 @@ void rds_ib_conn_path_shutdown(struct rds_conn_path *cp)
|
|
|
wait_event(rds_ib_ring_empty_wait,
|
|
|
rds_ib_ring_empty(&ic->i_recv_ring) &&
|
|
|
(atomic_read(&ic->i_signaled_sends) == 0) &&
|
|
|
- (atomic_read(&ic->i_fastreg_wrs) == RDS_IB_DEFAULT_FR_WR));
|
|
|
+ (atomic_read(&ic->i_fastreg_wrs) == RDS_IB_DEFAULT_FR_WR) &&
|
|
|
+ (atomic_read(&ic->i_fastunreg_wrs) == RDS_IB_DEFAULT_FR_INV_WR));
|
|
|
tasklet_kill(&ic->i_send_tasklet);
|
|
|
tasklet_kill(&ic->i_recv_tasklet);
|
|
|
|