]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/core/netpoll.c
Merge branch 'for-2.6.26' of git://git.kernel.dk/linux-2.6-block
[linux-2.6-omap-h63xx.git] / net / core / netpoll.c
index 4b7e756181c9ec96eea6b0f5397aec3c87008a5a..b04d643fc3c704cf21619251713ca190f3986554 100644 (file)
@@ -215,10 +215,12 @@ static void zap_completion_queue(void)
                while (clist != NULL) {
                        struct sk_buff *skb = clist;
                        clist = clist->next;
-                       if (skb->destructor)
+                       if (skb->destructor) {
+                               atomic_inc(&skb->users);
                                dev_kfree_skb_any(skb); /* put this one back */
-                       else
+                       } else {
                                __kfree_skb(skb);
+                       }
                }
        }
 
@@ -388,9 +390,7 @@ static void arp_reply(struct sk_buff *skb)
        if (skb->dev->flags & IFF_NOARP)
                return;
 
-       if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
-                                (2 * skb->dev->addr_len) +
-                                (2 * sizeof(u32)))))
+       if (!pskb_may_pull(skb, arp_hdr_len(skb->dev)))
                return;
 
        skb_reset_network_header(skb);
@@ -418,7 +418,7 @@ static void arp_reply(struct sk_buff *skb)
            ipv4_is_loopback(tip) || ipv4_is_multicast(tip))
                return;
 
-       size = sizeof(struct arphdr) + 2 * (skb->dev->addr_len + 4);
+       size = arp_hdr_len(skb->dev);
        send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev),
                            LL_RESERVED_SPACE(np->dev));