]> Pileus Git - ~andy/linux/blobdiff - net/batman-adv/send.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[~andy/linux] / net / batman-adv / send.c
index 80ca65fc89a19e76b599f0df8c80aa4b811e520b..263cfd1ccee78dfdf66c0f102d66301b8700a46d 100644 (file)
@@ -27,6 +27,7 @@
 #include "vis.h"
 #include "gateway_common.h"
 #include "originator.h"
+#include "network-coding.h"
 
 #include <linux/if_ether.h>
 
@@ -39,6 +40,7 @@ int batadv_send_skb_packet(struct sk_buff *skb,
                           struct batadv_hard_iface *hard_iface,
                           const uint8_t *dst_addr)
 {
+       struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface);
        struct ethhdr *ethhdr;
 
        if (hard_iface->if_status != BATADV_IF_ACTIVE)
@@ -70,6 +72,9 @@ int batadv_send_skb_packet(struct sk_buff *skb,
 
        skb->dev = hard_iface->net_dev;
 
+       /* Save a clone of the skb to use when decoding coded packets */
+       batadv_nc_skb_store_for_decoding(bat_priv, skb);
+
        /* dev_queue_xmit() returns a negative result on error.  However on
         * congestion and traffic shaping, it drops and returns NET_XMIT_DROP
         * (which is > 0). This will not be treated as an error.
@@ -316,7 +321,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
                                 const struct batadv_hard_iface *hard_iface)
 {
        struct batadv_forw_packet *forw_packet;
-       struct hlist_node *tmp_node, *safe_tmp_node;
+       struct hlist_node *safe_tmp_node;
        bool pending;
 
        if (hard_iface)
@@ -329,7 +334,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
 
        /* free bcast list */
        spin_lock_bh(&bat_priv->forw_bcast_list_lock);
-       hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
+       hlist_for_each_entry_safe(forw_packet, safe_tmp_node,
                                  &bat_priv->forw_bcast_list, list) {
                /* if purge_outstanding_packets() was called with an argument
                 * we delete only packets belonging to the given interface
@@ -355,7 +360,7 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
 
        /* free batman packet list */
        spin_lock_bh(&bat_priv->forw_bat_list_lock);
-       hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node,
+       hlist_for_each_entry_safe(forw_packet, safe_tmp_node,
                                  &bat_priv->forw_bat_list, list) {
                /* if purge_outstanding_packets() was called with an argument
                 * we delete only packets belonging to the given interface