block: account iowait time when waiting for completion of IO request
authorVladimir Davydov <vdavydov@parallels.com>
Thu, 14 Feb 2013 14:19:59 +0000 (18:19 +0400)
committerJens Axboe <axboe@kernel.dk>
Fri, 15 Feb 2013 15:45:07 +0000 (16:45 +0100)
commit5577022f4ed8973762450ebe7fe7ebfd953817db
treec6c965101e32bf2b36155da0fc0ad94c696d4606
parent686855f5d833178e518d79e7912cdb3268a9fa69
block: account iowait time when waiting for completion of IO request

Using wait_for_completion() for waiting for a IO request to be executed
results in wrong iowait time accounting. For example, a system having
the only task doing write() and fdatasync() on a block device can be
reported being idle instead of iowaiting as it should because
blkdev_issue_flush() calls wait_for_completion() which in turn calls
schedule() that does not increment the iowait proc counter and thus does
not turn on iowait time accounting.

The patch makes block layer use wait_for_completion_io() instead of
wait_for_completion() where appropriate to account iowait time
correctly.

Signed-off-by: Vladimir Davydov <vdavydov@parallels.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-exec.c
block/blk-flush.c
block/blk-lib.c