net/sched: speedup tc_dump_qdisc() when tcm_ifindex is provided

There is no point dumping qdiscs for all devices when user space
wants them for a single device:

tc -s -d qdisc show dev eth1

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260430023628.3216283-5-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Eric Dumazet 2026-04-30 02:36:28 +00:00 committed by Jakub Kicinski
parent 748bbef5fc
commit 6f63b82963

View File

@ -1884,6 +1884,7 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
unsigned long ifindex;
int q_idx;
} *ctx = (void *)cb->ctx;
const struct tcmsg *tcm;
struct net_device *dev;
int s_q_idx, q_idx;
int err;
@ -1894,6 +1895,9 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
rtm_tca_policy, cb->extack);
if (err < 0)
return err;
tcm = nlmsg_data(nlh);
if (tcm->tcm_ifindex && !ctx->ifindex)
ctx->ifindex = tcm->tcm_ifindex;
s_q_idx = ctx->q_idx;
@ -1901,6 +1905,9 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
struct netdev_queue *dev_queue;
struct Qdisc *q;
if (tcm->tcm_ifindex && ctx->ifindex != tcm->tcm_ifindex)
break;
q_idx = 0;
netdev_lock_ops(dev);