net/mlx5e: Add error flow when failing update_rx
authorGuy Truzman <gtruzman@nvidia.com>
Thu, 29 Sep 2022 12:12:51 +0000 (15:12 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Sat, 12 Nov 2022 10:20:19 +0000 (02:20 -0800)
Up until now, return value of update_rx was ignored. Therefore, flow
continues even if it fails. Add error flow in case of update_rx fails in
mlx5e_open_locked, mlx5i_open and mlx5i_pkey_open.

Signed-off-by: Guy Truzman <gtruzman@nvidia.com>
Reviewed-by: Aya Levin <ayal@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c

index 5df04e0..14bd86e 100644 (file)
@@ -3069,7 +3069,10 @@ int mlx5e_open_locked(struct net_device *netdev)
        if (err)
                goto err_clear_state_opened_flag;
 
-       priv->profile->update_rx(priv);
+       err = priv->profile->update_rx(priv);
+       if (err)
+               goto err_close_channels;
+
        mlx5e_selq_apply(&priv->selq);
        mlx5e_activate_priv_channels(priv);
        mlx5e_apply_traps(priv, true);
@@ -3079,6 +3082,8 @@ int mlx5e_open_locked(struct net_device *netdev)
        mlx5e_queue_update_stats(priv);
        return 0;
 
+err_close_channels:
+       mlx5e_close_channels(&priv->channels);
 err_clear_state_opened_flag:
        clear_bit(MLX5E_STATE_OPENED, &priv->state);
        mlx5e_selq_cancel(&priv->selq);
index 4e3a754..7c5c500 100644 (file)
@@ -561,12 +561,17 @@ static int mlx5i_open(struct net_device *netdev)
        if (err)
                goto err_remove_fs_underlay_qp;
 
-       epriv->profile->update_rx(epriv);
+       err = epriv->profile->update_rx(epriv);
+       if (err)
+               goto err_close_channels;
+
        mlx5e_activate_priv_channels(epriv);
 
        mutex_unlock(&epriv->state_lock);
        return 0;
 
+err_close_channels:
+       mlx5e_close_channels(&epriv->channels);
 err_remove_fs_underlay_qp:
        mlx5_fs_remove_rx_underlay_qpn(mdev, ipriv->qpn);
 err_reset_qp:
index 0227a52..4d9c9e4 100644 (file)
@@ -221,12 +221,16 @@ static int mlx5i_pkey_open(struct net_device *netdev)
                mlx5_core_warn(mdev, "opening child channels failed, %d\n", err);
                goto err_clear_state_opened_flag;
        }
-       epriv->profile->update_rx(epriv);
+       err = epriv->profile->update_rx(epriv);
+       if (err)
+               goto err_close_channels;
        mlx5e_activate_priv_channels(epriv);
        mutex_unlock(&epriv->state_lock);
 
        return 0;
 
+err_close_channels:
+       mlx5e_close_channels(&epriv->channels);
 err_clear_state_opened_flag:
        mlx5e_destroy_tis(mdev, epriv->tisn[0][0]);
 err_remove_rx_uderlay_qp: