diff options
Diffstat (limited to 'net/batman-adv/vis.c')
| -rw-r--r-- | net/batman-adv/vis.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c index cd4c4231fa48..de1022cacaf7 100644 --- a/net/batman-adv/vis.c +++ b/net/batman-adv/vis.c | |||
| @@ -64,6 +64,7 @@ static void free_info(struct kref *ref) | |||
| 64 | 64 | ||
| 65 | spin_unlock_bh(&bat_priv->vis_list_lock); | 65 | spin_unlock_bh(&bat_priv->vis_list_lock); |
| 66 | kfree_skb(info->skb_packet); | 66 | kfree_skb(info->skb_packet); |
| 67 | kfree(info); | ||
| 67 | } | 68 | } |
| 68 | 69 | ||
| 69 | /* Compare two vis packets, used by the hashing algorithm */ | 70 | /* Compare two vis packets, used by the hashing algorithm */ |
| @@ -268,10 +269,10 @@ int vis_seq_print_text(struct seq_file *seq, void *offset) | |||
| 268 | buff_pos += sprintf(buff + buff_pos, "%pM,", | 269 | buff_pos += sprintf(buff + buff_pos, "%pM,", |
| 269 | entry->addr); | 270 | entry->addr); |
| 270 | 271 | ||
| 271 | for (i = 0; i < packet->entries; i++) | 272 | for (j = 0; j < packet->entries; j++) |
| 272 | buff_pos += vis_data_read_entry( | 273 | buff_pos += vis_data_read_entry( |
| 273 | buff + buff_pos, | 274 | buff + buff_pos, |
| 274 | &entries[i], | 275 | &entries[j], |
| 275 | entry->addr, | 276 | entry->addr, |
| 276 | entry->primary); | 277 | entry->primary); |
| 277 | 278 | ||
| @@ -444,7 +445,7 @@ static struct vis_info *add_packet(struct bat_priv *bat_priv, | |||
| 444 | info); | 445 | info); |
| 445 | if (hash_added < 0) { | 446 | if (hash_added < 0) { |
| 446 | /* did not work (for some reason) */ | 447 | /* did not work (for some reason) */ |
| 447 | kref_put(&old_info->refcount, free_info); | 448 | kref_put(&info->refcount, free_info); |
| 448 | info = NULL; | 449 | info = NULL; |
| 449 | } | 450 | } |
| 450 | 451 | ||
| @@ -815,7 +816,7 @@ static void send_vis_packets(struct work_struct *work) | |||
| 815 | container_of(work, struct delayed_work, work); | 816 | container_of(work, struct delayed_work, work); |
| 816 | struct bat_priv *bat_priv = | 817 | struct bat_priv *bat_priv = |
| 817 | container_of(delayed_work, struct bat_priv, vis_work); | 818 | container_of(delayed_work, struct bat_priv, vis_work); |
| 818 | struct vis_info *info, *temp; | 819 | struct vis_info *info; |
| 819 | 820 | ||
| 820 | spin_lock_bh(&bat_priv->vis_hash_lock); | 821 | spin_lock_bh(&bat_priv->vis_hash_lock); |
| 821 | purge_vis_packets(bat_priv); | 822 | purge_vis_packets(bat_priv); |
| @@ -825,8 +826,9 @@ static void send_vis_packets(struct work_struct *work) | |||
| 825 | send_list_add(bat_priv, bat_priv->my_vis_info); | 826 | send_list_add(bat_priv, bat_priv->my_vis_info); |
| 826 | } | 827 | } |
| 827 | 828 | ||
| 828 | list_for_each_entry_safe(info, temp, &bat_priv->vis_send_list, | 829 | while (!list_empty(&bat_priv->vis_send_list)) { |
| 829 | send_list) { | 830 | info = list_first_entry(&bat_priv->vis_send_list, |
| 831 | typeof(*info), send_list); | ||
| 830 | 832 | ||
| 831 | kref_get(&info->refcount); | 833 | kref_get(&info->refcount); |
| 832 | spin_unlock_bh(&bat_priv->vis_hash_lock); | 834 | spin_unlock_bh(&bat_priv->vis_hash_lock); |
