diff options
Diffstat (limited to 'include/linux/skbuff.h')
| -rw-r--r-- | include/linux/skbuff.h | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 821c7f45d2a..441f5bfdab8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -500,7 +500,7 @@ struct sk_buff {  	union {  		__u32		mark;  		__u32		dropcount; -		__u32		avail_size; +		__u32		reserved_tailroom;  	};  	sk_buff_data_t		inner_transport_header; @@ -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;  }  /** @@ -1447,7 +1449,10 @@ static inline int skb_tailroom(const struct sk_buff *skb)   */  static inline int skb_availroom(const struct sk_buff *skb)  { -	return skb_is_nonlinear(skb) ? 0 : skb->avail_size - skb->len; +	if (skb_is_nonlinear(skb)) +		return 0; + +	return skb->end - skb->tail - skb->reserved_tailroom;  }  /** |