From: "Michael S. Tsirkin" <mst@redhat.com>
To: Herbert Xu <herbert@gondor.hengli.com.au>
Cc: "David S. Miller" <davem@davemloft.net>, netdev@vger.kernel.org
Subject: Re: udp: Fix bogus UFO packet generation
Date: Tue, 15 Jun 2010 15:15:30 +0300 [thread overview]
Message-ID: <20100615121530.GC2361@redhat.com> (raw)
In-Reply-To: <20100615115225.GA7239@gondor.apana.org.au>
On Tue, Jun 15, 2010 at 09:52:25PM +1000, Herbert Xu wrote:
> Hi:
>
> udp: Fix bogus UFO packet generation
>
> It has been reported that the new UFO software fallback path
> fails under certain conditions with NFS. I tracked the problem
> down to the generation of UFO packets that are smaller than the
> MTU. The software fallback path simply discards these packets.
>
> This patch fixes the problem by not generating such packets on
> the UFO path.
>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
FWIW
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
> index 9a4a6c9..041d41d 100644
> --- a/net/ipv4/ip_output.c
> +++ b/net/ipv4/ip_output.c
> @@ -873,8 +873,10 @@ int ip_append_data(struct sock *sk,
> !exthdrlen)
> csummode = CHECKSUM_PARTIAL;
>
> + skb = skb_peek_tail(&sk->sk_write_queue);
> +
> inet->cork.length += length;
> - if (((length> mtu) || !skb_queue_empty(&sk->sk_write_queue)) &&
> + if (((length > mtu) || (skb && skb_is_gso(skb))) &&
> (sk->sk_protocol == IPPROTO_UDP) &&
> (rt->u.dst.dev->features & NETIF_F_UFO)) {
> err = ip_ufo_append_data(sk, getfrag, from, length, hh_len,
> @@ -892,7 +894,7 @@ int ip_append_data(struct sock *sk,
> * adding appropriate IP header.
> */
>
> - if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL)
> + if (!skb)
> goto alloc_new_skb;
>
> while (length > 0) {
> @@ -1121,7 +1123,8 @@ ssize_t ip_append_page(struct sock *sk, struct page *page,
> return -EINVAL;
>
> inet->cork.length += size;
> - if ((sk->sk_protocol == IPPROTO_UDP) &&
> + if ((size + skb->len > mtu) &&
> + (sk->sk_protocol == IPPROTO_UDP) &&
> (rt->u.dst.dev->features & NETIF_F_UFO)) {
> skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
> skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
>
> Cheers,
> --
> Visit Openswan at http://www.openswan.org/
> Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-06-15 12:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-15 11:52 udp: Fix bogus UFO packet generation Herbert Xu
2010-06-15 12:15 ` Michael S. Tsirkin [this message]
2010-06-21 20:57 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100615121530.GC2361@redhat.com \
--to=mst@redhat.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.hengli.com.au \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.