[v2,18/18] batman-adv: Place kref_get for tvlv_container near use
Commit Message
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 causedy incorrect reference counting.
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
v2:
- split patch based on type
net/batman-adv/tvlv.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
On Freitag, 15. Juli 2016 17:39:33 CEST Sven Eckelmann wrote:
> 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 causedy incorrect reference counting.
>
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> ---
> v2:
> - split patch based on type
s/tvlv_container/tvlv_handler/ in subject.
Kind regards,
Sven
On Friday, July 15, 2016 17:39:33 Sven Eckelmann wrote:
> 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 causedy incorrect reference counting.
>
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> ---
> v2:
> - split patch based on type
>
> net/batman-adv/tvlv.c | 4 ++++
> 1 file changed, 4 insertions(+)
Applied in revision 95136e0.
Thanks,
Marek
@@ -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);
}
/**