linux/drivers/infiniband/ulp
Paolo Abeni fc791b6335 IB/ipoib: move back IB LL address into the hard header
After the commit 9207f9d45b ("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 936d7de3d7 ("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: 9207f9d45b ("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>
2016-10-14 10:54:53 -04:00
..
ipoib IB/ipoib: move back IB LL address into the hard header 2016-10-14 10:54:53 -04:00
iser IB/iser: use IB_PD_UNSAFE_GLOBAL_RKEY 2016-09-23 13:47:44 -04:00
isert Merge of primary rdma-core code for 4.9 2016-10-09 17:04:33 -07:00
srp IB/srp: Fix infinite loop when FMR sg[0].offset != 0 2016-10-07 16:54:39 -04:00
srpt Merge of primary rdma-core code for 4.9 2016-10-09 17:04:33 -07:00
Makefile IB: Allow build of hw/ and ulp/ subdirectories independently 2014-06-02 14:51:12 -07:00