diff options
-rw-r--r-- | mm/page_alloc.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8404b36794ce..f0617cf88706 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -4557,8 +4557,14 @@ void page_frag_free(void *addr) | |||
4557 | { | 4557 | { |
4558 | struct page *page = virt_to_head_page(addr); | 4558 | struct page *page = virt_to_head_page(addr); |
4559 | 4559 | ||
4560 | if (unlikely(put_page_testzero(page))) | 4560 | if (unlikely(put_page_testzero(page))) { |
4561 | __free_pages_ok(page, compound_order(page)); | 4561 | unsigned int order = compound_order(page); |
4562 | |||
4563 | if (order == 0) /* Via pcp? */ | ||
4564 | free_unref_page(page); | ||
4565 | else | ||
4566 | __free_pages_ok(page, order); | ||
4567 | } | ||
4562 | } | 4568 | } |
4563 | EXPORT_SYMBOL(page_frag_free); | 4569 | EXPORT_SYMBOL(page_frag_free); |
4564 | 4570 | ||