Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / fs_core.c
index ce3d92106386b31d5aa44dae7a347c9d0830c49e..2478516a61e2ea547f5ae8af0c3aae7228e64db9 100644 (file)
@@ -1232,10 +1232,18 @@ static struct mlx5_flow_handle *add_rule_fg(struct mlx5_flow_group *fg,
        fs_for_each_fte(fte, fg) {
                nested_lock_ref_node(&fte->node, FS_MUTEX_CHILD);
                if (compare_match_value(&fg->mask, match_value, &fte->val) &&
-                   (flow_act->action & fte->action) &&
-                   flow_act->flow_tag == fte->flow_tag) {
+                   (flow_act->action & fte->action)) {
                        int old_action = fte->action;
 
+                       if (fte->flow_tag != flow_act->flow_tag) {
+                               mlx5_core_warn(get_dev(&fte->node),
+                                              "FTE flow tag %u already exists with different flow tag %u\n",
+                                              fte->flow_tag,
+                                              flow_act->flow_tag);
+                               handle = ERR_PTR(-EEXIST);
+                               goto unlock_fte;
+                       }
+
                        fte->action |= flow_act->action;
                        handle = add_rule_fte(fte, fg, dest, dest_num,
                                              old_action != flow_act->action);