- unsigned long ret;
-
- spin_lock(&page_pools.epp_lock);
-
- if (nr_to_scan > page_pools.epp_free_pages)
- nr_to_scan = page_pools.epp_free_pages;
-
- if (nr_to_scan > 0) {
- enc_pools_release_free_pages(nr_to_scan);
- CDEBUG(D_SEC, "released %d pages, %ld left\n",
- nr_to_scan, page_pools.epp_free_pages);
-
- page_pools.epp_st_shrinks++;
- page_pools.epp_last_shrink = cfs_time_current_sec();
- }
-
- /*
- * try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool
- */
- if (page_pools.epp_free_pages <= PTLRPC_MAX_BRW_PAGES) {
- ret = 0;
- goto out_unlock;
+ if (unlikely(shrink_param(sc, nr_to_scan) != 0)) {
+ cfs_spin_lock(&page_pools.epp_lock);
+ shrink_param(sc, nr_to_scan) = min_t(unsigned long,
+ shrink_param(sc, nr_to_scan),
+ page_pools.epp_free_pages -
+ PTLRPC_MAX_BRW_PAGES);
+ if (shrink_param(sc, nr_to_scan) > 0) {
+ enc_pools_release_free_pages(shrink_param(sc,
+ nr_to_scan));
+ CDEBUG(D_SEC, "released %ld pages, %ld left\n",
+ (long)shrink_param(sc, nr_to_scan),
+ page_pools.epp_free_pages);
+
+ page_pools.epp_st_shrinks++;
+ page_pools.epp_last_shrink = cfs_time_current_sec();
+ }
+ cfs_spin_unlock(&page_pools.epp_lock);