aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-03-02 17:31:35 -0500
committerDavid S. Miller <davem@davemloft.net>2011-03-02 17:31:35 -0500
commitb23dd4fe42b455af5c6e20966b7d6959fa8352ea (patch)
treebf97323eae9a8d084170e573ff2c0c40bc72c3cd /net/bridge
parent452edd598f60522c11f7f88fdbab27eb36509d1a (diff)
ipv4: Make output route lookup return rtable directly.
Instead of on the stack. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r--net/bridge/br_netfilter.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
index 4b5b66d07bb..45b57b173f7 100644
--- a/net/bridge/br_netfilter.c
+++ b/net/bridge/br_netfilter.c
@@ -428,14 +428,15 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
428 if (err != -EHOSTUNREACH || !in_dev || IN_DEV_FORWARD(in_dev)) 428 if (err != -EHOSTUNREACH || !in_dev || IN_DEV_FORWARD(in_dev))
429 goto free_skb; 429 goto free_skb;
430 430
431 if (!ip_route_output_key(dev_net(dev), &rt, &fl)) { 431 rt = ip_route_output_key(dev_net(dev), &fl);
432 if (!IS_ERR(rt)) {
432 /* - Bridged-and-DNAT'ed traffic doesn't 433 /* - Bridged-and-DNAT'ed traffic doesn't
433 * require ip_forwarding. */ 434 * require ip_forwarding. */
434 if (((struct dst_entry *)rt)->dev == dev) { 435 if (rt->dst.dev == dev) {
435 skb_dst_set(skb, (struct dst_entry *)rt); 436 skb_dst_set(skb, &rt->dst);
436 goto bridged_dnat; 437 goto bridged_dnat;
437 } 438 }
438 dst_release((struct dst_entry *)rt); 439 ip_rt_put(rt);
439 } 440 }
440free_skb: 441free_skb:
441 kfree_skb(skb); 442 kfree_skb(skb);