kernel: 5.10: simplify logic in packet mangling patch

I had quite a hard time to understand what the change to net/core/dev.c
is supposed to do.

Simplify the change by returning NETDEV_TX_OK in case a eth_mangle_tx
callback was set but returned NULL instead of setting the return value
in the else branch.

Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
Mathias Kresin 2021-10-23 21:14:04 +02:00
parent 1470009bf8
commit f7f12495bc

View File

@ -105,33 +105,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
help help
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -3638,11 +3638,21 @@ static int xmit_one(struct sk_buff *skb, @@ -3638,6 +3638,11 @@ static int xmit_one(struct sk_buff *skb,
if (dev_nit_active(dev)) if (dev_nit_active(dev))
dev_queue_xmit_nit(skb, dev); dev_queue_xmit_nit(skb, dev);
- len = skb->len;
- PRANDOM_ADD_NOISE(skb, dev, txq, len + jiffies);
- trace_net_dev_start_xmit(skb, dev);
- rc = netdev_start_xmit(skb, dev, txq, more);
- trace_net_dev_xmit(skb, rc, dev, len);
+#ifdef CONFIG_ETHERNET_PACKET_MANGLE +#ifdef CONFIG_ETHERNET_PACKET_MANGLE
+ if (!dev->eth_mangle_tx || + if (dev->eth_mangle_tx && !(skb = dev->eth_mangle_tx(dev, skb)))
+ (skb = dev->eth_mangle_tx(dev, skb)) != NULL) + return NETDEV_TX_OK;
+#else
+ if (1)
+#endif +#endif
+ { +
+ len = skb->len; len = skb->len;
+ PRANDOM_ADD_NOISE(skb, dev, txq, len + jiffies); PRANDOM_ADD_NOISE(skb, dev, txq, len + jiffies);
+ trace_net_dev_start_xmit(skb, dev); trace_net_dev_start_xmit(skb, dev);
+ rc = netdev_start_xmit(skb, dev, txq, more);
+ trace_net_dev_xmit(skb, rc, dev, len);
+ } else {
+ rc = NETDEV_TX_OK;
+ }
return rc;
}
--- a/net/core/skbuff.c --- a/net/core/skbuff.c
+++ b/net/core/skbuff.c +++ b/net/core/skbuff.c
@@ -60,6 +60,7 @@ @@ -60,6 +60,7 @@