|
@@ -44,6 +44,17 @@ struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *rds_ibdev, int npages)
|
|
|
else
|
|
else
|
|
|
pool = rds_ibdev->mr_1m_pool;
|
|
pool = rds_ibdev->mr_1m_pool;
|
|
|
|
|
|
|
|
|
|
+ if (atomic_read(&pool->dirty_count) >= pool->max_items / 10)
|
|
|
|
|
+ queue_delayed_work(rds_ib_mr_wq, &pool->flush_worker, 10);
|
|
|
|
|
+
|
|
|
|
|
+ /* Switch pools if one of the pool is reaching upper limit */
|
|
|
|
|
+ if (atomic_read(&pool->dirty_count) >= pool->max_items * 9 / 10) {
|
|
|
|
|
+ if (pool->pool_type == RDS_IB_MR_8K_POOL)
|
|
|
|
|
+ pool = rds_ibdev->mr_1m_pool;
|
|
|
|
|
+ else
|
|
|
|
|
+ pool = rds_ibdev->mr_8k_pool;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
ibmr = rds_ib_try_reuse_ibmr(pool);
|
|
ibmr = rds_ib_try_reuse_ibmr(pool);
|
|
|
if (ibmr)
|
|
if (ibmr)
|
|
|
return ibmr;
|
|
return ibmr;
|