|
@@ -504,11 +504,6 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,
|
|
|
return ovs_dp_upcall(dp, skb, &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)
|
|
|
{
|
|
@@ -543,7 +538,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);
|
|
@@ -633,7 +628,7 @@ static int execute_recirc(struct datapath *dp, struct sk_buff *skb,
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- 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.
|
|
|
*/
|
|
@@ -707,7 +702,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.
|