aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/vis.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/batman-adv/vis.c')
-rw-r--r--net/batman-adv/vis.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index 1625e5793a89..4983340f1943 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -392,12 +392,12 @@ batadv_add_packet(struct batadv_priv *bat_priv,
392 return NULL; 392 return NULL;
393 393
394 len = sizeof(*packet) + vis_info_len; 394 len = sizeof(*packet) + vis_info_len;
395 info->skb_packet = dev_alloc_skb(len + ETH_HLEN + NET_IP_ALIGN); 395 info->skb_packet = netdev_alloc_skb_ip_align(NULL, len + ETH_HLEN);
396 if (!info->skb_packet) { 396 if (!info->skb_packet) {
397 kfree(info); 397 kfree(info);
398 return NULL; 398 return NULL;
399 } 399 }
400 skb_reserve(info->skb_packet, ETH_HLEN + NET_IP_ALIGN); 400 skb_reserve(info->skb_packet, ETH_HLEN);
401 packet = (struct batadv_vis_packet *)skb_put(info->skb_packet, len); 401 packet = (struct batadv_vis_packet *)skb_put(info->skb_packet, len);
402 402
403 kref_init(&info->refcount); 403 kref_init(&info->refcount);
@@ -697,7 +697,7 @@ static void batadv_broadcast_vis_packet(struct batadv_priv *bat_priv,
697 struct batadv_orig_node *orig_node; 697 struct batadv_orig_node *orig_node;
698 struct batadv_vis_packet *packet; 698 struct batadv_vis_packet *packet;
699 struct sk_buff *skb; 699 struct sk_buff *skb;
700 uint32_t i; 700 uint32_t i, res;
701 701
702 702
703 packet = (struct batadv_vis_packet *)info->skb_packet->data; 703 packet = (struct batadv_vis_packet *)info->skb_packet->data;
@@ -724,7 +724,8 @@ static void batadv_broadcast_vis_packet(struct batadv_priv *bat_priv,
724 if (!skb) 724 if (!skb)
725 continue; 725 continue;
726 726
727 if (!batadv_send_skb_to_orig(skb, orig_node, NULL)) 727 res = batadv_send_skb_to_orig(skb, orig_node, NULL);
728 if (res == NET_XMIT_DROP)
728 kfree_skb(skb); 729 kfree_skb(skb);
729 } 730 }
730 rcu_read_unlock(); 731 rcu_read_unlock();
@@ -748,7 +749,7 @@ static void batadv_unicast_vis_packet(struct batadv_priv *bat_priv,
748 if (!skb) 749 if (!skb)
749 goto out; 750 goto out;
750 751
751 if (!batadv_send_skb_to_orig(skb, orig_node, NULL)) 752 if (batadv_send_skb_to_orig(skb, orig_node, NULL) == NET_XMIT_DROP)
752 kfree_skb(skb); 753 kfree_skb(skb);
753 754
754out: 755out:
@@ -854,13 +855,13 @@ int batadv_vis_init(struct batadv_priv *bat_priv)
854 if (!bat_priv->vis.my_info) 855 if (!bat_priv->vis.my_info)
855 goto err; 856 goto err;
856 857
857 len = sizeof(*packet) + BATADV_MAX_VIS_PACKET_SIZE; 858 len = sizeof(*packet) + BATADV_MAX_VIS_PACKET_SIZE + ETH_HLEN;
858 len += ETH_HLEN + NET_IP_ALIGN; 859 bat_priv->vis.my_info->skb_packet = netdev_alloc_skb_ip_align(NULL,
859 bat_priv->vis.my_info->skb_packet = dev_alloc_skb(len); 860 len);
860 if (!bat_priv->vis.my_info->skb_packet) 861 if (!bat_priv->vis.my_info->skb_packet)
861 goto free_info; 862 goto free_info;
862 863
863 skb_reserve(bat_priv->vis.my_info->skb_packet, ETH_HLEN + NET_IP_ALIGN); 864 skb_reserve(bat_priv->vis.my_info->skb_packet, ETH_HLEN);
864 tmp_skb = bat_priv->vis.my_info->skb_packet; 865 tmp_skb = bat_priv->vis.my_info->skb_packet;
865 packet = (struct batadv_vis_packet *)skb_put(tmp_skb, sizeof(*packet)); 866 packet = (struct batadv_vis_packet *)skb_put(tmp_skb, sizeof(*packet));
866 867