From de06dce673979eb9208c539bad15fae855e1d4c5 Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Wed, 3 Aug 2011 11:19:47 +0900 Subject: [PATCH] datapath: Allow the number of hash entries to exceed TBL_MAX_BUCKETS * 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 Signed-off-by: Jesse Gross --- 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 a964c27f4..3ec5be4e3 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 c2439f0e1..1ef81ab78 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, -- 2.43.0