caif: Don't resend if dev_queue_xmit fails.

If CAIF Link Layer returns an error, we no longer try to re-build the
CAIF packet and resend it. Instead, we simply return any transmission
errors to the socket client.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Sjur Brændeland
2011-04-11 10:43:51 +00:00
committed by David S. Miller
parent 73d6ac633c
commit 4dd820c088
9 changed files with 13 additions and 87 deletions

View File

@@ -120,25 +120,12 @@ static int transmit(struct cflayer *layer, struct cfpkt *pkt)
{
struct caif_device_entry *caifd =
container_of(layer, struct caif_device_entry, layer);
struct sk_buff *skb, *skb2;
int ret = -EINVAL;
struct sk_buff *skb;
skb = cfpkt_tonative(pkt);
skb->dev = caifd->netdev;
/*
* Don't allow SKB to be destroyed upon error, but signal resend
* notification to clients. We can't rely on the return value as
* congestion (NET_XMIT_CN) sometimes drops the packet, sometimes don't.
*/
if (netif_queue_stopped(caifd->netdev))
return -EAGAIN;
skb2 = skb_get(skb);
ret = dev_queue_xmit(skb2);
if (!ret)
kfree_skb(skb);
else
return -EAGAIN;
dev_queue_xmit(skb);
return 0;
}