Commit 02756ed4 authored by Krishna Kumar's avatar Krishna Kumar Committed by David S. Miller

skbuff: Use correct allocation in skb_copy_ubufs

Use correct allocation flags during copy of user space fragments
to the kernel. Also "improve" couple of for loops.
Signed-off-by: default avatarKrishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 42f59967
...@@ -751,7 +751,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) ...@@ -751,7 +751,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
u8 *vaddr; u8 *vaddr;
skb_frag_t *f = &skb_shinfo(skb)->frags[i]; skb_frag_t *f = &skb_shinfo(skb)->frags[i];
page = alloc_page(GFP_ATOMIC); page = alloc_page(gfp_mask);
if (!page) { if (!page) {
while (head) { while (head) {
struct page *next = (struct page *)head->private; struct page *next = (struct page *)head->private;
...@@ -769,15 +769,15 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) ...@@ -769,15 +769,15 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
} }
/* skb frags release userspace buffers */ /* skb frags release userspace buffers */
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) for (i = 0; i < num_frags; i++)
skb_frag_unref(skb, i); skb_frag_unref(skb, i);
uarg->callback(uarg); uarg->callback(uarg);
/* skb frags point to kernel buffers */ /* skb frags point to kernel buffers */
for (i = skb_shinfo(skb)->nr_frags; i > 0; i--) { for (i = num_frags - 1; i >= 0; i--) {
__skb_fill_page_desc(skb, i-1, head, 0, __skb_fill_page_desc(skb, i, head, 0,
skb_shinfo(skb)->frags[i - 1].size); skb_shinfo(skb)->frags[i].size);
head = (struct page *)head->private; head = (struct page *)head->private;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment