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:

committed by
David S. Miller

parent
73d6ac633c
commit
4dd820c088
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user