Skip to content

Commit b1f3a2f

Browse files
committed
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: 6b6171d ("netdev-genl: Add netlink framework functions for queue") Reviewed-by: Joe Damato <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 922b4b9 commit b1f3a2f

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

net/core/netdev-genl.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -488,24 +488,21 @@ netdev_nl_queue_dump_one(struct net_device *netdev, struct sk_buff *rsp,
488488
struct netdev_nl_dump_ctx *ctx)
489489
{
490490
int err = 0;
491-
int i;
492491

493492
if (!(netdev->flags & IFF_UP))
494493
return err;
495494

496-
for (i = ctx->rxq_idx; i < netdev->real_num_rx_queues;) {
497-
err = netdev_nl_queue_fill_one(rsp, netdev, i,
495+
for (; ctx->rxq_idx < netdev->real_num_rx_queues; ctx->rxq_idx++) {
496+
err = netdev_nl_queue_fill_one(rsp, netdev, ctx->rxq_idx,
498497
NETDEV_QUEUE_TYPE_RX, info);
499498
if (err)
500499
return err;
501-
ctx->rxq_idx = i++;
502500
}
503-
for (i = ctx->txq_idx; i < netdev->real_num_tx_queues;) {
504-
err = netdev_nl_queue_fill_one(rsp, netdev, i,
501+
for (; ctx->txq_idx < netdev->real_num_tx_queues; ctx->txq_idx++) {
502+
err = netdev_nl_queue_fill_one(rsp, netdev, ctx->txq_idx,
505503
NETDEV_QUEUE_TYPE_TX, info);
506504
if (err)
507505
return err;
508-
ctx->txq_idx = i++;
509506
}
510507

511508
return err;

0 commit comments

Comments
 (0)