On Tue, Mar 25, 2014 at 2:35 PM, Jarno Rajahalme <jrajaha...@nicira.com> wrote: > ovs_flow_cmd_del() now allocates reply (if needed) after the flow has > already been removed from the flow table. If the reply allocation > fails, a netlink error is signaled with netlink_set_err(), as is > already done in ovs_flow_cmd_new_or_set() in the similar situation. > > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com> LGTM Acked-by: Pravin B Shelar <pshe...@nicira.com>
> --- > datapath/datapath.c | 39 ++++++++++++++++----------------------- > 1 file changed, 16 insertions(+), 23 deletions(-) > > diff --git a/datapath/datapath.c b/datapath/datapath.c > index 01913f6..a13208c 100644 > --- a/datapath/datapath.c > +++ b/datapath/datapath.c > @@ -997,50 +997,43 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct > genl_info *info) > struct sw_flow_match match; > int err; > > + if (a[OVS_FLOW_ATTR_KEY]) { > + ovs_match_init(&match, &key, NULL); > + err = ovs_nla_get_match(&match, a[OVS_FLOW_ATTR_KEY], NULL); > + if (err) > + return err; > + } > + > ovs_lock(); > dp = get_dp(sock_net(skb->sk), ovs_header->dp_ifindex); > if (!dp) { > err = -ENODEV; > goto unlock; > } > - > if (!a[OVS_FLOW_ATTR_KEY]) { > err = ovs_flow_tbl_flush(&dp->table); > goto unlock; > } > - > - ovs_match_init(&match, &key, NULL); > - err = ovs_nla_get_match(&match, a[OVS_FLOW_ATTR_KEY], NULL); > - if (err) > - goto unlock; > - > flow = ovs_flow_tbl_lookup(&dp->table, &key); > if (!flow || !ovs_flow_cmp_unmasked_key(flow, &match)) { > err = -ENOENT; > goto unlock; > } > - > - reply = ovs_flow_cmd_alloc_info(flow, info, false); > - if (IS_ERR(reply)) { > - err = PTR_ERR(reply); > - goto unlock; > - } > - > ovs_flow_tbl_remove(&dp->table, flow); > + ovs_unlock(); > > + reply = ovs_flow_cmd_build_info(flow, ovs_header->dp_ifindex, > + info, OVS_FLOW_CMD_DEL, false); > if (reply) { > - err = ovs_flow_cmd_fill_info(flow, ovs_header->dp_ifindex, > - reply, info->snd_portid, > - info->snd_seq, 0, > - OVS_FLOW_CMD_DEL); > - BUG_ON(err < 0); > + if (!IS_ERR(reply)) > + ovs_notify(reply, info, &ovs_dp_flow_multicast_group); > + else > + netlink_set_err(sock_net(skb->sk)->genl_sock, 0, > + ovs_dp_flow_multicast_group.id, > + PTR_ERR(reply)); > } > > ovs_flow_free(flow, true); > - ovs_unlock(); > - > - if (reply) > - ovs_notify(reply, info, &ovs_dp_flow_multicast_group); > return 0; > unlock: > ovs_unlock(); > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev