From: John Fastabend <john.r.fastabend@intel.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David Miller <davem@davemloft.net>,
therbert@google.com, netdev@vger.kernel.org
Subject: Re: [PATCH] bonding: Fix corrupted queue_mapping
Date: Fri, 08 Jun 2012 00:42:25 -0700 [thread overview]
Message-ID: <4FD1ACE1.4050005@intel.com> (raw)
In-Reply-To: <1339140238.6001.42.camel@edumazet-glaptop>
On 6/8/2012 12:23 AM, Eric Dumazet wrote:
> On Fri, 2012-06-08 at 08:47 +0200, Eric Dumazet wrote:
>> On Thu, 2012-06-07 at 23:15 -0700, David Miller wrote:
>>> From: Eric Dumazet <eric.dumazet@gmail.com>
>>> Date: Fri, 08 Jun 2012 08:11:21 +0200
>>>
>>>> On Thu, 2012-06-07 at 23:02 -0700, David Miller wrote:
>>>>> Hmmm, isn't that what qdisc_skb_cb is for? And even private data is
>>>>> explicitly allocated:
>>>>>
>>>>>> unsigned char data[24];
>>>>>
>>>>> there. :-)
>>>>>
>>>>
>>>> Yes, but some other layers can use the same trick so it might collide.
>>>>
>>>> Inserting the bond field in qdisc_skb_cb (level0) is safer.
>>>
>>> Do you suggest that Infiniband does the same thing? :-)
>>
>> I wonder if another way to solve this is not letting ndo_select_queue()
>> method the responsibility to call skb_set_queue_mapping() itself ?
>>
>> (ie removing skb_set_queue_mapping() done in dev_pick_tx())
>>
>> bonding would not have to save/restore skb queue mapping ?
>>
>> Partial patch : (we have to audit all ndo_select_queue()
>>
>> diff --git a/net/core/dev.c b/net/core/dev.c
>> index cd09819..c6c92d5 100644
>> --- a/net/core/dev.c
>> +++ b/net/core/dev.c
>> @@ -2368,6 +2368,7 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev,
>>
>> if (dev->real_num_tx_queues == 1)
>> queue_index = 0;
>> + skb_set_queue_mapping(skb, queue_index);
>> else if (ops->ndo_select_queue) {
>> queue_index = ops->ndo_select_queue(dev, skb);
>> queue_index = dev_cap_txqueue(dev, queue_index);
>> @@ -2391,9 +2392,9 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev,
>> sk_tx_queue_set(sk, queue_index);
>> }
>> }
>> + skb_set_queue_mapping(skb, queue_index);
>> }
>>
>> - skb_set_queue_mapping(skb, queue_index);
>> return netdev_get_tx_queue(dev, queue_index);
>> }
>>
>>
>
>
> I must say I dont understand dev_pick_tx() anymore.
>
> It seems to ignore skb->queue_mapping (unless device provides its own
> ndo_select_queue() and this functions is aware of skb->queue_mapping, as
> correctly done in ixgbe)
>
> So commit fff3269907897ee (tcp: reflect SYN queue_mapping into SYNACK
> packets) works on ixgbe, but probably not on other multiqueue devices.
>
> This sounds like a regression to me.
>
>
>
Well it would get picked up via skb_tx_hash(),
else if (ops->ndo_select_queue) {
[...]
} else {
struct sock *sk = skb->sk;
queue_index = sk_tx_queue_get(sk);
if (queue_index < 0 || skb->ooo_okay ||
queue_index >= dev->real_num_tx_queues) {
int old_index = queue_index;
queue_index = get_xps_queue(dev, skb);
if (queue_index < 0)
queue_index = skb_tx_hash(dev, skb);
[...]
So think this might be OK.
next prev parent reply other threads:[~2012-06-08 7:42 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-08 5:05 [PATCH] bonding: Fix corrupted queue_mapping Tom Herbert
2012-06-08 5:46 ` David Miller
2012-06-08 5:57 ` Eric Dumazet
2012-06-08 6:02 ` David Miller
2012-06-08 6:11 ` Eric Dumazet
2012-06-08 6:15 ` David Miller
2012-06-08 6:47 ` Eric Dumazet
2012-06-08 7:23 ` Eric Dumazet
2012-06-08 7:42 ` John Fastabend [this message]
2012-06-08 7:48 ` Eric Dumazet
2012-06-08 7:52 ` Eric Dumazet
2012-06-08 7:46 ` Eric Dumazet
2012-06-08 15:04 ` Tom Herbert
2012-06-08 15:11 ` Eric Dumazet
2012-06-08 16:16 ` John Fastabend
2012-06-08 6:17 ` Eric Dumazet
2012-06-08 6:22 ` 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=4FD1ACE1.4050005@intel.com \
--to=john.r.fastabend@intel.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=therbert@google.com \
/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.