net/mlx4_core: Return proper error code when __mlx4_add_one fails
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Thu, 24 Jan 2013 01:54:17 +0000 (01:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2013 05:13:57 +0000 (00:13 -0500)
Returning 0 (success) when in fact we are aborting the load, leads to kernel
panic when unloading the module. Fix that by returning the actual error code.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/main.c

index e1bafffbc3b1d261f4cf0972dd3f95c942c5fc3d..983fd3d62bce4e31281c6521e7b62070c1ccfe70 100644 (file)
@@ -2169,7 +2169,8 @@ slave_start:
                        dev->num_slaves = MLX4_MAX_NUM_SLAVES;
                else {
                        dev->num_slaves = 0;
-                       if (mlx4_multi_func_init(dev)) {
+                       err = mlx4_multi_func_init(dev);
+                       if (err) {
                                mlx4_err(dev, "Failed to init slave mfunc"
                                         " interface, aborting.\n");
                                goto err_cmd;
@@ -2193,7 +2194,8 @@ slave_start:
        /* In master functions, the communication channel must be initialized
         * after obtaining its address from fw */
        if (mlx4_is_master(dev)) {
-               if (mlx4_multi_func_init(dev)) {
+               err = mlx4_multi_func_init(dev);
+               if (err) {
                        mlx4_err(dev, "Failed to init master mfunc"
                                 "interface, aborting.\n");
                        goto err_close;
@@ -2210,6 +2212,7 @@ slave_start:
        mlx4_enable_msi_x(dev);
        if ((mlx4_is_mfunc(dev)) &&
            !(dev->flags & MLX4_FLAG_MSI_X)) {
+               err = -ENOSYS;
                mlx4_err(dev, "INTx is not supported in multi-function mode."
                         " aborting.\n");
                goto err_free_eq;