diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 6f2bb860e0512f2ca078475026a426875bc87c9c..441f5bfdab8ea476749bb512d2c7deeed7399a83 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1288,11 +1288,13 @@ static inline void __skb_fill_page_desc(struct sk_buff *skb, int i,
 	 * do not lose pfmemalloc information as the pages would not be
 	 * allocated using __GFP_MEMALLOC.
 	 */
-	if (page->pfmemalloc && !page->mapping)
-		skb->pfmemalloc	= true;
 	frag->page.p		  = page;
 	frag->page_offset	  = off;
 	skb_frag_size_set(frag, size);
+
+	page = compound_head(page);
+	if (page->pfmemalloc && !page->mapping)
+		skb->pfmemalloc	= true;
 }
 
 /**