Re: 4.4.1 skb_warn_bad_offload+0xc5/0x110

From: Hannes Frederic Sowa
Date: Wed Feb 24 2016 - 17:20:36 EST

On 24.02.2016 02:46, Wakko Warner wrote:
Please keep me in CC.

Wakko Warner wrote:

Hannes Frederic Sowa wrote:
[full-quote for netdev]


On 16.02.2016 01:08, Wakko Warner wrote:
I've been seeing the following on some of my VMs ran under qemu. The VMs do
not have internet connectivity. This happened when some files were accessed
via NFS to another VM (NOTE: Both VMs throw these warnings. Both VMs are
running the exact same kernel). The host is also throwing these warnings
and is also 4.4.1, but not the same kernel build.

The issue appears to have gone away if I issue the following on the guests
and on the host (except br0 instead of eth0 on host)
ethtool -K eth0 gso off gro off ufo off tso off

On the host, br0 does not have any interfaces enslaved except for the
interface for the VMs and also does not have an IPv4 address assigned.

Can you try the following patch?

--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1233,6 +1233,9 @@ ssize_t ip_append_page(struct sock *sk,
struct flowi4 *fl4, struct page *page,
if (!skb)
return -EINVAL;

+ if (skb->ip_summed != CHECKSUM_PARTIAL)
+ return -EINVAL;
cork->length += size;
if ((size + skb->len > mtu) &&
(sk->sk_protocol == IPPROTO_UDP) &&

Still received the warning. I saw it on the host and on one of the VMs.
The VM in this case was an nfs server. The client did not receive the
warning. I should mention that I'm using v3 and udp on the client for the
mount options.

I'm not sure if this change effected nfsd on one of the VMs, it isn't working
at all on it.

I reverted back to the previous kernel for the VM only and the nfsd on the
one VM started working.

I should note that when I added this change, I only compiled the kernel and
copied the bzImage file. I did not recompile any modules nor copy the over.

Actually, I could reproduce it locally thus I pushed a slightly different patch already. You have to patch all VMs in terms to not get the warning in the hypervisor anymore.