aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-05-09 17:38:06 -0400
committerDavid S. Miller <davem@davemloft.net>2011-05-12 18:23:23 -0400
commit44e3125ccd521585e73e6dd228b283ab26993c68 (patch)
tree8d573e59fd982deacb93b3b6101c24e1c2854ad8 /net/netfilter
parente58b34425bfcb08c6bc8c520b82c37ffcec87072 (diff)
ipvs: Eliminate rt->rt_dst usage in __ip_vs_get_out_rt().
We can simply track what destination address is used based upon which code block is taken at the top of the function. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter')
-rw-r--r--net/netfilter/ipvs/ip_vs_xmit.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
index 5d393c5a802d..3f3e0f4c38a5 100644
--- a/net/netfilter/ipvs/ip_vs_xmit.c
+++ b/net/netfilter/ipvs/ip_vs_xmit.c
@@ -110,6 +110,7 @@ __ip_vs_get_out_rt(struct sk_buff *skb, struct ip_vs_dest *dest,
110 &dest->addr.ip, 110 &dest->addr.ip,
111 atomic_read(&rt->dst.__refcnt), rtos); 111 atomic_read(&rt->dst.__refcnt), rtos);
112 } 112 }
113 daddr = dest->addr.ip;
113 spin_unlock(&dest->dst_lock); 114 spin_unlock(&dest->dst_lock);
114 } else { 115 } else {
115 rt = ip_route_output(net, daddr, 0, rtos, 0); 116 rt = ip_route_output(net, daddr, 0, rtos, 0);
@@ -125,7 +126,7 @@ __ip_vs_get_out_rt(struct sk_buff *skb, struct ip_vs_dest *dest,
125 rt_mode)) { 126 rt_mode)) {
126 IP_VS_DBG_RL("Stopping traffic to %s address, dest: %pI4\n", 127 IP_VS_DBG_RL("Stopping traffic to %s address, dest: %pI4\n",
127 (rt->rt_flags & RTCF_LOCAL) ? 128 (rt->rt_flags & RTCF_LOCAL) ?
128 "local":"non-local", &rt->rt_dst); 129 "local":"non-local", &daddr);
129 ip_rt_put(rt); 130 ip_rt_put(rt);
130 return NULL; 131 return NULL;
131 } 132 }
@@ -133,14 +134,14 @@ __ip_vs_get_out_rt(struct sk_buff *skb, struct ip_vs_dest *dest,
133 !((ort = skb_rtable(skb)) && ort->rt_flags & RTCF_LOCAL)) { 134 !((ort = skb_rtable(skb)) && ort->rt_flags & RTCF_LOCAL)) {
134 IP_VS_DBG_RL("Redirect from non-local address %pI4 to local " 135 IP_VS_DBG_RL("Redirect from non-local address %pI4 to local "
135 "requires NAT method, dest: %pI4\n", 136 "requires NAT method, dest: %pI4\n",
136 &ip_hdr(skb)->daddr, &rt->rt_dst); 137 &ip_hdr(skb)->daddr, &daddr);
137 ip_rt_put(rt); 138 ip_rt_put(rt);
138 return NULL; 139 return NULL;
139 } 140 }
140 if (unlikely(!local && ipv4_is_loopback(ip_hdr(skb)->saddr))) { 141 if (unlikely(!local && ipv4_is_loopback(ip_hdr(skb)->saddr))) {
141 IP_VS_DBG_RL("Stopping traffic from loopback address %pI4 " 142 IP_VS_DBG_RL("Stopping traffic from loopback address %pI4 "
142 "to non-local address, dest: %pI4\n", 143 "to non-local address, dest: %pI4\n",
143 &ip_hdr(skb)->saddr, &rt->rt_dst); 144 &ip_hdr(skb)->saddr, &daddr);
144 ip_rt_put(rt); 145 ip_rt_put(rt);
145 return NULL; 146 return NULL;
146 } 147 }