diff mbox series

[ovs-dev,v2,02/10] lflow: Refactor convert_match_to_expr() to explicitly consume prereqs.

Message ID 20210204132508.9958.1650.stgit@dceara.remote.csb
State Changes Requested
Headers show
Series ovn-controller: Make lflow cache size configurable. | expand

Commit Message

Dumitru Ceara Feb. 4, 2021, 1:25 p.m. UTC
It was (and still is) the responsibility of the caller of
convert_match_to_expr() to explicitly free any 'prereqs' expression that
was passed as argument if the expression parsing of the 'lflow' match failed.

However, convert_match_to_expr() now updates the value of '*prereqs' setting
it to NULL in the successful case.  This makes it easier for callers of the
function because 'expr_destroy(prereqs)' can now be called unconditionally.

Signed-off-by: Dumitru Ceara <dceara@redhat.com>
---
Note: This patch doesn't change the callers of convert_match_to_expr() to
take advantage of the new semantic but following patches do.
---
 controller/lflow.c |   14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

Comments

Numan Siddique Feb. 8, 2021, 11:04 a.m. UTC | #1
On Thu, Feb 4, 2021 at 6:55 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> It was (and still is) the responsibility of the caller of
> convert_match_to_expr() to explicitly free any 'prereqs' expression that
> was passed as argument if the expression parsing of the 'lflow' match failed.
>
> However, convert_match_to_expr() now updates the value of '*prereqs' setting
> it to NULL in the successful case.  This makes it easier for callers of the
> function because 'expr_destroy(prereqs)' can now be called unconditionally.
>
> Signed-off-by: Dumitru Ceara <dceara@redhat.com>

Acked-by: Numan Siddique <numans@ovn.org>

Numan

> ---
> Note: This patch doesn't change the callers of convert_match_to_expr() to
> take advantage of the new semantic but following patches do.
> ---
>  controller/lflow.c |   14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/controller/lflow.c b/controller/lflow.c
> index 04ba0d1..495653f 100644
> --- a/controller/lflow.c
> +++ b/controller/lflow.c
> @@ -758,11 +758,12 @@ add_matches_to_flow_table(const struct sbrec_logical_flow *lflow,
>  /* Converts the match and returns the simplified expr tree.
>   *
>   * The caller should evaluate the conditions and normalize the expr tree.
> + * If parsing is successful, '*prereqs' is also consumed.
>   */
>  static struct expr *
>  convert_match_to_expr(const struct sbrec_logical_flow *lflow,
>                        const struct sbrec_datapath_binding *dp,
> -                      struct expr *prereqs,
> +                      struct expr **prereqs,
>                        const struct shash *addr_sets,
>                        const struct shash *port_groups,
>                        struct lflow_resource_ref *lfrr,
> @@ -795,8 +796,9 @@ convert_match_to_expr(const struct sbrec_logical_flow *lflow,
>      sset_destroy(&port_groups_ref);
>
>      if (!error) {
> -        if (prereqs) {
> -            e = expr_combine(EXPR_T_AND, e, prereqs);
> +        if (*prereqs) {
> +            e = expr_combine(EXPR_T_AND, e, *prereqs);
> +            *prereqs = NULL;
>          }
>          e = expr_annotate(e, &symtab, &error);
>      }
> @@ -854,7 +856,7 @@ consider_logical_flow__(const struct sbrec_logical_flow *lflow,
>          .n_tables = LOG_PIPELINE_LEN,
>          .cur_ltable = lflow->table_id,
>      };
> -    struct expr *prereqs;
> +    struct expr *prereqs = NULL;
>      char *error;
>
>      error = ovnacts_parse_string(lflow->actions, &pp, &ovnacts, &prereqs);
> @@ -885,7 +887,7 @@ consider_logical_flow__(const struct sbrec_logical_flow *lflow,
>      struct expr *expr = NULL;
>      if (!l_ctx_out->lflow_cache_map) {
>          /* Caching is disabled. */
> -        expr = convert_match_to_expr(lflow, dp, prereqs, l_ctx_in->addr_sets,
> +        expr = convert_match_to_expr(lflow, dp, &prereqs, l_ctx_in->addr_sets,
>                                       l_ctx_in->port_groups, l_ctx_out->lfrr,
>                                       NULL);
>          if (!expr) {
> @@ -949,7 +951,7 @@ consider_logical_flow__(const struct sbrec_logical_flow *lflow,
>
>      bool pg_addr_set_ref = false;
>      if (!expr) {
> -        expr = convert_match_to_expr(lflow, dp, prereqs, l_ctx_in->addr_sets,
> +        expr = convert_match_to_expr(lflow, dp, &prereqs, l_ctx_in->addr_sets,
>                                       l_ctx_in->port_groups, l_ctx_out->lfrr,
>                                       &pg_addr_set_ref);
>          if (!expr) {
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
diff mbox series

Patch

diff --git a/controller/lflow.c b/controller/lflow.c
index 04ba0d1..495653f 100644
--- a/controller/lflow.c
+++ b/controller/lflow.c
@@ -758,11 +758,12 @@  add_matches_to_flow_table(const struct sbrec_logical_flow *lflow,
 /* Converts the match and returns the simplified expr tree.
  *
  * The caller should evaluate the conditions and normalize the expr tree.
+ * If parsing is successful, '*prereqs' is also consumed.
  */
 static struct expr *
 convert_match_to_expr(const struct sbrec_logical_flow *lflow,
                       const struct sbrec_datapath_binding *dp,
-                      struct expr *prereqs,
+                      struct expr **prereqs,
                       const struct shash *addr_sets,
                       const struct shash *port_groups,
                       struct lflow_resource_ref *lfrr,
@@ -795,8 +796,9 @@  convert_match_to_expr(const struct sbrec_logical_flow *lflow,
     sset_destroy(&port_groups_ref);
 
     if (!error) {
-        if (prereqs) {
-            e = expr_combine(EXPR_T_AND, e, prereqs);
+        if (*prereqs) {
+            e = expr_combine(EXPR_T_AND, e, *prereqs);
+            *prereqs = NULL;
         }
         e = expr_annotate(e, &symtab, &error);
     }
@@ -854,7 +856,7 @@  consider_logical_flow__(const struct sbrec_logical_flow *lflow,
         .n_tables = LOG_PIPELINE_LEN,
         .cur_ltable = lflow->table_id,
     };
-    struct expr *prereqs;
+    struct expr *prereqs = NULL;
     char *error;
 
     error = ovnacts_parse_string(lflow->actions, &pp, &ovnacts, &prereqs);
@@ -885,7 +887,7 @@  consider_logical_flow__(const struct sbrec_logical_flow *lflow,
     struct expr *expr = NULL;
     if (!l_ctx_out->lflow_cache_map) {
         /* Caching is disabled. */
-        expr = convert_match_to_expr(lflow, dp, prereqs, l_ctx_in->addr_sets,
+        expr = convert_match_to_expr(lflow, dp, &prereqs, l_ctx_in->addr_sets,
                                      l_ctx_in->port_groups, l_ctx_out->lfrr,
                                      NULL);
         if (!expr) {
@@ -949,7 +951,7 @@  consider_logical_flow__(const struct sbrec_logical_flow *lflow,
 
     bool pg_addr_set_ref = false;
     if (!expr) {
-        expr = convert_match_to_expr(lflow, dp, prereqs, l_ctx_in->addr_sets,
+        expr = convert_match_to_expr(lflow, dp, &prereqs, l_ctx_in->addr_sets,
                                      l_ctx_in->port_groups, l_ctx_out->lfrr,
                                      &pg_addr_set_ref);
         if (!expr) {