block, dm: don't copy bios for request clones
authorChristoph Hellwig <hch@lst.de>
Fri, 22 May 2015 13:14:04 +0000 (09:14 -0400)
committerJens Axboe <axboe@fb.com>
Fri, 22 May 2015 14:58:57 +0000 (08:58 -0600)
commit5f1b670d0bef508a5554d92525f5f6d00d640b38
tree18aaa4b5ead87568214b3d9c0f501d8a98c2a787
parent326e1dbb57368087a36607aaebe9795b8d5453e5
block, dm: don't copy bios for request clones

Currently dm-multipath has to clone the bios for every request sent
to the lower devices, which wastes cpu cycles and ties down memory.

This patch instead adds a new REQ_CLONE flag that instructs req_bio_endio
to not complete bios attached to a request, which we set on clone
requests similar to bios in a flush sequence.  With this change I/O
errors on a path failure only get propagated to dm-multipath, which
can then either resubmit the I/O or complete the bios on the original
request.

I've done some basic testing of this on a Linux target with ALUA support,
and it survives path failures during I/O nicely.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-core.c
drivers/md/dm-table.c
drivers/md/dm.c
drivers/md/dm.h
include/linux/blk_types.h
include/linux/blkdev.h