On Wed, Nov 2, 2016 at 2:59 AM, <f...@ikuai8.com> wrote: > From: Gao Feng <f...@ikuai8.com> > > Current veth_xmit always returns NETDEV_TX_OK whatever if it is really > sent successfully. Now return the actual value instead of NETDEV_TX_OK > always. > > Signed-off-by: Gao Feng <f...@ikuai8.com> > --- > drivers/net/veth.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/veth.c b/drivers/net/veth.c > index fbc853e..769a3bd 100644 > --- a/drivers/net/veth.c > +++ b/drivers/net/veth.c > @@ -111,15 +111,18 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, > struct net_device *dev) > struct veth_priv *priv = netdev_priv(dev); > struct net_device *rcv; > int length = skb->len; > + int ret = NETDEV_TX_OK; > > rcu_read_lock(); > rcv = rcu_dereference(priv->peer); > if (unlikely(!rcv)) { > kfree_skb(skb); > + ret = NET_RX_DROP;
Returning NET_RX_DROP doesn't look correct in a xmit function. > goto drop; > } > > - if (likely(dev_forward_skb(rcv, skb) == NET_RX_SUCCESS)) { > + ret = dev_forward_skb(rcv, skb); > + if (likely(ret == NET_RX_SUCCESS)) { > struct pcpu_vstats *stats = this_cpu_ptr(dev->vstats); > > u64_stats_update_begin(&stats->syncp); > @@ -131,7 +134,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct > net_device *dev) > atomic64_inc(&priv->dropped); > } > rcu_read_unlock(); > - return NETDEV_TX_OK; > + return ret; > } > > /* > -- > 1.9.1 > >