Message ID | 20160822135620.15337-19-sw@simonwunderlich.de |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 8/22/2016 4:56 PM, Simon Wunderlich wrote: > From: Sven Eckelmann <sven@narfation.org> > > 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 <sven@narfation.org> > Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> > Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> > --- > 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
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); } /**