From: Erez Shitrit Date: Mon, 28 Jan 2013 14:43:06 +0000 (+0200) Subject: ib/ipoib: getout whenever failed to load port. X-Git-Tag: v4.1.12-92~293^2~1^2~93 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a97f2277c62975f84d1b13a32bdc34ac622190f2;p=users%2Fjedix%2Flinux-maple.git ib/ipoib: getout whenever failed to load port. whenever add_one failed to load one of the port, call remove one after that, otherwise it ends with panic, (many resources are for all the ports and some actions will be aken over both of them without considering that one of them failed to load) Signed-off-by: Erez Shitrit (Ported from Mellanox OFED 2.4) Signed-off-by: Mukesh Kacker --- diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 0e202d29606d0..53c012ddffcc2 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c @@ -1693,6 +1693,7 @@ static void ipoib_add_one(struct ib_device *device) struct net_device *dev; struct ipoib_dev_priv *priv; int s, e, p; + int is_error_init = 0; if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) return; @@ -1718,10 +1719,16 @@ static void ipoib_add_one(struct ib_device *device) if (!IS_ERR(dev)) { priv = netdev_priv(dev); list_add_tail(&priv->list, dev_list); - } + } else + is_error_init = 1; } - ib_set_client_data(device, &ipoib_client, dev_list); + + if (is_error_init) { + printk(KERN_ERR "%s: Failed to init ib port, removing it\n", + __func__); + ipoib_remove_one(device); + } } static void ipoib_remove_one(struct ib_device *device)