aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
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 /drivers/net
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 'drivers/net')
-rw-r--r--drivers/net/bonding/bond_main.c6
-rw-r--r--drivers/net/cnic.c7
-rw-r--r--drivers/net/pptp.c8
3 files changed, 12 insertions, 9 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 584f97b73060..0592e6da15a6 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -2681,7 +2681,7 @@ static void bond_arp_send(struct net_device *slave_dev, int arp_op, __be32 dest_
2681 2681
2682static void bond_arp_send_all(struct bonding *bond, struct slave *slave) 2682static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
2683{ 2683{
2684 int i, vlan_id, rv; 2684 int i, vlan_id;
2685 __be32 *targets = bond->params.arp_targets; 2685 __be32 *targets = bond->params.arp_targets;
2686 struct vlan_entry *vlan; 2686 struct vlan_entry *vlan;
2687 struct net_device *vlan_dev; 2687 struct net_device *vlan_dev;
@@ -2708,8 +2708,8 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
2708 fl.fl4_dst = targets[i]; 2708 fl.fl4_dst = targets[i];
2709 fl.fl4_tos = RTO_ONLINK; 2709 fl.fl4_tos = RTO_ONLINK;
2710 2710
2711 rv = ip_route_output_key(dev_net(bond->dev), &rt, &fl); 2711 rt = ip_route_output_key(dev_net(bond->dev), &fl);
2712 if (rv) { 2712 if (IS_ERR(rt)) {
2713 if (net_ratelimit()) { 2713 if (net_ratelimit()) {
2714 pr_warning("%s: no route to arp_ip_target %pI4\n", 2714 pr_warning("%s: no route to arp_ip_target %pI4\n",
2715 bond->dev->name, &fl.fl4_dst); 2715 bond->dev->name, &fl.fl4_dst);
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
index 5274de3e1bb9..25f08880ae0f 100644
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -3397,9 +3397,12 @@ static int cnic_get_v4_route(struct sockaddr_in *dst_addr,
3397 memset(&fl, 0, sizeof(fl)); 3397 memset(&fl, 0, sizeof(fl));
3398 fl.nl_u.ip4_u.daddr = dst_addr->sin_addr.s_addr; 3398 fl.nl_u.ip4_u.daddr = dst_addr->sin_addr.s_addr;
3399 3399
3400 err = ip_route_output_key(&init_net, &rt, &fl); 3400 rt = ip_route_output_key(&init_net, &fl);
3401 if (!err) 3401 err = 0;
3402 if (!IS_ERR(rt))
3402 *dst = &rt->dst; 3403 *dst = &rt->dst;
3404 else
3405 err = PTR_ERR(rt);
3403 return err; 3406 return err;
3404#else 3407#else
3405 return -ENETUNREACH; 3408 return -ENETUNREACH;
diff --git a/drivers/net/pptp.c b/drivers/net/pptp.c
index 164cfad6ce79..1af549c89d51 100644
--- a/drivers/net/pptp.c
+++ b/drivers/net/pptp.c
@@ -175,7 +175,6 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
175 struct pptp_opt *opt = &po->proto.pptp; 175 struct pptp_opt *opt = &po->proto.pptp;
176 struct pptp_gre_header *hdr; 176 struct pptp_gre_header *hdr;
177 unsigned int header_len = sizeof(*hdr); 177 unsigned int header_len = sizeof(*hdr);
178 int err = 0;
179 int islcp; 178 int islcp;
180 int len; 179 int len;
181 unsigned char *data; 180 unsigned char *data;
@@ -198,8 +197,8 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
198 .saddr = opt->src_addr.sin_addr.s_addr, 197 .saddr = opt->src_addr.sin_addr.s_addr,
199 .tos = RT_TOS(0) } }, 198 .tos = RT_TOS(0) } },
200 .proto = IPPROTO_GRE }; 199 .proto = IPPROTO_GRE };
201 err = ip_route_output_key(&init_net, &rt, &fl); 200 rt = ip_route_output_key(&init_net, &fl);
202 if (err) 201 if (IS_ERR(rt))
203 goto tx_error; 202 goto tx_error;
204 } 203 }
205 tdev = rt->dst.dev; 204 tdev = rt->dst.dev;
@@ -477,7 +476,8 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
477 .tos = RT_CONN_FLAGS(sk) } }, 476 .tos = RT_CONN_FLAGS(sk) } },
478 .proto = IPPROTO_GRE }; 477 .proto = IPPROTO_GRE };
479 security_sk_classify_flow(sk, &fl); 478 security_sk_classify_flow(sk, &fl);
480 if (ip_route_output_key(&init_net, &rt, &fl)) { 479 rt = ip_route_output_key(&init_net, &fl);
480 if (IS_ERR(rt)) {
481 error = -EHOSTUNREACH; 481 error = -EHOSTUNREACH;
482 goto end; 482 goto end;
483 } 483 }