--- /dev/null
+From d0e5fbb01a67e400e82fefe4896ea40c6447ab98 Mon Sep 17 00:00:00 2001
+From: Ming Lei <tom.leiming@gmail.com>
+Date: Sat, 23 Jan 2016 08:05:33 +0800
+Subject: block: fix bio splitting on max sectors
+
+From: Ming Lei <tom.leiming@gmail.com>
+
+commit d0e5fbb01a67e400e82fefe4896ea40c6447ab98 upstream.
+
+After commit e36f62042880(block: split bios to maxpossible length),
+bio can be splitted in the middle of a vector entry, then it
+is easy to split out one bio which size isn't aligned with block
+size, especially when the block size is bigger than 512.
+
+This patch fixes the issue by making the max io size aligned
+to logical block size.
+
+Fixes: e36f62042880(block: split bios to maxpossible length)
+Reported-by: Stefan Haberland <sth@linux.vnet.ibm.com>
+Cc: Keith Busch <keith.busch@intel.com>
+Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ming Lei <tom.leiming@gmail.com>
+Signed-off-by: Jens Axboe <axboe@fb.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ block/blk-merge.c | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+--- a/block/blk-merge.c
++++ b/block/blk-merge.c
+@@ -68,6 +68,18 @@ static struct bio *blk_bio_write_same_sp
+ return bio_split(bio, q->limits.max_write_same_sectors, GFP_NOIO, bs);
+ }
+
++static inline unsigned get_max_io_size(struct request_queue *q,
++ struct bio *bio)
++{
++ unsigned sectors = blk_max_size_offset(q, bio->bi_iter.bi_sector);
++ unsigned mask = queue_logical_block_size(q) - 1;
++
++ /* aligned to logical block size */
++ sectors &= ~(mask >> 9);
++
++ return sectors;
++}
++
+ static struct bio *blk_bio_segment_split(struct request_queue *q,
+ struct bio *bio,
+ struct bio_set *bs,
+@@ -79,6 +91,7 @@ static struct bio *blk_bio_segment_split
+ unsigned front_seg_size = bio->bi_seg_front_size;
+ bool do_split = true;
+ struct bio *new = NULL;
++ const unsigned max_sectors = get_max_io_size(q, bio);
+
+ bio_for_each_segment(bv, bio, iter) {
+ /*
+@@ -88,20 +101,19 @@ static struct bio *blk_bio_segment_split
+ if (bvprvp && bvec_gap_to_prev(q, bvprvp, bv.bv_offset))
+ goto split;
+
+- if (sectors + (bv.bv_len >> 9) >
+- blk_max_size_offset(q, bio->bi_iter.bi_sector)) {
++ if (sectors + (bv.bv_len >> 9) > max_sectors) {
+ /*
+ * Consider this a new segment if we're splitting in
+ * the middle of this vector.
+ */
+ if (nsegs < queue_max_segments(q) &&
+- sectors < blk_max_size_offset(q,
+- bio->bi_iter.bi_sector)) {
++ sectors < max_sectors) {
+ nsegs++;
+- sectors = blk_max_size_offset(q,
+- bio->bi_iter.bi_sector);
++ sectors = max_sectors;
+ }
+- goto split;
++ if (sectors)
++ goto split;
++ /* Make this single bvec as the 1st segment */
+ }
+
+ if (bvprvp && blk_queue_cluster(q)) {