#define POOLS_COUNT (PPOOL_MAX_CHUNK_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 PAGES_TO_MiB(pages) ((pages) >> (20 - PAGE_SHIFT))
#define MiB_TO_PAGES(mb) ((mb) << (20 - PAGE_SHIFT))
/* deprecated - see pool_max_memory_mb below */
struct mutex add_pages_mutex;
} **page_pools;
+static int element_size(struct ptlrpc_page_pool *pool)
+{
+ if (pool->ppp_index == 0)
+ return PAGE_SIZE;
+
+ return 1 << (PPOOL_MIN_CHUNK_BITS + pool->ppp_index - 1);
+}
+
/*
* Keep old name (encrypt_page_pool vs page_pool) for compatibility with user
* tools pulling stats
if (!pool->ppp_st_access)
continue;
spin_lock(&pool->ppp_lock);
- seq_printf(m, " pool_%luk:\n"
+ seq_printf(m, " pool_%dk:\n"
" max_pages: %lu\n"
" max_pools: %u\n"
" total_pages: %lu\n"
" max_waitqueue_depth: %u\n"
" max_wait_time_ms: %lld\n"
" out_of_mem: %lu\n",
- (pool_index ? ELEMENT_SIZE(pool_index - 10) :
- PAGE_SIZE >> 10),
+ /* convert from bytes to KiB */
+ element_size(pool) >> 10,
pool->ppp_max_pages,
pool->ppp_max_pools,
pool->ppp_total_pages,
__free_page(pool->ppp_pools[p_idx][g_idx]);
else
OBD_FREE_LARGE(pool->ppp_pools[p_idx][g_idx],
- ELEMENT_SIZE(pool->ppp_index));
+ element_size(pool));
pool->ppp_pools[p_idx][g_idx] = NULL;
__free_page(pools[i][j]);
} else {
OBD_FREE_LARGE(pools[i][j],
- ELEMENT_SIZE(pool->ppp_index));
+ element_size(pool));
}
cleaned++;
}
int i, j, rc = -ENOMEM;
unsigned int pool_index = page_pool->ppp_index;
- if (pool_index == PAGES_POOL) {
- if (npages < POOL_INIT_SIZE >> PAGE_SHIFT)
- npages = POOL_INIT_SIZE >> PAGE_SHIFT;
- } else {
- if (npages < POOL_INIT_SIZE / ELEMENT_SIZE(pool_index))
- npages = POOL_INIT_SIZE / ELEMENT_SIZE(pool_index);
- }
+ if (npages < POOL_INIT_SIZE / element_size(page_pool))
+ npages = POOL_INIT_SIZE / element_size(page_pool);
mutex_lock(&page_pool->add_pages_mutex);
__GFP_HIGHMEM);
else {
OBD_ALLOC_LARGE(pools[i][j],
- ELEMENT_SIZE(pool_index));
+ element_size(page_pool));
}
if (pools[i][j] == NULL)
goto out_pools;
CDEBUG(D_SEC,
"pool %d is %lu elements (size %d bytes), growing by %d items\n",
pool->ppp_index, pool->ppp_pages_short,
- ELEMENT_SIZE(pool->ppp_index), to_add);
+ element_size(pool), to_add);
/* we can't hold a spinlock over page allocation */
rc = pool_add_pages(to_add, pool);
if (rc == 0)