From: Florian Westphal <fw@strlen.de>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Florian Westphal <fw@strlen.de>, netdev@vger.kernel.org
Subject: Re: [PATCH 2/2] net: ip, ipv6: handle gso skbs in forwarding path
Date: Tue, 28 Jan 2014 09:57:06 +0100 [thread overview]
Message-ID: <20140128085706.GB30123@breakpoint.cc> (raw)
In-Reply-To: <1390846967.27806.75.camel@edumazet-glaptop2.roam.corp.google.com>
Eric Dumazet <eric.dumazet@gmail.com> wrote:
> > + do {
> > + struct sk_buff *nskb = segs->next;
> > + int err;
> > +
> > + segs->next = NULL;
> > + err = dst_output(segs);
> > +
> > + if (err && ret == 0)
> > + ret = err;
> > + segs = nskb;
> > + } while (segs);
> > +
> > + return ret;
> > +}
> > +
>
> Its still unclear if this is the best strategy.
>
> TCP stream not using DF flag are very unlikely to care if we adjust
> their MTU (lowering gso_size) at this point ?
Thanks for this suggestion. It would indeed be nice to avoid sw
segmentation. I tried:
static void ip_gso_adjust_seglen(struct sk_buff *skb)
{
unsigned int mtu;
if (!skb_is_gso(skb))
return;
mtu = ip_dst_mtu_maybe_forward(skb_dst(skb), true);
skb_shinfo(skb)->gso_size = mtu - sizeof(struct iphdr);
}
But this yields
[ 28.644776] kernel BUG at net/net/core/skbuff.c:2984!
[ 28.644776] invalid opcode: 0000 [#1] SMP
[ 28.644776] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.13.0+ #35
[ 28.644776] task: ffffffff818104c0 ti: ffffffff81800000 task.ti: ffffffff81800000
[ 28.644776] RIP: 0010:[<ffffffff813b10d8>] [<ffffffff813b10d8>] skb_segment+0x808/0x830
[ 28.644776] RSP: 0018:ffff88002fc03688 EFLAGS: 00010212
[ 28.644776] RAX: 000000000000047c RBX: ffff88002d614b00 RCX: ffff88002d72ab00
[ 28.644776] RDX: 000000000000047c RSI: 00000000000050fa RDI: ffff88002cf9f800
[ 28.644776] RBP: ffff88002fc03778 R08: 0000000000000000 R09: ffff88002cdaf300
[ 28.644776] R10: 0000000000000011 R11: 0000000000004ff2 R12: ffff88002cf9ff80
[ 28.644776] R13: 0000000000000011 R14: 00000000000050fa R15: 00000000000054a2
[ 28.644776] FS: 00007f27db007700(0000) GS:ffff88002fc00000(0000) knlGS:0000000000000000
[ 28.644776] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 28.644776] CR2: 00007f8176cedcfc CR3: 000000002cd14000 CR4: 00000000000006b0
[ 28.644776] Stack:
[ 28.644776] 0000000000000046 ffffffff00000014 0000000000000001 ffffffff00000022
[ 28.644776] ffff88002cdaf300 ffff88002d72aaf0 0000000000000000 0000000000004ff2
[ 28.644776] 0000000000000014 ffffffff818104c0 ffffffff81810bc8 ffffffffffffffbe
[ 28.644776] Call Trace:
[ 28.644776] <IRQ>
[ 28.644776] [<ffffffff8125e742>] ? number.isra.1+0x302/0x330
[ 28.644776] [<ffffffff8142f35e>] tcp_gso_segment+0x11e/0x3f0
[ 28.644776] [<ffffffff8143f2c9>] inet_gso_segment+0x129/0x350
[ 28.644776] [<ffffffff810832cf>] ? __lock_acquire+0x2ef/0x1ca0
[ 28.644776] [<ffffffff813bcd9d>] skb_mac_gso_segment+0xdd/0x1e0
[ 28.644776] [<ffffffff813bcd07>] ? skb_mac_gso_segment+0x47/0x1e0
[ 28.644776] [<ffffffff813bcf00>] __skb_gso_segment+0x60/0xc0
[ 28.644776] [<ffffffff813bd203>] dev_hard_start_xmit+0x183/0x5b0
[ 28.644776] [<ffffffff813e064e>] sch_direct_xmit+0xfe/0x280
[ 28.644776] [<ffffffff813bd843>] __dev_queue_xmit+0x213/0x6b0
[ 28.644776] [<ffffffff813bd635>] ? __dev_queue_xmit+0x5/0x6b0
[ 28.644776] [<ffffffff813bdcf0>] dev_queue_xmit+0x10/0x20
[ 28.644776] [<ffffffff8140c2a9>] ip_finish_output+0x419/0x600
[ 28.644776] [<ffffffff8140c4de>] ? ip_output+0x4e/0xc0
[ 28.644776] [<ffffffff810803e4>] ? __lock_is_held+0x54/0x80
[ 28.644776] [<ffffffff8140c4de>] ip_output+0x4e/0xc0
[ 28.644776] [<ffffffff81407ffb>] ip_forward+0x21b/0x650
Eric, any chance you know wheter mucking with gso_size in this way
is supposed to work?
I will go through skb_segment and see if I can find out what exactly causes this
BUG_ON to trigger.
next prev parent reply other threads:[~2014-01-28 8:57 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-27 8:22 [PATCH 1/2] net: add and use skb_gso_transport_seglen() Florian Westphal
2014-01-27 8:22 ` [PATCH 2/2] net: ip, ipv6: handle gso skbs in forwarding path Florian Westphal
2014-01-27 8:34 ` David Miller
2014-01-27 8:36 ` Florian Westphal
2014-01-27 18:22 ` Eric Dumazet
2014-01-27 20:58 ` David Miller
2014-01-27 21:08 ` David Miller
2014-01-28 0:27 ` Hannes Frederic Sowa
2014-01-28 9:12 ` Florian Westphal
2014-01-29 10:53 ` Florian Westphal
2014-01-29 11:04 ` Hannes Frederic Sowa
2014-01-28 8:57 ` Florian Westphal [this message]
2014-01-28 16:34 ` Eric Dumazet
2014-01-28 17:15 ` Florian Westphal
2014-01-28 17:30 ` Eric Dumazet
2014-01-28 17:37 ` Florian Westphal
2014-01-29 11:00 ` Florian Westphal
2014-02-09 2:55 ` Herbert Xu
2014-02-10 12:23 ` Florian Westphal
2014-02-10 12:31 ` Herbert Xu
2014-02-10 12:43 ` Florian Westphal
2014-02-10 12:50 ` Herbert Xu
2014-02-10 13:08 ` Eric Dumazet
2014-02-10 13:15 ` Eric Dumazet
2014-02-10 13:12 ` Eric Dumazet
2014-01-27 8:30 ` [PATCH 1/2] net: add and use skb_gso_transport_seglen() David Miller
-- strict thread matches above, loose matches on Subject: below --
2014-02-22 9:33 [PATCH stable 3.4.y 0/2] gso/gro forwarding changeset Florian Westphal
2014-02-22 9:33 ` [PATCH 2/2] net: ip, ipv6: handle gso skbs in forwarding path Florian Westphal
2014-01-25 22:48 [PATCH 0/2] Fix handling of GRO " Florian Westphal
2014-01-25 22:48 ` [PATCH 2/2] net: ip, ipv6: handle gso " Florian Westphal
2014-01-26 1:37 ` Eric Dumazet
2014-01-26 9:22 ` Florian Westphal
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=20140128085706.GB30123@breakpoint.cc \
--to=fw@strlen.de \
--cc=eric.dumazet@gmail.com \
--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.