ipv4: avoid a test in ip_rt_put()
authorEric Dumazet <edumazet@google.com>
Sun, 28 Oct 2012 22:33:23 +0000 (22:33 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 3 Nov 2012 18:59:04 +0000 (14:59 -0400)
We can save a test in ip_rt_put(), considering dst_release() accepts
a NULL parameter, and dst is first element in rtable.

Add a BUILD_BUG_ON() to catch any change that could break this
assertion.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Cong Wang <amwang@redhat.com>
Acked-by: Cong Wang <amwang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/route.h

index bc40b63..2ea40c1 100644 (file)
@@ -198,10 +198,13 @@ struct in_ifaddr;
 extern void fib_add_ifaddr(struct in_ifaddr *);
 extern void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *);
 
-static inline void ip_rt_put(struct rtable * rt)
+static inline void ip_rt_put(struct rtable *rt)
 {
-       if (rt)
-               dst_release(&rt->dst);
+       /* dst_release() accepts a NULL parameter.
+        * We rely on dst being first structure in struct rtable
+        */
+       BUILD_BUG_ON(offsetof(struct rtable, dst) != 0);
+       dst_release(&rt->dst);
 }
 
 #define IPTOS_RT_MASK  (IPTOS_TOS_MASK & ~3)