Whamcloud - gitweb
LU-9458 ptlrpc: handle case of epp_free_pages <= PTLRPC_MAX_BRW_PAGES 16/27016/4
authorBob Glossman <bob.glossman@intel.com>
Tue, 9 May 2017 18:16:21 +0000 (11:16 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 12 May 2017 05:06:59 +0000 (05:06 +0000)
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 <bob.glossman@intel.com>
Reviewed-on: https://review.whamcloud.com/27016
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
lustre/ptlrpc/sec_bulk.c

index 22868c4..bb4a54d 100644 (file)
@@ -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);