]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/sched: speedup tc_dump_qdisc() when tcm_ifindex is provided
authorEric Dumazet <edumazet@google.com>
Thu, 30 Apr 2026 02:36:28 +0000 (02:36 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 1 May 2026 03:54:27 +0000 (20:54 -0700)
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>
net/sched/sch_api.c

index cf3d01dd6b268741a6e4674954940e09dff139a4..dd0edc9bd4610ec865fc97a81f801a7da020667b 100644 (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);