diff options
Diffstat (limited to 'drivers/scsi/cxgbi')
-rw-r--r-- | drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 2 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 8 | ||||
-rw-r--r-- | drivers/scsi/cxgbi/libcxgbi.c | 10 |
3 files changed, 16 insertions, 4 deletions
diff --git a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c index 000294a9df80..36739da8bc15 100644 --- a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c +++ b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | |||
@@ -966,7 +966,7 @@ static int init_act_open(struct cxgbi_sock *csk) | |||
966 | csk->saddr.sin_addr.s_addr = chba->ipv4addr; | 966 | csk->saddr.sin_addr.s_addr = chba->ipv4addr; |
967 | 967 | ||
968 | csk->rss_qid = 0; | 968 | csk->rss_qid = 0; |
969 | csk->l2t = t3_l2t_get(t3dev, dst_get_neighbour(dst), ndev); | 969 | csk->l2t = t3_l2t_get(t3dev, dst, ndev); |
970 | if (!csk->l2t) { | 970 | if (!csk->l2t) { |
971 | pr_err("NO l2t available.\n"); | 971 | pr_err("NO l2t available.\n"); |
972 | return -EINVAL; | 972 | return -EINVAL; |
diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c index ac7a9b1e3e23..5a4a3bfc60cf 100644 --- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c +++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | |||
@@ -1127,6 +1127,7 @@ static int init_act_open(struct cxgbi_sock *csk) | |||
1127 | struct net_device *ndev = cdev->ports[csk->port_id]; | 1127 | struct net_device *ndev = cdev->ports[csk->port_id]; |
1128 | struct port_info *pi = netdev_priv(ndev); | 1128 | struct port_info *pi = netdev_priv(ndev); |
1129 | struct sk_buff *skb = NULL; | 1129 | struct sk_buff *skb = NULL; |
1130 | struct neighbour *n; | ||
1130 | unsigned int step; | 1131 | unsigned int step; |
1131 | 1132 | ||
1132 | log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK, | 1133 | log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK, |
@@ -1141,7 +1142,12 @@ static int init_act_open(struct cxgbi_sock *csk) | |||
1141 | cxgbi_sock_set_flag(csk, CTPF_HAS_ATID); | 1142 | cxgbi_sock_set_flag(csk, CTPF_HAS_ATID); |
1142 | cxgbi_sock_get(csk); | 1143 | cxgbi_sock_get(csk); |
1143 | 1144 | ||
1144 | csk->l2t = cxgb4_l2t_get(lldi->l2t, dst_get_neighbour(csk->dst), ndev, 0); | 1145 | n = dst_get_neighbour_noref(csk->dst); |
1146 | if (!n) { | ||
1147 | pr_err("%s, can't get neighbour of csk->dst.\n", ndev->name); | ||
1148 | goto rel_resource; | ||
1149 | } | ||
1150 | csk->l2t = cxgb4_l2t_get(lldi->l2t, n, ndev, 0); | ||
1145 | if (!csk->l2t) { | 1151 | if (!csk->l2t) { |
1146 | pr_err("%s, cannot alloc l2t.\n", ndev->name); | 1152 | pr_err("%s, cannot alloc l2t.\n", ndev->name); |
1147 | goto rel_resource; | 1153 | goto rel_resource; |
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index 997fa36999be..c5360ffb4bed 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c | |||
@@ -472,6 +472,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr) | |||
472 | struct net_device *ndev; | 472 | struct net_device *ndev; |
473 | struct cxgbi_device *cdev; | 473 | struct cxgbi_device *cdev; |
474 | struct rtable *rt = NULL; | 474 | struct rtable *rt = NULL; |
475 | struct neighbour *n; | ||
475 | struct flowi4 fl4; | 476 | struct flowi4 fl4; |
476 | struct cxgbi_sock *csk = NULL; | 477 | struct cxgbi_sock *csk = NULL; |
477 | unsigned int mtu = 0; | 478 | unsigned int mtu = 0; |
@@ -493,7 +494,12 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr) | |||
493 | goto err_out; | 494 | goto err_out; |
494 | } | 495 | } |
495 | dst = &rt->dst; | 496 | dst = &rt->dst; |
496 | ndev = dst_get_neighbour(dst)->dev; | 497 | n = dst_get_neighbour_noref(dst); |
498 | if (!n) { | ||
499 | err = -ENODEV; | ||
500 | goto rel_rt; | ||
501 | } | ||
502 | ndev = n->dev; | ||
497 | 503 | ||
498 | if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { | 504 | if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) { |
499 | pr_info("multi-cast route %pI4, port %u, dev %s.\n", | 505 | pr_info("multi-cast route %pI4, port %u, dev %s.\n", |
@@ -507,7 +513,7 @@ static struct cxgbi_sock *cxgbi_check_route(struct sockaddr *dst_addr) | |||
507 | ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr); | 513 | ndev = ip_dev_find(&init_net, daddr->sin_addr.s_addr); |
508 | mtu = ndev->mtu; | 514 | mtu = ndev->mtu; |
509 | pr_info("rt dev %s, loopback -> %s, mtu %u.\n", | 515 | pr_info("rt dev %s, loopback -> %s, mtu %u.\n", |
510 | dst_get_neighbour(dst)->dev->name, ndev->name, mtu); | 516 | n->dev->name, ndev->name, mtu); |
511 | } | 517 | } |
512 | 518 | ||
513 | cdev = cxgbi_device_find_by_netdev(ndev, &port); | 519 | cdev = cxgbi_device_find_by_netdev(ndev, &port); |