Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / net / batman-adv / gateway_client.c
index c2928c2..de055d6 100644 (file)
@@ -339,14 +339,15 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
        if (!gw_node)
                return;
 
-       kref_get(&orig_node->refcount);
+       kref_init(&gw_node->refcount);
        INIT_HLIST_NODE(&gw_node->list);
+       kref_get(&orig_node->refcount);
        gw_node->orig_node = orig_node;
        gw_node->bandwidth_down = ntohl(gateway->bandwidth_down);
        gw_node->bandwidth_up = ntohl(gateway->bandwidth_up);
-       kref_init(&gw_node->refcount);
 
        spin_lock_bh(&bat_priv->gw.list_lock);
+       kref_get(&gw_node->refcount);
        hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.list);
        spin_unlock_bh(&bat_priv->gw.list_lock);
 
@@ -357,6 +358,9 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,
                   ntohl(gateway->bandwidth_down) % 10,
                   ntohl(gateway->bandwidth_up) / 10,
                   ntohl(gateway->bandwidth_up) % 10);
+
+       /* don't return reference to new gw_node */
+       batadv_gw_node_put(gw_node);
 }
 
 /**
@@ -478,6 +482,7 @@ void batadv_gw_node_free(struct batadv_priv *bat_priv)
        spin_unlock_bh(&bat_priv->gw.list_lock);
 }
 
+#ifdef CONFIG_BATMAN_ADV_DEBUGFS
 int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
 {
        struct net_device *net_dev = (struct net_device *)seq->private;
@@ -505,6 +510,7 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)
 
        return 0;
 }
+#endif
 
 /**
  * batadv_gw_dump - Dump gateways into a message