Patch "net/net_failover: fix txq exceeding warning" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/net_failover: fix txq exceeding warning

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-net_failover-fix-txq-exceeding-warning.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e2f300724a8623bd3d541027403296814161c8a3
Author: Faicker Mo <faicker.mo@xxxxxxxxx>
Date:   Fri Mar 24 17:19:54 2023 +0800

    net/net_failover: fix txq exceeding warning
    
    [ Upstream commit e3cbdcb0fbb61045ef3ce0e072927cc41737f787 ]
    
    The failover txq is inited as 16 queues.
    when a packet is transmitted from the failover device firstly,
    the failover device will select the queue which is returned from
    the primary device if the primary device is UP and running.
    If the primary device txq is bigger than the default 16,
    it can lead to the following warning:
    eth0 selects TX queue 18, but real number of TX queues is 16
    
    The warning backtrace is:
    [   32.146376] CPU: 18 PID: 9134 Comm: chronyd Tainted: G            E      6.2.8-1.el7.centos.x86_64 #1
    [   32.147175] Hardware name: Red Hat KVM, BIOS 1.10.2-3.el7_4.1 04/01/2014
    [   32.147730] Call Trace:
    [   32.147971]  <TASK>
    [   32.148183]  dump_stack_lvl+0x48/0x70
    [   32.148514]  dump_stack+0x10/0x20
    [   32.148820]  netdev_core_pick_tx+0xb1/0xe0
    [   32.149180]  __dev_queue_xmit+0x529/0xcf0
    [   32.149533]  ? __check_object_size.part.0+0x21c/0x2c0
    [   32.149967]  ip_finish_output2+0x278/0x560
    [   32.150327]  __ip_finish_output+0x1fe/0x2f0
    [   32.150690]  ip_finish_output+0x2a/0xd0
    [   32.151032]  ip_output+0x7a/0x110
    [   32.151337]  ? __pfx_ip_finish_output+0x10/0x10
    [   32.151733]  ip_local_out+0x5e/0x70
    [   32.152054]  ip_send_skb+0x19/0x50
    [   32.152366]  udp_send_skb.isra.0+0x163/0x3a0
    [   32.152736]  udp_sendmsg+0xba8/0xec0
    [   32.153060]  ? __folio_memcg_unlock+0x25/0x60
    [   32.153445]  ? __pfx_ip_generic_getfrag+0x10/0x10
    [   32.153854]  ? sock_has_perm+0x85/0xa0
    [   32.154190]  inet_sendmsg+0x6d/0x80
    [   32.154508]  ? inet_sendmsg+0x6d/0x80
    [   32.154838]  sock_sendmsg+0x62/0x70
    [   32.155152]  ____sys_sendmsg+0x134/0x290
    [   32.155499]  ___sys_sendmsg+0x81/0xc0
    [   32.155828]  ? _get_random_bytes.part.0+0x79/0x1a0
    [   32.156240]  ? ip4_datagram_release_cb+0x5f/0x1e0
    [   32.156649]  ? get_random_u16+0x69/0xf0
    [   32.156989]  ? __fget_light+0xcf/0x110
    [   32.157326]  __sys_sendmmsg+0xc4/0x210
    [   32.157657]  ? __sys_connect+0xb7/0xe0
    [   32.157995]  ? __audit_syscall_entry+0xce/0x140
    [   32.158388]  ? syscall_trace_enter.isra.0+0x12c/0x1a0
    [   32.158820]  __x64_sys_sendmmsg+0x24/0x30
    [   32.159171]  do_syscall_64+0x38/0x90
    [   32.159493]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Fix that by reducing txq number as the non-existent primary-dev does.
    
    Fixes: cfc80d9a1163 ("net: Introduce net_failover driver")
    Signed-off-by: Faicker Mo <faicker.mo@xxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/net_failover.c b/drivers/net/net_failover.c
index 2a4892402ed8c..16b36e9563607 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;
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux