aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/z3fold.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/mm/z3fold.c b/mm/z3fold.c
index 99be52c5ca45..985732c8b025 100644
--- a/mm/z3fold.c
+++ b/mm/z3fold.c
@@ -190,10 +190,11 @@ static int size_to_chunks(size_t size)
190 190
191static void compact_page_work(struct work_struct *w); 191static void compact_page_work(struct work_struct *w);
192 192
193static inline struct z3fold_buddy_slots *alloc_slots(struct z3fold_pool *pool) 193static inline struct z3fold_buddy_slots *alloc_slots(struct z3fold_pool *pool,
194 gfp_t gfp)
194{ 195{
195 struct z3fold_buddy_slots *slots = kmem_cache_alloc(pool->c_handle, 196 struct z3fold_buddy_slots *slots = kmem_cache_alloc(pool->c_handle,
196 GFP_KERNEL); 197 gfp);
197 198
198 if (slots) { 199 if (slots) {
199 memset(slots->slot, 0, sizeof(slots->slot)); 200 memset(slots->slot, 0, sizeof(slots->slot));
@@ -295,10 +296,10 @@ static void z3fold_unregister_migration(struct z3fold_pool *pool)
295 296
296/* Initializes the z3fold header of a newly allocated z3fold page */ 297/* Initializes the z3fold header of a newly allocated z3fold page */
297static struct z3fold_header *init_z3fold_page(struct page *page, 298static struct z3fold_header *init_z3fold_page(struct page *page,
298 struct z3fold_pool *pool) 299 struct z3fold_pool *pool, gfp_t gfp)
299{ 300{
300 struct z3fold_header *zhdr = page_address(page); 301 struct z3fold_header *zhdr = page_address(page);
301 struct z3fold_buddy_slots *slots = alloc_slots(pool); 302 struct z3fold_buddy_slots *slots = alloc_slots(pool, gfp);
302 303
303 if (!slots) 304 if (!slots)
304 return NULL; 305 return NULL;
@@ -912,7 +913,7 @@ retry:
912 if (!page) 913 if (!page)
913 return -ENOMEM; 914 return -ENOMEM;
914 915
915 zhdr = init_z3fold_page(page, pool); 916 zhdr = init_z3fold_page(page, pool, gfp);
916 if (!zhdr) { 917 if (!zhdr) {
917 __free_page(page); 918 __free_page(page);
918 return -ENOMEM; 919 return -ENOMEM;