treewide: remove redundant #include <linux/kconfig.h>
[cascardo/linux.git] / net / batman-adv / tvlv.c
index 3d1cf0f..77654f0 100644 (file)
@@ -257,8 +257,13 @@ void batadv_tvlv_container_register(struct batadv_priv *bat_priv,
        spin_lock_bh(&bat_priv->tvlv.container_list_lock);
        tvlv_old = batadv_tvlv_container_get(bat_priv, type, version);
        batadv_tvlv_container_remove(bat_priv, tvlv_old);
+
+       kref_get(&tvlv_new->refcount);
        hlist_add_head(&tvlv_new->list, &bat_priv->tvlv.container_list);
        spin_unlock_bh(&bat_priv->tvlv.container_list_lock);
+
+       /* don't return reference to new tvlv_container */
+       batadv_tvlv_container_put(tvlv_new);
 }
 
 /**
@@ -542,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);
 }
 
 /**