|
@@ -3925,6 +3925,20 @@ static struct page *__page_frag_refill(struct page_frag_cache *nc,
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
+void __page_frag_drain(struct page *page, unsigned int order,
|
|
|
+ unsigned int count)
|
|
|
+{
|
|
|
+ VM_BUG_ON_PAGE(page_ref_count(page) == 0, page);
|
|
|
+
|
|
|
+ if (page_ref_sub_and_test(page, count)) {
|
|
|
+ if (order == 0)
|
|
|
+ free_hot_cold_page(page, false);
|
|
|
+ else
|
|
|
+ __free_pages_ok(page, order);
|
|
|
+ }
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(__page_frag_drain);
|
|
|
+
|
|
|
void *__alloc_page_frag(struct page_frag_cache *nc,
|
|
|
unsigned int fragsz, gfp_t gfp_mask)
|
|
|
{
|