Hi Cong, On Thu, Nov 3, 2016 at 4:22 AM, Cong Wang <xiyou.wangc...@gmail.com> wrote: > 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.
Yes. But I don't find good macro. NETDEV_TX_BUSY or NET_RX_DROP, which is better ? Thanks Feng > > >> 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 >> >>