Skip to content

Commit 2d8003e

Browse files
kuba-moogregkh
authored andcommitted
veth: try harder when allocating queue memory
[ Upstream commit 1ce7d30 ] 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@gmail.com> Fixes: 9d3684c ("veth: create by default nr_possible_cpus queues") Link: https://lore.kernel.org/all/5F52CAE2-2FB7-4712-95F1-3312FBBFA8DD@gmail.com/ Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://lore.kernel.org/r/20240223235908.693010-1-kuba@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 288218b commit 2d8003e

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

drivers/net/veth.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,7 +1453,8 @@ static int veth_alloc_queues(struct net_device *dev)
14531453
struct veth_priv *priv = netdev_priv(dev);
14541454
int i;
14551455

1456-
priv->rq = kcalloc(dev->num_rx_queues, sizeof(*priv->rq), GFP_KERNEL_ACCOUNT);
1456+
priv->rq = kvcalloc(dev->num_rx_queues, sizeof(*priv->rq),
1457+
GFP_KERNEL_ACCOUNT | __GFP_RETRY_MAYFAIL);
14571458
if (!priv->rq)
14581459
return -ENOMEM;
14591460

@@ -1469,7 +1470,7 @@ static void veth_free_queues(struct net_device *dev)
14691470
{
14701471
struct veth_priv *priv = netdev_priv(dev);
14711472

1472-
kfree(priv->rq);
1473+
kvfree(priv->rq);
14731474
}
14741475

14751476
static int veth_dev_init(struct net_device *dev)

0 commit comments

Comments
 (0)