b.a.t.m.a.n.lists.open-mesh.org archive mirror
 help / color / mirror / Atom feed
From: <gregkh@linuxfoundation.org>
To: b.a.t.m.a.n@lists.open-mesh.org, gregkh@linuxfoundation.org,
	sven@narfation.org, sw@simonwunderlich.de
Cc: stable-commits@vger.kernel.org
Subject: Patch "batman-adv: Reserve needed_*room for fragments" has been added to the 4.19-stable tree
Date: Tue, 23 Nov 2021 13:35:01 +0100	[thread overview]
Message-ID: <1637670901241132@kroah.com> (raw)
In-Reply-To: <20211120124044.261086-4-sven@narfation.org>

This is a note to let you know that I've just added the patch titled

    batman-adv: Reserve needed_*room for fragments

to the 4.19-stable tree which can be found at:

The filename of the patch is:
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.

From foo@baz Tue Nov 23 01:33:57 PM CET 2021
From: Sven Eckelmann <sven@narfation.org>
Date: Sat, 20 Nov 2021 13:40:43 +0100
Subject: batman-adv: Reserve needed_*room for fragments
To: stable@vger.kernel.org
Cc: b.a.t.m.a.n@lists.open-mesh.org, Sven Eckelmann <sven@narfation.org>, Simon Wunderlich <sw@simonwunderlich.de>
Message-ID: <20211120124044.261086-4-sven@narfation.org>

From: Sven Eckelmann <sven@narfation.org>

commit c5cbfc87558168ef4c3c27ce36eba6b83391db19 upstream.

The batadv net_device is trying to propagate the needed_headroom and
needed_tailroom from the lower devices. This is needed to avoid cost
intensive reallocations using pskb_expand_head during the transmission.

But the fragmentation code split the skb's without adding extra room at the
end/beginning of the various fragments. This reduced the performance of
transmissions over complex scenarios (batadv on vxlan on wireguard) because
the lower devices had to perform the reallocations at least once.

Fixes: ee75ed88879a ("batman-adv: Fragment and send skbs larger than mtu")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
[ bp: 4.19 backported: adjust context. ]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 net/batman-adv/fragmentation.c |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -403,6 +403,7 @@ out:
  * batadv_frag_create() - create a fragment from skb
+ * @net_dev: outgoing device for fragment
  * @skb: skb to create fragment from
  * @frag_head: header to use in new fragment
  * @fragment_size: size of new fragment
@@ -413,22 +414,25 @@ out:
  * Return: the new fragment, NULL on error.
-static struct sk_buff *batadv_frag_create(struct sk_buff *skb,
+static struct sk_buff *batadv_frag_create(struct net_device *net_dev,
+					  struct sk_buff *skb,
 					  struct batadv_frag_packet *frag_head,
 					  unsigned int fragment_size)
+	unsigned int ll_reserved = LL_RESERVED_SPACE(net_dev);
+	unsigned int tailroom = net_dev->needed_tailroom;
 	struct sk_buff *skb_fragment;
 	unsigned int header_size = sizeof(*frag_head);
 	unsigned int mtu = fragment_size + header_size;
-	skb_fragment = netdev_alloc_skb(NULL, mtu + ETH_HLEN);
+	skb_fragment = dev_alloc_skb(ll_reserved + mtu + tailroom);
 	if (!skb_fragment)
 		goto err;
 	skb_fragment->priority = skb->priority;
 	/* Eat the last mtu-bytes of the skb */
-	skb_reserve(skb_fragment, header_size + ETH_HLEN);
+	skb_reserve(skb_fragment, ll_reserved + header_size);
 	skb_split(skb, skb_fragment, skb->len - fragment_size);
 	/* Add the header */
@@ -451,11 +455,12 @@ int batadv_frag_send_packet(struct sk_bu
 			    struct batadv_orig_node *orig_node,
 			    struct batadv_neigh_node *neigh_node)
+	struct net_device *net_dev = neigh_node->if_incoming->net_dev;
 	struct batadv_priv *bat_priv;
 	struct batadv_hard_iface *primary_if = NULL;
 	struct batadv_frag_packet frag_header;
 	struct sk_buff *skb_fragment;
-	unsigned int mtu = neigh_node->if_incoming->net_dev->mtu;
+	unsigned int mtu = net_dev->mtu;
 	unsigned int header_size = sizeof(frag_header);
 	unsigned int max_fragment_size, num_fragments;
 	int ret;
@@ -515,7 +520,7 @@ int batadv_frag_send_packet(struct sk_bu
 			goto put_primary_if;
-		skb_fragment = batadv_frag_create(skb, &frag_header,
+		skb_fragment = batadv_frag_create(net_dev, skb, &frag_header,
 		if (!skb_fragment) {
 			ret = -ENOMEM;

Patches currently in stable-queue which might be from sven@narfation.org are


  reply	other threads:[~2021-11-23 12:35 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-20 12:40 [PATCH 4.19 0/4] batman-adv: Fixes for stable/linux-4.19.y Sven Eckelmann
2021-11-20 12:40 ` [PATCH 4.19 1/4] batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN Sven Eckelmann
2021-11-23 12:35   ` Patch "batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN" has been added to the 4.19-stable tree gregkh
2021-11-20 12:40 ` [PATCH 4.19 2/4] batman-adv: Consider fragmentation for needed_headroom Sven Eckelmann
2021-11-23 12:35   ` Patch "batman-adv: Consider fragmentation for needed_headroom" has been added to the 4.19-stable tree gregkh
2021-11-20 12:40 ` [PATCH 4.19 3/4] batman-adv: Reserve needed_*room for fragments Sven Eckelmann
2021-11-23 12:35   ` gregkh [this message]
2021-11-20 12:40 ` [PATCH 4.19 4/4] batman-adv: Don't always reallocate the fragmentation skb head Sven Eckelmann
2021-11-23 12:35   ` Patch "batman-adv: Don't always reallocate the fragmentation skb head" has been added to the 4.19-stable tree gregkh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1637670901241132@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    --cc=stable-commits@vger.kernel.org \
    --cc=sven@narfation.org \
    --cc=sw@simonwunderlich.de \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).