Message ID | 20231121055255.3627949-1-yoshihiro.shimoda.uh@renesas.com (mailing list archive) |
---|---|
State | Under Review |
Delegated to: | Kieran Bingham |
Headers | show |
Series | [net] net: rswitch: Fix error path in rswitch_start_xmit() | expand |
On 11/21/23 8:52 AM, Yoshihiro Shimoda wrote: > This .ndo_start_xmit() function should return netdev_tx_t value, > not -ENOMEM. Also, before returning the function, dev_kfree_skb_any() > should be called. So, fix them. Sounds like 2 separate issues -- each needing a patch of its own... > Fixes: 33f5d733b589 ("net: renesas: rswitch: Improve TX timestamp accuracy") > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > --- > drivers/net/ethernet/renesas/rswitch.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c > index 43a7795d6591..fc9dcf5fa166 100644 > --- a/drivers/net/ethernet/renesas/rswitch.c > +++ b/drivers/net/ethernet/renesas/rswitch.c > @@ -1535,7 +1535,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd > ts_info = kzalloc(sizeof(*ts_info), GFP_ATOMIC); > if (!ts_info) { > dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE); > - return -ENOMEM; > + dev_kfree_skb_any(skb); > + return ret; Looks like we have the same error path as when dma_mapping_error() returns error. Shouldn't we use *goto*? Although probably can be done later, as a cleanup... [...] MBR, Sergey
Hello, > From: Sergey Shtylyov, Sent: Tuesday, November 21, 2023 5:56 PM > > On 11/21/23 8:52 AM, Yoshihiro Shimoda wrote: > > > This .ndo_start_xmit() function should return netdev_tx_t value, > > not -ENOMEM. Also, before returning the function, dev_kfree_skb_any() > > should be called. So, fix them. > > Sounds like 2 separate issues -- each needing a patch of its own... Thank you for your review! I got it. > > Fixes: 33f5d733b589 ("net: renesas: rswitch: Improve TX timestamp accuracy") > > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > > --- > > drivers/net/ethernet/renesas/rswitch.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c > > index 43a7795d6591..fc9dcf5fa166 100644 > > --- a/drivers/net/ethernet/renesas/rswitch.c > > +++ b/drivers/net/ethernet/renesas/rswitch.c > > @@ -1535,7 +1535,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd > > ts_info = kzalloc(sizeof(*ts_info), GFP_ATOMIC); > > if (!ts_info) { > > dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE); > > - return -ENOMEM; > > + dev_kfree_skb_any(skb); > > + return ret; > > Looks like we have the same error path as when dma_mapping_error() > returns error. Shouldn't we use *goto*? Although probably can be done > later, as a cleanup... Thank you for your suggestion. Perhaps, using goto is better. I'll make a such a patch on v2. Best regards, Yoshihiro Shimoda > [...] > > MBR, Sergey
diff --git a/drivers/net/ethernet/renesas/rswitch.c b/drivers/net/ethernet/renesas/rswitch.c index 43a7795d6591..fc9dcf5fa166 100644 --- a/drivers/net/ethernet/renesas/rswitch.c +++ b/drivers/net/ethernet/renesas/rswitch.c @@ -1535,7 +1535,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd ts_info = kzalloc(sizeof(*ts_info), GFP_ATOMIC); if (!ts_info) { dma_unmap_single(ndev->dev.parent, dma_addr, skb->len, DMA_TO_DEVICE); - return -ENOMEM; + dev_kfree_skb_any(skb); + return ret; } skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
This .ndo_start_xmit() function should return netdev_tx_t value, not -ENOMEM. Also, before returning the function, dev_kfree_skb_any() should be called. So, fix them. Fixes: 33f5d733b589 ("net: renesas: rswitch: Improve TX timestamp accuracy") Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> --- drivers/net/ethernet/renesas/rswitch.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)