batman-adv: linearise the tt_response skb only if needed
authorAntonio Quartulli <ordex@autistici.org>
Sun, 16 Oct 2011 18:32:02 +0000 (20:32 +0200)
committerSven Eckelmann <sven@narfation.org>
Sun, 20 Nov 2011 12:08:34 +0000 (13:08 +0100)
The TT_RESPONSE skb has to be linearised only if the node plans to access the
packet payload (so only if the message is directed to that node). In all the
other cases the node can avoid this memory operation

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
net/batman-adv/routing.c

index 60ce4077348b0dd3c044a3458f0bd9c05867d7ac..e0e7b7b79ca9fa521375c2cd03efb4fa105fa5b9 100644 (file)
@@ -616,13 +616,14 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
                }
                break;
        case TT_RESPONSE:
-               /* packet needs to be linearized to access the TT changes */
-               if (skb_linearize(skb) < 0)
-                       goto out;
+               if (is_my_mac(tt_query->dst)) {
+                       /* packet needs to be linearized to access the TT
+                        * changes */
+                       if (skb_linearize(skb) < 0)
+                               goto out;
 
-               if (is_my_mac(tt_query->dst))
                        handle_tt_response(bat_priv, tt_query);
-               else {
+               else {
                        bat_dbg(DBG_TT, bat_priv,
                                "Routing TT_RESPONSE to %pM [%c]\n",
                                tt_query->dst,