net: Abstract dst->neighbour accesses behind helpers.
[deliverable/linux.git] / drivers / scsi / cxgbi / libcxgbi.c
index de764ea7419d428d39372cf7390c1327ee782f19..77ac217ad5ce0952d9960710b7aaf1aa93a9bdd5 100644 (file)
@@ -450,12 +450,13 @@ static struct cxgbi_sock *cxgbi_sock_create(struct cxgbi_device *cdev)
        return csk;
 }
 
-static struct rtable *find_route_ipv4(__be32 saddr, __be32 daddr,
+static struct rtable *find_route_ipv4(struct flowi4 *fl4,
+                                     __be32 saddr, __be32 daddr,
                                      __be16 sport, __be16 dport, u8 tos)
 {
        struct rtable *rt;
 
-       rt = ip_route_output_ports(&init_net, NULL, daddr, saddr,
+       rt = ip_route_output_ports(&init_net, fl4, NULL, daddr, saddr,
                                   dport, sport, IPPROTO_TCP, tos, 0);
        if (IS_ERR(rt))
                return NULL;
@@ -470,6 +471,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr)
        struct net_device *ndev;
        struct cxgbi_device *cdev;
        struct rtable *rt = NULL;
+       struct flowi4 fl4;
        struct cxgbi_sock *csk = NULL;
        unsigned int mtu = 0;
        int port = 0xFFFF;
@@ -482,7 +484,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr)
                goto err_out;
        }
 
-       rt = find_route_ipv4(0, daddr->sin_addr.s_addr, 0, daddr->sin_port, 0);
+       rt = find_route_ipv4(&fl4, 0, daddr->sin_addr.s_addr, 0, daddr->sin_port, 0);
        if (!rt) {
                pr_info("no route to ipv4 0x%x, port %u.\n",
                        daddr->sin_addr.s_addr, daddr->sin_port);
@@ -490,7 +492,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr)
                goto err_out;
        }
        dst = &rt->dst;
-       ndev = dst->neighbour->dev;
+       ndev = dst_get_neighbour(dst)->dev;
 
        if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) {
                pr_info("multi-cast route %pI4, port %u, dev %s.\n",
@@ -504,7 +506,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr)
                ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr);
                mtu = ndev->mtu;
                pr_info("rt dev %s, loopback -> %s, mtu %u.\n",
-                       dst->neighbour->dev->name, ndev->name, mtu);
+                       dst_get_neighbour(dst)->dev->name, ndev->name, mtu);
        }
 
        cdev = cxgbi_device_find_by_netdev(ndev, &port);
@@ -531,7 +533,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr)
        csk->daddr.sin_addr.s_addr = daddr->sin_addr.s_addr;
        csk->daddr.sin_port = daddr->sin_port;
        csk->daddr.sin_family = daddr->sin_family;
-       csk->saddr.sin_addr.s_addr = rt->rt_src;
+       csk->saddr.sin_addr.s_addr = fl4.saddr;
 
        return csk;
 
This page took 0.034275 seconds and 5 git commands to generate.