Re:Re: [PATCH] net/net_failover: fix queue exceeding warning

From: Faicker Mo
Date: Tue Mar 21 2023 - 04:12:58 EST


When tx from the net_failover device, the actual tx queue number is the salve device.
The ndo_select_queue of net_failover device returns the txq which is the primary device txq
if the primary device is OK.
This number may be bigger than the default 16 of the net_failover device.
 A warning will be reported in netdev_cap_txqueue which device is the net_failover.

From: Pavan Chebbi <pavan.chebbi@xxxxxxxxxxxx>
Date: 2023-03-21 13:11:52
To:Faicker Mo <faicker.mo@xxxxxxxxx>
cc: Sridhar Samudrala <sridhar.samudrala@xxxxxxxxx>,"David S. Miller" <davem@xxxxxxxxxxxxx>,Eric Dumazet <edumazet@xxxxxxxxxx>,Jakub Kicinski <kuba@xxxxxxxxxx>,Paolo Abeni <pabeni@xxxxxxxxxx>,netdev@xxxxxxxxxxxxxxx,linux-kernel@xxxxxxxxxxxxxxx
Subject: Re: [PATCH] net/net_failover: fix queue exceeding warning>On Tue, Mar 21, 2023 at 8:15 AM Faicker Mo <faicker.mo@xxxxxxxxx> wrote:
>>
>> If the primary device queue number is bigger than the default 16,
>> there is a warning about the queue exceeding when tx from the
>> net_failover device.
>>
>
>Can you describe the issue more? If the net device has not implemented
>its own selection then netdev_pick_tx should take care of the
>real_num_tx_queues.
>Is that not happening?
>
>> Signed-off-by: Faicker Mo <faicker.mo@xxxxxxxxx>
>> ---
>> drivers/net/net_failover.c | 8 ++------
>> 1 file changed, 2 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/net_failover.c b/drivers/net/net_failover.c
>> index 7a28e082436e..d0c916a53d7c 100644
>> --- a/drivers/net/net_failover.c
>> +++ b/drivers/net/net_failover.c
>> @@ -130,14 +130,10 @@ static u16 net_failover_select_queue(struct net_device *dev,
>> txq = ops->ndo_select_queue(primary_dev, skb, sb_dev);
>> else
>> txq = netdev_pick_tx(primary_dev, skb, NULL);
>> -
>> - qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping;
>> -
>> - return txq;
>> + } else {
>> + txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0;
>> }
>>
>> - txq = skb_rx_queue_recorded(skb) ? skb_get_rx_queue(skb) : 0;
>> -
>> /* Save the original txq to restore before passing to the driver */
>> qdisc_skb_cb(skb)->slave_dev_queue_mapping = skb->queue_mapping;
>>
>> --
>> 2.39.1
>>