Re: suspend.c: This is broken, fixme

Jens Axboe (axboe@suse.de)
Mon, 3 Jun 2002 13:08:16 +0200


On Mon, Jun 03 2002, Pavel Machek wrote:
> Hi!
>
> I found this in 2.5.20...
>
> --- a/kernel/suspend.c Sun Jun 2 18:44:56 2002
> +++ b/kernel/suspend.c Sun Jun 2 18:44:56 2002
> @@ -64,6 +64,7 @@
> #include <asm/mmu_context.h>
> #include <asm/pgtable.h>
> #include <asm/io.h>
> +#include <linux/swapops.h>
>
> unsigned char software_suspend_enabled = 0;
>
> @@ -300,7 +301,8 @@
> static void do_suspend_sync(void)
> {
> while (1) {
> - run_task_queue(&tq_disk);
> + blk_run_queues();
> +#error this is broken, FIXME
> if (!TQ_ACTIVE(tq_disk))
> break;
>
> . Why is it broken?

Hey, I even cc'ed you on the patch when it went to Linus... Lets look at
what happened before: run tq_disk, then check if it is active. What
prevents tq_disk from being active right after you issue the TQ_ACTIVE
check? Nothing. And I'm not sure exactly what semantics you think
running tq_disk has. I suspect you are looking for a 'start any pending
i/o and return when it has completed', which is far from what happens.
Running tq_disk will _try_ to start _some_ I/O, and eventually, in time,
the currently pending requests will have completed. In the mean time,
more I/O could have been added though.

-- 
Jens Axboe

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/