So duplication is a no go...
Unless there is a different way of accounting for qlen (like a callback).

Instead of a callback you could store parent pointers in struct Qdisc
and walk up the tree. One place that would need additional changes to
cope with qlen changes of more than 1 is HFSC. It uses q.qlen == 1 as
indication that a leaf qdisc was activated by the last enqueue
operation. An increment of 2 when q.qlen was 0 before would cause HFSC
to forget to activate a class.
Regards
Patrick