netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/3] net: openvswitch: improve codes
@ 2020-08-25  5:06 xiangxia.m.yue
  2020-08-25  5:06 ` [PATCH net-next v3 1/3] net: openvswitch: improve coding style xiangxia.m.yue
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: xiangxia.m.yue @ 2020-08-25  5:06 UTC (permalink / raw)
  To: davem, pshelar, xiyou.wangcong; +Cc: dev, netdev, Tonghao Zhang

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

This series patches are not bug fix, just improve codes.

Tonghao Zhang (3):
  net: openvswitch: improve coding style
  net: openvswitch: refactor flow free function
  net: openvswitch: remove unnused keep_flows

 net/openvswitch/actions.c    |  5 +--
 net/openvswitch/datapath.c   | 35 +++++++++++--------
 net/openvswitch/flow_table.c | 68 +++++++++++++++++-------------------
 net/openvswitch/flow_table.h |  1 -
 net/openvswitch/vport.c      |  7 ++--
 5 files changed, 60 insertions(+), 56 deletions(-)

-- 
2.23.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH net-next v3 1/3] net: openvswitch: improve coding style
  2020-08-25  5:06 [PATCH net-next v3 0/3] net: openvswitch: improve codes xiangxia.m.yue
@ 2020-08-25  5:06 ` xiangxia.m.yue
  2020-08-25 21:51   ` Stefano Brivio
  2020-08-25  5:06 ` [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function xiangxia.m.yue
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: xiangxia.m.yue @ 2020-08-25  5:06 UTC (permalink / raw)
  To: davem, pshelar, xiyou.wangcong; +Cc: dev, netdev, Tonghao Zhang

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

Not change the logic, just improve coding style.

Cc: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 net/openvswitch/actions.c    |  5 ++--
 net/openvswitch/datapath.c   | 35 ++++++++++++++++------------
 net/openvswitch/flow_table.c | 44 ++++++++++++++++++++----------------
 net/openvswitch/vport.c      |  7 +++---
 4 files changed, 51 insertions(+), 40 deletions(-)

diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
index 2611657f40ca..573b9ad97e7d 100644
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -742,7 +742,8 @@ static int set_sctp(struct sk_buff *skb, struct sw_flow_key *flow_key,
 	return 0;
 }
 
-static int ovs_vport_output(struct net *net, struct sock *sk, struct sk_buff *skb)
+static int ovs_vport_output(struct net *net, struct sock *sk,
+			    struct sk_buff *skb)
 {
 	struct ovs_frag_data *data = this_cpu_ptr(&ovs_frag_data_storage);
 	struct vport *vport = data->vport;
@@ -925,7 +926,7 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,
 	upcall.mru = OVS_CB(skb)->mru;
 
 	for (a = nla_data(attr), rem = nla_len(attr); rem > 0;
-		 a = nla_next(a, &rem)) {
+	     a = nla_next(a, &rem)) {
 		switch (nla_type(a)) {
 		case OVS_USERSPACE_ATTR_USERDATA:
 			upcall.userdata = a;
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 6e47ef7ef036..bb5192909fa3 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -182,7 +182,7 @@ struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no)
 
 	head = vport_hash_bucket(dp, port_no);
 	hlist_for_each_entry_rcu(vport, head, dp_hash_node,
-				lockdep_ovsl_is_held()) {
+				 lockdep_ovsl_is_held()) {
 		if (vport->port_no == port_no)
 			return vport;
 	}
@@ -254,7 +254,7 @@ void ovs_dp_process_packet(struct sk_buff *skb, struct sw_flow_key *key)
 	error = ovs_execute_actions(dp, skb, sf_acts, key);
 	if (unlikely(error))
 		net_dbg_ratelimited("ovs: action execution error on datapath %s: %d\n",
-							ovs_dp_name(dp), error);
+				    ovs_dp_name(dp), error);
 
 	stats_counter = &stats->n_hit;
 
@@ -302,7 +302,7 @@ int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,
 static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb,
 			     const struct sw_flow_key *key,
 			     const struct dp_upcall_info *upcall_info,
-				 uint32_t cutlen)
+			     uint32_t cutlen)
 {
 	unsigned int gso_type = skb_shinfo(skb)->gso_type;
 	struct sw_flow_key later_key;
@@ -1080,11 +1080,12 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
 }
 
 /* Factor out action copy to avoid "Wframe-larger-than=1024" warning. */
-static noinline_for_stack struct sw_flow_actions *get_flow_actions(struct net *net,
-						const struct nlattr *a,
-						const struct sw_flow_key *key,
-						const struct sw_flow_mask *mask,
-						bool log)
+static noinline_for_stack
+struct sw_flow_actions *get_flow_actions(struct net *net,
+					 const struct nlattr *a,
+					 const struct sw_flow_key *key,
+					 const struct sw_flow_mask *mask,
+					 bool log)
 {
 	struct sw_flow_actions *acts;
 	struct sw_flow_key masked_key;
@@ -1383,7 +1384,8 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info)
 
 			ovs_notify(&dp_flow_genl_family, reply, info);
 		} else {
-			netlink_set_err(sock_net(skb->sk)->genl_sock, 0, 0, PTR_ERR(reply));
+			netlink_set_err(sock_net(skb->sk)->genl_sock, 0, 0,
+					PTR_ERR(reply));
 		}
 	}
 
@@ -1513,7 +1515,7 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
 	int err;
 
 	ovs_header = genlmsg_put(skb, portid, seq, &dp_datapath_genl_family,
-				   flags, cmd);
+				 flags, cmd);
 	if (!ovs_header)
 		goto error;
 
@@ -1572,11 +1574,13 @@ static struct datapath *lookup_datapath(struct net *net,
 	return dp ? dp : ERR_PTR(-ENODEV);
 }
 
-static void ovs_dp_reset_user_features(struct sk_buff *skb, struct genl_info *info)
+static void ovs_dp_reset_user_features(struct sk_buff *skb,
+				       struct genl_info *info)
 {
 	struct datapath *dp;
 
-	dp = lookup_datapath(sock_net(skb->sk), info->userhdr, info->attrs);
+	dp = lookup_datapath(sock_net(skb->sk), info->userhdr,
+			     info->attrs);
 	if (IS_ERR(dp))
 		return;
 
@@ -2075,7 +2079,7 @@ static unsigned int ovs_get_max_headroom(struct datapath *dp)
 
 	for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++) {
 		hlist_for_each_entry_rcu(vport, &dp->ports[i], dp_hash_node,
-					lockdep_ovsl_is_held()) {
+					 lockdep_ovsl_is_held()) {
 			dev = vport->dev;
 			dev_headroom = netdev_get_fwd_headroom(dev);
 			if (dev_headroom > max_headroom)
@@ -2095,7 +2099,7 @@ static void ovs_update_headroom(struct datapath *dp, unsigned int new_headroom)
 	dp->max_headroom = new_headroom;
 	for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++)
 		hlist_for_each_entry_rcu(vport, &dp->ports[i], dp_hash_node,
-					lockdep_ovsl_is_held())
+					 lockdep_ovsl_is_held())
 			netdev_set_rx_headroom(vport->dev, new_headroom);
 }
 
@@ -2551,7 +2555,8 @@ static int __init dp_init(void)
 {
 	int err;
 
-	BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > sizeof_field(struct sk_buff, cb));
+	BUILD_BUG_ON(sizeof(struct ovs_skb_cb) >
+		     sizeof_field(struct sk_buff, cb));
 
 	pr_info("Open vSwitch switching datapath\n");
 
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index e2235849a57e..4b7ab62d0e1a 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -111,9 +111,11 @@ static void flow_free(struct sw_flow *flow)
 	if (ovs_identifier_is_key(&flow->id))
 		kfree(flow->id.unmasked_key);
 	if (flow->sf_acts)
-		ovs_nla_free_flow_actions((struct sw_flow_actions __force *)flow->sf_acts);
+		ovs_nla_free_flow_actions((struct sw_flow_actions __force *)
+					  flow->sf_acts);
 	/* We open code this to make sure cpu 0 is always considered */
-	for (cpu = 0; cpu < nr_cpu_ids; cpu = cpumask_next(cpu, &flow->cpu_used_mask))
+	for (cpu = 0; cpu < nr_cpu_ids;
+	     cpu = cpumask_next(cpu, &flow->cpu_used_mask))
 		if (flow->stats[cpu])
 			kmem_cache_free(flow_stats_cache,
 					(struct sw_flow_stats __force *)flow->stats[cpu]);
@@ -192,7 +194,7 @@ static void tbl_mask_array_reset_counters(struct mask_array *ma)
 	 * zero based counter we store the value at reset, and subtract it
 	 * later when processing.
 	 */
-	for (i = 0; i < ma->max; i++)  {
+	for (i = 0; i < ma->max; i++) {
 		ma->masks_usage_zero_cntr[i] = 0;
 
 		for_each_possible_cpu(cpu) {
@@ -273,7 +275,7 @@ static int tbl_mask_array_add_mask(struct flow_table *tbl,
 
 	if (ma_count >= ma->max) {
 		err = tbl_mask_array_realloc(tbl, ma->max +
-					      MASK_ARRAY_SIZE_MIN);
+					     MASK_ARRAY_SIZE_MIN);
 		if (err)
 			return err;
 
@@ -288,7 +290,7 @@ static int tbl_mask_array_add_mask(struct flow_table *tbl,
 	BUG_ON(ovsl_dereference(ma->masks[ma_count]));
 
 	rcu_assign_pointer(ma->masks[ma_count], new);
-	WRITE_ONCE(ma->count, ma_count +1);
+	WRITE_ONCE(ma->count, ma_count + 1);
 
 	return 0;
 }
@@ -309,10 +311,10 @@ static void tbl_mask_array_del_mask(struct flow_table *tbl,
 	return;
 
 found:
-	WRITE_ONCE(ma->count, ma_count -1);
+	WRITE_ONCE(ma->count, ma_count - 1);
 
-	rcu_assign_pointer(ma->masks[i], ma->masks[ma_count -1]);
-	RCU_INIT_POINTER(ma->masks[ma_count -1], NULL);
+	rcu_assign_pointer(ma->masks[i], ma->masks[ma_count - 1]);
+	RCU_INIT_POINTER(ma->masks[ma_count - 1], NULL);
 
 	kfree_rcu(mask, rcu);
 
@@ -448,16 +450,17 @@ int ovs_flow_tbl_init(struct flow_table *table)
 
 static void flow_tbl_destroy_rcu_cb(struct rcu_head *rcu)
 {
-	struct table_instance *ti = container_of(rcu, struct table_instance, rcu);
+	struct table_instance *ti =
+		container_of(rcu, struct table_instance, rcu);
 
 	__table_instance_destroy(ti);
 }
 
 static void table_instance_flow_free(struct flow_table *table,
-				  struct table_instance *ti,
-				  struct table_instance *ufid_ti,
-				  struct sw_flow *flow,
-				  bool count)
+				     struct table_instance *ti,
+				     struct table_instance *ufid_ti,
+				     struct sw_flow *flow,
+				     bool count)
 {
 	hlist_del_rcu(&flow->flow_table.node[ti->node_ver]);
 	if (count)
@@ -484,9 +487,9 @@ void table_instance_flow_flush(struct flow_table *table,
 		return;
 
 	for (i = 0; i < ti->n_buckets; i++) {
-		struct sw_flow *flow;
 		struct hlist_head *head = &ti->buckets[i];
 		struct hlist_node *n;
+		struct sw_flow *flow;
 
 		hlist_for_each_entry_safe(flow, n, head,
 					  flow_table.node[ti->node_ver]) {
@@ -661,7 +664,7 @@ static int flow_key_start(const struct sw_flow_key *key)
 		return 0;
 	else
 		return rounddown(offsetof(struct sw_flow_key, phy),
-					  sizeof(long));
+				 sizeof(long));
 }
 
 static bool cmp_key(const struct sw_flow_key *key1,
@@ -673,7 +676,7 @@ static bool cmp_key(const struct sw_flow_key *key1,
 	long diffs = 0;
 	int i;
 
-	for (i = key_start; i < key_end;  i += sizeof(long))
+	for (i = key_start; i < key_end; i += sizeof(long))
 		diffs |= *cp1++ ^ *cp2++;
 
 	return diffs == 0;
@@ -713,7 +716,7 @@ static struct sw_flow *masked_flow_lookup(struct table_instance *ti,
 	(*n_mask_hit)++;
 
 	hlist_for_each_entry_rcu(flow, head, flow_table.node[ti->node_ver],
-				lockdep_ovsl_is_held()) {
+				 lockdep_ovsl_is_held()) {
 		if (flow->mask == mask && flow->flow_table.hash == hash &&
 		    flow_cmp_masked_key(flow, &masked_key, &mask->range))
 			return flow;
@@ -897,7 +900,8 @@ static bool ovs_flow_cmp_ufid(const struct sw_flow *flow,
 	return !memcmp(flow->id.ufid, sfid->ufid, sfid->ufid_len);
 }
 
-bool ovs_flow_cmp(const struct sw_flow *flow, const struct sw_flow_match *match)
+bool ovs_flow_cmp(const struct sw_flow *flow,
+		  const struct sw_flow_match *match)
 {
 	if (ovs_identifier_is_ufid(&flow->id))
 		return flow_cmp_masked_key(flow, match->key, &match->range);
@@ -916,7 +920,7 @@ struct sw_flow *ovs_flow_tbl_lookup_ufid(struct flow_table *tbl,
 	hash = ufid_hash(ufid);
 	head = find_bucket(ti, hash);
 	hlist_for_each_entry_rcu(flow, head, ufid_table.node[ti->node_ver],
-				lockdep_ovsl_is_held()) {
+				 lockdep_ovsl_is_held()) {
 		if (flow->ufid_table.hash == hash &&
 		    ovs_flow_cmp_ufid(flow, ufid))
 			return flow;
@@ -1107,7 +1111,7 @@ void ovs_flow_masks_rebalance(struct flow_table *table)
 	if (!masks_and_count)
 		return;
 
-	for (i = 0; i < ma->max; i++)  {
+	for (i = 0; i < ma->max; i++) {
 		struct sw_flow_mask *mask;
 		unsigned int start;
 		int cpu;
diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
index 0d44c5c013fa..82d801f063b7 100644
--- a/net/openvswitch/vport.c
+++ b/net/openvswitch/vport.c
@@ -98,7 +98,7 @@ struct vport *ovs_vport_locate(const struct net *net, const char *name)
 	struct vport *vport;
 
 	hlist_for_each_entry_rcu(vport, bucket, hash_node,
-				lockdep_ovsl_is_held())
+				 lockdep_ovsl_is_held())
 		if (!strcmp(name, ovs_vport_name(vport)) &&
 		    net_eq(ovs_dp_get_net(vport->dp), net))
 			return vport;
@@ -118,7 +118,7 @@ struct vport *ovs_vport_locate(const struct net *net, const char *name)
  * vport_free().
  */
 struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops,
-			  const struct vport_parms *parms)
+			      const struct vport_parms *parms)
 {
 	struct vport *vport;
 	size_t alloc_size;
@@ -397,7 +397,8 @@ int ovs_vport_get_upcall_portids(const struct vport *vport,
  *
  * Returns the portid of the target socket.  Must be called with rcu_read_lock.
  */
-u32 ovs_vport_find_upcall_portid(const struct vport *vport, struct sk_buff *skb)
+u32 ovs_vport_find_upcall_portid(const struct vport *vport,
+				 struct sk_buff *skb)
 {
 	struct vport_portids *ids;
 	u32 ids_index;
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function
  2020-08-25  5:06 [PATCH net-next v3 0/3] net: openvswitch: improve codes xiangxia.m.yue
  2020-08-25  5:06 ` [PATCH net-next v3 1/3] net: openvswitch: improve coding style xiangxia.m.yue
@ 2020-08-25  5:06 ` xiangxia.m.yue
  2020-08-26 19:23   ` Pravin Shelar
  2020-08-25  5:06 ` [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows xiangxia.m.yue
  2020-08-25 16:37 ` [PATCH net-next v3 0/3] net: openvswitch: improve codes David Miller
  3 siblings, 1 reply; 10+ messages in thread
From: xiangxia.m.yue @ 2020-08-25  5:06 UTC (permalink / raw)
  To: davem, pshelar, xiyou.wangcong; +Cc: dev, netdev, Tonghao Zhang

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

Decrease table->count and ufid_count unconditionally,
because we only don't use count or ufid_count to count
when flushing the flows. To simplify the codes, we
remove the "count" argument of table_instance_flow_free.

To avoid a bug when deleting flows in the future, add
WARN_ON in flush flows function.

Cc: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
v3:
use WARN_ON instead of BUG_ON 
v2:
add more details why refactor this function.
---
 net/openvswitch/flow_table.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index 4b7ab62d0e1a..98dad1c5f9d9 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -459,18 +459,14 @@ static void flow_tbl_destroy_rcu_cb(struct rcu_head *rcu)
 static void table_instance_flow_free(struct flow_table *table,
 				     struct table_instance *ti,
 				     struct table_instance *ufid_ti,
-				     struct sw_flow *flow,
-				     bool count)
+				     struct sw_flow *flow)
 {
 	hlist_del_rcu(&flow->flow_table.node[ti->node_ver]);
-	if (count)
-		table->count--;
+	table->count--;
 
 	if (ovs_identifier_is_ufid(&flow->id)) {
 		hlist_del_rcu(&flow->ufid_table.node[ufid_ti->node_ver]);
-
-		if (count)
-			table->ufid_count--;
+		table->ufid_count--;
 	}
 
 	flow_mask_remove(table, flow->mask);
@@ -495,10 +491,16 @@ void table_instance_flow_flush(struct flow_table *table,
 					  flow_table.node[ti->node_ver]) {
 
 			table_instance_flow_free(table, ti, ufid_ti,
-						 flow, false);
+						 flow);
 			ovs_flow_free(flow, true);
 		}
 	}
+
+	if (WARN_ON(table->count != 0 ||
+		    table->ufid_count != 0)) {
+		table->count = 0;
+		table->ufid_count = 0;
+	}
 }
 
 static void table_instance_destroy(struct table_instance *ti,
@@ -635,8 +637,6 @@ int ovs_flow_tbl_flush(struct flow_table *flow_table)
 	rcu_assign_pointer(flow_table->ti, new_ti);
 	rcu_assign_pointer(flow_table->ufid_ti, new_ufid_ti);
 	flow_table->last_rehash = jiffies;
-	flow_table->count = 0;
-	flow_table->ufid_count = 0;
 
 	table_instance_flow_flush(flow_table, old_ti, old_ufid_ti);
 	table_instance_destroy(old_ti, old_ufid_ti);
@@ -954,7 +954,7 @@ void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow)
 	struct table_instance *ufid_ti = ovsl_dereference(table->ufid_ti);
 
 	BUG_ON(table->count == 0);
-	table_instance_flow_free(table, ti, ufid_ti, flow, true);
+	table_instance_flow_free(table, ti, ufid_ti, flow);
 }
 
 static struct sw_flow_mask *mask_alloc(void)
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows
  2020-08-25  5:06 [PATCH net-next v3 0/3] net: openvswitch: improve codes xiangxia.m.yue
  2020-08-25  5:06 ` [PATCH net-next v3 1/3] net: openvswitch: improve coding style xiangxia.m.yue
  2020-08-25  5:06 ` [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function xiangxia.m.yue
@ 2020-08-25  5:06 ` xiangxia.m.yue
  2020-08-26 19:23   ` Pravin Shelar
  2020-08-25 16:37 ` [PATCH net-next v3 0/3] net: openvswitch: improve codes David Miller
  3 siblings, 1 reply; 10+ messages in thread
From: xiangxia.m.yue @ 2020-08-25  5:06 UTC (permalink / raw)
  To: davem, pshelar, xiyou.wangcong; +Cc: dev, netdev, Tonghao Zhang

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

keep_flows was introduced by [1], which used as flag to delete flows or not.
When rehashing or expanding the table instance, we will not flush the flows.
Now don't use it anymore, remove it.

[1] - https://github.com/openvswitch/ovs/commit/acd051f1761569205827dc9b037e15568a8d59f8
Cc: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 net/openvswitch/flow_table.c | 6 ------
 net/openvswitch/flow_table.h | 1 -
 2 files changed, 7 deletions(-)

diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index 98dad1c5f9d9..d8545ae38e4e 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -166,7 +166,6 @@ static struct table_instance *table_instance_alloc(int new_size)
 
 	ti->n_buckets = new_size;
 	ti->node_ver = 0;
-	ti->keep_flows = false;
 	get_random_bytes(&ti->hash_seed, sizeof(u32));
 
 	return ti;
@@ -479,9 +478,6 @@ void table_instance_flow_flush(struct flow_table *table,
 {
 	int i;
 
-	if (ti->keep_flows)
-		return;
-
 	for (i = 0; i < ti->n_buckets; i++) {
 		struct hlist_head *head = &ti->buckets[i];
 		struct hlist_node *n;
@@ -601,8 +597,6 @@ static void flow_table_copy_flows(struct table_instance *old,
 						 lockdep_ovsl_is_held())
 				table_instance_insert(new, flow);
 	}
-
-	old->keep_flows = true;
 }
 
 static struct table_instance *table_instance_rehash(struct table_instance *ti,
diff --git a/net/openvswitch/flow_table.h b/net/openvswitch/flow_table.h
index 6e7d4ac59353..d8fb7a3a3dfd 100644
--- a/net/openvswitch/flow_table.h
+++ b/net/openvswitch/flow_table.h
@@ -53,7 +53,6 @@ struct table_instance {
 	struct rcu_head rcu;
 	int node_ver;
 	u32 hash_seed;
-	bool keep_flows;
 };
 
 struct flow_table {
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 0/3] net: openvswitch: improve codes
  2020-08-25  5:06 [PATCH net-next v3 0/3] net: openvswitch: improve codes xiangxia.m.yue
                   ` (2 preceding siblings ...)
  2020-08-25  5:06 ` [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows xiangxia.m.yue
@ 2020-08-25 16:37 ` David Miller
  2020-08-26  7:09   ` Pravin Shelar
  3 siblings, 1 reply; 10+ messages in thread
From: David Miller @ 2020-08-25 16:37 UTC (permalink / raw)
  To: xiangxia.m.yue; +Cc: pshelar, xiyou.wangcong, dev, netdev

From: xiangxia.m.yue@gmail.com
Date: Tue, 25 Aug 2020 13:06:33 +0800

> From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
> 
> This series patches are not bug fix, just improve codes.

Pravin, please review this patch series.

Thank you.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 1/3] net: openvswitch: improve coding style
  2020-08-25  5:06 ` [PATCH net-next v3 1/3] net: openvswitch: improve coding style xiangxia.m.yue
@ 2020-08-25 21:51   ` Stefano Brivio
  2020-09-01 11:54     ` Tonghao Zhang
  0 siblings, 1 reply; 10+ messages in thread
From: Stefano Brivio @ 2020-08-25 21:51 UTC (permalink / raw)
  To: xiangxia.m.yue; +Cc: davem, pshelar, xiyou.wangcong, dev, netdev

On Tue, 25 Aug 2020 13:06:34 +0800
xiangxia.m.yue@gmail.com wrote:

> +++ b/net/openvswitch/datapath.c
>
> [...]
>
> @@ -2095,7 +2099,7 @@ static void ovs_update_headroom(struct datapath *dp, unsigned int new_headroom)
>  	dp->max_headroom = new_headroom;
>  	for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++)

While at it, you could also add curly brackets here.

> +++ b/net/openvswitch/flow_table.c
>
> [...]
>
> @@ -111,9 +111,11 @@ static void flow_free(struct sw_flow *flow)
>  	if (ovs_identifier_is_key(&flow->id))
>  		kfree(flow->id.unmasked_key);
>  	if (flow->sf_acts)
> -		ovs_nla_free_flow_actions((struct sw_flow_actions __force *)flow->sf_acts);
> +		ovs_nla_free_flow_actions((struct sw_flow_actions __force *)
> +					  flow->sf_acts);
>  	/* We open code this to make sure cpu 0 is always considered */
> -	for (cpu = 0; cpu < nr_cpu_ids; cpu = cpumask_next(cpu, &flow->cpu_used_mask))
> +	for (cpu = 0; cpu < nr_cpu_ids;
> +	     cpu = cpumask_next(cpu, &flow->cpu_used_mask))

...and here.

> @@ -273,7 +275,7 @@ static int tbl_mask_array_add_mask(struct flow_table *tbl,
>  
>  	if (ma_count >= ma->max) {
>  		err = tbl_mask_array_realloc(tbl, ma->max +
> -					      MASK_ARRAY_SIZE_MIN);
> +					     MASK_ARRAY_SIZE_MIN);

This is not aligned properly either, MASK_ARRAY_SIZE_MIN is added to
ma->max and should be aligned to it.

> @@ -448,16 +450,17 @@ int ovs_flow_tbl_init(struct flow_table *table)
>  
>  static void flow_tbl_destroy_rcu_cb(struct rcu_head *rcu)
>  {
> -	struct table_instance *ti = container_of(rcu, struct table_instance, rcu);
> +	struct table_instance *ti =
> +		container_of(rcu, struct table_instance, rcu);

The assignment could very well go on a separate line.

-- 
Stefano


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 0/3] net: openvswitch: improve codes
  2020-08-25 16:37 ` [PATCH net-next v3 0/3] net: openvswitch: improve codes David Miller
@ 2020-08-26  7:09   ` Pravin Shelar
  0 siblings, 0 replies; 10+ messages in thread
From: Pravin Shelar @ 2020-08-26  7:09 UTC (permalink / raw)
  To: David Miller
  Cc: Tonghao Zhang, Cong Wang, ovs dev, Linux Kernel Network Developers

On Tue, Aug 25, 2020 at 9:37 AM David Miller <davem@davemloft.net> wrote:
>
> From: xiangxia.m.yue@gmail.com
> Date: Tue, 25 Aug 2020 13:06:33 +0800
>
> > From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
> >
> > This series patches are not bug fix, just improve codes.
>
> Pravin, please review this patch series.
>
Sorry for delay. I will have a look tomorrow morning PST.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function
  2020-08-25  5:06 ` [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function xiangxia.m.yue
@ 2020-08-26 19:23   ` Pravin Shelar
  0 siblings, 0 replies; 10+ messages in thread
From: Pravin Shelar @ 2020-08-26 19:23 UTC (permalink / raw)
  To: Tonghao Zhang
  Cc: David S. Miller, Cong Wang, ovs dev, Linux Kernel Network Developers

On Mon, Aug 24, 2020 at 10:08 PM <xiangxia.m.yue@gmail.com> wrote:
>
> From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
>
> Decrease table->count and ufid_count unconditionally,
> because we only don't use count or ufid_count to count
> when flushing the flows. To simplify the codes, we
> remove the "count" argument of table_instance_flow_free.
>
> To avoid a bug when deleting flows in the future, add
> WARN_ON in flush flows function.
>
> Cc: Pravin B Shelar <pshelar@ovn.org>
> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Looks good.

Acked-by: Pravin B Shelar <pshelar@ovn.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows
  2020-08-25  5:06 ` [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows xiangxia.m.yue
@ 2020-08-26 19:23   ` Pravin Shelar
  0 siblings, 0 replies; 10+ messages in thread
From: Pravin Shelar @ 2020-08-26 19:23 UTC (permalink / raw)
  To: Tonghao Zhang
  Cc: David S. Miller, Cong Wang, ovs dev, Linux Kernel Network Developers

On Mon, Aug 24, 2020 at 10:08 PM <xiangxia.m.yue@gmail.com> wrote:
>
> From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
>
> keep_flows was introduced by [1], which used as flag to delete flows or not.
> When rehashing or expanding the table instance, we will not flush the flows.
> Now don't use it anymore, remove it.
>
> [1] - https://github.com/openvswitch/ovs/commit/acd051f1761569205827dc9b037e15568a8d59f8
> Cc: Pravin B Shelar <pshelar@ovn.org>
> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>

This patch looks good. But its fixing memory leak, I guess the patch
that removed dependedcy on keep_flows is in net-next. so we are good.

Acked-by: Pravin B Shelar <pshelar@ovn.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v3 1/3] net: openvswitch: improve coding style
  2020-08-25 21:51   ` Stefano Brivio
@ 2020-09-01 11:54     ` Tonghao Zhang
  0 siblings, 0 replies; 10+ messages in thread
From: Tonghao Zhang @ 2020-09-01 11:54 UTC (permalink / raw)
  To: Stefano Brivio
  Cc: David Miller, Pravin Shelar, Cong Wang, ovs dev,
	Linux Kernel Network Developers

On Wed, Aug 26, 2020 at 5:51 AM Stefano Brivio <sbrivio@redhat.com> wrote:
>
> On Tue, 25 Aug 2020 13:06:34 +0800
> xiangxia.m.yue@gmail.com wrote:
>
> > +++ b/net/openvswitch/datapath.c
> >
> > [...]
> >
> > @@ -2095,7 +2099,7 @@ static void ovs_update_headroom(struct datapath *dp, unsigned int new_headroom)
> >       dp->max_headroom = new_headroom;
> >       for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++)
>
> While at it, you could also add curly brackets here.
>
> > +++ b/net/openvswitch/flow_table.c
> >
> > [...]
> >
> > @@ -111,9 +111,11 @@ static void flow_free(struct sw_flow *flow)
> >       if (ovs_identifier_is_key(&flow->id))
> >               kfree(flow->id.unmasked_key);
> >       if (flow->sf_acts)
> > -             ovs_nla_free_flow_actions((struct sw_flow_actions __force *)flow->sf_acts);
> > +             ovs_nla_free_flow_actions((struct sw_flow_actions __force *)
> > +                                       flow->sf_acts);
> >       /* We open code this to make sure cpu 0 is always considered */
> > -     for (cpu = 0; cpu < nr_cpu_ids; cpu = cpumask_next(cpu, &flow->cpu_used_mask))
> > +     for (cpu = 0; cpu < nr_cpu_ids;
> > +          cpu = cpumask_next(cpu, &flow->cpu_used_mask))
>
> ...and here.
>
> > @@ -273,7 +275,7 @@ static int tbl_mask_array_add_mask(struct flow_table *tbl,
> >
> >       if (ma_count >= ma->max) {
> >               err = tbl_mask_array_realloc(tbl, ma->max +
> > -                                           MASK_ARRAY_SIZE_MIN);
> > +                                          MASK_ARRAY_SIZE_MIN);
>
> This is not aligned properly either, MASK_ARRAY_SIZE_MIN is added to
> ma->max and should be aligned to it.
>
> > @@ -448,16 +450,17 @@ int ovs_flow_tbl_init(struct flow_table *table)
> >
> >  static void flow_tbl_destroy_rcu_cb(struct rcu_head *rcu)
> >  {
> > -     struct table_instance *ti = container_of(rcu, struct table_instance, rcu);
> > +     struct table_instance *ti =
> > +             container_of(rcu, struct table_instance, rcu);
>
> The assignment could very well go on a separate line.
Hi Stefano
Sorry for missing the comment. I update the patch in v4. Thanks.

> --
> Stefano
>


-- 
Best regards, Tonghao

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-09-01 11:58 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-25  5:06 [PATCH net-next v3 0/3] net: openvswitch: improve codes xiangxia.m.yue
2020-08-25  5:06 ` [PATCH net-next v3 1/3] net: openvswitch: improve coding style xiangxia.m.yue
2020-08-25 21:51   ` Stefano Brivio
2020-09-01 11:54     ` Tonghao Zhang
2020-08-25  5:06 ` [PATCH net-next v3 2/3] net: openvswitch: refactor flow free function xiangxia.m.yue
2020-08-26 19:23   ` Pravin Shelar
2020-08-25  5:06 ` [PATCH net-next v3 3/3] net: openvswitch: remove unnused keep_flows xiangxia.m.yue
2020-08-26 19:23   ` Pravin Shelar
2020-08-25 16:37 ` [PATCH net-next v3 0/3] net: openvswitch: improve codes David Miller
2020-08-26  7:09   ` Pravin Shelar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).