[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git-commits-head
Subject:    geneve: initialize needed_headroom
From:       "Linux Kernel Mailing List" <linux-kernel () vger ! kernel ! org>
Date:       2015-12-31 22:51:34
Message-ID: 20151231225134.4118566129B () gitolite ! kernel ! org
[Download RAW message or body]

Web:        https://git.kernel.org/torvalds/c/184fc8b5ee601cd83dbbdf3e6cfec5f5b8d3b41a
Commit:     184fc8b5ee601cd83dbbdf3e6cfec5f5b8d3b41a
Parent:     c1a9a291cee0890eb0f435243f3fb84fefb04348
Refname:    refs/heads/master
Author:     Paolo Abeni <pabeni@redhat.com>
AuthorDate: Wed Dec 23 16:54:27 2015 +0100
Committer:  David S. Miller <davem@davemloft.net>
CommitDate: Wed Dec 23 22:28:29 2015 -0500

    geneve: initialize needed_headroom
    
    Currently the needed_headroom field for the geneve device is left
    to the default value.
    
    This patch set it to space required for basic geneve encapsulation,
    so that we can avoid the skb head re-allocation on xmit.
    
    This give a 6% speedup for unsegment traffic on geneve tunnel.
    
    v1 -> v2:
      - add ETH_HLEN for the lower device to the needed headroom
    
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Acked-by: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
---
 drivers/net/geneve.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index c2b79f5..58efdec 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1155,7 +1155,7 @@ static int geneve_configure(struct net *net, struct net_device *dev,
 	struct geneve_net *gn = net_generic(net, geneve_net_id);
 	struct geneve_dev *t, *geneve = netdev_priv(dev);
 	bool tun_collect_md, tun_on_same_port;
-	int err;
+	int err, encap_len;
 
 	if (!remote)
 		return -EINVAL;
@@ -1187,6 +1187,14 @@ static int geneve_configure(struct net *net, struct net_device *dev,
 	if (t)
 		return -EBUSY;
 
+	/* make enough headroom for basic scenario */
+	encap_len = GENEVE_BASE_HLEN + ETH_HLEN;
+	if (remote->sa.sa_family == AF_INET)
+		encap_len += sizeof(struct iphdr);
+	else
+		encap_len += sizeof(struct ipv6hdr);
+	dev->needed_headroom = encap_len + ETH_HLEN;
+
 	if (metadata) {
 		if (tun_on_same_port)
 			return -EPERM;
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic