[v2] batman-adv: Fix broadcast/ogm queue limit on a removed interface
Commit Message
From: Linus Lüssing <linus.luessing@c0d3.blue>
When removing a single interface while a broadcast or ogm packet is
still pending then we will free the forward packet without releasing the
queue slots again.
This patch is supposed to fix this issue.
Fixes: d5bbce8465af ("batman-adv: Add missing hardif_free_ref in forw_packet_free")
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
[sven@narfation.org: fix conflicts with current version]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
v2:
- rebased patch
Patch was resurrected from https://patchwork.open-mesh.org/patch/2921/
I've requested an rebased version at
https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2016-March/014635.html
but done it myself because it was rather trivial.
---
net/batman-adv/send.c | 6 ++++++
1 file changed, 6 insertions(+)
Comments
On Friday, March 11, 2016 14:04:49 Sven Eckelmann wrote:
> From: Linus Lüssing <linus.luessing@c0d3.blue>
>
> When removing a single interface while a broadcast or ogm packet is
> still pending then we will free the forward packet without releasing the
> queue slots again.
>
> This patch is supposed to fix this issue.
>
> Fixes: d5bbce8465af ("batman-adv: Add missing hardif_free_ref in
> forw_packet_free") Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
> [sven@narfation.org: fix conflicts with current version]
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> ---
> v2:
> - rebased patch
>
> Patch was resurrected from https://patchwork.open-mesh.org/patch/2921/
>
> I've requested an rebased version at
> https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2016-March/014635.html
> but done it myself because it was rather trivial.
> ---
> net/batman-adv/send.c | 6 ++++++
> 1 file changed, 6 insertions(+)
Applied in revision 289e386.
Thanks,
Marek
@@ -675,6 +675,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
if (pending) {
hlist_del(&forw_packet->list);
+ if (!forw_packet->own)
+ atomic_inc(&bat_priv->bcast_queue_left);
+
batadv_forw_packet_free(forw_packet);
}
}
@@ -702,6 +705,9 @@ batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
if (pending) {
hlist_del(&forw_packet->list);
+ if (!forw_packet->own)
+ atomic_inc(&bat_priv->batman_queue_left);
+
batadv_forw_packet_free(forw_packet);
}
}