linux/block
Tejun Heo 8f11b3e99a block: make barrier completion more robust
Barrier completion had the following assumptions.

* start_ordered() couldn't finish the whole sequence properly.  If all
  actions are to be skipped, q->ordseq is set correctly but the actual
  completion was never triggered thus hanging the barrier request.

* Drain completion in elv_complete_request() assumed that there's
  always at least one request in the queue when drain completes.

Both assumptions are true but these assumptions need to be removed to
improve empty barrier implementation.  This patch makes the following
changes.

* Make start_ordered() use blk_ordered_complete_seq() to mark skipped
  steps complete and notify __elv_next_request() that it should fetch
  the next request if the whole barrier has completed inside
  start_ordered().

* Make drain completion path in elv_complete_request() check whether
  the queue is empty.  Empty queue also indicates drain completion.

* While at it, convert 0/1 return from blk_do_ordered() to false/true.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2008-12-29 08:28:45 +01:00
..
as-iosched.c block: use cancel_work_sync() instead of kblockd_flush_work() 2008-12-29 08:28:44 +01:00
blk-barrier.c block: make barrier completion more robust 2008-12-29 08:28:45 +01:00
blk-core.c block: remove duplicate or unused barrier/discard error paths 2008-12-29 08:28:44 +01:00
blk-exec.c
blk-integrity.c
blk-ioc.c
blk-map.c When block layer fails to map iov, it calls bio_unmap_user to undo 2008-12-03 12:41:20 +01:00
blk-merge.c
blk-settings.c block: fix setting of max_segment_size and seg_boundary mask 2008-12-03 12:55:55 +01:00
blk-softirq.c
blk-sysfs.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
blk-tag.c block/blk-tag.c: cleanup kernel-doc 2008-12-29 08:28:43 +01:00
blk-timeout.c block: leave the request timeout timer running even on an empty list 2008-12-29 08:28:42 +01:00
blk.h
blktrace.c blktrace: port to tracepoints 2008-11-26 12:13:34 +01:00
bsg.c Enforce a minimum SG_IO timeout 2008-12-05 14:49:18 -08:00
cfq-iosched.c block: use cancel_work_sync() instead of kblockd_flush_work() 2008-12-29 08:28:44 +01:00
cmd-filter.c
compat_ioctl.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
deadline-iosched.c
elevator.c block: make barrier completion more robust 2008-12-29 08:28:45 +01:00
genhd.c block: set disk->node_id before it's being used 2008-12-03 12:41:20 +01:00
ioctl.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
Kconfig blktrace: port to tracepoints 2008-11-26 12:13:34 +01:00
Kconfig.iosched
Makefile
noop-iosched.c
scsi_ioctl.c scsi-ioctl: use clock_t <> jiffies 2008-12-29 08:28:42 +01:00