[Patch v2 3/4] veth: implement ->io_free

Thomas Graf tgraf at suug.ch
Mon Mar 31 07:07:04 EDT 2014


On 03/28/14 at 06:08pm, Cong Wang wrote:
> So that veth link can be just put by rtnl_link_put()
> 
> Signed-off-by: Cong Wang <xiyou.wangcong at gmail.com>
> ---
>  lib/route/link/veth.c | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/route/link/veth.c b/lib/route/link/veth.c
> index cf2e513..c6a4cc7 100644
> --- a/lib/route/link/veth.c
> +++ b/lib/route/link/veth.c
> @@ -163,6 +163,16 @@ static int veth_alloc(struct rtnl_link *link)
>  	return 0;
>  }
>  
> +static void veth_free(struct rtnl_link *link)
> +{
> +	struct rtnl_link *peer = rtnl_link_veth_get_peer(link);
> +	link->l_info = NULL;
> +	if (peer) {
> +		peer->l_info = NULL;
> +		rtnl_link_put(peer);
> +	}

I think this should call _release() to not dupliacte code.

> +}
> +
>  static struct rtnl_link_info_ops veth_info_ops = {
>  	.io_name		= "veth",
>  	.io_parse		= veth_parse,
> @@ -173,6 +183,7 @@ static struct rtnl_link_info_ops veth_info_ops = {
>  	.io_alloc		= veth_alloc,
>  	.io_clone		= veth_clone,
>  	.io_put_attrs		= veth_put_attrs,
> +	.io_free		= veth_free,
>  };
>  
>  /** @cond SKIP */
> @@ -227,8 +238,12 @@ struct rtnl_link *rtnl_link_veth_get_peer(struct rtnl_link *link)
>  void rtnl_link_veth_release(struct rtnl_link *link)
>  {
>  	struct rtnl_link *peer = rtnl_link_veth_get_peer(link);
> -	rtnl_link_put(peer);
> +	link->l_info = NULL;

Will need to release the reference as requested in patch 2.

>  	rtnl_link_put(link);
> +	if (peer) {
> +		peer->l_info = NULL;
> +		rtnl_link_put(peer);
> +	}
>  }
>  
>  /**
> @@ -274,9 +289,7 @@ int rtnl_link_veth_add(struct nl_sock *sock, const char *name,
>  	rtnl_link_set_ns_pid(peer, pid);
>  	err = rtnl_link_add(sock, link, NLM_F_CREATE);
>  
> -	rtnl_link_put(peer);
>  	rtnl_link_put(link);
> -
>          return err;
>  }
>  
> -- 
> 1.7.11.7
> 
> 
> _______________________________________________
> libnl mailing list
> libnl at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/libnl
> 



More information about the libnl mailing list