Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipv4: avoid a test in ip_rt_put()

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>

authored by

Eric Dumazet and committed by
David S. Miller
6da025fa b26ddd81

+6 -3
+6 -3
include/net/route.h
··· 198 198 extern void fib_add_ifaddr(struct in_ifaddr *); 199 199 extern void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *); 200 200 201 - static inline void ip_rt_put(struct rtable * rt) 201 + static inline void ip_rt_put(struct rtable *rt) 202 202 { 203 - if (rt) 204 - dst_release(&rt->dst); 203 + /* dst_release() accepts a NULL parameter. 204 + * We rely on dst being first structure in struct rtable 205 + */ 206 + BUILD_BUG_ON(offsetof(struct rtable, dst) != 0); 207 + dst_release(&rt->dst); 205 208 } 206 209 207 210 #define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)