cxgb4i: Handle dst_get_neighbour_noref() returning NULL.
authorDavid Miller <davem@davemloft.net>
Fri, 2 Dec 2011 16:52:39 +0000 (16:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 5 Dec 2011 20:20:20 +0000 (15:20 -0500)
Signed-off-by: David S. Miller <davem@davemloft.net>
Acked-by: Roland Dreier <roland@purestorage.com>
drivers/scsi/cxgbi/cxgb4i/cxgb4i.c

index c8fd13a..5a4a3bf 100644 (file)
@@ -1127,6 +1127,7 @@ static int init_act_open(struct cxgbi_sock *csk)
        struct net_device *ndev = cdev->ports[csk->port_id];
        struct port_info *pi = netdev_priv(ndev);
        struct sk_buff *skb = NULL;
+       struct neighbour *n;
        unsigned int step;
 
        log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
@@ -1141,7 +1142,12 @@ static int init_act_open(struct cxgbi_sock *csk)
        cxgbi_sock_set_flag(csk, CTPF_HAS_ATID);
        cxgbi_sock_get(csk);
 
-       csk->l2t = cxgb4_l2t_get(lldi->l2t, dst_get_neighbour_noref(csk->dst), ndev, 0);
+       n = dst_get_neighbour_noref(csk->dst);
+       if (!n) {
+               pr_err("%s, can't get neighbour of csk->dst.\n", ndev->name);
+               goto rel_resource;
+       }
+       csk->l2t = cxgb4_l2t_get(lldi->l2t, n, ndev, 0);
        if (!csk->l2t) {
                pr_err("%s, cannot alloc l2t.\n", ndev->name);
                goto rel_resource;