From a97f2277c62975f84d1b13a32bdc34ac622190f2 Mon Sep 17 00:00:00 2001 From: Erez Shitrit Date: Mon, 28 Jan 2013 16:43:06 +0200 Subject: [PATCH] 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 --- drivers/infiniband/ulp/ipoib/ipoib_main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 0e202d29606d..53c012ddffcc 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) -- 2.50.1