Message ID | 20230616033317.26635-1-cambda@linux.alibaba.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] ipvlan: Fix return value of ipvlan_queue_xmit() | expand |
On Fri, Jun 16, 2023 at 5:34 AM Cambda Zhu <cambda@linux.alibaba.com> wrote: > > The ipvlan_queue_xmit() should return NET_XMIT_XXX, > but ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX > in some cases. The skb to forward could be treated as xmitted > successfully. > > Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com> Please make sure to CC ipvlan author ? CC Mahesh > --- > drivers/net/ipvlan/ipvlan_core.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c > index ab5133eb1d51..e45817caaee8 100644 > --- a/drivers/net/ipvlan/ipvlan_core.c > +++ b/drivers/net/ipvlan/ipvlan_core.c > @@ -585,7 +585,8 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev) > consume_skb(skb); > return NET_XMIT_DROP; > } > - return ipvlan_rcv_frame(addr, &skb, true); > + ipvlan_rcv_frame(addr, &skb, true); > + return NET_XMIT_SUCCESS; > } > } > out: > @@ -611,7 +612,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) > consume_skb(skb); > return NET_XMIT_DROP; > } > - return ipvlan_rcv_frame(addr, &skb, true); > + ipvlan_rcv_frame(addr, &skb, true); > + return NET_XMIT_SUCCESS; > } > } > skb = skb_share_check(skb, GFP_ATOMIC); > @@ -623,7 +625,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) > * the skb for the main-dev. At the RX side we just return > * RX_PASS for it to be processed further on the stack. > */ > - return dev_forward_skb(ipvlan->phy_dev, skb); > + dev_forward_skb(ipvlan->phy_dev, skb); > + return NET_XMIT_SUCCESS; > > } else if (is_multicast_ether_addr(eth->h_dest)) { > skb_reset_mac_header(skb); > -- > 2.16.6 >
> On Jun 16, 2023, at 16:05, Eric Dumazet <edumazet@google.com> wrote: > > On Fri, Jun 16, 2023 at 5:34 AM Cambda Zhu <cambda@linux.alibaba.com> wrote: >> >> The ipvlan_queue_xmit() should return NET_XMIT_XXX, >> but ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX >> in some cases. The skb to forward could be treated as xmitted >> successfully. >> >> Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com> > > Please make sure to CC ipvlan author ? > > CC Mahesh > >> --- >> drivers/net/ipvlan/ipvlan_core.c | 9 ++++++--- >> 1 file changed, 6 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c >> index ab5133eb1d51..e45817caaee8 100644 >> --- a/drivers/net/ipvlan/ipvlan_core.c >> +++ b/drivers/net/ipvlan/ipvlan_core.c >> @@ -585,7 +585,8 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev) >> consume_skb(skb); >> return NET_XMIT_DROP; >> } >> - return ipvlan_rcv_frame(addr, &skb, true); >> + ipvlan_rcv_frame(addr, &skb, true); >> + return NET_XMIT_SUCCESS; >> } >> } >> out: >> @@ -611,7 +612,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) >> consume_skb(skb); >> return NET_XMIT_DROP; >> } >> - return ipvlan_rcv_frame(addr, &skb, true); >> + ipvlan_rcv_frame(addr, &skb, true); >> + return NET_XMIT_SUCCESS; >> } >> } >> skb = skb_share_check(skb, GFP_ATOMIC); >> @@ -623,7 +625,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) >> * the skb for the main-dev. At the RX side we just return >> * RX_PASS for it to be processed further on the stack. >> */ >> - return dev_forward_skb(ipvlan->phy_dev, skb); >> + dev_forward_skb(ipvlan->phy_dev, skb); >> + return NET_XMIT_SUCCESS; >> >> } else if (is_multicast_ether_addr(eth->h_dest)) { >> skb_reset_mac_header(skb); >> -- >> 2.16.6 I have resubmitted v1 patch with Fixes tag and CC Mahesh via reply. Thanks! Cambda
diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c index ab5133eb1d51..e45817caaee8 100644 --- a/drivers/net/ipvlan/ipvlan_core.c +++ b/drivers/net/ipvlan/ipvlan_core.c @@ -585,7 +585,8 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev) consume_skb(skb); return NET_XMIT_DROP; } - return ipvlan_rcv_frame(addr, &skb, true); + ipvlan_rcv_frame(addr, &skb, true); + return NET_XMIT_SUCCESS; } } out: @@ -611,7 +612,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) consume_skb(skb); return NET_XMIT_DROP; } - return ipvlan_rcv_frame(addr, &skb, true); + ipvlan_rcv_frame(addr, &skb, true); + return NET_XMIT_SUCCESS; } } skb = skb_share_check(skb, GFP_ATOMIC); @@ -623,7 +625,8 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) * the skb for the main-dev. At the RX side we just return * RX_PASS for it to be processed further on the stack. */ - return dev_forward_skb(ipvlan->phy_dev, skb); + dev_forward_skb(ipvlan->phy_dev, skb); + return NET_XMIT_SUCCESS; } else if (is_multicast_ether_addr(eth->h_dest)) { skb_reset_mac_header(skb);
The ipvlan_queue_xmit() should return NET_XMIT_XXX, but ipvlan_xmit_mode_l2/l3() returns rx_handler_result_t or NET_RX_XXX in some cases. The skb to forward could be treated as xmitted successfully. Signed-off-by: Cambda Zhu <cambda@linux.alibaba.com> --- drivers/net/ipvlan/ipvlan_core.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)