Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / net / batman-adv / send.c
index 33d8bd1..8d4e1f5 100644 (file)
@@ -315,8 +315,7 @@ out:
  *
  * Wrap the given skb into a batman-adv unicast or unicast-4addr header
  * depending on whether BATADV_UNICAST or BATADV_UNICAST_4ADDR was supplied
- * as packet_type. Then send this frame to the given orig_node and release a
- * reference to this orig_node.
+ * as packet_type. Then send this frame to the given orig_node.
  *
  * Return: NET_XMIT_DROP in case of error or NET_XMIT_SUCCESS otherwise.
  */
@@ -370,8 +369,6 @@ int batadv_send_skb_unicast(struct batadv_priv *bat_priv,
                ret = NET_XMIT_SUCCESS;
 
 out:
-       if (orig_node)
-               batadv_orig_node_put(orig_node);
        if (ret == NET_XMIT_DROP)
                kfree_skb(skb);
        return ret;
@@ -403,6 +400,7 @@ int batadv_send_skb_via_tt_generic(struct batadv_priv *bat_priv,
        struct ethhdr *ethhdr = (struct ethhdr *)skb->data;
        struct batadv_orig_node *orig_node;
        u8 *src, *dst;
+       int ret;
 
        src = ethhdr->h_source;
        dst = ethhdr->h_dest;
@@ -414,8 +412,13 @@ int batadv_send_skb_via_tt_generic(struct batadv_priv *bat_priv,
        }
        orig_node = batadv_transtable_search(bat_priv, src, dst, vid);
 
-       return batadv_send_skb_unicast(bat_priv, skb, packet_type,
-                                      packet_subtype, orig_node, vid);
+       ret = batadv_send_skb_unicast(bat_priv, skb, packet_type,
+                                     packet_subtype, orig_node, vid);
+
+       if (orig_node)
+               batadv_orig_node_put(orig_node);
+
+       return ret;
 }
 
 /**
@@ -433,10 +436,16 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb,
                           unsigned short vid)
 {
        struct batadv_orig_node *orig_node;
+       int ret;
 
        orig_node = batadv_gw_get_selected_orig(bat_priv);
-       return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST_4ADDR,
-                                      BATADV_P_DATA, orig_node, vid);
+       ret = batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST_4ADDR,
+                                     BATADV_P_DATA, orig_node, vid);
+
+       if (orig_node)
+               batadv_orig_node_put(orig_node);
+
+       return ret;
 }
 
 /**