aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
Diffstat (limited to 'net/core')
-rw-r--r--net/core/skbuff.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 8b6d38fdb443..c011d7fab62d 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -751,7 +751,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
751 u8 *vaddr; 751 u8 *vaddr;
752 skb_frag_t *f = &skb_shinfo(skb)->frags[i]; 752 skb_frag_t *f = &skb_shinfo(skb)->frags[i];
753 753
754 page = alloc_page(GFP_ATOMIC); 754 page = alloc_page(gfp_mask);
755 if (!page) { 755 if (!page) {
756 while (head) { 756 while (head) {
757 struct page *next = (struct page *)head->private; 757 struct page *next = (struct page *)head->private;
@@ -769,15 +769,15 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
769 } 769 }
770 770
771 /* skb frags release userspace buffers */ 771 /* skb frags release userspace buffers */
772 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) 772 for (i = 0; i < num_frags; i++)
773 skb_frag_unref(skb, i); 773 skb_frag_unref(skb, i);
774 774
775 uarg->callback(uarg); 775 uarg->callback(uarg);
776 776
777 /* skb frags point to kernel buffers */ 777 /* skb frags point to kernel buffers */
778 for (i = skb_shinfo(skb)->nr_frags; i > 0; i--) { 778 for (i = num_frags - 1; i >= 0; i--) {
779 __skb_fill_page_desc(skb, i-1, head, 0, 779 __skb_fill_page_desc(skb, i, head, 0,
780 skb_shinfo(skb)->frags[i - 1].size); 780 skb_shinfo(skb)->frags[i].size);
781 head = (struct page *)head->private; 781 head = (struct page *)head->private;
782 } 782 }
783 783