On Tue, Oct 29, 2019 at 3:38 PM Pravin Shelar <[email protected]> wrote: > > On Sun, Oct 27, 2019 at 11:49 PM Tonghao Zhang <[email protected]> > wrote: > > > > On Thu, Oct 24, 2019 at 3:14 PM Pravin Shelar <[email protected]> wrote: > > > > > > On Tue, Oct 22, 2019 at 7:35 PM Tonghao Zhang <[email protected]> > > > wrote: > > > > > > > > On Tue, Oct 22, 2019 at 2:58 PM Pravin Shelar <[email protected]> wrote: > > > > > > > > ... > > > > ... > > > > struct sw_flow *ovs_flow_tbl_dump_next(struct table_instance *ti, > > > > @@ -400,10 +458,9 @@ static struct table_instance > > > > *table_instance_rehash(struct table_instance *ti, > > > > return new_ti; > > > > } > > > > > > > > -int ovs_flow_tbl_flush(struct flow_table *flow_table) > > > > +int ovs_flow_tbl_flush(struct flow_table *table) > > > > { > > > > - struct table_instance *old_ti, *new_ti; > > > > - struct table_instance *old_ufid_ti, *new_ufid_ti; > > > > + struct table_instance *new_ti, *new_ufid_ti; > > > > > > > > new_ti = table_instance_alloc(TBL_MIN_BUCKETS); > > > > if (!new_ti) > > > > @@ -412,16 +469,12 @@ int ovs_flow_tbl_flush(struct flow_table > > > > *flow_table) > > > > if (!new_ufid_ti) > > > > goto err_free_ti; > > > > > > > > - old_ti = ovsl_dereference(flow_table->ti); > > > > - old_ufid_ti = ovsl_dereference(flow_table->ufid_ti); > > > > + table_instance_destroy(table, true); > > > > > > > This would destroy running table causing unnecessary flow miss. Lets > > > keep current scheme of setting up new table before destroying current > > > one. > > > > > > > - rcu_assign_pointer(flow_table->ti, new_ti); > .... > ... > > /* Must be called with OVS mutex held. */ > > void ovs_flow_tbl_remove(struct flow_table *table, struct sw_flow *flow) > > { > > @@ -752,17 +794,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); > > - hlist_del_rcu(&flow->flow_table.node[ti->node_ver]); > > - table->count--; > > - if (ovs_identifier_is_ufid(&flow->id)) { > > - hlist_del_rcu(&flow->ufid_table.node[ufid_ti->node_ver]); > > - table->ufid_count--; > > - } > > - > > - /* RCU delete the mask. 'flow->mask' is not NULLed, as it should be > > - * accessible as long as the RCU read lock is held. > > - */ > > - flow_mask_remove(table, flow->mask); > > + table_instance_remove(table, ti, ufid_ti, flow, true); > > } > Lets rename table_instance_remove() to imply it is freeing a flow. hi Pravin, the function ovs_flow_free will free the flow actually. In -ovs_flow_cmd_del ovs_flow_tbl_remove ... ovs_flow_free
In -table_instance_destroy table_instance_remove ovs_flow_free But if rename the table_instance_remove, table_instance_flow_free ? > Otherwise looks good. _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
