net: allow to propagate errors through ->ndo_hard_start_xmit()
authorPatrick McHardy <kaber@trash.net>
Tue, 10 Nov 2009 06:14:14 +0000 (06:14 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 Nov 2009 22:07:32 +0000 (14:07 -0800)
commit572a9d7b6fc7f20f573664063324c086be310c42
tree0ab3655fdfa923b0b9c6c1ee51a2e31e97e9549f
parent9ea2bdab11da97b2ac6f87d79976d25fa6d27295
net: allow to propagate errors through ->ndo_hard_start_xmit()

Currently the ->ndo_hard_start_xmit() callbacks are only permitted to return
one of the NETDEV_TX codes. This prevents any kind of error propagation for
virtual devices, like queue congestion of the underlying device in case of
layered devices, or unreachability in case of tunnels.

This patches changes the NET_XMIT codes to avoid clashes with the NETDEV_TX
codes and changes the two callers of dev_hard_start_xmit() to expect either
errno codes, NET_XMIT codes or NETDEV_TX codes as return value.

In case of qdisc_restart(), all non NETDEV_TX codes are mapped to NETDEV_TX_OK
since no error propagation is possible when using qdiscs. In case of
dev_queue_xmit(), the error is propagated upwards.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev.c
net/sched/sch_generic.c