diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index efacdfee3702f28f7b7ca8e0d1374ebe8818e0dc..6b6e6e1a2a48de8a891110136ca78363a468167a 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -838,7 +838,6 @@ static inline void qdisc_calculate_pkt_len(struct sk_buff *skb, static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free) { - qdisc_calculate_pkt_len(skb, sch); return sch->enqueue(skb, sch, to_free); } diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index cfb4904ee540636de5d206fd76faa2205e9ff3da..efd109652f22bd33b299313636e4be8aad9c2132 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -590,7 +590,6 @@ void __qdisc_calculate_pkt_len(struct sk_buff *skb, pkt_len = 1; qdisc_skb_cb(skb)->pkt_len = pkt_len; } -EXPORT_SYMBOL(__qdisc_calculate_pkt_len); void qdisc_warn_nonwc(const char *txt, struct Qdisc *qdisc) { @@ -1120,6 +1119,12 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, return -EINVAL; } + if (new && + !(parent->flags & TCQ_F_MQROOT) && + rcu_access_pointer(new->stab)) { + NL_SET_ERR_MSG(extack, "STAB not supported on a non root"); + return -EINVAL; + } err = cops->graft(parent, cl, new, &old, extack); if (err) return err;