ipv4: Optimize flow initialization in input route lookup.
David S. Miller [Thu, 10 Mar 2011 04:42:07 +0000 (20:42 -0800)]
Like in commit 44713b67db10c774f14280c129b0d5fd13c70cf2
("ipv4: Optimize flow initialization in output route lookup."
we can optimize the on-stack flow setup to only initialize
the members which are actually used.

Otherwise we bzero the entire structure, then initialize
explicitly the first half of it.

Signed-off-by: David S. Miller <davem@davemloft.net>

net/ipv4/route.c

index 92a24ea..ac32d8f 100644 (file)
@@ -2081,12 +2081,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
 {
        struct fib_result res;
        struct in_device *in_dev = __in_dev_get_rcu(dev);
-       struct flowi fl = { .fl4_dst    = daddr,
-                           .fl4_src    = saddr,
-                           .fl4_tos    = tos,
-                           .fl4_scope  = RT_SCOPE_UNIVERSE,
-                           .mark = skb->mark,
-                           .iif = dev->ifindex };
+       struct flowi fl;
        unsigned        flags = 0;
        u32             itag = 0;
        struct rtable * rth;
@@ -2123,6 +2118,13 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
        /*
         *      Now we are ready to route packet.
         */
+       fl.oif = 0;
+       fl.iif = dev->ifindex;
+       fl.mark = skb->mark;
+       fl.fl4_dst = daddr;
+       fl.fl4_src = saddr;
+       fl.fl4_tos = tos;
+       fl.fl4_scope = RT_SCOPE_UNIVERSE;
        err = fib_lookup(net, &fl, &res);
        if (err != 0) {
                if (!IN_DEV_FORWARD(in_dev))