[PATCH] aoe [1/3]: support multiple AoE listeners
authorEd L. Cashin <ecashin@coraid.com>
Tue, 7 Feb 2006 16:26:39 +0000 (11:26 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 24 Mar 2006 06:01:56 +0000 (22:01 -0800)
Always clone incoming skbs, allowing other AoE listeners
to exist in the kernel.

Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/block/aoe/aoenet.c

index 4be976940f6971f28bc03b18bab09312c0be9957..fdff774b8ab944421ad0190486e98cc4c5f458a5 100644 (file)
@@ -92,18 +92,6 @@ mac_addr(char addr[6])
        return __be64_to_cpu(n);
 }
 
-static struct sk_buff *
-skb_check(struct sk_buff *skb)
-{
-       if (skb_is_nonlinear(skb))
-       if ((skb = skb_share_check(skb, GFP_ATOMIC)))
-       if (skb_linearize(skb, GFP_ATOMIC) < 0) {
-               dev_kfree_skb(skb);
-               return NULL;
-       }
-       return skb;
-}
-
 void
 aoenet_xmit(struct sk_buff *sl)
 {
@@ -125,14 +113,14 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
        struct aoe_hdr *h;
        u32 n;
 
-       skb = skb_check(skb);
-       if (!skb)
+       skb = skb_share_check(skb, GFP_ATOMIC);
+       if (skb == NULL)
                return 0;
-
+       if (skb_is_nonlinear(skb))
+       if (skb_linearize(skb, GFP_ATOMIC) < 0)
+               goto exit;
        if (!is_aoe_netif(ifp))
                goto exit;
-
-       //skb->len += ETH_HLEN; /* (1) */
        skb_push(skb, ETH_HLEN);        /* (1) */
 
        h = (struct aoe_hdr *) skb->mac.raw;