Commit 75dbdaad authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net_sched-fix-a-regression-in-sch_htb'

Cong Wang says:

====================
net_sched: fix a regression in sch_htb

This patchset contains a fix for the regression reported by Alan and a
selftest to cover that case. Please see each patch description for more
details.
====================

Link: https://patch.msgid.link/20250428232955.1740419-1-xiyou.wangcong@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents ebd297a2 63890286
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -348,6 +348,7 @@ static void htb_add_to_wait_tree(struct htb_sched *q,
 */
static inline void htb_next_rb_node(struct rb_node **n)
{
	if (*n)
		*n = rb_next(*n);
}

@@ -609,8 +610,8 @@ static inline void htb_activate(struct htb_sched *q, struct htb_class *cl)
 */
static inline void htb_deactivate(struct htb_sched *q, struct htb_class *cl)
{
	WARN_ON(!cl->prio_activity);

	if (!cl->prio_activity)
		return;
	htb_deactivate_prios(q, cl);
	cl->prio_activity = 0;
}
@@ -1485,8 +1486,6 @@ static void htb_qlen_notify(struct Qdisc *sch, unsigned long arg)
{
	struct htb_class *cl = (struct htb_class *)arg;

	if (!cl->prio_activity)
		return;
	htb_deactivate(qdisc_priv(sch), cl);
}

@@ -1740,7 +1739,6 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg,
	if (cl->parent)
		cl->parent->children--;

	if (cl->prio_activity)
	htb_deactivate(q, cl);

	if (cl->cmode != HTB_CAN_SEND)
@@ -1949,7 +1947,6 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
			/* turn parent into inner node */
			qdisc_purge_queue(parent->leaf.q);
			parent_qdisc = parent->leaf.q;
			if (parent->prio_activity)
			htb_deactivate(q, parent);

			/* remove from evt list because of level change */
+35 −0
Original line number Diff line number Diff line
@@ -538,5 +538,40 @@
            "$TC qdisc del dev $DUMMY handle 1:0 root",
            "$IP addr del 10.10.10.10/24 dev $DUMMY || true"
        ]
    },
    {
        "id": "62c4",
        "name": "Test HTB with FQ_CODEL - basic functionality",
        "category": [
            "qdisc",
            "htb",
            "fq_codel"
        ],
        "plugins": {
            "requires": [
                "nsPlugin",
                "scapyPlugin"
            ]
        },
        "setup": [
            "$TC qdisc add dev $DEV1 root handle 1: htb default 11",
            "$TC class add dev $DEV1 parent 1: classid 1:1 htb rate 10kbit",
            "$TC class add dev $DEV1 parent 1:1 classid 1:11 htb rate 10kbit prio 0 quantum 1486",
            "$TC qdisc add dev $DEV1 parent 1:11 fq_codel quantum 300 noecn",
            "sleep 0.5"
        ],
        "scapy": {
            "iface": "$DEV0",
            "count": 5,
            "packet": "Ether()/IP(dst='10.10.10.1', src='10.10.10.10')/TCP(sport=12345, dport=80)"
        },
        "cmdUnderTest": "$TC -s qdisc show dev $DEV1",
        "expExitCode": "0",
        "verifyCmd": "$TC -s qdisc show dev $DEV1 | grep -A 5 'qdisc fq_codel'",
        "matchPattern": "Sent [0-9]+ bytes [0-9]+ pkt",
        "matchCount": "1",
        "teardown": [
            "$TC qdisc del dev $DEV1 handle 1: root"
        ]
    }
]