Thread (127 messages) 127 messages, 5 authors, 2016-06-14

Re: [PATCH 3.16 046/114] batman-adv: Fix broadcast/ogm queue limit on a removed interface

From: Ben Hutchings <hidden>
Date: 2016-06-13 22:53:23
Also in: lkml

On Mon, 2016-06-13 at 21:33 +0200, Sven Eckelmann wrote:
Hi,

looks like the patch is broken (at least it does something different than the 
non-stable patch does).

On Monday 13 June 2016 19:36:37 Ben Hutchings wrote:
quoted
3.16.36-rc1 review patch.  If anyone has any objections, please let me know.
[...]
quoted
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -638,6 +638,12 @@ batadv_purge_outstanding_packets(struct
 		if (pending) {
 			hlist_del(&forw_packet->list);
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->bcast_queue_left);
+
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->batman_queue_left);
+
 			batadv_forw_packet_free(forw_packet);
 		}
 	}
It seems to be a problem with the way GNU patch solved the conflicts with the 
slightly different orig file (moved the hunks together when it shouldn't 
have). GregKH also had this problem [1]
Yes, I recognise this bug.  I've updated this patch to the version below.

Ben.

---
batman-adv: Fix broadcast/ogm queue limit on a removed interface

commit c4fdb6cff2aa0ae740c5f19b6f745cbbe786d42f upstream.

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: 6d5808d4ae1b ("batman-adv: Add missing hardif_free_ref in forw_packet_free")
Signed-off-by: Linus Lüssing <redacted>
[sven@narfation.org: fix conflicts with current version]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Marek Lindner <redacted>
Signed-off-by: Antonio Quartulli <redacted>
Signed-off-by: Ben Hutchings <redacted>
---
 net/batman-adv/send.c | 6 ++++++
 1 file changed, 6 insertions(+)
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -611,6 +611,9 @@ batadv_purge_outstanding_packets(struct
 
 		if (pending) {
 			hlist_del(&forw_packet->list);
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->bcast_queue_left);
+
 			batadv_forw_packet_free(forw_packet);
 		}
 	}
@@ -638,6 +641,9 @@ batadv_purge_outstanding_packets(struct
 
 		if (pending) {
 			hlist_del(&forw_packet->list);
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->batman_queue_left);
+
 			batadv_forw_packet_free(forw_packet);
 		}
 	}

-- 
Ben Hutchings
One of the nice things about standards is that there are so many of
them.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help