linux/block
Kiyoshi Ueda e19a3ab058 blk_end_request: add callback feature (take 4)
This patch adds a variant of the interface, blk_end_request_callback(),
which has driver callback feature.

Drivers may need to do special works between end_that_request_first()
and end_that_request_last().
For such drivers, blk_end_request_callback() allows it to pass
a callback function which is called between end_that_request_first()
and end_that_request_last().

This interface is only for fallback of other blk_end_request interfaces.
Drivers should avoid their tricky behaviors and use other interfaces
as much as possible.

Currently, only one driver, ide-cd, needs this interface.
So this interface should/will be removed, after the driver removes
such tricky behaviors.

o ide-cd (cdrom_newpc_intr())
  In PIO mode, cdrom_newpc_intr() needs to defer end_that_request_last()
  until the device clears DRQ_STAT and raises an interrupt after
  end_that_request_first().
  So end_that_request_first() and end_that_request_last() are called
  separately in cdrom_newpc_intr().

  This means blk_end_request_callback() has to return without
  completing request even if no leftover in the request.
  To satisfy the requirement, callback function has return value
  so that drivers can tell blk_end_request_callback() to return
  without completing request.

Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com>
Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2008-01-28 10:37:04 +01:00
..
as-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
blktrace.c blktrace: kill the unneeded initcall 2008-01-11 13:37:01 +01:00
bsg.c [SCSI] libsas, bsg: pass errors through correctly 2008-01-11 18:29:13 -06:00
cfq-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
compat_ioctl.c compat_ioctl: fix block device compat ioctl regression 2007-10-29 11:33:06 +01:00
deadline-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
elevator.c Kobject: rename kobject_init_ng() to kobject_init() 2008-01-24 20:40:38 -08:00
genhd.c Driver core: convert block from raw kobjects to core devices 2008-01-24 20:40:36 -08:00
ioctl.c compat_ioctl: move common block ioctls to compat_blkdev_ioctl 2007-10-10 09:26:00 +02:00
Kconfig Only enable BLOCK_COMPAT if COMPAT is needed 2007-10-12 17:58:36 -07:00
Kconfig.iosched update I/O sched Kconfig help texts - CFQ is now default, not AS. 2007-02-17 20:08:22 +01:00
ll_rw_blk.c blk_end_request: add callback feature (take 4) 2008-01-28 10:37:04 +01:00
Makefile [BLOCK] Only include the compat ioctl code if CONFIG_BLOCK is set 2007-10-12 12:50:41 +02:00
noop-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
scsi_ioctl.c block: use jiffies conversion functions in scsi_ioctl.c 2007-12-18 08:29:28 +01:00