From 0943963d4803ad734433ea04bd663a31c06ca500 Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Mon, 19 Jul 2010 17:06:46 -0700 Subject: [PATCH] --- yaml --- r: 214462 b: refs/heads/master c: 8576f374ac9537674e3cccb0a9d43fa2b7ebbf5b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/rds/ib_rdma.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 681030fd3d03..02e2f243adc4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b4e1da3c9a0ac9b01f45a8578b7347e3a31f9fb8 +refs/heads/master: 8576f374ac9537674e3cccb0a9d43fa2b7ebbf5b diff --git a/trunk/net/rds/ib_rdma.c b/trunk/net/rds/ib_rdma.c index 3efdddc39d49..0017964f2fcf 100644 --- a/trunk/net/rds/ib_rdma.c +++ b/trunk/net/rds/ib_rdma.c @@ -38,6 +38,8 @@ #include "ib.h" #include "xlist.h" +struct workqueue_struct *rds_ib_fmr_wq; + static DEFINE_PER_CPU(unsigned long, clean_list_grace); #define CLEAN_LIST_BUSY_BIT 0 @@ -304,6 +306,9 @@ static struct rds_ib_mr *rds_ib_alloc_fmr(struct rds_ib_device *rds_ibdev) struct rds_ib_mr *ibmr = NULL; int err = 0, iter = 0; + if (atomic_read(&pool->dirty_count) >= pool->max_items / 10) + queue_delayed_work(rds_ib_fmr_wq, &pool->flush_worker, 10); + while (1) { ibmr = rds_ib_reuse_fmr(pool); if (ibmr) @@ -691,8 +696,6 @@ static int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *pool, return ret; } -struct workqueue_struct *rds_ib_fmr_wq; - int rds_ib_fmr_init(void) { rds_ib_fmr_wq = create_workqueue("rds_fmr_flushd");