Fixup the checksum for CHECKSUM_COMPLETE when pulling skbs on RX path.
Otherwise we get splats when tc mirred is used to redirect packets to ifb.
Before fix:
nic: hw csum failure
Signed-off-by: Jon Maxwell <[email protected]>
---
drivers/net/ifb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
index 5f2897ec0edc..d345c61d476c 100644
--- a/drivers/net/ifb.c
+++ b/drivers/net/ifb.c
@@ -102,7 +102,7 @@ static void ifb_ri_tasklet(unsigned long _txp)
if (!skb->tc_from_ingress) {
dev_queue_xmit(skb);
} else {
- skb_pull(skb, skb->mac_len);
+ skb_pull_rcsum(skb, skb->mac_len);
netif_receive_skb(skb);
}
}
--
2.13.6
From: Jon Maxwell <[email protected]>
Date: Fri, 25 May 2018 07:38:29 +1000
> Fixup the checksum for CHECKSUM_COMPLETE when pulling skbs on RX path.
> Otherwise we get splats when tc mirred is used to redirect packets to ifb.
>
> Before fix:
>
> nic: hw csum failure
>
> Signed-off-by: Jon Maxwell <[email protected]>
This definitely seems correct, but I am really surprised a bug like this has
lasted as long as it has.
So I'll let this sit for another day or two for review.
On Sat, May 26, 2018 at 6:43 AM, David Miller <[email protected]> wrote:
> From: Jon Maxwell <[email protected]>
> Date: Fri, 25 May 2018 07:38:29 +1000
>
>> Fixup the checksum for CHECKSUM_COMPLETE when pulling skbs on RX path.
>> Otherwise we get splats when tc mirred is used to redirect packets to ifb.
>>
>> Before fix:
>>
>> nic: hw csum failure
>>
>> Signed-off-by: Jon Maxwell <[email protected]>
>
> This definitely seems correct, but I am really surprised a bug like this has
> lasted as long as it has.
>
Sorry for the late reply I have been away for a few days. The customer never
saw this on bnx2x. Then they switched to the mlx5 driver and it started
happening continuously when doing iperf3 tests and also for other TCP traffic.
mlx5 uses CHECKSUM_COMPLETE. I think that bnx2x uses CHECKSUM UNNECESSARY
which avoided the code path that triggers the csum failure message in
__skb_checksum_complete(). It only logs the message for CHECKSUM_COMPLETE
skbs. Probably few Linux users are using a combination of NIC drivers that
use CHECKSUM_COMPLETE, tc mirred and ifb, which is why this has never been
reported before.
This is very similar to commit 7be709af2b65.
> So I'll let this sit for another day or two for review.
From: Jon Maxwell <[email protected]>
Date: Fri, 25 May 2018 07:38:29 +1000
> Fixup the checksum for CHECKSUM_COMPLETE when pulling skbs on RX path.
> Otherwise we get splats when tc mirred is used to redirect packets to ifb.
>
> Before fix:
>
> nic: hw csum failure
>
> Signed-off-by: Jon Maxwell <[email protected]>
Applied.