net: flow_dissector: fix RPS on DSA masters
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 14 Jun 2021 13:58:19 +0000 (16:58 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Jun 2021 20:15:22 +0000 (13:15 -0700)
After the blamed patch, __skb_flow_dissect() on the DSA master stopped
adjusting for the length of the DSA headers. This is because it was told
to adjust only if the needed_headroom is zero, aka if there is no DSA
header. Of course, the adjustment should be done only if there _is_ a
DSA header.

Modify the comment too so it is clearer.

Fixes: 4e50025129ef ("net: dsa: generalize overhead for taggers that use both headers and trailers")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/flow_dissector.c

index c04455981c1e592fd12c281f7e3e276133fba297..2aadbfc5193b309f49a7cdc3e47a5482b76514ce 100644 (file)
@@ -943,8 +943,8 @@ bool __skb_flow_dissect(const struct net *net,
                        int offset = 0;
 
                        ops = skb->dev->dsa_ptr->tag_ops;
-                       /* Tail taggers don't break flow dissection */
-                       if (!ops->needed_headroom) {
+                       /* Only DSA header taggers break flow dissection */
+                       if (ops->needed_headroom) {
                                if (ops->flow_dissect)
                                        ops->flow_dissect(skb, &proto, &offset);
                                else