[linux-next] LinuxNextTracking branch, master, updated. next-20201130
by batman@open-mesh.org
The following commit has been merged in the master branch:
commit 992b03b88e36254e26e9a4977ab948683e21bd9f
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Thu Nov 26 18:24:49 2020 +0100
batman-adv: Don't always reallocate the fragmentation skb head
When a packet is fragmented by batman-adv, the original batman-adv header
is not modified. Only a new fragmentation is inserted between the original
one and the ethernet header. The code must therefore make sure that it has
a writable region of this size in the skbuff head.
But it is not useful to always reallocate the skbuff by this size even when
there would be more than enough headroom still in the skb. The reallocation
is just to costly during in this codepath.
Fixes: ee75ed88879a ("batman-adv: Fragment and send skbs larger than mtu")
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Simon Wunderlich <sw(a)simonwunderlich.de>
diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index 8de1fb567fd7..1f1f5b0873b2 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -527,13 +527,14 @@ int batadv_frag_send_packet(struct sk_buff *skb,
frag_header.no++;
}
- /* Make room for the fragment header. */
- if (batadv_skb_head_push(skb, header_size) < 0 ||
- pskb_expand_head(skb, header_size + ETH_HLEN, 0, GFP_ATOMIC) < 0) {
- ret = -ENOMEM;
+ /* make sure that there is at least enough head for the fragmentation
+ * and ethernet headers
+ */
+ ret = skb_cow_head(skb, ETH_HLEN + header_size);
+ if (ret < 0)
goto put_primary_if;
- }
+ skb_push(skb, header_size);
memcpy(skb->data, &frag_header, header_size);
/* Send the last fragment */
--
LinuxNextTracking
2 years, 2 months
[linux-next] LinuxNextTracking branch, master, updated. next-20201130
by batman@open-mesh.org
The following commit has been merged in the master branch:
commit c5cbfc87558168ef4c3c27ce36eba6b83391db19
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Wed Nov 25 13:16:43 2020 +0100
batman-adv: Reserve needed_*room for fragments
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(a)narfation.org>
Signed-off-by: Simon Wunderlich <sw(a)simonwunderlich.de>
diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index 9a47ef8b95c4..8de1fb567fd7 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -391,6 +391,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
@@ -401,22 +402,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 */
@@ -439,11 +443,12 @@ int batadv_frag_send_packet(struct sk_buff *skb,
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;
@@ -503,7 +508,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
goto put_primary_if;
}
- skb_fragment = batadv_frag_create(skb, &frag_header,
+ skb_fragment = batadv_frag_create(net_dev, skb, &frag_header,
max_fragment_size);
if (!skb_fragment) {
ret = -ENOMEM;
--
LinuxNextTracking
2 years, 2 months
[linux-next] LinuxNextTracking branch, master, updated. next-20201130
by batman@open-mesh.org
The following commit has been merged in the master branch:
commit 4ca23e2c2074465bff55ea14221175fecdf63c5f
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Thu Nov 26 18:15:06 2020 +0100
batman-adv: Consider fragmentation for needed_headroom
If a batman-adv packets has to be fragmented, then the original batman-adv
packet header is not stripped away. Instead, only a new header is added in
front of the packet after it was split.
This size must be considered to avoid cost intensive reallocations during
the transmission through the various device layers.
Fixes: 7bca68c7844b ("batman-adv: Add lower layer needed_(head|tail)room to own ones")
Reported-by: Linus L��ssing <linus.luessing(a)c0d3.blue>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Simon Wunderlich <sw(a)simonwunderlich.de>
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index dad99641df2a..33904595fc56 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -554,6 +554,9 @@ static void batadv_hardif_recalc_extra_skbroom(struct net_device *soft_iface)
needed_headroom = lower_headroom + (lower_header_len - ETH_HLEN);
needed_headroom += batadv_max_header_len();
+ /* fragmentation headers don't strip the unicast/... header */
+ needed_headroom += sizeof(struct batadv_frag_packet);
+
soft_iface->needed_headroom = needed_headroom;
soft_iface->needed_tailroom = lower_tailroom;
}
--
LinuxNextTracking
2 years, 2 months
Build check errors found: 2020-11-30
by postmaster@open-mesh.org
Name of failed tests
====================
master
------
* difference between net-next and batadv master
* headers
Output of different failed tests
================================
master: difference between net-next and batadv master
-----------------------------------------------------
netnext/MAINTAINERS | 2
netnext/include/uapi/linux/batman_adv.h | 26
netnext/net/batman-adv/Kconfig | 27
netnext/net/batman-adv/Makefile | 3
netnext/net/batman-adv/bat_algo.c | 34
netnext/net/batman-adv/bat_algo.h | 5
netnext/net/batman-adv/bat_iv_ogm.c | 229 ++
netnext/net/batman-adv/bat_v.c | 247 +++
netnext/net/batman-adv/bat_v_elp.c | 1
netnext/net/batman-adv/bat_v_ogm.c | 1
netnext/net/batman-adv/bridge_loop_avoidance.c | 130 +
netnext/net/batman-adv/bridge_loop_avoidance.h | 16
netnext/net/batman-adv/debugfs.c | 442 +++++
netnext/net/batman-adv/debugfs.h | 73
netnext/net/batman-adv/distributed-arp-table.c | 55
netnext/net/batman-adv/distributed-arp-table.h | 2
netnext/net/batman-adv/fragmentation.c | 28
netnext/net/batman-adv/gateway_client.c | 39
netnext/net/batman-adv/gateway_client.h | 2
netnext/net/batman-adv/hard-interface.c | 30
netnext/net/batman-adv/hard-interface.h | 6
netnext/net/batman-adv/icmp_socket.c | 392 ++++
netnext/net/batman-adv/icmp_socket.h | 38
netnext/net/batman-adv/log.c | 209 ++
netnext/net/batman-adv/main.c | 46
netnext/net/batman-adv/main.h | 5
netnext/net/batman-adv/multicast.c | 111 +
netnext/net/batman-adv/multicast.h | 3
netnext/net/batman-adv/netlink.c | 1
netnext/net/batman-adv/network-coding.c | 87 +
netnext/net/batman-adv/network-coding.h | 13
netnext/net/batman-adv/originator.c | 121 +
netnext/net/batman-adv/originator.h | 4
netnext/net/batman-adv/routing.c | 10
netnext/net/batman-adv/soft-interface.c | 132 -
netnext/net/batman-adv/soft-interface.h | 1
netnext/net/batman-adv/sysfs.c | 1272 ++++++++++++++++
netnext/net/batman-adv/sysfs.h | 93 +
netnext/net/batman-adv/tp_meter.c | 1
netnext/net/batman-adv/translation-table.c | 212 ++
netnext/net/batman-adv/translation-table.h | 3
netnext/net/batman-adv/types.h | 66
42 files changed, 4083 insertions(+), 135 deletions(-)
master: headers
---------------
diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index d3c58955..56888da1 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -27,7 +27,6 @@
#include "originator.h"
#include "routing.h"
#include "send.h"
-#include "soft-interface.h"
/**
* batadv_frag_clear_chain() - delete entries in the fragment buffer chain
Statistics
==========
maint
-----
Failed tests: 0
Started build tests: 271
Tested Linux versions: 34
Tested configs: 112
master
------
Failed tests: 2
Started build tests: 275
Tested Linux versions: 35
Tested configs: 116
2 years, 2 months
Build check errors found: 2020-11-29
by postmaster@open-mesh.org
Name of failed tests
====================
master
------
* difference between net-next and batadv master
* headers
Output of different failed tests
================================
master: difference between net-next and batadv master
-----------------------------------------------------
netnext/MAINTAINERS | 2
netnext/include/uapi/linux/batman_adv.h | 26
netnext/net/batman-adv/Kconfig | 27
netnext/net/batman-adv/Makefile | 3
netnext/net/batman-adv/bat_algo.c | 34
netnext/net/batman-adv/bat_algo.h | 5
netnext/net/batman-adv/bat_iv_ogm.c | 229 ++
netnext/net/batman-adv/bat_v.c | 247 +++
netnext/net/batman-adv/bat_v_elp.c | 1
netnext/net/batman-adv/bat_v_ogm.c | 1
netnext/net/batman-adv/bridge_loop_avoidance.c | 130 +
netnext/net/batman-adv/bridge_loop_avoidance.h | 16
netnext/net/batman-adv/debugfs.c | 442 +++++
netnext/net/batman-adv/debugfs.h | 73
netnext/net/batman-adv/distributed-arp-table.c | 55
netnext/net/batman-adv/distributed-arp-table.h | 2
netnext/net/batman-adv/fragmentation.c | 28
netnext/net/batman-adv/gateway_client.c | 39
netnext/net/batman-adv/gateway_client.h | 2
netnext/net/batman-adv/hard-interface.c | 30
netnext/net/batman-adv/hard-interface.h | 6
netnext/net/batman-adv/icmp_socket.c | 392 ++++
netnext/net/batman-adv/icmp_socket.h | 38
netnext/net/batman-adv/log.c | 209 ++
netnext/net/batman-adv/main.c | 46
netnext/net/batman-adv/main.h | 5
netnext/net/batman-adv/multicast.c | 111 +
netnext/net/batman-adv/multicast.h | 3
netnext/net/batman-adv/netlink.c | 1
netnext/net/batman-adv/network-coding.c | 87 +
netnext/net/batman-adv/network-coding.h | 13
netnext/net/batman-adv/originator.c | 121 +
netnext/net/batman-adv/originator.h | 4
netnext/net/batman-adv/routing.c | 10
netnext/net/batman-adv/soft-interface.c | 132 -
netnext/net/batman-adv/soft-interface.h | 1
netnext/net/batman-adv/sysfs.c | 1272 ++++++++++++++++
netnext/net/batman-adv/sysfs.h | 93 +
netnext/net/batman-adv/tp_meter.c | 1
netnext/net/batman-adv/translation-table.c | 212 ++
netnext/net/batman-adv/translation-table.h | 3
netnext/net/batman-adv/types.h | 66
42 files changed, 4083 insertions(+), 135 deletions(-)
master: headers
---------------
diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index d3c58955..56888da1 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -27,7 +27,6 @@
#include "originator.h"
#include "routing.h"
#include "send.h"
-#include "soft-interface.h"
/**
* batadv_frag_clear_chain() - delete entries in the fragment buffer chain
Statistics
==========
maint
-----
Failed tests: 0
Started build tests: 327
Tested Linux versions: 35
Tested configs: 118
master
------
Failed tests: 2
Started build tests: 291
Tested Linux versions: 35
Tested configs: 114
2 years, 2 months
Build check errors found: 2020-11-28
by postmaster@open-mesh.org
Name of failed tests
====================
master
------
* difference between net-next and batadv master
Output of different failed tests
================================
master: difference between net-next and batadv master
-----------------------------------------------------
netnext/MAINTAINERS | 2
netnext/include/uapi/linux/batman_adv.h | 26
netnext/net/batman-adv/Kconfig | 27
netnext/net/batman-adv/Makefile | 3
netnext/net/batman-adv/bat_algo.c | 34
netnext/net/batman-adv/bat_algo.h | 5
netnext/net/batman-adv/bat_iv_ogm.c | 229 ++
netnext/net/batman-adv/bat_v.c | 247 +++
netnext/net/batman-adv/bat_v_elp.c | 1
netnext/net/batman-adv/bat_v_ogm.c | 1
netnext/net/batman-adv/bridge_loop_avoidance.c | 130 +
netnext/net/batman-adv/bridge_loop_avoidance.h | 16
netnext/net/batman-adv/debugfs.c | 442 +++++
netnext/net/batman-adv/debugfs.h | 73
netnext/net/batman-adv/distributed-arp-table.c | 55
netnext/net/batman-adv/distributed-arp-table.h | 2
netnext/net/batman-adv/fragmentation.c | 2
netnext/net/batman-adv/gateway_client.c | 39
netnext/net/batman-adv/gateway_client.h | 2
netnext/net/batman-adv/hard-interface.c | 27
netnext/net/batman-adv/hard-interface.h | 6
netnext/net/batman-adv/icmp_socket.c | 392 ++++
netnext/net/batman-adv/icmp_socket.h | 38
netnext/net/batman-adv/log.c | 208 ++
netnext/net/batman-adv/main.c | 46
netnext/net/batman-adv/main.h | 5
netnext/net/batman-adv/multicast.c | 111 +
netnext/net/batman-adv/multicast.h | 3
netnext/net/batman-adv/netlink.c | 1
netnext/net/batman-adv/network-coding.c | 87 +
netnext/net/batman-adv/network-coding.h | 13
netnext/net/batman-adv/originator.c | 121 +
netnext/net/batman-adv/originator.h | 4
netnext/net/batman-adv/routing.c | 10
netnext/net/batman-adv/soft-interface.c | 132 -
netnext/net/batman-adv/soft-interface.h | 1
netnext/net/batman-adv/sysfs.c | 1272 ++++++++++++++++
netnext/net/batman-adv/sysfs.h | 93 +
netnext/net/batman-adv/tp_meter.c | 1
netnext/net/batman-adv/translation-table.c | 212 ++
netnext/net/batman-adv/translation-table.h | 3
netnext/net/batman-adv/types.h | 66
42 files changed, 4072 insertions(+), 116 deletions(-)
Statistics
==========
master
------
Failed tests: 1
Started build tests: 284
Tested Linux versions: 35
Tested configs: 116
maint
-----
Failed tests: 0
Started build tests: 306
Tested Linux versions: 35
Tested configs: 118
2 years, 2 months
Build check errors found: 2020-11-27
by postmaster@open-mesh.org
Name of failed tests
====================
master
------
* difference between net-next and batadv master
Output of different failed tests
================================
master: difference between net-next and batadv master
-----------------------------------------------------
netnext/MAINTAINERS | 2
netnext/include/uapi/linux/batman_adv.h | 26
netnext/net/batman-adv/Kconfig | 27
netnext/net/batman-adv/Makefile | 3
netnext/net/batman-adv/bat_algo.c | 34
netnext/net/batman-adv/bat_algo.h | 5
netnext/net/batman-adv/bat_iv_ogm.c | 229 ++
netnext/net/batman-adv/bat_v.c | 247 +++
netnext/net/batman-adv/bat_v_elp.c | 1
netnext/net/batman-adv/bat_v_ogm.c | 1
netnext/net/batman-adv/bridge_loop_avoidance.c | 130 +
netnext/net/batman-adv/bridge_loop_avoidance.h | 16
netnext/net/batman-adv/debugfs.c | 442 +++++
netnext/net/batman-adv/debugfs.h | 73
netnext/net/batman-adv/distributed-arp-table.c | 55
netnext/net/batman-adv/distributed-arp-table.h | 2
netnext/net/batman-adv/fragmentation.c | 2
netnext/net/batman-adv/gateway_client.c | 39
netnext/net/batman-adv/gateway_client.h | 2
netnext/net/batman-adv/hard-interface.c | 27
netnext/net/batman-adv/hard-interface.h | 6
netnext/net/batman-adv/icmp_socket.c | 392 ++++
netnext/net/batman-adv/icmp_socket.h | 38
netnext/net/batman-adv/log.c | 208 ++
netnext/net/batman-adv/main.c | 46
netnext/net/batman-adv/main.h | 5
netnext/net/batman-adv/multicast.c | 111 +
netnext/net/batman-adv/multicast.h | 3
netnext/net/batman-adv/netlink.c | 1
netnext/net/batman-adv/network-coding.c | 87 +
netnext/net/batman-adv/network-coding.h | 13
netnext/net/batman-adv/originator.c | 121 +
netnext/net/batman-adv/originator.h | 4
netnext/net/batman-adv/routing.c | 10
netnext/net/batman-adv/soft-interface.c | 132 -
netnext/net/batman-adv/soft-interface.h | 1
netnext/net/batman-adv/sysfs.c | 1272 ++++++++++++++++
netnext/net/batman-adv/sysfs.h | 93 +
netnext/net/batman-adv/tp_meter.c | 1
netnext/net/batman-adv/translation-table.c | 212 ++
netnext/net/batman-adv/translation-table.h | 3
netnext/net/batman-adv/types.h | 66
42 files changed, 4072 insertions(+), 116 deletions(-)
Statistics
==========
master
------
Failed tests: 1
Started build tests: 267
Tested Linux versions: 35
Tested configs: 114
maint
-----
Failed tests: 0
Started build tests: 315
Tested Linux versions: 35
Tested configs: 119
2 years, 2 months