]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net/mlx5: fs, fix RDMA TRANSPORT init cleanup flow
authorPatrisious Haddad <phaddad@nvidia.com>
Wed, 2 Jul 2025 10:24:04 +0000 (13:24 +0300)
committerLeon Romanovsky <leon@kernel.org>
Wed, 2 Jul 2025 18:08:18 +0000 (14:08 -0400)
Failing during the initialization of root_namespace didn't cleanup
the priorities of the namespace on which the failure occurred.

Properly cleanup said priorities on failure.

Fixes: 52931f55159e ("net/mlx5: fs, add multiple prios to RDMA TRANSPORT steering domain")
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Link: https://patch.msgid.link/78cf89b5d8452caf1e979350b30ada6904362f66.1751451780.git.leon@kernel.org
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

index 7f5608081ea0e0bf4679dca0ea1060691f77438f..424a6d168c53a04a4e598efa2157e0afd15c33a2 100644 (file)
@@ -3247,6 +3247,7 @@ init_rdma_transport_rx_root_ns_one(struct mlx5_flow_steering *steering,
 {
        struct mlx5_flow_root_namespace *root_ns;
        struct fs_prio *prio;
+       int ret;
        int i;
 
        steering->rdma_transport_rx_root_ns[vport_idx] =
@@ -3258,11 +3259,17 @@ init_rdma_transport_rx_root_ns_one(struct mlx5_flow_steering *steering,
 
        for (i = 0; i < MLX5_RDMA_TRANSPORT_BYPASS_PRIO; i++) {
                prio = fs_create_prio(&root_ns->ns, i, 1);
-               if (IS_ERR(prio))
-                       return PTR_ERR(prio);
+               if (IS_ERR(prio)) {
+                       ret = PTR_ERR(prio);
+                       goto err;
+               }
        }
        set_prio_attrs(root_ns);
        return 0;
+
+err:
+       cleanup_root_ns(root_ns);
+       return ret;
 }
 
 static int
@@ -3271,6 +3278,7 @@ init_rdma_transport_tx_root_ns_one(struct mlx5_flow_steering *steering,
 {
        struct mlx5_flow_root_namespace *root_ns;
        struct fs_prio *prio;
+       int ret;
        int i;
 
        steering->rdma_transport_tx_root_ns[vport_idx] =
@@ -3282,11 +3290,17 @@ init_rdma_transport_tx_root_ns_one(struct mlx5_flow_steering *steering,
 
        for (i = 0; i < MLX5_RDMA_TRANSPORT_BYPASS_PRIO; i++) {
                prio = fs_create_prio(&root_ns->ns, i, 1);
-               if (IS_ERR(prio))
-                       return PTR_ERR(prio);
+               if (IS_ERR(prio)) {
+                       ret = PTR_ERR(prio);
+                       goto err;
+               }
        }
        set_prio_attrs(root_ns);
        return 0;
+
+err:
+       cleanup_root_ns(root_ns);
+       return ret;
 }
 
 static int init_rdma_transport_rx_root_ns(struct mlx5_flow_steering *steering)