diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f64e7bcb43b7..2c6d5f64feca 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -3925,6 +3925,20 @@ static struct page *__page_frag_refill(struct page_frag_cache *nc, | |||
3925 | return page; | 3925 | return page; |
3926 | } | 3926 | } |
3927 | 3927 | ||
3928 | void __page_frag_drain(struct page *page, unsigned int order, | ||
3929 | unsigned int count) | ||
3930 | { | ||
3931 | VM_BUG_ON_PAGE(page_ref_count(page) == 0, page); | ||
3932 | |||
3933 | if (page_ref_sub_and_test(page, count)) { | ||
3934 | if (order == 0) | ||
3935 | free_hot_cold_page(page, false); | ||
3936 | else | ||
3937 | __free_pages_ok(page, order); | ||
3938 | } | ||
3939 | } | ||
3940 | EXPORT_SYMBOL(__page_frag_drain); | ||
3941 | |||
3928 | void *__alloc_page_frag(struct page_frag_cache *nc, | 3942 | void *__alloc_page_frag(struct page_frag_cache *nc, |
3929 | unsigned int fragsz, gfp_t gfp_mask) | 3943 | unsigned int fragsz, gfp_t gfp_mask) |
3930 | { | 3944 | { |