skbuff: Use correct allocation in skb_copy_ubufs
authorKrishna Kumar <krkumar2@in.ibm.com>
Tue, 17 Jul 2012 02:05:29 +0000 (02:05 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Jul 2012 16:40:54 +0000 (09:40 -0700)
Use correct allocation flags during copy of user space fragments
to the kernel. Also "improve" couple of for loops.

Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/skbuff.c

index 8b6d38fdb443a1d65ed29c487225e47f6c8fa1ac..c011d7fab62d557980eb97f58159de8b47c8559b 100644 (file)
@@ -751,7 +751,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
                u8 *vaddr;
                skb_frag_t *f = &skb_shinfo(skb)->frags[i];
 
-               page = alloc_page(GFP_ATOMIC);
+               page = alloc_page(gfp_mask);
                if (!page) {
                        while (head) {
                                struct page *next = (struct page *)head->private;
@@ -769,15 +769,15 @@ 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++)
+       for (i = 0; i < num_frags; i++)
                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_fill_page_desc(skb, i-1, head, 0,
-                                    skb_shinfo(skb)->frags[i - 1].size);
+       for (i = num_frags - 1; i >= 0; i--) {
+               __skb_fill_page_desc(skb, i, head, 0,
+                                    skb_shinfo(skb)->frags[i].size);
                head = (struct page *)head->private;
        }