mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
netdev: fix repeated netlink messages in queue dump
The context is supposed to record the next queue to dump,
not last dumped. If the dump doesn't fit we will restart
from the already-dumped queue, duplicating the message.
Before this fix and with the selftest improvements later
in this series we see:
# ./run_kselftest.sh -t drivers/net:queues.py
timeout set to 45
selftests: drivers/net: queues.py
KTAP version 1
1..2
# Check| At /root/ksft-net-drv/drivers/net/./queues.py, line 32, in get_queues:
# Check| ksft_eq(queues, expected)
# Check failed 102 != 100
# Check| At /root/ksft-net-drv/drivers/net/./queues.py, line 32, in get_queues:
# Check| ksft_eq(queues, expected)
# Check failed 101 != 100
not ok 1 queues.get_queues
ok 2 queues.addremove_queues
# Totals: pass:1 fail:1 xfail:0 xpass:0 skip:0 error:0
not ok 1 selftests: drivers/net: queues.py # exit=1
With the fix:
# ./ksft-net-drv/run_kselftest.sh -t drivers/net:queues.py
timeout set to 45
selftests: drivers/net: queues.py
KTAP version 1
1..2
ok 1 queues.get_queues
ok 2 queues.addremove_queues
# Totals: pass:2 fail:0 xfail:0 xpass:0 skip:0 error:0
Fixes: 6b6171db7f
("netdev-genl: Add netlink framework functions for queue")
Reviewed-by: Joe Damato <jdamato@fastly.com>
Link: https://patch.msgid.link/20241213152244.3080955-2-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
922b4b955a
commit
b1f3a2f5a7
@ -488,24 +488,21 @@ netdev_nl_queue_dump_one(struct net_device *netdev, struct sk_buff *rsp,
|
||||
struct netdev_nl_dump_ctx *ctx)
|
||||
{
|
||||
int err = 0;
|
||||
int i;
|
||||
|
||||
if (!(netdev->flags & IFF_UP))
|
||||
return err;
|
||||
|
||||
for (i = ctx->rxq_idx; i < netdev->real_num_rx_queues;) {
|
||||
err = netdev_nl_queue_fill_one(rsp, netdev, i,
|
||||
for (; ctx->rxq_idx < netdev->real_num_rx_queues; ctx->rxq_idx++) {
|
||||
err = netdev_nl_queue_fill_one(rsp, netdev, ctx->rxq_idx,
|
||||
NETDEV_QUEUE_TYPE_RX, info);
|
||||
if (err)
|
||||
return err;
|
||||
ctx->rxq_idx = i++;
|
||||
}
|
||||
for (i = ctx->txq_idx; i < netdev->real_num_tx_queues;) {
|
||||
err = netdev_nl_queue_fill_one(rsp, netdev, i,
|
||||
for (; ctx->txq_idx < netdev->real_num_tx_queues; ctx->txq_idx++) {
|
||||
err = netdev_nl_queue_fill_one(rsp, netdev, ctx->txq_idx,
|
||||
NETDEV_QUEUE_TYPE_TX, info);
|
||||
if (err)
|
||||
return err;
|
||||
ctx->txq_idx = i++;
|
||||
}
|
||||
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user