I'll merge this shortly.

Acked-by: Ethan Jackson <et...@nicira.com>

On Wed, Apr 15, 2015 at 11:11 AM, Daniele Di Proietto
<diproiet...@vmware.com> wrote:
> As stated by the comment above the structure, the 'action' pointer does not
> change during the 'dp_netdev_actions' lifetime: we might as well embed
> the pointed memory into the structure.
>
> The commit also updates the description of dp_netdev_actions_create().
>
> Signed-off-by: Daniele Di Proietto <diproiet...@vmware.com>
> ---
>  lib/dpif-netdev.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 2cdb2cd..cad063d 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -332,8 +332,8 @@ static int dpif_netdev_flow_from_nlattrs(const struct 
> nlattr *, uint32_t,
>  struct dp_netdev_actions {
>      /* These members are immutable: they do not change during the struct's
>       * lifetime.  */
> -    struct nlattr *actions;     /* Sequence of OVS_ACTION_ATTR_* attributes. 
> */
>      unsigned int size;          /* Size of 'actions', in bytes. */
> +    struct nlattr actions[];    /* Sequence of OVS_ACTION_ATTR_* attributes. 
> */
>  };
>
>  struct dp_netdev_actions *dp_netdev_actions_create(const struct nlattr *,
> @@ -2432,16 +2432,15 @@ dpif_netdev_queue_to_priority(const struct dpif *dpif 
> OVS_UNUSED,
>  }
>
>
> -/* Creates and returns a new 'struct dp_netdev_actions', with a reference 
> count
> - * of 1, whose actions are a copy of from the 'ofpacts_len' bytes of
> - * 'ofpacts'. */
> +/* Creates and returns a new 'struct dp_netdev_actions', whose actions are
> + * a copy of the 'ofpacts_len' bytes of 'ofpacts'. */
>  struct dp_netdev_actions *
>  dp_netdev_actions_create(const struct nlattr *actions, size_t size)
>  {
>      struct dp_netdev_actions *netdev_actions;
>
> -    netdev_actions = xmalloc(sizeof *netdev_actions);
> -    netdev_actions->actions = xmemdup(actions, size);
> +    netdev_actions = xmalloc(sizeof *netdev_actions + size);
> +    memcpy(netdev_actions->actions, actions, size);
>      netdev_actions->size = size;
>
>      return netdev_actions;
> @@ -2456,7 +2455,6 @@ dp_netdev_flow_get_actions(const struct dp_netdev_flow 
> *flow)
>  static void
>  dp_netdev_actions_free(struct dp_netdev_actions *actions)
>  {
> -    free(actions->actions);
>      free(actions);
>  }
>
> --
> 2.1.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

Reply via email to