From: Jarek Poplawski <jarkao2@gmail.com>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David Miller <davem@davemloft.net>, netdev@vger.kernel.org
Subject: [PATCH] pkt_sched: Fix qdisc_watchdog() vs. dev_deactivate() race
Date: Wed, 20 Aug 2008 11:56:56 +0000 [thread overview]
Message-ID: <20080820115656.GA7078@ff.dom.local> (raw)
In-Reply-To: <20080819222329.GA10297@gondor.apana.org.au>
On Wed, Aug 20, 2008 at 08:23:29AM +1000, Herbert Xu wrote:
> On Tue, Aug 19, 2008 at 06:48:31PM +0200, Jarek Poplawski wrote:
> >
> > I can miss something, but probably it's needed in __netif_reschedule()
>
> No this is a genuine bug. However, it's also an old bug :) Even
> with the locking and RCU barrier it could have occured.
>
> > yet. Here is a scenario:
> >
> > cpu1 cpu2
> > dev_deactivate()
> > dev_deactivate_queue()
> > qdisc_reset()
> > qdisc_run()
> > qdisc_watchdog_schedule()
> > (or hrtimer_restart in cbq)
>
> We should add an aliveness check before scheduling the timer. This
> is the slow path so adding a check shouldn't hurt.
Thanks,
Jarek P.
--------------->
pkt_sched: Fix qdisc_watchdog() vs. dev_deactivate() race
dev_deactivate() can skip rescheduling of a qdisc by qdisc_watchdog()
or other timer calling netif_schedule() after dev_queue_deactivate().
We prevent this checking aliveness before scheduling the timer.
With feedback from Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
---
net/sched/sch_api.c | 3 +++
net/sched/sch_cbq.c | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index ef0efec..6f2bc7f 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -444,6 +444,9 @@ void qdisc_watchdog_schedule(struct qdisc_watchdog *wd, psched_time_t expires)
{
ktime_t time;
+ if (test_bit(__QDISC_STATE_DEACTIVATED, &qdisc_root(wd->qdisc)->state))
+ return;
+
wd->qdisc->flags |= TCQ_F_THROTTLED;
time = ktime_set(0, 0);
time = ktime_add_ns(time, PSCHED_US2NS(expires));
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 47ef492..c04d335 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -521,6 +521,9 @@ static void cbq_ovl_delay(struct cbq_class *cl)
struct cbq_sched_data *q = qdisc_priv(cl->qdisc);
psched_tdiff_t delay = cl->undertime - q->now;
+ if (test_bit(__QDISC_STATE_DEACTIVATED, &qdisc_root(cl->qdisc)->state))
+ return;
+
if (!cl->delayed) {
psched_time_t sched = q->now;
ktime_t expires;
next prev parent reply other threads:[~2008-08-20 11:57 UTC|newest]
Thread overview: 209+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-11 20:53 [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock() Jarek Poplawski
2008-08-12 1:12 ` David Miller
2008-08-12 5:20 ` Jarek Poplawski
2008-08-12 5:40 ` David Miller
2008-08-12 7:00 ` Jarek Poplawski
2008-08-12 8:15 ` David Miller
2008-08-12 10:38 ` Jarek Poplawski
2008-08-13 4:30 ` Herbert Xu
2008-08-13 5:11 ` David Miller
2008-08-13 5:31 ` Herbert Xu
2008-08-13 9:30 ` David Miller
2008-08-13 6:13 ` Jarek Poplawski
2008-08-13 6:16 ` David Miller
2008-08-13 6:53 ` Jarek Poplawski
2008-08-13 7:31 ` Jarek Poplawski
2008-08-13 9:25 ` David Miller
2008-08-13 9:58 ` Herbert Xu
2008-08-13 10:27 ` Jarek Poplawski
2008-08-13 10:42 ` Jarek Poplawski
2008-08-13 10:42 ` Herbert Xu
2008-08-13 10:50 ` Jarek Poplawski
2008-08-13 22:19 ` David Miller
2008-08-14 7:59 ` Jarek Poplawski
2008-08-14 8:16 ` Herbert Xu
2008-08-14 8:31 ` Jarek Poplawski
2008-08-14 8:33 ` Herbert Xu
2008-08-14 8:44 ` Jarek Poplawski
2008-08-14 8:52 ` Jarek Poplawski
2008-08-17 22:57 ` David Miller
2008-08-17 23:03 ` David Miller
2008-08-18 1:25 ` Herbert Xu
2008-08-18 1:35 ` David Miller
2008-08-18 1:36 ` Herbert Xu
2008-08-18 1:49 ` David Miller
2008-08-18 4:27 ` Herbert Xu
2008-08-18 4:31 ` David Miller
2008-08-18 4:36 ` Herbert Xu
2008-08-18 5:13 ` David Miller
2008-08-18 6:08 ` Denys Fedoryshchenko
2008-08-18 6:13 ` David Miller
2008-08-18 6:27 ` Jarek Poplawski
2008-08-18 6:38 ` David Miller
2008-08-18 21:29 ` Jarek Poplawski
2008-08-18 23:47 ` David Miller
2008-08-19 10:31 ` Jarek Poplawski
2008-08-19 10:51 ` Herbert Xu
2008-08-19 10:54 ` David Miller
2008-08-19 10:55 ` Herbert Xu
2008-08-19 10:58 ` Herbert Xu
2008-08-19 11:02 ` David Miller
2008-08-19 11:11 ` Herbert Xu
2008-08-19 16:48 ` Jarek Poplawski
2008-08-19 22:23 ` Herbert Xu
2008-08-20 11:56 ` Jarek Poplawski [this message]
2008-08-20 12:16 ` [PATCH] pkt_sched: Fix qdisc_watchdog() vs. dev_deactivate() race Herbert Xu
2008-08-21 5:17 ` Jarek Poplawski
2008-08-21 5:49 ` [PATCH take 2] " Jarek Poplawski
2008-08-21 6:10 ` Herbert Xu
2008-08-21 6:49 ` Jarek Poplawski
2008-08-21 7:16 ` Herbert Xu
2008-08-21 7:52 ` David Miller
2008-08-21 8:00 ` Herbert Xu
2008-08-21 8:27 ` Jarek Poplawski
2008-08-21 8:35 ` Jarek Poplawski
2008-08-21 8:47 ` Jarek Poplawski
2008-09-11 10:39 ` David Miller
2008-09-11 10:45 ` Herbert Xu
2008-09-11 10:49 ` David Miller
2008-09-11 11:00 ` Herbert Xu
2008-09-11 11:42 ` David Miller
2008-09-11 11:45 ` Herbert Xu
2008-09-11 11:47 ` David Miller
2008-09-12 4:49 ` David Miller
2008-09-12 8:02 ` Jarek Poplawski
2008-09-12 23:10 ` David Miller
2008-09-13 1:10 ` Herbert Xu
2008-09-13 1:22 ` David Miller
2008-09-13 1:27 ` Herbert Xu
2008-09-13 1:40 ` David Miller
2008-09-13 1:48 ` Herbert Xu
2008-09-13 20:54 ` Jarek Poplawski
2008-09-14 6:16 ` Herbert Xu
2008-09-14 10:31 ` Alexander Duyck
2008-09-14 21:43 ` Jarek Poplawski
2008-09-14 22:13 ` Herbert Xu
2008-09-15 6:07 ` Jarek Poplawski
2008-09-15 6:19 ` Herbert Xu
2008-09-15 7:20 ` Jarek Poplawski
2008-09-15 7:45 ` Jarek Poplawski
2008-09-15 23:44 ` Duyck, Alexander H
2008-09-16 10:47 ` Jarek Poplawski
2008-09-17 2:31 ` Alexander Duyck
2008-09-14 11:56 ` jamal
2008-09-14 20:27 ` Jarek Poplawski
2008-09-20 7:21 ` David Miller
2008-09-20 7:25 ` Herbert Xu
2008-09-20 7:28 ` David Miller
2008-09-20 23:48 ` Jarek Poplawski
2008-09-21 5:35 ` David Miller
2008-09-21 5:50 ` David Miller
2008-09-21 6:38 ` Herbert Xu
2008-09-21 7:03 ` David Miller
2008-09-23 6:23 ` Herbert Xu
2008-09-24 7:15 ` Jarek Poplawski
2008-09-24 8:04 ` Herbert Xu
2008-09-24 8:28 ` Jarek Poplawski
2008-09-21 15:25 ` Jarek Poplawski
2008-09-21 9:57 ` Jarek Poplawski
2008-09-21 10:18 ` David Miller
2008-09-21 11:15 ` Jarek Poplawski
2008-09-23 5:16 ` David Miller
2008-09-23 8:02 ` Jarek Poplawski
2008-09-23 8:06 ` David Miller
2008-09-11 11:51 ` Jarek Poplawski
2008-09-11 11:54 ` Herbert Xu
2008-09-11 12:10 ` Jarek Poplawski
2008-09-11 12:34 ` Jarek Poplawski
2008-08-21 12:11 ` David Miller
2008-08-14 8:17 ` [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock() Jarek Poplawski
2008-08-14 11:24 ` Jarek Poplawski
2008-08-17 13:42 ` Jarek Poplawski
2008-08-17 21:34 ` David Miller
2008-08-17 22:22 ` Jarek Poplawski
2008-08-17 22:32 ` David Miller
2008-08-18 20:12 ` Jarek Poplawski
2008-08-18 23:54 ` David Miller
2008-08-19 0:05 ` Herbert Xu
2008-08-19 0:11 ` David Miller
2008-08-19 4:07 ` David Miller
2008-08-19 5:27 ` Ilpo Järvinen
2008-08-19 5:30 ` David Miller
2008-08-19 6:46 ` Jarek Poplawski
2008-08-19 7:03 ` David Miller
2008-08-19 7:23 ` Jarek Poplawski
2008-08-19 7:23 ` Herbert Xu
2008-08-19 7:35 ` Jarek Poplawski
2008-08-19 7:46 ` Herbert Xu
2008-08-19 7:56 ` Jarek Poplawski
2008-08-19 8:05 ` Herbert Xu
2008-08-19 8:17 ` Jarek Poplawski
2008-08-19 8:23 ` Herbert Xu
2008-08-19 8:32 ` David Miller
2008-08-19 8:41 ` Jarek Poplawski
2008-08-19 8:48 ` David Miller
2008-08-19 8:50 ` Herbert Xu
2008-08-19 8:39 ` Jarek Poplawski
2008-08-19 8:55 ` Herbert Xu
2008-08-19 9:16 ` Jarek Poplawski
2008-08-21 10:01 ` Jarek Poplawski
2008-08-21 10:05 ` David Miller
2008-08-21 10:11 ` Jarek Poplawski
2008-08-21 10:18 ` Jarek Poplawski
2008-08-21 10:21 ` Herbert Xu
2008-08-21 10:23 ` Herbert Xu
2008-08-21 10:33 ` Jarek Poplawski
2008-08-21 10:51 ` Herbert Xu
2008-08-21 11:20 ` Jarek Poplawski
2008-08-21 11:26 ` Herbert Xu
2008-08-21 11:55 ` Jarek Poplawski
2008-08-21 12:01 ` Herbert Xu
2008-08-21 12:19 ` Jarek Poplawski
2008-08-21 12:22 ` Herbert Xu
2008-08-21 12:27 ` David Miller
2008-08-21 12:35 ` Herbert Xu
2008-08-21 12:48 ` Herbert Xu
2008-08-21 12:55 ` Jarek Poplawski
2008-08-21 13:12 ` Herbert Xu
2008-08-21 18:58 ` Jarek Poplawski
2008-08-21 21:14 ` Jarek Poplawski
2008-08-21 22:23 ` Herbert Xu
2008-08-22 8:49 ` Jarek Poplawski
2008-08-22 8:55 ` David Miller
2008-08-22 10:07 ` Herbert Xu
2008-08-22 10:27 ` David Miller
2008-08-22 11:02 ` Herbert Xu
2008-08-22 11:38 ` Jarek Poplawski
2008-08-22 11:42 ` David Miller
2008-08-22 12:09 ` Jarek Poplawski
2008-08-22 12:11 ` Herbert Xu
2008-08-22 12:18 ` David Miller
2008-08-22 12:45 ` Herbert Xu
2008-08-24 23:26 ` Stephen Hemminger
2008-08-24 23:49 ` Herbert Xu
2008-08-25 0:29 ` Stephen Hemminger
2008-08-26 7:35 ` Herbert Xu
2008-08-26 7:47 ` Herbert Xu
2008-08-26 12:24 ` Stephen Hemminger
2008-08-26 12:41 ` Herbert Xu
2008-08-26 12:50 ` Stephen Hemminger
2008-08-26 12:56 ` Herbert Xu
2008-08-27 12:17 ` Bastian Bloessl
2008-08-27 9:32 ` David Miller
2008-08-27 9:56 ` Herbert Xu
2008-08-22 12:25 ` Jarek Poplawski
2008-08-23 12:15 ` David Miller
2008-08-21 20:40 ` Jarek Poplawski
2008-08-21 22:24 ` Herbert Xu
2008-08-22 8:41 ` [PATCH] pkt_sched: Fix qdisc list locking Jarek Poplawski
2008-08-22 10:14 ` Herbert Xu
2008-08-22 9:27 ` [PATCH take 2] " Jarek Poplawski
2008-08-22 10:15 ` Herbert Xu
2008-08-22 10:28 ` David Miller
2008-08-22 10:23 ` David Miller
2008-08-21 12:49 ` [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock() Jarek Poplawski
2008-08-21 12:51 ` Herbert Xu
2008-08-21 12:06 ` David Miller
2008-08-21 10:18 ` Herbert Xu
2008-08-12 22:02 ` [PATCH take 2] pkt_sched: Protect gen estimators under est_lock Jarek Poplawski
2008-08-13 22:20 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080820115656.GA7078@ff.dom.local \
--to=jarkao2@gmail.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).