diff options
author | David S. Miller <davem@davemloft.net> | 2011-03-02 17:31:35 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-03-02 17:31:35 -0500 |
commit | b23dd4fe42b455af5c6e20966b7d6959fa8352ea (patch) | |
tree | bf97323eae9a8d084170e573ff2c0c40bc72c3cd /drivers | |
parent | 452edd598f60522c11f7f88fdbab27eb36509d1a (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')
-rw-r--r-- | drivers/infiniband/core/addr.c | 7 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_cm.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 3 | ||||
-rw-r--r-- | drivers/net/bonding/bond_main.c | 6 | ||||
-rw-r--r-- | drivers/net/cnic.c | 7 | ||||
-rw-r--r-- | drivers/net/pptp.c | 8 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/libcxgbi.c | 3 |
8 files changed, 24 insertions, 16 deletions
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c index 8aba0ba57de5..2d749937a969 100644 --- a/drivers/infiniband/core/addr.c +++ b/drivers/infiniband/core/addr.c | |||
@@ -193,10 +193,11 @@ static int addr4_resolve(struct sockaddr_in *src_in, | |||
193 | fl.nl_u.ip4_u.saddr = src_ip; | 193 | fl.nl_u.ip4_u.saddr = src_ip; |
194 | fl.oif = addr->bound_dev_if; | 194 | fl.oif = addr->bound_dev_if; |
195 | 195 | ||
196 | ret = ip_route_output_key(&init_net, &rt, &fl); | 196 | rt = ip_route_output_key(&init_net, &fl); |
197 | if (ret) | 197 | if (IS_ERR(rt)) { |
198 | ret = PTR_ERR(rt); | ||
198 | goto out; | 199 | goto out; |
199 | 200 | } | |
200 | src_in->sin_family = AF_INET; | 201 | src_in->sin_family = AF_INET; |
201 | src_in->sin_addr.s_addr = rt->rt_src; | 202 | src_in->sin_addr.s_addr = rt->rt_src; |
202 | 203 | ||
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c index e654285aa6ba..e0ccbc53fbcc 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_cm.c +++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c | |||
@@ -354,7 +354,8 @@ static struct rtable *find_route(struct t3cdev *dev, __be32 local_ip, | |||
354 | } | 354 | } |
355 | }; | 355 | }; |
356 | 356 | ||
357 | if (ip_route_output_flow(&init_net, &rt, &fl, NULL)) | 357 | rt = ip_route_output_flow(&init_net, &fl, NULL); |
358 | if (IS_ERR(rt)) | ||
358 | return NULL; | 359 | return NULL; |
359 | return rt; | 360 | return rt; |
360 | } | 361 | } |
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 7e0484f18db5..77b0eef2aad9 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c | |||
@@ -331,7 +331,8 @@ static struct rtable *find_route(struct c4iw_dev *dev, __be32 local_ip, | |||
331 | } | 331 | } |
332 | }; | 332 | }; |
333 | 333 | ||
334 | if (ip_route_output_flow(&init_net, &rt, &fl, NULL)) | 334 | rt = ip_route_output_flow(&init_net, &fl, NULL); |
335 | if (IS_ERR(rt)) | ||
335 | return NULL; | 336 | return NULL; |
336 | return rt; | 337 | return rt; |
337 | } | 338 | } |
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index ec3aa11c36cb..e81599cb1fe6 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
@@ -1112,7 +1112,8 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi | |||
1112 | 1112 | ||
1113 | memset(&fl, 0, sizeof fl); | 1113 | memset(&fl, 0, sizeof fl); |
1114 | fl.nl_u.ip4_u.daddr = htonl(dst_ip); | 1114 | fl.nl_u.ip4_u.daddr = htonl(dst_ip); |
1115 | if (ip_route_output_key(&init_net, &rt, &fl)) { | 1115 | rt = ip_route_output_key(&init_net, &fl); |
1116 | if (IS_ERR(rt)) { | ||
1116 | printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", | 1117 | printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", |
1117 | __func__, dst_ip); | 1118 | __func__, dst_ip); |
1118 | return rc; | 1119 | return rc; |
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 | ||
2682 | static void bond_arp_send_all(struct bonding *bond, struct slave *slave) | 2682 | static 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 | } |
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index 261aa817bdd5..889199aa1f5b 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c | |||
@@ -470,7 +470,8 @@ static struct rtable *find_route_ipv4(__be32 saddr, __be32 daddr, | |||
470 | } | 470 | } |
471 | }; | 471 | }; |
472 | 472 | ||
473 | if (ip_route_output_flow(&init_net, &rt, &fl, NULL)) | 473 | rt = ip_route_output_flow(&init_net, &fl, NULL); |
474 | if (IS_ERR(rt)) | ||
474 | return NULL; | 475 | return NULL; |
475 | 476 | ||
476 | return rt; | 477 | return rt; |