Loading include/linux/skbuff.h +6 −4 Original line number Diff line number Diff line Loading @@ -140,7 +140,9 @@ struct sk_buff; typedef struct skb_frag_struct skb_frag_t; struct skb_frag_struct { struct page *page; struct { struct page *p; } page; #if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536) __u32 page_offset; __u32 size; Loading Loading @@ -1175,7 +1177,7 @@ static inline void __skb_fill_page_desc(struct sk_buff *skb, int i, { skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; frag->page = page; frag->page.p = page; frag->page_offset = off; skb_frag_size_set(frag, size); } Loading Loading @@ -1699,7 +1701,7 @@ static inline void netdev_free_page(struct net_device *dev, struct page *page) */ static inline struct page *skb_frag_page(const skb_frag_t *frag) { return frag->page; return frag->page.p; } /** Loading Loading @@ -1785,7 +1787,7 @@ static inline void *skb_frag_address_safe(const skb_frag_t *frag) */ static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page) { frag->page = page; frag->page.p = page; } /** Loading net/core/skbuff.c +3 −3 Original line number Diff line number Diff line Loading @@ -668,14 +668,14 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) /* skb frags release userspace buffers */ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) put_page(skb_shinfo(skb)->frags[i].page); skb_frag_unref(skb, i); uarg->callback(uarg); /* skb frags point to kernel buffers */ for (i = skb_shinfo(skb)->nr_frags; i > 0; i--) { skb_shinfo(skb)->frags[i - 1].page_offset = 0; skb_shinfo(skb)->frags[i - 1].page = head; __skb_fill_page_desc(skb, i-1, head, 0, skb_shinfo(skb)->frags[i - 1].size); head = (struct page *)head->private; } Loading Loading
include/linux/skbuff.h +6 −4 Original line number Diff line number Diff line Loading @@ -140,7 +140,9 @@ struct sk_buff; typedef struct skb_frag_struct skb_frag_t; struct skb_frag_struct { struct page *page; struct { struct page *p; } page; #if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536) __u32 page_offset; __u32 size; Loading Loading @@ -1175,7 +1177,7 @@ static inline void __skb_fill_page_desc(struct sk_buff *skb, int i, { skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; frag->page = page; frag->page.p = page; frag->page_offset = off; skb_frag_size_set(frag, size); } Loading Loading @@ -1699,7 +1701,7 @@ static inline void netdev_free_page(struct net_device *dev, struct page *page) */ static inline struct page *skb_frag_page(const skb_frag_t *frag) { return frag->page; return frag->page.p; } /** Loading Loading @@ -1785,7 +1787,7 @@ static inline void *skb_frag_address_safe(const skb_frag_t *frag) */ static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page) { frag->page = page; frag->page.p = page; } /** Loading
net/core/skbuff.c +3 −3 Original line number Diff line number Diff line Loading @@ -668,14 +668,14 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) /* skb frags release userspace buffers */ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) put_page(skb_shinfo(skb)->frags[i].page); skb_frag_unref(skb, i); uarg->callback(uarg); /* skb frags point to kernel buffers */ for (i = skb_shinfo(skb)->nr_frags; i > 0; i--) { skb_shinfo(skb)->frags[i - 1].page_offset = 0; skb_shinfo(skb)->frags[i - 1].page = head; __skb_fill_page_desc(skb, i-1, head, 0, skb_shinfo(skb)->frags[i - 1].size); head = (struct page *)head->private; } Loading