Commit 8ec40e3f authored by Patrisious Haddad's avatar Patrisious Haddad Committed by Jakub Kicinski
Browse files

net/mlx5: Fix return value when searching for existing flow group



When attempting to add a rule to an existing flow group, if a matching
flow group exists but is not active, the error code returned should be
EAGAIN, so that the rule can be added to the matching flow group once
it is active, rather than ENOENT, which indicates that no matching
flow group was found.

Fixes: bd71b08e ("net/mlx5: Support multiple updates of steering rules in parallel")
Signed-off-by: default avatarGavi Teitz <gavi@nvidia.com>
Signed-off-by: default avatarRoi Dayan <roid@nvidia.com>
Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarMark Bloch <mbloch@nvidia.com>
Link: https://patch.msgid.link/20250610151514.1094735-4-mbloch@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 687560d8
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2228,6 +2228,7 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
	struct mlx5_flow_handle *rule;
	struct match_list *iter;
	bool take_write = false;
	bool try_again = false;
	struct fs_fte *fte;
	u64  version = 0;
	int err;
@@ -2292,6 +2293,7 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
		nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);

		if (!g->node.active) {
			try_again = true;
			up_write_ref_node(&g->node, false);
			continue;
		}
@@ -2313,7 +2315,8 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
			tree_put_node(&fte->node, false);
		return rule;
	}
	rule = ERR_PTR(-ENOENT);
	err = try_again ? -EAGAIN : -ENOENT;
	rule = ERR_PTR(err);
out:
	kmem_cache_free(steering->ftes_cache, fte);
	return rule;