From: Paolo Abeni <pab...@redhat.com> Date: Tue, 11 Oct 2016 19:15:44 +0200
> After the commit 9207f9d45b0a ("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 936d7de3d736 ("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. > Also the connected mode maximum mtu is reduced by 16 bytes to > cope with the increased hard header len. > > After this commit, IPoIB performances are back to pre-regression > value. > > Fixes: 9207f9d45b0a ("net: preserve IP control block during GSO segmentation") > Signed-off-by: Paolo Abeni <pab...@redhat.com> Not providing an accurate hard_header_len causes many problems. In fact we recently fixed the mlxsw driver to stop doing this.