]> git.baikalelectronics.ru Git - kernel.git/commit
IB/ipoib: move back IB LL address into the hard header
authorPaolo Abeni <pabeni@redhat.com>
Thu, 13 Oct 2016 16:26:56 +0000 (18:26 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 14 Oct 2016 14:54:53 +0000 (10:54 -0400)
commit90334dc2dcdd3086abf633ad02bf532287b895e3
treea7d55fc9472c953a24cdd4c2c59f917b389c2e96
parent61138b507decc868c5904b60421ca9b1513d2b2d
IB/ipoib: move back IB LL address into the hard header

After the commit 9191179197cc ("net: preserve IP control block
during GSO segmentation"), the GSO CB and the IPoIB CB conflict.
That destroy the IPoIB address information cached there,
causing a severe performance regression, as better described here:

http://marc.info/?l=linux-kernel&m=146787279825501&w=2

This change moves the data cached by the IPoIB driver from the
skb control lock into the IPoIB hard header, as done before
the commit f27e348710e8 ("IPoIB: Stop lying about hard_header_len
and use skb->cb to stash LL addresses").
In order to avoid GRO issue, on packet reception, the IPoIB driver
stash into the skb a dummy pseudo header, so that the received
packets have actually a hard header matching the declared length.
To avoid changing the connected mode maximum mtu, the allocated
head buffer size is increased by the pseudo header length.

After this commit, IPoIB performances are back to pre-regression
value.

v2 -> v3: rebased
v1 -> v2: avoid changing the max mtu, increasing the head buf size

Fixes: 9191179197cc ("net: preserve IP control block during GSO segmentation")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/infiniband/ulp/ipoib/ipoib.h
drivers/infiniband/ulp/ipoib/ipoib_cm.c
drivers/infiniband/ulp/ipoib/ipoib_ib.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/infiniband/ulp/ipoib/ipoib_multicast.c