[PATCH] aoe [1/3]: support multiple AoE listeners
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>
This commit is contained in:
parent
1c6f3fcac0
commit
5dc401ee74
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue