block: improve flush bio completion
authorTejun Heo <tj@kernel.org>
Tue, 25 Jan 2011 11:43:52 +0000 (12:43 +0100)
committerJens Axboe <jaxboe@fusionio.com>
Tue, 25 Jan 2011 11:43:52 +0000 (12:43 +0100)
commit143a87f4c9c629067afea5b6703d66ea88c82f8e
tree6abeae59e1d309d3c1a11eab97e22639c7fc5bd5
parent414b4ff5eecff0097d09c4a7da12e435fd503692
block: improve flush bio completion

bio's for flush are completed twice - once during the data phase and
one more time after the whole sequence is complete.  The first
completion shouldn't notify completion to the issuer.

This was achieved by skipping all bio completion steps in
req_bio_endio() for the first completion; however, this has two
drawbacks.

* Error is not recorded in bio and must be tracked somewhere else.

* Partial completion is not supported.

Both don't cause problems for the current users; however, they make
further improvements difficult.  Change req_bio_endio() such that it
only skips the actual notification part for the first completion.  bio
completion is implemented with partial completions on mind anyway so
this is as simple as moving the REQ_FLUSH_SEQ conditional such that
only calling of bio_endio() is skipped.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/blk-core.c