From 2da01a984786ef0bc2700530a6f29ea9063362e9 Mon Sep 17 00:00:00 2001 From: Bob Glossman Date: Tue, 9 May 2017 11:16:21 -0700 Subject: [PATCH] LU-9458 ptlrpc: handle case of epp_free_pages <= PTLRPC_MAX_BRW_PAGES Current code where page_pools.epp_free_pages is too small isn't handled correctly. This mod fixes those instances. Change-Id: I9242cbdeba9f5ea4836189f0049ae3617cd665f7 Signed-off-by: Bob Glossman Reviewed-on: https://review.whamcloud.com/27016 Tested-by: Jenkins Reviewed-by: Andreas Dilger Reviewed-by: John L. Hammond Tested-by: Maloo --- lustre/ptlrpc/sec_bulk.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lustre/ptlrpc/sec_bulk.c b/lustre/ptlrpc/sec_bulk.c index 22868c4..bb4a54d 100644 --- a/lustre/ptlrpc/sec_bulk.c +++ b/lustre/ptlrpc/sec_bulk.c @@ -242,7 +242,8 @@ static unsigned long enc_pools_shrink_count(struct shrinker *s, } LASSERT(page_pools.epp_idle_idx <= IDLE_IDX_MAX); - return max(page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES, 0UL) * + return (page_pools.epp_free_pages <= PTLRPC_MAX_BRW_PAGES) ? 0 : + (page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES) * (IDLE_IDX_MAX - page_pools.epp_idle_idx) / IDLE_IDX_MAX; } @@ -253,7 +254,10 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s, struct shrink_control *sc) { spin_lock(&page_pools.epp_lock); - sc->nr_to_scan = min_t(unsigned long, sc->nr_to_scan, + if (page_pools.epp_free_pages <= PTLRPC_MAX_BRW_PAGES) + sc->nr_to_scan = 0; + else + sc->nr_to_scan = min_t(unsigned long, sc->nr_to_scan, page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES); if (sc->nr_to_scan > 0) { enc_pools_release_free_pages(sc->nr_to_scan); -- 1.8.3.1