Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dc401ee authored by Ed L. Cashin's avatar Ed L. Cashin Committed by Greg Kroah-Hartman
Browse files

[PATCH] aoe [1/3]: support multiple AoE listeners



Always clone incoming skbs, allowing other AoE listeners
to exist in the kernel.

Signed-off-by: default avatar"Ed L. Cashin" <ecashin@coraid.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 1c6f3fca
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -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;