Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41d10da3 authored by Jeff Moyer's avatar Jeff Moyer Committed by Linus Torvalds
Browse files

aio: account I/O wait time properly

Some months back I proposed changing the schedule() call in
read_events to an io_schedule():
	http://osdir.com/ml/linux.kernel.aio.general/2006-10/msg00024.html


This was rejected as there are AIO operations that do not initiate
disk I/O.  I've had another look at the problem, and the only AIO
operation that will not initiate disk I/O is IOCB_CMD_NOOP.  However,
this command isn't even wired up!

Given that it doesn't work, and hasn't for *years*, I'm going to
suggest again that we do proper I/O accounting when using AIO.

Signed-off-by: default avatarJeff Moyer <jmoyer@redhat.com>
Acked-by: default avatarZach Brown <zach.brown@oracle.com>
Cc: Benjamin LaHaise <bcrl@kvack.org>
Cc: Suparna Bhattacharya <suparna@in.ibm.com>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c17ac855
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ static void wait_for_all_aios(struct kioctx *ctx)
	set_task_state(tsk, TASK_UNINTERRUPTIBLE);
	while (ctx->reqs_active) {
		spin_unlock_irq(&ctx->ctx_lock);
		schedule();
		io_schedule();
		set_task_state(tsk, TASK_UNINTERRUPTIBLE);
		spin_lock_irq(&ctx->ctx_lock);
	}
@@ -323,7 +323,7 @@ ssize_t fastcall wait_on_sync_kiocb(struct kiocb *iocb)
		set_current_state(TASK_UNINTERRUPTIBLE);
		if (!iocb->ki_users)
			break;
		schedule();
		io_schedule();
	}
	__set_current_state(TASK_RUNNING);
	return iocb->ki_user_data;
@@ -1170,7 +1170,7 @@ static int read_events(struct kioctx *ctx,
			ret = 0;
			if (to.timed_out)	/* Only check after read evt */
				break;
			schedule();
			io_schedule();
			if (signal_pending(tsk)) {
				ret = -EINTR;
				break;