--- x/net/sched/sch_fq_pie.c +++ s/net/sched/sch_fq_pie.c @@ -372,9 +372,11 @@ static void fq_pie_timer(struct timer_li struct Qdisc *sch = q->sch; spinlock_t *root_lock; /* to lock qdisc for probability calculations */ u32 idx; + unsigned long ts = jiffies + 2; root_lock = qdisc_lock(qdisc_root_sleeping(sch)); - spin_lock(root_lock); + if (!spin_trylock(root_lock)) + return; for (idx = 0; idx < q->flows_cnt; idx++) pie_calculate_probability(&q->p_params, &q->flows[idx].vars, @@ -385,6 +387,7 @@ static void fq_pie_timer(struct timer_li mod_timer(&q->adapt_timer, jiffies + q->p_params.tupdate); spin_unlock(root_lock); + WARN_ON_ONCE(time_after(jiffies, ts)); } static int fq_pie_init(struct Qdisc *sch, struct nlattr *opt,