1
linux/block
FUJITA Tomonori f18573abcc block: move the padding adjustment to blk_rq_map_sg
blk_rq_map_user adjusts bi_size of the last bio. It breaks the rule
that req->data_len (the true data length) is equal to sum(bio). It
broke the scsi command completion code.

commit e97a294ef6 was introduced to fix
the above issue. However, the partial completion code doesn't work
with it. The commit is also a layer violation (scsi mid-layer should
not know about the block layer's padding).

This patch moves the padding adjustment to blk_rq_map_sg (suggested by
James). The padding works like the drain buffer. This patch breaks the
rule that req->data_len is equal to sum(sg), however, the drain buffer
already broke it. So this patch just restores the rule that
req->data_len is equal to sub(bio) without breaking anything new.

Now when a low level driver needs padding, blk_rq_map_user and
blk_rq_map_user_iov guarantee there's enough room for padding.
blk_rq_map_sg can safely extend the last entry of a scatter list.

blk_rq_map_sg must extend the last entry of a scatter list only for a
request that got through bio_copy_user_iov. This patches introduces
new REQ_COPY_USER flag.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Tejun Heo <htejun@gmail.com>
Cc: Mike Christie <michaelc@cs.wisc.edu>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2008-04-21 09:50:08 +02:00
..
as-iosched.c block: kill swap_io_context() 2008-02-01 11:34:49 +01:00
blk-barrier.c block: fix blkdev_issue_flush() not detecting and passing EOPNOTSUPP back 2008-03-04 11:47:46 +01:00
blk-core.c unexport blk_{get,put}_queue 2008-03-04 11:28:32 +01:00
blk-exec.c block: make core bits checkpatch compliant 2008-02-01 09:26:33 +01:00
blk-ioc.c cfq-iosched: add hlist for browsing parallel to the radix tree 2008-02-19 10:04:00 +01:00
blk-map.c block: move the padding adjustment to blk_rq_map_sg 2008-04-21 09:50:08 +02:00
blk-merge.c block: move the padding adjustment to blk_rq_map_sg 2008-04-21 09:50:08 +02:00
blk-settings.c Fix bounce setting for 64-bit 2008-04-02 09:06:44 +02:00
blk-sysfs.c block: make core bits checkpatch compliant 2008-02-01 09:26:33 +01:00
blk-tag.c block/blk-tag.c should #include "blk.h" 2008-03-04 11:28:24 +01:00
blk.h proper prototype for blk_dev_init() 2008-03-04 11:28:29 +01:00
blktrace.c blktrace: Add blktrace ioctls to SCSI generic devices 2008-01-28 10:04:46 +01:00
bsg.c [SCSI] bsg: no need to set BSG_F_BLOCK bit in bsg_complete_all_commands 2008-04-18 11:48:43 -05:00
cfq-iosched.c cfq-iosched: do not leak ioc_data across iosched switches 2008-04-10 08:28:01 +02:00
compat_ioctl.c ide: remove broken/dangerous HDIO_[UNREGISTER,SCAN]_HWIF ioctls (take 3) 2008-04-18 00:46:24 +02:00
deadline-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
elevator.c elevator: make elevator_get() attempt to load the appropriate module 2008-02-19 10:20:37 +01:00
genhd.c genhd must_check warning fix 2008-03-12 12:34:37 -07:00
ioctl.c compat_ioctl: move common block ioctls to compat_blkdev_ioctl 2007-10-10 09:26:00 +02:00
Kconfig block: update git url for blktrace 2008-04-15 10:23:35 +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 block: ll_rw_blk.c split, add blk-merge.c 2008-01-29 21:55:12 +01:00
noop-iosched.c block: let elv_register() return void 2007-12-18 08:29:28 +01:00
scsi_ioctl.c block: restore the meaning of rq->data_len to the true data length 2008-03-04 11:17:11 +01:00