]> 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)
commitef5b47cc2102442979d6154f6efdea00ed287b7e
treea7d55fc9472c953a24cdd4c2c59f917b389c2e96
parent1e630d3405b54c8d9e60330e6760df168e11c12d
IB/ipoib: move back IB LL address into the hard header

After the commit c19f4cbab65b ("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 a04a631fb4ca ("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: c19f4cbab65b ("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