]> git.baikalelectronics.ru Git - kernel.git/commit
block: fix bio_will_gap() for first bvec with offset
authorMing Lei <ming.lei@redhat.com>
Fri, 14 Apr 2017 19:58:29 +0000 (13:58 -0600)
committerJens Axboe <axboe@fb.com>
Fri, 14 Apr 2017 19:58:29 +0000 (13:58 -0600)
commitb3ae5d14868192260534343179c9271e5d0dfe88
treeb3146bd262d61f48bd998bff06ddb1fe4d9edac5
parent40080a514eb8823050cdd31db1866ba4a79251c3
block: fix bio_will_gap() for first bvec with offset

Commit 245f6a3cffd2("block: relax check on sg gap") allows us to merge
bios, if both are physically contiguous.  This change can merge a huge
number of small bios, through mkfs for example, mkfs.ntfs running time
can be decreased to ~1/10.

But if one rq starts with a non-aligned buffer (the 1st bvec's bv_offset
is non-zero) and if we allow the merge, it is quite difficult to respect
sg gap limit, especially the max segment size, or we risk having an
unaligned virtual boundary.  This patch tries to avoid the issue by
disallowing a merge, if the req starts with an unaligned buffer.

Also add comments to explain why the merged segment can't end in
unaligned virt boundary.

Fixes: 245f6a3cffd2 ("block: relax check on sg gap")
Tested-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Rewrote parts of the commit message and comments.

Signed-off-by: Jens Axboe <axboe@fb.com>
include/linux/blkdev.h