aboutsummaryrefslogtreecommitdiff
path: root/net/phonet/af_phonet.c
diff options
context:
space:
mode:
authorGravatar Rémi Denis-Courmont <remi.denis-courmont@nokia.com> 2011-03-08 22:44:07 +0000
committerGravatar David S. Miller <davem@davemloft.net> 2011-03-09 11:59:30 -0800
commitb765e84f96f728e8e178348fc102f126c1736193 (patch)
tree2343dc694989604ea873923936cace52e5157040 /net/phonet/af_phonet.c
parentPhonet: fix NULL dereference on TX path with implicit source (diff)
downloadlinux-b765e84f96f728e8e178348fc102f126c1736193.tar.gz
linux-b765e84f96f728e8e178348fc102f126c1736193.tar.bz2
linux-b765e84f96f728e8e178348fc102f126c1736193.zip
Phonet: return an error when packet TX fails
Phonet assumes that packets are never dropped. We try our best to avoid this situation. But lets return ENOBUFS if queueing to the network device fails so that the caller knows things went wrong. Signed-off-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/phonet/af_phonet.c')
-rw-r--r--net/phonet/af_phonet.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/net/phonet/af_phonet.c b/net/phonet/af_phonet.c
index 4706b77e67bf..c6fffd946d42 100644
--- a/net/phonet/af_phonet.c
+++ b/net/phonet/af_phonet.c
@@ -195,11 +195,7 @@ static int pn_send(struct sk_buff *skb, struct net_device *dev,
if (skb->pkt_type == PACKET_LOOPBACK) {
skb_reset_mac_header(skb);
skb_orphan(skb);
- if (irq)
- netif_rx(skb);
- else
- netif_rx_ni(skb);
- err = 0;
+ err = (irq ? netif_rx(skb) : netif_rx_ni(skb)) ? -ENOBUFS : 0;
} else {
err = dev_hard_header(skb, dev, ntohs(skb->protocol),
NULL, NULL, skb->len);
@@ -208,6 +204,8 @@ static int pn_send(struct sk_buff *skb, struct net_device *dev,
goto drop;
}
err = dev_queue_xmit(skb);
+ if (unlikely(err > 0))
+ err = net_xmit_errno(err);
}
return err;