Whamcloud - gitweb
LU-16724 ptlrpc: refactor page pools patch 1 34/52634/10
authorPatrick Farrell <paf0187@gmail.com>
Wed, 27 Mar 2024 21:19:07 +0000 (17:19 -0400)
committerOleg Drokin <green@whamcloud.com>
Mon, 8 Apr 2024 15:37:25 +0000 (15:37 +0000)
This is a combined series that refactors the page pools
code to make it more readable.  It used to be many
separate patches but has been combined in to just three,
and this is the first.

LU-16724 ptlrpc: rename 'pool' to 'pool_idx'

'pool' here is the index of the pool, not the pool itself.
Let's give it a name that makes clear it's a number and not
the actual pool.

Also remove an error condition which is asserted on
immediately before.

LU-16724 ptlrpc: rename 'size_bits' to 'order'

The kernel uses 'order' to refer to page allocations of a
certain 'order', meaning 2^order pages.

That's what our 'size bits' is - an allocation of a certain
'order'.

Change-Id-Was: I38b184239814a0f692b644566075c798ed16f816

LU-16724 ptlrpc: rename get_buf to get_pages

The sptlrpc_enc_pool_get_buf function actually gets a fixed
number of pages, which is sort of a buffer, but is better
understood as a set of pages.

Rename the function for getting pages for a ptlrpc desc so
we can give get_buf a more appropriate name.

Change-Id-Was: I9c03b9d638e7df7f09bf5724c5a6896b7d1e7b6c

LU-16724 ptlrpc: improve usage of PAGES_POOL

PAGES_POOL isn't always used when it should be, let's
improve that a bit (and start renaming a function).

Change-Id-Was: Ifed59db63d15d61d15712e6df6b8dbae56f2f5b7

LU-16724 ptlrpc: start removing 'enc' from pool

Pools are no longer encryption page pools, start renaming
them accordingly.  (The 'epp' naming in the struct has been
left for the next patch.)

Change-Id-Was: Iba3c98641e24173d95bf8bcf0df2424bbabf3ef9

LU-16724 ptlrpc: rename 'epp' to 'ppp'

Finish removing 'encryption' from page pool names except
for the module parameter, which is exposed in configuration
and so can't be changed.

Change-Id-Was: I1c14f6cf8cf1a19d89b5a7787aac1b67203866d3

LU-16724 ptlrpc: remove more uses of 'enc'

Remove a few more uses of 'enc' and note some we aren't
changing.

Change-Id-Was: Iaaf6c23ea295b22ded2e8942227ebd5ce4d34e13

LU-16724 ptlrpc: improve use of 'count'

This is a first trivial step towards fixing usage of
'count' in the page pools code.  (And a whitespace fix.)

Change-Id-Was: Ic4f74db74b8cec63572d5fd5b129f861ab0cba7c

LU-16724 ptlrpc: simplify pools_should_grow

This patch is a prelude to replacing "pools_should_grow()"
with a "grow_pool" function.  (The odd plural will be
removed shortly.)

Change-Id-Was: I0accbce2c36fa97684fbee364057b8ff2f9ae12d

LU-16724 ptlrpc: correct use of plural 'pools'

There are a bunch of spots which refer to a single pool by
pool index, but which say 'pools'.  This is very confusing,
and in fact led to me misunderstanding the code at least
once.

Clean that up.

Change-Id-Was: I9eabcfe77a57a82c87b36e3b3e040be91671fbfb

LU-16724 ptlrpc: reduce usage of pool_index

The pool index is used over and over a lot of places where
we should just use it once.

Note the printing functions are deliberately not combined
to maximum length lines for ease of reading.

Change-Id-Was: I7efbf491cf28f6fd16d06f5bbc42d714c908f34c

Signed-off-by: Patrick Farrell <patrick.farrell@oracle.com>
Change-Id: I636a4756a033d0b96a4772b8912f61c4b31b9c64
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52634
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Artem Blagodarenko <ablagodarenko@ddn.com>
lustre/include/lustre_sec.h
lustre/llite/llite_lib.c
lustre/osc/osc_request.c
lustre/ptlrpc/client.c
lustre/ptlrpc/gss/gss_bulk.c
lustre/ptlrpc/gss/sec_gss.c
lustre/ptlrpc/ptlrpc_internal.h
lustre/ptlrpc/sec.c
lustre/ptlrpc/sec_bulk.c

index d49c4c3..bad288e 100644 (file)
@@ -1192,14 +1192,14 @@ int sptlrpc_cli_install_rvs_ctx(struct obd_import *imp,
 
 /* bulk security api */
 #define PAGES_POOL 0
-int sptlrpc_enc_pool_add_user(void);
-int sptlrpc_enc_pool_get_pages(struct ptlrpc_bulk_desc *desc);
-int sptlrpc_enc_pool_get_pages_array(struct page **pa, unsigned int count);
-int sptlrpc_enc_pool_get_buf(void **buf, unsigned int size_bits);
-void sptlrpc_enc_pool_put_pages(struct ptlrpc_bulk_desc *desc);
-void sptlrpc_enc_pool_put_pages_array(struct page **pa, unsigned int count);
-void sptlrpc_enc_pool_put_buf(void *buf, unsigned int size_bits);
-int sptlrpc_enc_pool_get_free_pages(unsigned int pool);
+int sptlrpc_pool_add_user(void);
+int sptlrpc_pool_get_desc_pages(struct ptlrpc_bulk_desc *desc);
+int sptlrpc_pool_get_pages_array(struct page **pa, unsigned int count);
+int sptlrpc_pool_get_pages(void **buf, unsigned int order);
+void sptlrpc_pool_put_desc_pages(struct ptlrpc_bulk_desc *desc);
+void sptlrpc_pool_put_pages_array(struct page **pa, unsigned int count);
+void sptlrpc_pool_put_pages(void *buf, unsigned int order);
+int sptlrpc_pool_get_free_pages(unsigned int pool);
 int pool_is_at_full_capacity(void);
 
 int sptlrpc_cli_wrap_bulk(struct ptlrpc_request *req,
index 0ee27c0..ff0cd9f 100644 (file)
@@ -3387,7 +3387,7 @@ int ll_iocontrol(struct inode *inode, struct file *file,
                rc = llcrypt_ioctl_add_key(file, uarg);
 #ifdef CONFIG_LL_ENCRYPTION
                if (!rc && S_ISDIR(inode->i_mode))
-                       sptlrpc_enc_pool_add_user();
+                       sptlrpc_pool_add_user();
 #endif
                RETURN(rc);
        case LL_IOC_GET_ENCRYPTION_KEY_STATUS:
index edd4dcf..e76f8ea 100644 (file)
@@ -1495,7 +1495,7 @@ static inline void osc_release_bounce_pages(struct brw_page **pga,
        }
 
        if (pa) {
-               sptlrpc_enc_pool_put_pages_array(pa, j);
+               sptlrpc_pool_put_pages_array(pa, j);
                OBD_FREE_PTR_ARRAY_LARGE(pa, page_count);
        }
 #endif
@@ -1558,7 +1558,7 @@ osc_brw_prep_request(int cmd, struct client_obd *cli, struct obdo *oa,
                        RETURN(-ENOMEM);
                }
 
-               rc = sptlrpc_enc_pool_get_pages_array(pa, page_count);
+               rc = sptlrpc_pool_get_pages_array(pa, page_count);
                if (rc) {
                        CDEBUG(D_SEC, "failed to allocate from enc pool: %d\n",
                               rc);
@@ -1615,7 +1615,7 @@ retry_encrypt:
                                        goto retry_encrypt;
                                }
                                if (pa) {
-                                       sptlrpc_enc_pool_put_pages_array(pa + i,
+                                       sptlrpc_pool_put_pages_array(pa + i,
                                                                page_count - i);
                                        OBD_FREE_PTR_ARRAY_LARGE(pa,
                                                                 page_count);
index 6a9097d..4efeb20 100644 (file)
@@ -291,7 +291,7 @@ void ptlrpc_free_bulk(struct ptlrpc_bulk_desc *desc)
        LASSERT((desc->bd_export != NULL) ^ (desc->bd_import != NULL));
        LASSERT(desc->bd_frag_ops != NULL);
 
-       sptlrpc_enc_pool_put_pages(desc);
+       sptlrpc_pool_put_desc_pages(desc);
 
        if (desc->bd_export)
                class_export_put(desc->bd_export);
@@ -1673,7 +1673,7 @@ static int ptlrpc_send_new_req(struct ptlrpc_request *req)
        /* do not try to go further if there is not enough memory in enc_pool */
        if (req->rq_sent && req->rq_bulk)
                if (req->rq_bulk->bd_iov_count >
-                   sptlrpc_enc_pool_get_free_pages(PAGES_POOL) &&
+                   sptlrpc_pool_get_free_pages(PAGES_POOL) &&
                    pool_is_at_full_capacity())
                        RETURN(-ENOMEM);
 
index 466b868..1be05a7 100644 (file)
@@ -136,7 +136,7 @@ int gss_cli_ctx_wrap_bulk(struct ptlrpc_cli_ctx *ctx,
                        if (desc->bd_iov_count == 0)
                                RETURN(0);
 
-                       rc = sptlrpc_enc_pool_get_pages(desc);
+                       rc = sptlrpc_pool_get_desc_pages(desc);
                        if (rc) {
                                CERROR("bulk write: failed to allocate "
                                       "encryption pages: %d\n", rc);
@@ -302,7 +302,7 @@ static int gss_prep_bulk(struct ptlrpc_bulk_desc *desc,
         if (desc->bd_iov_count == 0)
                 return 0;
 
-        rc = sptlrpc_enc_pool_get_pages(desc);
+        rc = sptlrpc_pool_get_desc_pages(desc);
         if (rc)
                 return rc;
 
@@ -491,7 +491,7 @@ int gss_svc_wrap_bulk(struct ptlrpc_request *req,
                         break;
                 }
 
-                rc = sptlrpc_enc_pool_get_pages(desc);
+                rc = sptlrpc_pool_get_desc_pages(desc);
                 if (rc) {
                         bsdv->bsd_flags |= BSD_FL_ERR;
                         CERROR("bulk read: failed to allocate encryption "
index 0c302fb..1d81b54 100644 (file)
@@ -1104,7 +1104,7 @@ int gss_sec_create_common(struct gss_sec *gsec,
        }
 
        if (SPTLRPC_FLVR_BULK_SVC(sec->ps_flvr.sf_rpc) == SPTLRPC_BULK_SVC_PRIV)
-               sptlrpc_enc_pool_add_user();
+               sptlrpc_pool_add_user();
 
        CDEBUG(D_SEC, "create %s%s@%p\n", (svcctx ? "reverse " : ""),
               policy->sp_name, gsec);
index ff10538..820906f 100644 (file)
@@ -291,8 +291,8 @@ int  sptlrpc_plain_init(void);
 void sptlrpc_plain_fini(void);
 
 /* sec_bulk.c */
-int  sptlrpc_enc_pool_init(void);
-void sptlrpc_enc_pool_fini(void);
+int  sptlrpc_pool_init(void);
+void sptlrpc_pool_fini(void);
 int encrypt_page_pools_seq_show(struct seq_file *m, void *v);
 int page_pools_seq_show(struct seq_file *m, void *v);
 
index d3e78bc..682426a 100644 (file)
@@ -2810,7 +2810,7 @@ int sptlrpc_init(void)
        if (rc)
                goto out_gc;
 
-       rc = sptlrpc_enc_pool_init();
+       rc = sptlrpc_pool_init();
        if (rc)
                goto out_conf;
 
@@ -2833,7 +2833,7 @@ out_plain:
 out_null:
        sptlrpc_null_fini();
 out_pool:
-       sptlrpc_enc_pool_fini();
+       sptlrpc_pool_fini();
 out_conf:
        sptlrpc_conf_fini();
 out_gc:
@@ -2847,7 +2847,7 @@ void sptlrpc_fini(void)
        sptlrpc_lproc_fini();
        sptlrpc_plain_fini();
        sptlrpc_null_fini();
-       sptlrpc_enc_pool_fini();
+       sptlrpc_pool_fini();
        sptlrpc_conf_fini();
        sptlrpc_gc_fini();
 }
index 9da60a9..d8d8080 100644 (file)
 #define PPOOL_MIN_CHUNK_BITS 16 /* 2^16 bytes = 64KiB */
 #define PPOOL_MAX_CHUNK_BITS PTLRPC_MAX_BRW_BITS
 #define POOLS_COUNT (PPOOL_MAX_CHUNK_BITS - PPOOL_MIN_CHUNK_BITS + 1)
-#define PPOOL_SIZE_TO_INDEX(bits) ((bits) - PPOOL_MIN_CHUNK_BITS + 1)
+#define PPOOL_ORDER_TO_INDEX(bits) ((bits) - PPOOL_MIN_CHUNK_BITS + 1)
 #define POOL_BITS(pool) ((pool) + PPOOL_MIN_CHUNK_BITS - 1)
 #define ELEMENT_SIZE(pool) (1 << (PPOOL_MIN_CHUNK_BITS + (pool) - 1))
-#define mult (20 - PAGE_SHIFT)
+#define PAGES_TO_MiB(pages)    ((pages) >> (20 - PAGE_SHIFT))
+#define MiB_TO_PAGES(mb)       ((mb) << (20 - PAGE_SHIFT))
+/* deprecated - see pool_max_memory_mb below */
 static int enc_pool_max_memory_mb;
 module_param(enc_pool_max_memory_mb, int, 0644);
 MODULE_PARM_DESC(enc_pool_max_memory_mb,
-                "Encoding pool max memory (MB), 1/8 of total physical memory by default");
+                "Encoding pool max memory (MB), default unlimited (deprecated, please use pool_max_memory_mb)");
 
+static int pool_max_memory_mb;
+module_param(pool_max_memory_mb, int, 0644);
+MODULE_PARM_DESC(pool_max_memory_mb,
+                "Encoding pool max memory (MB), default unlimited");
 /*
- * bulk encryption page pools
+ * lustre page pools
  */
 
 #define PTRS_PER_PAGE   (PAGE_SIZE / sizeof(void *))
@@ -72,17 +78,17 @@ MODULE_PARM_DESC(enc_pool_max_memory_mb,
 
 #define CACHE_QUIESCENT_PERIOD  (20)
 
-static struct ptlrpc_enc_page_pool {
-       unsigned long epp_max_pages;   /* maximum pages can hold, const */
-       unsigned int epp_max_pools;   /* number of pools, const */
+static struct ptlrpc_page_pool {
+       unsigned long ppp_max_pages;   /* maximum pages can hold, const */
+       unsigned int ppp_max_pools;   /* number of pools, const */
 
        /*
         * wait queue in case of not enough free pages.
         */
-       wait_queue_head_t epp_waitq;   /* waiting threads */
-       unsigned int epp_waitqlen;    /* wait queue length */
-       unsigned long epp_pages_short; /* # of pages wanted of in-q users */
-       unsigned int epp_growing:1;   /* during adding pages */
+       wait_queue_head_t ppp_waitq;   /* waiting threads */
+       unsigned int ppp_waitqlen;    /* wait queue length */
+       unsigned long ppp_pages_short; /* # of pages wanted of in-q users */
+       unsigned int ppp_growing:1;   /* during adding pages */
 
        /*
         * indicating how idle the pools are, from 0 to MAX_IDLE_IDX
@@ -91,46 +97,51 @@ static struct ptlrpc_enc_page_pool {
         * is idled for a while but the idle_idx might still be low if no
         * activities happened in the pools.
         */
-       unsigned long epp_idle_idx;
+       unsigned long ppp_idle_idx;
 
        /* last shrink time due to mem tight */
-       time64_t epp_last_shrink;
-       time64_t epp_last_access;
+       time64_t ppp_last_shrink;
+       time64_t ppp_last_access;
 
        /* in-pool pages bookkeeping */
-       spinlock_t epp_lock; /* protect following fields */
-       unsigned long epp_total_pages; /* total pages in pools */
-       unsigned long epp_free_pages;  /* current pages available */
+       spinlock_t ppp_lock; /* protect following fields */
+       unsigned long ppp_total_pages; /* total pages in pools */
+       unsigned long ppp_free_pages;  /* current pages available */
 
        /* statistics */
-       unsigned long epp_st_max_pages;      /* # of pages ever reached */
-       unsigned int epp_st_grows;          /* # of grows */
-       unsigned int epp_st_grow_fails;     /* # of add pages failures */
-       unsigned int epp_st_shrinks;        /* # of shrinks */
-       unsigned long epp_st_access;         /* # of access */
-       unsigned long epp_st_missings;       /* # of cache missing */
-       unsigned long epp_st_lowfree;        /* lowest free pages reached */
-       unsigned int epp_st_max_wqlen;      /* highest waitqueue length */
-       ktime_t epp_st_max_wait; /* in nanoseconds */
-       unsigned long epp_st_outofmem; /* # of out of mem requests */
+       unsigned long ppp_st_max_pages;      /* # of pages ever reached */
+       unsigned int ppp_st_grows;          /* # of grows */
+       unsigned int ppp_st_grow_fails;     /* # of add pages failures */
+       unsigned int ppp_st_shrinks;        /* # of shrinks */
+       unsigned long ppp_st_access;         /* # of access */
+       unsigned long ppp_st_missings;       /* # of cache missing */
+       unsigned long ppp_st_lowfree;        /* lowest free pages reached */
+       unsigned int ppp_st_max_wqlen;      /* highest waitqueue length */
+       ktime_t ppp_st_max_wait; /* in nanoseconds */
+       unsigned long ppp_st_outofmem; /* # of out of mem requests */
        /*
         * pointers to pools, may be vmalloc'd
         */
-       void ***epp_pools;
+       void ***ppp_pools;
        /*
         * memory shrinker
         */
-       struct ll_shrinker_ops epp_shops;
+       struct ll_shrinker_ops ppp_shops;
        struct shrinker *pool_shrinker;
        struct mutex add_pages_mutex;
 } **page_pools;
 
 /*
+ * Keep old name (encrypt_page_pool vs page_pool) for compatibility with user
+ * tools pulling stats
+ *
  * /sys/kernel/debug/lustre/sptlrpc/encrypt_page_pools
  */
 int encrypt_page_pools_seq_show(struct seq_file *m, void *v)
 {
-       spin_lock(&page_pools[PAGES_POOL]->epp_lock);
+       struct ptlrpc_page_pool *pool = page_pools[PAGES_POOL];
+
+       spin_lock(&pool->ppp_lock);
        seq_printf(m, "physical pages:          %lu\n"
                "pages per pool:          %lu\n"
                "max pages:               %lu\n"
@@ -151,24 +162,24 @@ int encrypt_page_pools_seq_show(struct seq_file *m, void *v)
                "max wait time ms:        %lld\n"
                "out of mem:              %lu\n",
                cfs_totalram_pages(), PAGES_PER_POOL,
-               page_pools[PAGES_POOL]->epp_max_pages,
-               page_pools[PAGES_POOL]->epp_max_pools,
-               page_pools[PAGES_POOL]->epp_total_pages,
-               page_pools[PAGES_POOL]->epp_free_pages,
-               page_pools[PAGES_POOL]->epp_idle_idx,
-               ktime_get_seconds() - page_pools[PAGES_POOL]->epp_last_shrink,
-               ktime_get_seconds() - page_pools[PAGES_POOL]->epp_last_access,
-               page_pools[PAGES_POOL]->epp_st_max_pages,
-               page_pools[PAGES_POOL]->epp_st_grows,
-               page_pools[PAGES_POOL]->epp_st_grow_fails,
-               page_pools[PAGES_POOL]->epp_st_shrinks,
-               page_pools[PAGES_POOL]->epp_st_access,
-               page_pools[PAGES_POOL]->epp_st_missings,
-               page_pools[PAGES_POOL]->epp_st_lowfree,
-               page_pools[PAGES_POOL]->epp_st_max_wqlen,
-               ktime_to_ms(page_pools[PAGES_POOL]->epp_st_max_wait),
-               page_pools[PAGES_POOL]->epp_st_outofmem);
-       spin_unlock(&page_pools[PAGES_POOL]->epp_lock);
+               pool->ppp_max_pages,
+               pool->ppp_max_pools,
+               pool->ppp_total_pages,
+               pool->ppp_free_pages,
+               pool->ppp_idle_idx,
+               ktime_get_seconds() - pool->ppp_last_shrink,
+               ktime_get_seconds() - pool->ppp_last_access,
+               pool->ppp_st_max_pages,
+               pool->ppp_st_grows,
+               pool->ppp_st_grow_fails,
+               pool->ppp_st_shrinks,
+               pool->ppp_st_access,
+               pool->ppp_st_missings,
+               pool->ppp_st_lowfree,
+               pool->ppp_st_max_wqlen,
+               ktime_to_ms(pool->ppp_st_max_wait),
+               pool->ppp_st_outofmem);
+       spin_unlock(&pool->ppp_lock);
 
        return 0;
 }
@@ -179,7 +190,7 @@ int encrypt_page_pools_seq_show(struct seq_file *m, void *v)
 int page_pools_seq_show(struct seq_file *m, void *v)
 {
        int pool_index;
-       struct ptlrpc_enc_page_pool *pool;
+       struct ptlrpc_page_pool *pool;
 
        seq_printf(m, "physical_pages: %lu\n"
                      "pages per pool: %lu\n\n"
@@ -188,9 +199,9 @@ int page_pools_seq_show(struct seq_file *m, void *v)
 
        for (pool_index = 0; pool_index < POOLS_COUNT; pool_index++) {
                pool = page_pools[pool_index];
-               if (!pool->epp_st_access)
+               if (!pool->ppp_st_access)
                        continue;
-               spin_lock(&pool->epp_lock);
+               spin_lock(&pool->ppp_lock);
                seq_printf(m, "  pool_%luk:\n"
                           "    max_pages: %lu\n"
                           "    max_pools: %u\n"
@@ -211,63 +222,63 @@ int page_pools_seq_show(struct seq_file *m, void *v)
                           "    out_of_mem: %lu\n",
                           (pool_index ? ELEMENT_SIZE(pool_index - 10) :
                           PAGE_SIZE >> 10),
-                          pool->epp_max_pages,
-                          pool->epp_max_pools,
-                          pool->epp_total_pages,
-                          pool->epp_free_pages,
-                          pool->epp_idle_idx,
-                          ktime_get_seconds() - pool->epp_last_shrink,
-                          ktime_get_seconds() - pool->epp_last_access,
-                          pool->epp_st_max_pages,
-                          pool->epp_st_grows,
-                          pool->epp_st_grow_fails,
-                          pool->epp_st_shrinks,
-                          pool->epp_st_access,
-                          pool->epp_st_missings,
-                          pool->epp_st_lowfree,
-                          pool->epp_st_max_wqlen,
-                          ktime_to_ms(pool->epp_st_max_wait),
-                          pool->epp_st_outofmem);
-
-               spin_unlock(&pool->epp_lock);
+                          pool->ppp_max_pages,
+                          pool->ppp_max_pools,
+                          pool->ppp_total_pages,
+                          pool->ppp_free_pages,
+                          pool->ppp_idle_idx,
+                          ktime_get_seconds() - pool->ppp_last_shrink,
+                          ktime_get_seconds() - pool->ppp_last_access,
+                          pool->ppp_st_max_pages,
+                          pool->ppp_st_grows,
+                          pool->ppp_st_grow_fails,
+                          pool->ppp_st_shrinks,
+                          pool->ppp_st_access,
+                          pool->ppp_st_missings,
+                          pool->ppp_st_lowfree,
+                          pool->ppp_st_max_wqlen,
+                          ktime_to_ms(pool->ppp_st_max_wait),
+                          pool->ppp_st_outofmem);
+
+               spin_unlock(&pool->ppp_lock);
        }
        return 0;
 }
 
-static void enc_pools_release_free_pages(long npages, unsigned int pool_idx)
+static void pool_release_free_pages(long npages, unsigned int pool_idx)
 {
        int p_idx, g_idx;
        int p_idx_max1, p_idx_max2;
-       struct ptlrpc_enc_page_pool *pool = page_pools[pool_idx];
+       struct ptlrpc_page_pool *pool = page_pools[pool_idx];
 
        LASSERT(npages > 0);
-       LASSERT(npages <= pool->epp_free_pages);
-       LASSERT(pool->epp_free_pages <= pool->epp_total_pages);
+       LASSERT(npages <= pool->ppp_free_pages);
+       LASSERT(pool->ppp_free_pages <= pool->ppp_total_pages);
 
        /* max pool index before the release */
-       p_idx_max2 = (pool->epp_total_pages - 1) / PAGES_PER_POOL;
+       p_idx_max2 = (pool->ppp_total_pages - 1) / PAGES_PER_POOL;
 
-       pool->epp_free_pages -= npages;
-       pool->epp_total_pages -= npages;
+       pool->ppp_free_pages -= npages;
+       pool->ppp_total_pages -= npages;
 
        /* max pool index after the release */
-       p_idx_max1 = pool->epp_total_pages == 0 ? -1 :
-               ((pool->epp_total_pages - 1) / PAGES_PER_POOL);
+       p_idx_max1 = pool->ppp_total_pages == 0 ? -1 :
+               ((pool->ppp_total_pages - 1) / PAGES_PER_POOL);
 
-       p_idx = pool->epp_free_pages / PAGES_PER_POOL;
-       g_idx = pool->epp_free_pages % PAGES_PER_POOL;
-       LASSERT(pool->epp_pools[p_idx]);
+       p_idx = pool->ppp_free_pages / PAGES_PER_POOL;
+       g_idx = pool->ppp_free_pages % PAGES_PER_POOL;
+       LASSERT(pool->ppp_pools[p_idx]);
 
        while (npages--) {
-               LASSERT(pool->epp_pools[p_idx]);
-               LASSERT(pool->epp_pools[p_idx][g_idx] != NULL);
+               LASSERT(pool->ppp_pools[p_idx]);
+               LASSERT(pool->ppp_pools[p_idx][g_idx] != NULL);
 
-               if (pool_idx == 0)
-                       __free_page(pool->epp_pools[p_idx][g_idx]);
+               if (pool_idx == PAGES_POOL)
+                       __free_page(pool->ppp_pools[p_idx][g_idx]);
                else
-                       OBD_FREE_LARGE(pool->epp_pools[p_idx][g_idx],
+                       OBD_FREE_LARGE(pool->ppp_pools[p_idx][g_idx],
                                       ELEMENT_SIZE(pool_idx));
-               pool->epp_pools[p_idx][g_idx] = NULL;
+               pool->ppp_pools[p_idx][g_idx] = NULL;
 
                if (++g_idx == PAGES_PER_POOL) {
                        p_idx++;
@@ -277,9 +288,9 @@ static void enc_pools_release_free_pages(long npages, unsigned int pool_idx)
 
        /* free unused pools */
        while (p_idx_max1 < p_idx_max2) {
-               LASSERT(pool->epp_pools[p_idx_max2]);
-               OBD_FREE(pool->epp_pools[p_idx_max2], PAGE_SIZE);
-               pool->epp_pools[p_idx_max2] = NULL;
+               LASSERT(pool->ppp_pools[p_idx_max2]);
+               OBD_FREE(pool->ppp_pools[p_idx_max2], PAGE_SIZE);
+               pool->ppp_pools[p_idx_max2] = NULL;
                p_idx_max2--;
        }
 }
@@ -289,67 +300,67 @@ static void enc_pools_release_free_pages(long npages, unsigned int pool_idx)
 /*
  * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
  */
-static unsigned long enc_pools_shrink_count(struct shrinker *s,
-                                           struct shrink_control *sc)
+static unsigned long pool_shrink_count(struct shrinker *s,
+                                      struct shrink_control *sc)
 {
        unsigned int pool_index = SEEKS_TO_INDEX(s);
-       struct ptlrpc_enc_page_pool *pool = page_pools[pool_index];
+       struct ptlrpc_page_pool *pool = page_pools[pool_index];
        /*
         * if no pool access for a long time, we consider it's fully
         * idle. A little race here is fine.
         */
-       if (unlikely(ktime_get_seconds() - pool->epp_last_access >
+       if (unlikely(ktime_get_seconds() - pool->ppp_last_access >
                     CACHE_QUIESCENT_PERIOD)) {
-               spin_lock(&pool->epp_lock);
-               pool->epp_idle_idx = IDLE_IDX_MAX;
-               spin_unlock(&pool->epp_lock);
+               spin_lock(&pool->ppp_lock);
+               pool->ppp_idle_idx = IDLE_IDX_MAX;
+               spin_unlock(&pool->ppp_lock);
        }
 
-       LASSERT(pool->epp_idle_idx <= IDLE_IDX_MAX);
+       LASSERT(pool->ppp_idle_idx <= IDLE_IDX_MAX);
 
-       return (pool->epp_free_pages <= PTLRPC_MAX_BRW_PAGES) ? 0 :
-               (pool->epp_free_pages - PTLRPC_MAX_BRW_PAGES) *
-               (IDLE_IDX_MAX - pool->epp_idle_idx) / IDLE_IDX_MAX;
+       return (pool->ppp_free_pages <= PTLRPC_MAX_BRW_PAGES) ? 0 :
+               (pool->ppp_free_pages - PTLRPC_MAX_BRW_PAGES) *
+               (IDLE_IDX_MAX - pool->ppp_idle_idx) / IDLE_IDX_MAX;
 }
 
 /*
  * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
  */
-static unsigned long enc_pools_shrink_scan(struct shrinker *s,
-                                          struct shrink_control *sc)
+static unsigned long pool_shrink_scan(struct shrinker *s,
+                                     struct shrink_control *sc)
 {
-       /* Get pool number passed as part of pools_shrinker_seeks value */
+       /* Get pool number passed as part of pool_shrinker_seeks value */
        unsigned int pool_index = SEEKS_TO_INDEX(s);
-       struct ptlrpc_enc_page_pool *pool = page_pools[pool_index];
+       struct ptlrpc_page_pool *pool = page_pools[pool_index];
 
-       spin_lock(&pool->epp_lock);
-       if (pool->epp_free_pages <= PTLRPC_MAX_BRW_PAGES)
+       spin_lock(&pool->ppp_lock);
+       if (pool->ppp_free_pages <= PTLRPC_MAX_BRW_PAGES)
                sc->nr_to_scan = 0;
        else
                sc->nr_to_scan = min_t(unsigned long, sc->nr_to_scan,
-                             pool->epp_free_pages - PTLRPC_MAX_BRW_PAGES);
+                             pool->ppp_free_pages - PTLRPC_MAX_BRW_PAGES);
        if (sc->nr_to_scan > 0) {
-               enc_pools_release_free_pages(sc->nr_to_scan, pool_index);
+               pool_release_free_pages(sc->nr_to_scan, pool_index);
                CDEBUG(D_SEC, "released %ld pages, %ld left\n",
-                      (long)sc->nr_to_scan, pool->epp_free_pages);
+                      (long)sc->nr_to_scan, pool->ppp_free_pages);
 
-               pool->epp_st_shrinks++;
-               pool->epp_last_shrink = ktime_get_seconds();
+               pool->ppp_st_shrinks++;
+               pool->ppp_last_shrink = ktime_get_seconds();
        }
-       spin_unlock(&pool->epp_lock);
+       spin_unlock(&pool->ppp_lock);
 
        /*
         * if no pool access for a long time, we consider it's fully idle.
         * a little race here is fine.
         */
-       if (unlikely(ktime_get_seconds() - pool->epp_last_access >
+       if (unlikely(ktime_get_seconds() - pool->ppp_last_access >
                     CACHE_QUIESCENT_PERIOD)) {
-               spin_lock(&pool->epp_lock);
-               pool->epp_idle_idx = IDLE_IDX_MAX;
-               spin_unlock(&pool->epp_lock);
+               spin_lock(&pool->ppp_lock);
+               pool->ppp_idle_idx = IDLE_IDX_MAX;
+               spin_unlock(&pool->ppp_lock);
        }
 
-       LASSERT(pool->epp_idle_idx <= IDLE_IDX_MAX);
+       LASSERT(pool->ppp_idle_idx <= IDLE_IDX_MAX);
 
        return sc->nr_to_scan;
 }
@@ -359,12 +370,11 @@ static unsigned long enc_pools_shrink_scan(struct shrinker *s,
  * could be called frequently for query (@nr_to_scan == 0).
  * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
  */
-static int enc_pools_shrink(struct shrinker *shrinker,
-                           struct shrink_control *sc)
+static int pool_shrink(struct shrinker *shrinker, struct shrink_control *sc)
 {
-       enc_pools_shrink_scan(shrinker, sc);
+       pool_shrink_scan(shrinker, sc);
 
-       return enc_pools_shrink_count(shrinker, sc);
+       return pool_shrink_count(shrinker, sc);
 }
 #endif /* HAVE_SHRINKER_COUNT */
 
@@ -377,7 +387,7 @@ int npages_to_npools(unsigned long npages)
 /*
  * return how many pages cleaned up.
  */
-static unsigned long enc_pools_cleanup(void ***pools, int npools, int pool_idx)
+static unsigned long pool_cleanup(void ***pools, int npools, int pool_idx)
 {
        unsigned long cleaned = 0;
        int i, j;
@@ -386,7 +396,7 @@ static unsigned long enc_pools_cleanup(void ***pools, int npools, int pool_idx)
                if (pools[i]) {
                        for (j = 0; j < PAGES_PER_POOL; j++) {
                                if (pools[i][j]) {
-                                       if (pool_idx == 0) {
+                                       if (pool_idx == PAGES_POOL) {
                                                __free_page(pools[i][j]);
                                        } else {
                                                OBD_FREE_LARGE(pools[i][j],
@@ -410,20 +420,20 @@ static unsigned long enc_pools_cleanup(void ***pools, int npools, int pool_idx)
  * we have options to avoid most memory copy with some tricks. but we choose
  * the simplest way to avoid complexity. It's not frequently called.
  */
-static void enc_pools_insert(void ***pools, int npools, int npages,
-                            unsigned int pool_idx)
+static void pool_insert(void ***pools, int npools, int npages,
+                       unsigned int pool_idx)
 {
        int freeslot;
        int op_idx, np_idx, og_idx, ng_idx;
        int cur_npools, end_npools;
-       struct ptlrpc_enc_page_pool *page_pool = page_pools[pool_idx];
+       struct ptlrpc_page_pool *page_pool = page_pools[pool_idx];
 
        LASSERT(npages > 0);
-       LASSERT(page_pool->epp_total_pages+npages <= page_pool->epp_max_pages);
+       LASSERT(page_pool->ppp_total_pages+npages <= page_pool->ppp_max_pages);
        LASSERT(npages_to_npools(npages) == npools);
-       LASSERT(page_pool->epp_growing);
+       LASSERT(page_pool->ppp_growing);
 
-       spin_lock(&page_pool->epp_lock);
+       spin_lock(&page_pool->ppp_lock);
 
        /*
         * (1) fill all the free slots of current pools.
@@ -432,21 +442,21 @@ static void enc_pools_insert(void ***pools, int npools, int npages,
         * free slots are those left by rent pages, and the extra ones with
         * index >= total_pages, locate at the tail of last pool.
         */
-       freeslot = page_pool->epp_total_pages % PAGES_PER_POOL;
+       freeslot = page_pool->ppp_total_pages % PAGES_PER_POOL;
        if (freeslot != 0)
                freeslot = PAGES_PER_POOL - freeslot;
-       freeslot += page_pool->epp_total_pages - page_pool->epp_free_pages;
+       freeslot += page_pool->ppp_total_pages - page_pool->ppp_free_pages;
 
-       op_idx = page_pool->epp_free_pages / PAGES_PER_POOL;
-       og_idx = page_pool->epp_free_pages % PAGES_PER_POOL;
+       op_idx = page_pool->ppp_free_pages / PAGES_PER_POOL;
+       og_idx = page_pool->ppp_free_pages % PAGES_PER_POOL;
        np_idx = npools - 1;
        ng_idx = (npages - 1) % PAGES_PER_POOL;
 
        while (freeslot) {
-               LASSERT(page_pool->epp_pools[op_idx][og_idx] == NULL);
+               LASSERT(page_pool->ppp_pools[op_idx][og_idx] == NULL);
                LASSERT(pools[np_idx][ng_idx] != NULL);
 
-               page_pool->epp_pools[op_idx][og_idx] = pools[np_idx][ng_idx];
+               page_pool->ppp_pools[op_idx][og_idx] = pools[np_idx][ng_idx];
                pools[np_idx][ng_idx] = NULL;
 
                freeslot--;
@@ -466,19 +476,19 @@ static void enc_pools_insert(void ***pools, int npools, int npages,
        /*
         * (2) add pools if needed.
         */
-       cur_npools = (page_pool->epp_total_pages + PAGES_PER_POOL - 1) /
+       cur_npools = (page_pool->ppp_total_pages + PAGES_PER_POOL - 1) /
                      PAGES_PER_POOL;
-       end_npools = (page_pool->epp_total_pages + npages +
+       end_npools = (page_pool->ppp_total_pages + npages +
                      PAGES_PER_POOL - 1) / PAGES_PER_POOL;
-       LASSERT(end_npools <= page_pool->epp_max_pools);
+       LASSERT(end_npools <= page_pool->ppp_max_pools);
 
        np_idx = 0;
        while (cur_npools < end_npools) {
-               LASSERT(page_pool->epp_pools[cur_npools] == NULL);
+               LASSERT(page_pool->ppp_pools[cur_npools] == NULL);
                LASSERT(np_idx < npools);
                LASSERT(pools[np_idx] != NULL);
 
-               page_pool->epp_pools[cur_npools++] = pools[np_idx];
+               page_pool->ppp_pools[cur_npools++] = pools[np_idx];
                pools[np_idx++] = NULL;
        }
 
@@ -493,28 +503,28 @@ static void enc_pools_insert(void ***pools, int npools, int npages,
                pools[np_idx++] = NULL;
        }
 
-       page_pool->epp_total_pages += npages;
-       page_pool->epp_free_pages += npages;
-       page_pool->epp_st_lowfree = page_pool->epp_free_pages;
+       page_pool->ppp_total_pages += npages;
+       page_pool->ppp_free_pages += npages;
+       page_pool->ppp_st_lowfree = page_pool->ppp_free_pages;
 
-       if (page_pool->epp_total_pages > page_pool->epp_st_max_pages)
-               page_pool->epp_st_max_pages = page_pool->epp_total_pages;
+       if (page_pool->ppp_total_pages > page_pool->ppp_st_max_pages)
+               page_pool->ppp_st_max_pages = page_pool->ppp_total_pages;
 
        CDEBUG(D_SEC, "add %d pages to total %lu\n", npages,
-              page_pool->epp_total_pages);
+              page_pool->ppp_total_pages);
 
-       spin_unlock(&page_pool->epp_lock);
+       spin_unlock(&page_pool->ppp_lock);
 }
 
 #define POOL_INIT_SIZE (PTLRPC_MAX_BRW_SIZE / 4)
-static int enc_pools_add_pages(int npages, int pool_index)
+static int pool_add_pages(int npages, int pool_index)
 {
        void ***pools;
        int npools, alloced = 0;
        int i, j, rc = -ENOMEM;
-       struct ptlrpc_enc_page_pool *page_pool = page_pools[pool_index];
+       struct ptlrpc_page_pool *page_pool = page_pools[pool_index];
 
-       if (pool_index == 0) {
+       if (pool_index == PAGES_POOL) {
                if (npages < POOL_INIT_SIZE >> PAGE_SHIFT)
                        npages = POOL_INIT_SIZE >> PAGE_SHIFT;
        } else {
@@ -524,11 +534,11 @@ static int enc_pools_add_pages(int npages, int pool_index)
 
        mutex_lock(&page_pool->add_pages_mutex);
 
-       if (npages + page_pool->epp_total_pages > page_pool->epp_max_pages)
-               npages = page_pool->epp_max_pages - page_pool->epp_total_pages;
+       if (npages + page_pool->ppp_total_pages > page_pool->ppp_max_pages)
+               npages = page_pool->ppp_max_pages - page_pool->ppp_total_pages;
        LASSERT(npages > 0);
 
-       page_pool->epp_st_grows++;
+       page_pool->ppp_st_grows++;
 
        npools = npages_to_npools(npages);
        OBD_ALLOC_PTR_ARRAY(pools, npools);
@@ -541,7 +551,7 @@ static int enc_pools_add_pages(int npages, int pool_index)
                        goto out_pools;
 
                for (j = 0; j < PAGES_PER_POOL && alloced < npages; j++) {
-                       if (pool_index == 0)
+                       if (pool_index == PAGES_POOL)
                                pools[i][j] = alloc_page(GFP_NOFS |
                                        __GFP_HIGHMEM);
                        else {
@@ -556,48 +566,47 @@ static int enc_pools_add_pages(int npages, int pool_index)
        }
        LASSERT(alloced == npages);
 
-       enc_pools_insert(pools, npools, npages, pool_index);
+       pool_insert(pools, npools, npages, pool_index);
        CDEBUG(D_SEC, "added %d pages into pools\n", npages);
        OBD_FREE_PTR_ARRAY(pools, npools);
        rc = 0;
 
 out_pools:
        if (rc) {
-               enc_pools_cleanup(pools, npools, pool_index);
+               pool_cleanup(pools, npools, pool_index);
        }
 out:
        if (rc) {
-               page_pool->epp_st_grow_fails++;
-               CERROR("Failed to allocate %d enc pages\n", npages);
+               page_pool->ppp_st_grow_fails++;
+               CERROR("Failed to allocate %d pages\n", npages);
        }
 
        mutex_unlock(&page_pool->add_pages_mutex);
        return rc;
 }
 
-static inline void enc_pools_wakeup(unsigned int pool)
+static inline void pool_wakeup(unsigned int pool)
 {
-       assert_spin_locked(&page_pools[pool]->epp_lock);
+       assert_spin_locked(&page_pools[pool]->ppp_lock);
 
        /* waitqueue_active */
-       if (unlikely(waitqueue_active(&page_pools[pool]->epp_waitq)))
-               wake_up_all(&page_pools[pool]->epp_waitq);
+       if (unlikely(waitqueue_active(&page_pools[pool]->ppp_waitq)))
+               wake_up_all(&page_pools[pool]->ppp_waitq);
 }
 
-static int enc_pools_should_grow(int page_needed, time64_t now,
-                                unsigned int pool_index)
+static int pool_should_grow(int needed, unsigned int pool_index)
 {
+       struct ptlrpc_page_pool *pool = page_pools[pool_index];
+
        /*
         * don't grow if someone else is growing the pools right now,
         * or the pools has reached its full capacity
         */
-       if (page_pools[pool_index]->epp_growing ||
-           page_pools[pool_index]->epp_total_pages ==
-           page_pools[pool_index]->epp_max_pages)
+       if (pool->ppp_growing || pool->ppp_total_pages == pool->ppp_max_pages)
                return 0;
 
        /* if total pages is not enough, we need to grow */
-       if (page_pools[pool_index]->epp_total_pages < page_needed)
+       if (pool->ppp_total_pages < needed)
                return 1;
        /*
         * we wanted to return 0 here if there was a shrink just
@@ -617,23 +626,23 @@ static int enc_pools_should_grow(int page_needed, time64_t now,
 /*
  * Export the number of free pages in the pool
  */
-int sptlrpc_enc_pool_get_free_pages(unsigned int pool)
+int sptlrpc_pool_get_free_pages(unsigned int pool)
 {
-       return page_pools[pool]->epp_free_pages;
+       return page_pools[pool]->ppp_free_pages;
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_get_free_pages);
+EXPORT_SYMBOL(sptlrpc_pool_get_free_pages);
 
 /*
- * Let outside world know if enc_pool full capacity is reached
+ * Let outside world know if pool full capacity is reached
  */
 int __pool_is_at_full_capacity(unsigned int pool)
 {
-       return (page_pools[pool]->epp_total_pages ==
-               page_pools[pool]->epp_max_pages);
+       return (page_pools[pool]->ppp_total_pages ==
+               page_pools[pool]->ppp_max_pages);
 }
 
 /*
- * Let outside world know if enc_pool full capacity is reached
+ * Let outside world know if pool full capacity is reached
  */
 int pool_is_at_full_capacity(void)
 {
@@ -663,81 +672,76 @@ static inline void **page_from_bufarray(void *array, int index)
 /*
  * we allocate the requested pages atomically.
  */
-static inline int __sptlrpc_enc_pool_get_pages(void *array, unsigned int count,
-                                       unsigned int pool,
-                                       void **(*page_from)(void *, int))
+static inline int __sptlrpc_pool_get_pages(void *array, unsigned int count,
+                                          unsigned int pool_idx,
+                                          void **(*page_from)(void *, int))
 {
-       struct ptlrpc_enc_page_pool *page_pool = page_pools[pool];
+       struct ptlrpc_page_pool *page_pool = page_pools[pool_idx];
        wait_queue_entry_t waitlink;
        unsigned long this_idle = -1;
        u64 tick_ns = 0;
-       time64_t now;
        int p_idx, g_idx;
        int i, rc = 0;
 
-       if (pool)
-               count = 1;
-
-       if (!array || count <= 0 || count > page_pool->epp_max_pages)
+       if (!array || count <= 0 || count > page_pool->ppp_max_pages)
                return -EINVAL;
 
-       spin_lock(&page_pool->epp_lock);
+       spin_lock(&page_pool->ppp_lock);
 
-       page_pool->epp_st_access++;
+       page_pool->ppp_st_access++;
 again:
-       if (unlikely(page_pool->epp_free_pages < count)) {
+       if (unlikely(page_pool->ppp_free_pages < count)) {
                if (tick_ns == 0)
                        tick_ns = ktime_get_ns();
 
-               now = ktime_get_real_seconds();
-
-               page_pool->epp_st_missings++;
-               page_pool->epp_pages_short += count;
+               page_pool->ppp_st_missings++;
+               page_pool->ppp_pages_short += count;
 
-               if (enc_pools_should_grow(count, now, pool)) {
-                       page_pool->epp_growing = 1;
+               if (pool_should_grow(count, pool_idx)) {
+                       page_pool->ppp_growing = 1;
 
-                       spin_unlock(&page_pool->epp_lock);
-                       CDEBUG(D_SEC, "epp_pages_short: %lu\n", page_pool->epp_pages_short);
-                       enc_pools_add_pages(8, pool);
-                       spin_lock(&page_pool->epp_lock);
+                       spin_unlock(&page_pool->ppp_lock);
+                       CDEBUG(D_SEC, "ppp_pages_short: %lu\n",
+                              page_pool->ppp_pages_short);
+                       pool_add_pages(8, pool_idx);
+                       spin_lock(&page_pool->ppp_lock);
 
-                       page_pool->epp_growing = 0;
+                       page_pool->ppp_growing = 0;
 
-                       enc_pools_wakeup(pool);
+                       pool_wakeup(pool_idx);
                } else {
-                       if (page_pool->epp_growing) {
-                               if (++page_pool->epp_waitqlen >
-                                   page_pool->epp_st_max_wqlen)
-                                       page_pool->epp_st_max_wqlen =
-                                               page_pool->epp_waitqlen;
+                       if (page_pool->ppp_growing) {
+                               if (++page_pool->ppp_waitqlen >
+                                   page_pool->ppp_st_max_wqlen)
+                                       page_pool->ppp_st_max_wqlen =
+                                               page_pool->ppp_waitqlen;
 
                                set_current_state(TASK_UNINTERRUPTIBLE);
                                init_wait(&waitlink);
-                               add_wait_queue(&page_pool->epp_waitq,
+                               add_wait_queue(&page_pool->ppp_waitq,
                                               &waitlink);
 
-                               spin_unlock(&page_pool->epp_lock);
+                               spin_unlock(&page_pool->ppp_lock);
                                schedule();
-                               remove_wait_queue(&page_pool->epp_waitq,
+                               remove_wait_queue(&page_pool->ppp_waitq,
                                                  &waitlink);
-                               spin_lock(&page_pool->epp_lock);
-                               page_pool->epp_waitqlen--;
+                               spin_lock(&page_pool->ppp_lock);
+                               page_pool->ppp_waitqlen--;
                        } else {
                                /*
-                                * ptlrpcd thread should not sleep in that case,
-                                * or deadlock may occur!
+                                * ptlrpcd thread should not sleep in that
+                                * case or deadlock may occur!
                                 * Instead, return -ENOMEM so that upper layers
                                 * will put request back in queue.
                                 */
-                               page_pool->epp_st_outofmem++;
+                               page_pool->ppp_st_outofmem++;
                                GOTO(out_unlock, rc = -ENOMEM);
                        }
                }
 
-               if (page_pool->epp_pages_short < count)
+               if (page_pool->ppp_pages_short < count)
                        GOTO(out_unlock, rc = -EPROTO);
-               page_pool->epp_pages_short -= count;
+               page_pool->ppp_pages_short -= count;
 
                this_idle = 0;
                goto again;
@@ -747,23 +751,23 @@ again:
        if (unlikely(tick_ns)) {
                ktime_t tick = ktime_sub_ns(ktime_get(), tick_ns);
 
-               if (ktime_after(tick, page_pool->epp_st_max_wait))
-                       page_pool->epp_st_max_wait = tick;
+               if (ktime_after(tick, page_pool->ppp_st_max_wait))
+                       page_pool->ppp_st_max_wait = tick;
        }
 
        /* proceed with rest of allocation */
-       page_pool->epp_free_pages -= count;
+       page_pool->ppp_free_pages -= count;
 
-       p_idx = page_pool->epp_free_pages / PAGES_PER_POOL;
-       g_idx = page_pool->epp_free_pages % PAGES_PER_POOL;
+       p_idx = page_pool->ppp_free_pages / PAGES_PER_POOL;
+       g_idx = page_pool->ppp_free_pages % PAGES_PER_POOL;
 
        for (i = 0; i < count; i++) {
                void **pagep = page_from(array, i);
 
-               if (page_pool->epp_pools[p_idx][g_idx] == NULL)
+               if (page_pool->ppp_pools[p_idx][g_idx] == NULL)
                        GOTO(out_unlock, rc = -EPROTO);
-               *pagep = page_pool->epp_pools[p_idx][g_idx];
-               page_pool->epp_pools[p_idx][g_idx] = NULL;
+               *pagep = page_pool->ppp_pools[p_idx][g_idx];
+               page_pool->ppp_pools[p_idx][g_idx] = NULL;
 
                if (++g_idx == PAGES_PER_POOL) {
                        p_idx++;
@@ -771,34 +775,34 @@ again:
                }
        }
 
-       if (page_pool->epp_free_pages < page_pool->epp_st_lowfree)
-               page_pool->epp_st_lowfree =
-                       page_pool->epp_free_pages;
+       if (page_pool->ppp_free_pages < page_pool->ppp_st_lowfree)
+               page_pool->ppp_st_lowfree =
+                       page_pool->ppp_free_pages;
 
        /*
         * new idle index = (old * weight + new) / (weight + 1)
         */
        if (this_idle == -1) {
-               this_idle = page_pool->epp_free_pages * IDLE_IDX_MAX /
-                       page_pool->epp_total_pages;
+               this_idle = page_pool->ppp_free_pages * IDLE_IDX_MAX /
+                       page_pool->ppp_total_pages;
        }
-       page_pool->epp_idle_idx = (page_pool->epp_idle_idx *
+       page_pool->ppp_idle_idx = (page_pool->ppp_idle_idx *
                        IDLE_IDX_WEIGHT + this_idle) /
                        (IDLE_IDX_WEIGHT + 1);
 
-       page_pool->epp_last_access = ktime_get_seconds();
+       page_pool->ppp_last_access = ktime_get_seconds();
 
 out_unlock:
-       spin_unlock(&page_pool->epp_lock);
+       spin_unlock(&page_pool->ppp_lock);
        return rc;
 }
 
-int sptlrpc_enc_pool_get_pages(struct ptlrpc_bulk_desc *desc)
+int sptlrpc_pool_get_desc_pages(struct ptlrpc_bulk_desc *desc)
 {
        int rc;
 
        LASSERT(desc->bd_iov_count > 0);
-       LASSERT(desc->bd_iov_count <= page_pools[PAGES_POOL]->epp_max_pages);
+       LASSERT(desc->bd_iov_count <= page_pools[PAGES_POOL]->ppp_max_pages);
 
        /* resent bulk, enc iov might have been allocated previously */
        if (desc->bd_enc_vec != NULL)
@@ -809,8 +813,8 @@ int sptlrpc_enc_pool_get_pages(struct ptlrpc_bulk_desc *desc)
        if (desc->bd_enc_vec == NULL)
                return -ENOMEM;
 
-       rc = __sptlrpc_enc_pool_get_pages((void *)desc, desc->bd_iov_count,
-                                         PAGES_POOL, page_from_bulkdesc);
+       rc = __sptlrpc_pool_get_pages((void *)desc, desc->bd_iov_count,
+                                     PAGES_POOL, page_from_bulkdesc);
        if (rc) {
                OBD_FREE_LARGE(desc->bd_enc_vec,
                               desc->bd_iov_count *
@@ -819,112 +823,114 @@ int sptlrpc_enc_pool_get_pages(struct ptlrpc_bulk_desc *desc)
        }
        return rc;
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_get_pages);
+EXPORT_SYMBOL(sptlrpc_pool_get_desc_pages);
 
-int sptlrpc_enc_pool_get_pages_array(struct page **pa, unsigned int count)
+int sptlrpc_pool_get_pages_array(struct page **pa, unsigned int count)
 {
-       return __sptlrpc_enc_pool_get_pages((void *)pa, count, PAGES_POOL,
+       return __sptlrpc_pool_get_pages((void *)pa, count, PAGES_POOL,
                                            page_from_pagearray);
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_get_pages_array);
+EXPORT_SYMBOL(sptlrpc_pool_get_pages_array);
 
-int sptlrpc_enc_pool_get_buf(void **buf, unsigned int size_bits)
+int sptlrpc_pool_get_pages(void **pages, unsigned int order)
 {
-       return __sptlrpc_enc_pool_get_pages((void *)buf, 0,
-                                           PPOOL_SIZE_TO_INDEX(size_bits),
+       return __sptlrpc_pool_get_pages((void *)pages, 1,
+                                           PPOOL_ORDER_TO_INDEX(order),
                                            page_from_bufarray);
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_get_buf);
+EXPORT_SYMBOL(sptlrpc_pool_get_pages);
 
-static int __sptlrpc_enc_pool_put_pages(void *array, unsigned int count,
-                                       unsigned int pool,
+static int __sptlrpc_pool_put_pages(void *array, unsigned int count,
+                                       unsigned int pool_idx,
                                        void **(*page_from)(void *, int))
 {
        int p_idx, g_idx;
        int i, rc = 0;
-       struct ptlrpc_enc_page_pool *page_pool;
+       struct ptlrpc_page_pool *page_pool;
 
-       LASSERTF(pool < POOLS_COUNT, "count %u, pool %u\n", count, pool);
-       if (!array || pool >= POOLS_COUNT) {
-               CERROR("Faled to put %u pages, from pull %u\n", count, pool);
+       LASSERTF(pool_idx < POOLS_COUNT, "count %u, pool %u\n",
+                count, pool_idx);
+       if (!array) {
+               CERROR("Faled to put %u pages, from pool %u\n",
+                      count, pool_idx);
                return -EINVAL;
        }
 
-       page_pool = page_pools[pool];
-       LASSERTF(page_pool != NULL, "count %u, pool %u\n", count, pool);
+       page_pool = page_pools[pool_idx];
+       LASSERTF(page_pool != NULL, "count %u, pool %u\n", count, pool_idx);
 
-       spin_lock(&page_pool->epp_lock);
+       spin_lock(&page_pool->ppp_lock);
 
-       p_idx = page_pool->epp_free_pages / PAGES_PER_POOL;
-       g_idx = page_pool->epp_free_pages % PAGES_PER_POOL;
+       p_idx = page_pool->ppp_free_pages / PAGES_PER_POOL;
+       g_idx = page_pool->ppp_free_pages % PAGES_PER_POOL;
 
-       if (page_pool->epp_free_pages + count > page_pool->epp_total_pages)
+       if (page_pool->ppp_free_pages + count > page_pool->ppp_total_pages)
                GOTO(out_unlock, rc = -EPROTO);
-       if (!page_pool->epp_pools[p_idx])
+       if (!page_pool->ppp_pools[p_idx])
                GOTO(out_unlock, rc = -EPROTO);
 
        for (i = 0; i < count; i++) {
                void **pagep = page_from(array, i);
 
                if (!*pagep ||
-                   page_pool->epp_pools[p_idx][g_idx] != NULL)
+                   page_pool->ppp_pools[p_idx][g_idx] != NULL)
                        GOTO(out_unlock, rc = -EPROTO);
 
-               page_pool->epp_pools[p_idx][g_idx] = *pagep;
+               page_pool->ppp_pools[p_idx][g_idx] = *pagep;
                if (++g_idx == PAGES_PER_POOL) {
                        p_idx++;
                        g_idx = 0;
                }
        }
 
-       page_pool->epp_free_pages += count;
-       enc_pools_wakeup(pool);
+       page_pool->ppp_free_pages += count;
+       pool_wakeup(pool_idx);
 
 out_unlock:
-       spin_unlock(&page_pool->epp_lock);
+       spin_unlock(&page_pool->ppp_lock);
        return rc;
 }
 
-void sptlrpc_enc_pool_put_pages(struct ptlrpc_bulk_desc *desc)
+void sptlrpc_pool_put_desc_pages(struct ptlrpc_bulk_desc *desc)
 {
        int rc;
 
        if (desc->bd_enc_vec == NULL)
                return;
 
-       rc = __sptlrpc_enc_pool_put_pages((void *)desc, desc->bd_iov_count,
+       rc = __sptlrpc_pool_put_pages((void *)desc, desc->bd_iov_count,
                                          PAGES_POOL, page_from_bulkdesc);
        if (rc)
-               CDEBUG(D_SEC, "error putting pages in enc pool: %d\n", rc);
+               CDEBUG(D_SEC, "error putting pages in pool: %d\n", rc);
 
        OBD_FREE_LARGE(desc->bd_enc_vec,
                       desc->bd_iov_count * sizeof(*desc->bd_enc_vec));
        desc->bd_enc_vec = NULL;
 }
 
-void sptlrpc_enc_pool_put_pages_array(struct page **pa, unsigned int count)
+void sptlrpc_pool_put_pages_array(struct page **pa, unsigned int count)
 {
        int rc;
 
-       rc = __sptlrpc_enc_pool_put_pages((void *)pa, count, PAGES_POOL,
+       rc = __sptlrpc_pool_put_pages((void *)pa, count, PAGES_POOL,
                                          page_from_pagearray);
 
        if (rc)
-               CDEBUG(D_SEC, "error putting pages in enc pool: %d\n", rc);
+               CDEBUG(D_SEC, "error putting pages in pool: %d\n", rc);
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_put_pages_array);
+EXPORT_SYMBOL(sptlrpc_pool_put_pages_array);
 
-void sptlrpc_enc_pool_put_buf(void *buf, unsigned int size_bits)
+void sptlrpc_pool_put_pages(void *buf, unsigned int order)
 {
        int rc;
 
-       rc = __sptlrpc_enc_pool_put_pages(buf, 1,
-                                         PPOOL_SIZE_TO_INDEX(size_bits),
+       rc = __sptlrpc_pool_put_pages(buf, 1,
+                                         PPOOL_ORDER_TO_INDEX(order),
                                          page_from_bufarray);
        if (rc)
-               CDEBUG(D_SEC, "error putting pages in enc pool: %d\n", rc);
+               CDEBUG(D_SEC, "error putting pages in pool: %d\n", rc);
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_put_buf);
+EXPORT_SYMBOL(sptlrpc_pool_put_pages);
 
 
 /*
@@ -932,57 +938,63 @@ EXPORT_SYMBOL(sptlrpc_enc_pool_put_buf);
  * initial pages in add_user() if current pools are empty, rest would be
  * handled by the pools's self-adaption.
  */
-int sptlrpc_enc_pool_add_user(void)
+int sptlrpc_pool_add_user(void)
 {
-       int need_grow = 0;
-
-       spin_lock(&page_pools[PAGES_POOL]->epp_lock);
-       if (page_pools[PAGES_POOL]->epp_growing == 0 &&
-               page_pools[PAGES_POOL]->epp_total_pages == 0) {
-               page_pools[PAGES_POOL]->epp_growing = 1;
-               need_grow = 1;
-       }
-       spin_unlock(&page_pools[PAGES_POOL]->epp_lock);
+       struct ptlrpc_page_pool *pool = page_pools[PAGES_POOL];
 
+       spin_lock(&pool->ppp_lock);
+       /* ask for 1 page - so if the pool is empty, it will grow
+        * (this might also grow an in-use pool if it's full, which is fine)
+        */
+       if (pool_should_grow(1, PAGES_POOL)) {
+               pool->ppp_growing = 1;
+               spin_unlock(&pool->ppp_lock);
 
-       if (need_grow) {
-               enc_pools_add_pages(PTLRPC_MAX_BRW_PAGES +
-                                   PTLRPC_MAX_BRW_PAGES, 0);
+               pool_add_pages(PTLRPC_MAX_BRW_PAGES * 2, PAGES_POOL);
 
-               spin_lock(&page_pools[PAGES_POOL]->epp_lock);
-               page_pools[PAGES_POOL]->epp_growing = 0;
-               enc_pools_wakeup(PAGES_POOL);
-               spin_unlock(&page_pools[PAGES_POOL]->epp_lock);
+               spin_lock(&pool->ppp_lock);
+               pool->ppp_growing = 0;
+               pool_wakeup(PAGES_POOL);
        }
+       spin_unlock(&pool->ppp_lock);
        return 0;
 }
-EXPORT_SYMBOL(sptlrpc_enc_pool_add_user);
+EXPORT_SYMBOL(sptlrpc_pool_add_user);
 
-static inline void enc_pools_alloc(struct ptlrpc_enc_page_pool *pool)
+static inline void pool_alloc(struct ptlrpc_page_pool *pool)
 {
-       LASSERT(pool->epp_max_pools);
-       OBD_ALLOC_LARGE(pool->epp_pools,
-                       pool->epp_max_pools *
-                       sizeof(*pool->epp_pools));
+       LASSERT(pool->ppp_max_pools);
+       OBD_ALLOC_LARGE(pool->ppp_pools,
+                       pool->ppp_max_pools *
+                       sizeof(*pool->ppp_pools));
 }
 
-static inline void enc_pools_free(unsigned int i)
+static inline void pool_free(unsigned int pool_index)
 {
-       LASSERT(page_pools[i]->epp_max_pools);
-       LASSERT(page_pools[i]->epp_pools);
+       struct ptlrpc_page_pool *pool = page_pools[pool_index];
 
-       OBD_FREE_LARGE(page_pools[i]->epp_pools,
-                      page_pools[i]->epp_max_pools *
-                      sizeof(*page_pools[i]->epp_pools));
+       LASSERT(pool->ppp_max_pools);
+       LASSERT(pool->ppp_pools);
+
+       OBD_FREE_LARGE(pool->ppp_pools,
+                      pool->ppp_max_pools * sizeof(*pool->ppp_pools));
 }
 
-int sptlrpc_enc_pool_init(void)
+int sptlrpc_pool_init(void)
 {
        int pool_index = 0, to_revert;
        int rc = 0;
-       struct ptlrpc_enc_page_pool *pool;
+       struct ptlrpc_page_pool *pool;
+       int pool_max_pages = cfs_totalram_pages() / POOLS_COUNT;
 
        ENTRY;
+
+       if (pool_max_memory_mb == 0 && enc_pool_max_memory_mb > 0)
+               pool_max_memory_mb = enc_pool_max_memory_mb;
+       if (pool_max_memory_mb > 0 &&
+               pool_max_memory_mb <= PAGES_TO_MiB(cfs_totalram_pages()))
+               pool_max_pages = MiB_TO_PAGES(pool_max_memory_mb);
+
        OBD_ALLOC(page_pools, POOLS_COUNT * sizeof(*page_pools));
        if (page_pools == NULL)
                RETURN(-ENOMEM);
@@ -992,38 +1004,33 @@ int sptlrpc_enc_pool_init(void)
                        GOTO(fail, rc = -ENOMEM);
 
                pool = page_pools[pool_index];
-               pool->epp_max_pages =
-                       cfs_totalram_pages() / POOLS_COUNT;
-               if (enc_pool_max_memory_mb > 0 &&
-                   enc_pool_max_memory_mb <= (cfs_totalram_pages() >> mult))
-                       pool->epp_max_pages =
-                               enc_pool_max_memory_mb << mult;
+               pool->ppp_max_pages = pool_max_pages;
 
-               pool->epp_max_pools =
-                       npages_to_npools(pool->epp_max_pages);
+               pool->ppp_max_pools =
+                       npages_to_npools(pool->ppp_max_pages);
 
-               init_waitqueue_head(&pool->epp_waitq);
-               pool->epp_last_shrink = ktime_get_seconds();
-               pool->epp_last_access = ktime_get_seconds();
+               init_waitqueue_head(&pool->ppp_waitq);
+               pool->ppp_last_shrink = ktime_get_seconds();
+               pool->ppp_last_access = ktime_get_seconds();
 
-               spin_lock_init(&pool->epp_lock);
-               pool->epp_st_max_wait = ktime_set(0, 0);
+               spin_lock_init(&pool->ppp_lock);
+               pool->ppp_st_max_wait = ktime_set(0, 0);
 
-               enc_pools_alloc(pool);
+               pool_alloc(pool);
                CDEBUG(D_SEC, "Allocated pool %i\n", pool_index);
-               if (pool->epp_pools == NULL)
+               if (pool->ppp_pools == NULL)
                        GOTO(fail, rc = -ENOMEM);
-               /* Pass pool number as part of pools_shrinker_seeks value */
+               /* Pass pool number as part of pool_shrinker_seeks value */
 #ifdef HAVE_SHRINKER_COUNT
-               pool->epp_shops.count_objects = enc_pools_shrink_count;
-               pool->epp_shops.scan_objects = enc_pools_shrink_scan;
+               pool->ppp_shops.count_objects = pool_shrink_count;
+               pool->ppp_shops.scan_objects = pool_shrink_scan;
 #else
-               pool->epp_shops.shrink = enc_pools_shrink;
+               pool->ppp_shops.shrink = pool_shrink;
 #endif
-               pool->epp_shops.seeks = INDEX_TO_SEEKS(pool_index);
+               pool->ppp_shops.seeks = INDEX_TO_SEEKS(pool_index);
 
-               pool->pool_shrinker = ll_shrinker_create(&pool->epp_shops, 0,
-                                                        "sptlrpc_enc_pool");
+               pool->pool_shrinker = ll_shrinker_create(&pool->ppp_shops, 0,
+                                                        "sptlrpc_pool");
                if (IS_ERR(pool->pool_shrinker))
                        GOTO(fail, rc = PTR_ERR(pool->pool_shrinker));
 
@@ -1036,8 +1043,8 @@ fail:
        for (pool_index = 0; pool_index <= to_revert; pool_index++) {
                pool = page_pools[pool_index];
                if (pool) {
-                       if (pool->epp_pools)
-                               enc_pools_free(pool_index);
+                       if (pool->ppp_pools)
+                               pool_free(pool_index);
                        OBD_FREE(pool, sizeof(**page_pools));
                }
        }
@@ -1046,37 +1053,36 @@ fail:
        RETURN(rc);
 }
 
-void sptlrpc_enc_pool_fini(void)
+void sptlrpc_pool_fini(void)
 {
        unsigned long cleaned, npools;
        int pool_index;
-       struct ptlrpc_enc_page_pool *pool;
+       struct ptlrpc_page_pool *pool;
 
        for (pool_index = 0; pool_index < POOLS_COUNT; pool_index++) {
                pool = page_pools[pool_index];
                shrinker_free(pool->pool_shrinker);
-               LASSERT(pool->epp_pools);
-               LASSERT(pool->epp_total_pages == pool->epp_free_pages);
+               LASSERT(pool->ppp_pools);
+               LASSERT(pool->ppp_total_pages == pool->ppp_free_pages);
 
-               npools = npages_to_npools(pool->epp_total_pages);
-               cleaned = enc_pools_cleanup(pool->epp_pools,
-                                           npools, pool_index);
-               LASSERT(cleaned == pool->epp_total_pages);
+               npools = npages_to_npools(pool->ppp_total_pages);
+               cleaned = pool_cleanup(pool->ppp_pools, npools, pool_index);
+               LASSERT(cleaned == pool->ppp_total_pages);
 
-               enc_pools_free(pool_index);
+               pool_free(pool_index);
 
-               if (pool->epp_st_access > 0) {
+               if (pool->ppp_st_access > 0) {
                        CDEBUG(D_SEC,
                               "max pages %lu, grows %u, grow fails %u, shrinks %u, access %lu, missing %lu, max qlen %u, max wait ms %lld, out of mem %lu\n",
-                              pool->epp_st_max_pages,
-                              pool->epp_st_grows,
-                              pool->epp_st_grow_fails,
-                              pool->epp_st_shrinks,
-                              pool->epp_st_access,
-                              pool->epp_st_missings,
-                              pool->epp_st_max_wqlen,
-                              ktime_to_ms(pool->epp_st_max_wait),
-                              pool->epp_st_outofmem);
+                              pool->ppp_st_max_pages,
+                              pool->ppp_st_grows,
+                              pool->ppp_st_grow_fails,
+                              pool->ppp_st_shrinks,
+                              pool->ppp_st_access,
+                              pool->ppp_st_missings,
+                              pool->ppp_st_max_wqlen,
+                              ktime_to_ms(pool->ppp_st_max_wait),
+                              pool->ppp_st_outofmem);
                }
 
                OBD_FREE(pool, sizeof(**page_pools));