libcxgbi: Use flowi4's saddr in cxgbi_check_route().
authorDavid S. Miller <davem@davemloft.net>
Wed, 4 May 2011 03:43:40 +0000 (20:43 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 May 2011 03:43:40 +0000 (20:43 -0700)
Instead of rt->rt_src

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/scsi/cxgbi/libcxgbi.c

index 0c33d250c7d703ce596433d6bc2f6d96ae1fff78..a2a9c7c6c6436c9f0c19e68575d656f7b7807c61 100644 (file)
@@ -450,13 +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;
-       struct flowi4 fl4;
 
-       rt = ip_route_output_ports(&init_net, &fl4, 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;
@@ -471,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;
@@ -483,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);
@@ -532,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;