# Re: \[PATCH 18/20\] batman-adv: Place kref\_get for tvlv\_handler near use

- From: Sergei Shtylyov \<hidden\>
- Date: 2016-08-23 13:36:17 
- List: netdev
- Page: https://ratatoskr.run/netdev/2016/08/11026424
- Thread: https://ratatoskr.run/batman/2016/08/11026424/t.md

```text
On 8/22/2016 4:56 PM, Simon Wunderlich wrote:

> From: Sven Eckelmann <redacted>
>
> It is hard to understand why the refcnt is increased when it isn't done
> near the actual place the new reference is used. So using kref_get right
> before the place which requires the reference and in the same function
> helps to avoid accidental problems caused by incorrect reference counting.

     Neither does the boilerplate work for this patch...

> Signed-off-by: Sven Eckelmann <redacted>
> Signed-off-by: Marek Lindner <redacted>
> Signed-off-by: Simon Wunderlich <redacted>
> ---
>  net/batman-adv/tvlv.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/net/batman-adv/tvlv.c b/net/batman-adv/tvlv.c
> index 3533867..77654f0 100644
> --- a/net/batman-adv/tvlv.c
> +++ b/net/batman-adv/tvlv.c
> @@ -547,8 +547,12 @@ void batadv_tvlv_handler_register(struct batadv_priv *bat_priv,
>  	INIT_HLIST_NODE(&tvlv_handler->list);
>
>  	spin_lock_bh(&bat_priv->tvlv.handler_list_lock);
> +	kref_get(&tvlv_handler->refcount);
>  	hlist_add_head_rcu(&tvlv_handler->list, &bat_priv->tvlv.handler_list);
>  	spin_unlock_bh(&bat_priv->tvlv.handler_list_lock);
> +
> +	/* don't return reference to new tvlv_handler */
> +	batadv_tvlv_handler_put(tvlv_handler);
>  }
>
>  /**

MBR, Sergei
```
