block: split bios to max possible length
authorKeith Busch <keith.busch@intel.com>
Tue, 12 Jan 2016 22:08:39 +0000 (15:08 -0700)
committerJens Axboe <axboe@fb.com>
Tue, 12 Jan 2016 22:10:56 +0000 (15:10 -0700)
commite36f6204288088fda50d1c84830340ccb70f85ff
tree58665774f3a1569b45b80346f8ff782d6a053443
parentcda22646adaa453519fac28222f20b0d73aa8562
block: split bios to max possible length

This splits bio in the middle of a vector to form the largest possible
bio at the h/w's desired alignment, and guarantees the bio being split
will have some data.

The criteria for splitting is changed from the max sectors to the h/w's
optimal sector alignment if it is provided. For h/w that advertise their
block storage's underlying chunk size, it's a big performance win to not
submit commands that cross them. If sector alignment is not provided,
this patch uses the max sectors as before.

This addresses the performance issue commit d380561113 attempted to
fix, but was reverted due to splitting logic error.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Cc: Jens Axboe <axboe@fb.com>
Cc: Ming Lei <tom.leiming@gmail.com>
Cc: Kent Overstreet <kent.overstreet@gmail.com>
Cc: <stable@vger.kernel.org> # 4.4.x-
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-merge.c