On Thu, Oct 16, 2014 at 04:50:10PM -0700, Andy Zhou wrote: > Simon, The change makes a lot of sense. > > I am just wondering if we should upstream the netlink.h change first? > To me, it seems to add a new compat API that does not exist upstream.
Sure, I think that makes sense. Though I'm not sure if upstream likes to take new API calls that aren't used. Perhaps a good way forwards would be for me to re-submit this patch against the upstream net-next kernel. Pravin, how would you feel about that? > > > On Wed, Sep 24, 2014 at 9:28 PM, Simon Horman > <simon.hor...@netronome.com> wrote: > > The original motivation for this change was to allow the > > helper to be used in files other than actions.c as part > > of work on an odp select group action. > > > > It was as pointed out by Thomas Graf that this helper would be best > > off living in netlink.h. Furthermore, I think that the generic nature of > > this > > helper means it is best off in netlink.h regardless of if it is used more > > than > > one .c file or not. Thus I would like it considered independent > > of the work on an odp select group action. > > > > Signed-off-by: Simon Horman <simon.hor...@netronome.com> > > --- > > datapath/actions.c | 11 +++-------- > > datapath/linux/compat/include/net/netlink.h | 4 ++++ > > 2 files changed, 7 insertions(+), 8 deletions(-) > > > > diff --git a/datapath/actions.c b/datapath/actions.c > > index b527cb6..535b87e 100644 > > --- a/datapath/actions.c > > +++ b/datapath/actions.c > > @@ -671,11 +671,6 @@ static int output_userspace(struct datapath *dp, > > struct sk_buff *skb, > > return ovs_dp_upcall(dp, skb, key, &upcall); > > } > > > > -static bool last_action(const struct nlattr *a, int rem) > > -{ > > - return a->nla_len == rem; > > -} > > - > > static int sample(struct datapath *dp, struct sk_buff *skb, > > struct sw_flow_key *key, const struct nlattr *attr) > > { > > @@ -710,7 +705,7 @@ static int sample(struct datapath *dp, struct sk_buff > > *skb, > > * user space. This skb will be consumed by its caller. > > */ > > if (likely(nla_type(a) == OVS_ACTION_ATTR_USERSPACE && > > - last_action(a, rem))) > > + nla_is_last(a, rem))) > > return output_userspace(dp, skb, key, a); > > > > skb = skb_clone(skb, GFP_ATOMIC); > > @@ -810,7 +805,7 @@ static int execute_recirc(struct datapath *dp, struct > > sk_buff *skb, > > } > > BUG_ON(!is_flow_key_valid(key)); > > > > - if (!last_action(a, rem)) { > > + if (!nla_is_last(a, rem)) { > > /* Recirc action is the not the last action > > * of the action list, need to clone the skb. > > */ > > @@ -897,7 +892,7 @@ static int do_execute_actions(struct datapath *dp, > > struct sk_buff *skb, > > > > case OVS_ACTION_ATTR_RECIRC: > > err = execute_recirc(dp, skb, key, a, rem); > > - if (last_action(a, rem)) { > > + if (nla_is_last(a, rem)) { > > /* If this is the last action, the skb has > > * been consumed or freed. > > * Return immediately. > > diff --git a/datapath/linux/compat/include/net/netlink.h > > b/datapath/linux/compat/include/net/netlink.h > > index a6dc584..de37058 100644 > > --- a/datapath/linux/compat/include/net/netlink.h > > +++ b/datapath/linux/compat/include/net/netlink.h > > @@ -63,4 +63,8 @@ static inline struct nlattr *nla_find_nested(struct > > nlattr *nla, int attrtype) > > } > > #endif > > > > +static inline bool nla_is_last(const struct nlattr *a, int rem) > > +{ > > + return a->nla_len == rem; > > +} > > #endif /* net/netlink.h */ > > -- > > 2.0.1 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev