linux/block
Kiyoshi Ueda b0fd271d5f block: add request clone interface (v2)
This patch adds the following 2 interfaces for request-stacking drivers:

  - blk_rq_prep_clone(struct request *clone, struct request *orig,
		      struct bio_set *bs, gfp_t gfp_mask,
		      int (*bio_ctr)(struct bio *, struct bio*, void *),
		      void *data)
      * Clones bios in the original request to the clone request
        (bio_ctr is called for each cloned bios.)
      * Copies attributes of the original request to the clone request.
        The actual data parts (e.g. ->cmd, ->buffer, ->sense) are not
        copied.

  - blk_rq_unprep_clone(struct request *clone)
      * Frees cloned bios from the clone request.

Request stacking drivers (e.g. request-based dm) need to make a clone
request for a submitted request and dispatch it to other devices.

To allocate request for the clone, request stacking drivers may not
be able to use blk_get_request() because the allocation may be done
in an irq-disabled context.
So blk_rq_prep_clone() takes a request allocated by the caller
as an argument.

For each clone bio in the clone request, request stacking drivers
should be able to set up their own completion handler.
So blk_rq_prep_clone() takes a callback function which is called
for each clone bio, and a pointer for private data which is passed
to the callback.

NOTE:
blk_rq_prep_clone() doesn't copy any actual data of the original
request.  Pages are shared between original bios and cloned bios.
So caller must not complete the original request before the clone
request.

Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com>
Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Cc: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2009-06-11 13:11:05 +02:00
..
as-iosched.c block: convert to pos and nr_sectors accessors 2009-05-11 09:50:54 +02:00
blk-barrier.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
blk-core.c block: add request clone interface (v2) 2009-06-11 13:11:05 +02:00
blk-exec.c block: don't set REQ_NOMERGE unnecessarily 2009-04-28 07:37:33 +02:00
blk-integrity.c block: Do away with the notion of hardsect_size 2009-05-22 23:22:54 +02:00
blk-ioc.c block: prevent possible io_context->refcount overflow 2009-06-10 23:07:15 +02:00
blk-map.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
blk-merge.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
blk-settings.c block: Add missing bounce_pfn stacking and fix comments 2009-06-09 06:23:22 +02:00
blk-softirq.c generic-ipi: remove CSD_FLAG_WAIT 2009-02-25 14:13:44 +01:00
blk-sysfs.c block: Export I/O topology for block devices and partitions 2009-05-22 23:22:55 +02:00
blk-tag.c block: change the tag sync vs async restriction logic 2009-05-20 08:54:31 +02:00
blk-timeout.c block: clean up misc stuff after block layer timeout conversion 2009-04-28 07:37:34 +02:00
blk.h block: fix no diskstat problem 2009-05-27 14:50:02 +02:00
bsg.c block: add rq->resid_len 2009-05-11 09:50:53 +02:00
cfq-iosched.c block: prevent possible io_context->refcount overflow 2009-06-10 23:07:15 +02:00
cmd-filter.c [SCSI] Make scsi.h independent of the rest of the scsi includes 2009-03-12 12:58:13 -05:00
compat_ioctl.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
deadline-iosched.c block: convert to pos and nr_sectors accessors 2009-05-11 09:50:54 +02:00
elevator.c block: fix a possible oops on elv_abort_queue() 2009-06-02 08:44:01 +02:00
genhd.c block: Export I/O topology for block devices and partitions 2009-05-22 23:22:55 +02:00
ioctl.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00
Kconfig block: enable by default support for large devices and files on 32-bit archs 2009-04-28 07:37:33 +02:00
Kconfig.iosched update I/O sched Kconfig help texts - CFQ is now default, not AS. 2007-02-17 20:08:22 +01:00
Makefile tracing/blktrace: move the tracing file to kernel/trace 2009-02-09 10:51:02 +01:00
noop-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
scsi_ioctl.c block: Use accessor functions for queue limits 2009-05-22 23:22:54 +02:00