OSDN Git Service

net/mlx5: Wait for inactive autogroups
authorPaul Blakey <paulb@mellanox.com>
Thu, 7 May 2020 09:01:39 +0000 (12:01 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Fri, 15 May 2020 22:44:22 +0000 (15:44 -0700)
Currently, if one thread tries to add an entry to an autogrouped table
with no free matching group, while another thread is in the process of
creating a new matching autogroup, it doesn't wait for the new group
creation, and creates an unnecessary new autogroup.

Instead of skipping inactive, wait on the write lock of those groups.

Signed-off-by: Paul Blakey <paulb@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

index 2da45e9..52af602 100644 (file)
@@ -1755,11 +1755,13 @@ skip_search:
        list_for_each_entry(iter, match_head, list) {
                g = iter->g;
 
-               if (!g->node.active)
-                       continue;
-
                nested_down_write_ref_node(&g->node, FS_LOCK_PARENT);
 
+               if (!g->node.active) {
+                       up_write_ref_node(&g->node, false);
+                       continue;
+               }
+
                err = insert_fte(g, fte);
                if (err) {
                        up_write_ref_node(&g->node, false);