block: split bio if the only bvec's length is > SZ_4K
authorMing Lei <ming.lei@redhat.com>
Fri, 8 Nov 2019 10:15:28 +0000 (18:15 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 8 Nov 2019 13:59:51 +0000 (06:59 -0700)
64K PAGE_SIZE is popular on ARM64 or other ARCHs, and 64K has been big
enough to break some devices probably, so change the logic to split bio
if the only bvec's length is > SZ_4K instead of PAGE_SIZE.

Fixes: fa5322872187 (block: avoid blk_bio_segment_split for small I/O operations)
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-merge.c

index d783bdc4559b4de54b19364579326b9f618ebe15..f35327f63ef4db762ac0510c8c7b1978b267879e 100644 (file)
@@ -320,7 +320,7 @@ void __blk_queue_split(struct request_queue *q, struct bio **bio,
                if (!q->limits.chunk_sectors &&
                    (*bio)->bi_vcnt == 1 &&
                    ((*bio)->bi_io_vec[0].bv_len +
-                    (*bio)->bi_io_vec[0].bv_offset) <= PAGE_SIZE) {
+                    (*bio)->bi_io_vec[0].bv_offset) <= SZ_4K) {
                        *nr_segs = 1;
                        break;
                }