Patch "veth: try harder when allocating queue memory" 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

    veth: try harder when allocating queue memory

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:
     veth-try-harder-when-allocating-queue-memory.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 0fef6a2d8b391073a15483c69a6a0b378aac6569
Author: Jakub Kicinski <kuba@xxxxxxxxxx>
Date:   Fri Feb 23 15:59:08 2024 -0800

    veth: try harder when allocating queue memory
    
    [ Upstream commit 1ce7d306ea63f3e379557c79abd88052e0483813 ]
    
    struct veth_rq is pretty large, 832B total without debug
    options enabled. Since commit under Fixes we try to pre-allocate
    enough queues for every possible CPU. Miao Wang reports that
    this may lead to order-5 allocations which will fail in production.
    
    Let the allocation fallback to vmalloc() and try harder.
    These are the same flags we pass to netdev queue allocation.
    
    Reported-and-tested-by: Miao Wang <shankerwangmiao@xxxxxxxxx>
    Fixes: 9d3684c24a52 ("veth: create by default nr_possible_cpus queues")
    Link: https://lore.kernel.org/all/5F52CAE2-2FB7-4712-95F1-3312FBBFA8DD@xxxxxxxxx/
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240223235908.693010-1-kuba@xxxxxxxxxx
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 87cee614618ca..0102f86d48676 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1303,7 +1303,8 @@ static int veth_alloc_queues(struct net_device *dev)
 	struct veth_priv *priv = netdev_priv(dev);
 	int i;
 
-	priv->rq = kcalloc(dev->num_rx_queues, sizeof(*priv->rq), GFP_KERNEL_ACCOUNT);
+	priv->rq = kvcalloc(dev->num_rx_queues, sizeof(*priv->rq),
+			    GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
 	if (!priv->rq)
 		return -ENOMEM;
 
@@ -1319,7 +1320,7 @@ static void veth_free_queues(struct net_device *dev)
 {
 	struct veth_priv *priv = netdev_priv(dev);
 
-	kfree(priv->rq);
+	kvfree(priv->rq);
 }
 
 static int veth_dev_init(struct net_device *dev)




[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