diff options
-rw-r--r-- | include/linux/skbuff.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 0336f02e3667..b814bb8fd5ab 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -1247,6 +1247,17 @@ static inline void __skb_fill_page_desc(struct sk_buff *skb, int i, | |||
1247 | { | 1247 | { |
1248 | skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; | 1248 | skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; |
1249 | 1249 | ||
1250 | /* | ||
1251 | * Propagate page->pfmemalloc to the skb if we can. The problem is | ||
1252 | * that not all callers have unique ownership of the page. If | ||
1253 | * pfmemalloc is set, we check the mapping as a mapping implies | ||
1254 | * page->index is set (index and pfmemalloc share space). | ||
1255 | * If it's a valid mapping, we cannot use page->pfmemalloc but we | ||
1256 | * do not lose pfmemalloc information as the pages would not be | ||
1257 | * allocated using __GFP_MEMALLOC. | ||
1258 | */ | ||
1259 | if (page->pfmemalloc && !page->mapping) | ||
1260 | skb->pfmemalloc = true; | ||
1250 | frag->page.p = page; | 1261 | frag->page.p = page; |
1251 | frag->page_offset = off; | 1262 | frag->page_offset = off; |
1252 | skb_frag_size_set(frag, size); | 1263 | skb_frag_size_set(frag, size); |