2007-11-04 18:27:13

by Oleg Nesterov

[permalink] [raw]
Subject: [PATCH] cfq: fix IOPRIO_CLASS_IDLE accounting

(untested, needs an ack from maintainer)

Spotted by Nick <[email protected]>, hopefully can explain the second trace in
http://bugzilla.kernel.org/show_bug.cgi?id=9180.

If ->async_idle_cfqq != NULL cfq_put_async_queues() puts it IOPRIO_BE_NR times
in a loop. Fix this.

Signed-off-by: Oleg Nesterov <[email protected]>

--- cfq/block/cfq-iosched.c~ 2007-08-09 19:59:26.000000000 +0400
+++ cfq/block/cfq-iosched.c 2007-11-04 22:23:42.000000000 +0300
@@ -2065,9 +2065,10 @@ static void cfq_put_async_queues(struct
cfq_put_queue(cfqd->async_cfqq[0][i]);
if (cfqd->async_cfqq[1][i])
cfq_put_queue(cfqd->async_cfqq[1][i]);
- if (cfqd->async_idle_cfqq)
- cfq_put_queue(cfqd->async_idle_cfqq);
}
+
+ if (cfqd->async_idle_cfqq)
+ cfq_put_queue(cfqd->async_idle_cfqq);
}

static void cfq_exit_queue(elevator_t *e)


2007-11-05 08:01:17

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] cfq: fix IOPRIO_CLASS_IDLE accounting

On Sun, Nov 04 2007, Oleg Nesterov wrote:
> (untested, needs an ack from maintainer)
>
> Spotted by Nick <[email protected]>, hopefully can explain the second trace in
> http://bugzilla.kernel.org/show_bug.cgi?id=9180.
>
> If ->async_idle_cfqq != NULL cfq_put_async_queues() puts it IOPRIO_BE_NR times
> in a loop. Fix this.

That's obviously buggy, thanks Oleg! Fix is indeed correct. I'll add it.

--
Jens Axboe