net: flow_dissector: small optimizations in IPv4 dissect
authorEric Dumazet <edumazet@google.com>
Thu, 7 Nov 2013 16:37:28 +0000 (08:37 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Nov 2013 18:30:02 +0000 (13:30 -0500)
By moving code around, we avoid :

1) A reload of iph->ihl (bit field, so needs a mask)

2) A conditional test (replaced by a conditional mov on x86)
   Fast path loads iph->protocol anyway.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/flow_dissector.c

index 0242035..d6ef173 100644 (file)
@@ -68,13 +68,13 @@ ip:
                iph = skb_header_pointer(skb, nhoff, sizeof(_iph), &_iph);
                if (!iph || iph->ihl < 5)
                        return false;
+               nhoff += iph->ihl * 4;
 
+               ip_proto = iph->protocol;
                if (ip_is_fragment(iph))
                        ip_proto = 0;
-               else
-                       ip_proto = iph->protocol;
+
                iph_to_flow_copy_addrs(flow, iph);
-               nhoff += iph->ihl * 4;
                break;
        }
        case __constant_htons(ETH_P_IPV6): {