* If the number of entries in a table exceeds the number of buckets that it has then an attempt will be made to resize the table.
* There is a limit of TBL_MAX_BUCKETS placed on the number of buckets of a table. * If this limit is exceeded keep using the existing table. This allows a table to hold more than TBL_MAX_BUCKETS entries at the expense of increased hash collisions. Signed-off-by: Simon Horman <ho...@verge.net.au> --- It appears that on 64-bit systems TBL_MAX_BUCKETS is 131072 (128k) not 262144 (256k) as noted in the comment with to its definition. Without this change the number of flows that can be present in the datapath is limited to 128k. With this change I am able achieve significantly higher flow counts. --- datapath/datapath.c | 12 +++++++----- datapath/tunnel.c | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index a964c27..3ec5be4 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -629,11 +629,13 @@ static int expand_table(struct datapath *dp) struct tbl *new_table; new_table = tbl_expand(old_table); - if (IS_ERR(new_table)) - return PTR_ERR(new_table); - - rcu_assign_pointer(dp->table, new_table); - tbl_deferred_destroy(old_table, NULL); + if (IS_ERR(new_table)) { + if (PTR_ERR(new_table) != -ENOSPC) + return PTR_ERR(new_table); + } else { + rcu_assign_pointer(dp->table, new_table); + tbl_deferred_destroy(old_table, NULL); + } return 0; } diff --git a/datapath/tunnel.c b/datapath/tunnel.c index c2439f0..1ef81ab 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -249,11 +249,13 @@ static int add_port(struct vport *vport) struct tbl *new_table; new_table = tbl_expand(cur_table); - if (IS_ERR(new_table)) - return PTR_ERR(new_table); - - rcu_assign_pointer(port_table, new_table); - tbl_deferred_destroy(cur_table, NULL); + if (IS_ERR(new_table)) { + if (PTR_ERR(new_table) != -ENOSPC) + return PTR_ERR(new_table); + } else { + rcu_assign_pointer(port_table, new_table); + tbl_deferred_destroy(cur_table, NULL); + } } err = tbl_insert(rtnl_dereference(port_table), &tnl_vport->tbl_node, -- 1.7.5.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev