diff mbox

block: Split bios on chunk boundaries

Message ID 1450824524-5413-1-git-send-email-keith.busch@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Jens Axboe
Headers show

Commit Message

Keith Busch Dec. 22, 2015, 10:48 p.m. UTC
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. This patch
uses that criteria if it is provided. If it is not provided, this patch
uses the max sectors as before.

Signed-off-by: Keith Busch <keith.busch@intel.com>
---
 block/blk-merge.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jens Axboe Dec. 23, 2015, 12:17 a.m. UTC | #1
On 12/22/2015 03:48 PM, Keith Busch wrote:
> 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. This patch
> uses that criteria if it is provided. If it is not provided, this patch
> uses the max sectors as before.
>
> Signed-off-by: Keith Busch <keith.busch@intel.com>
> ---
>   block/blk-merge.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/block/blk-merge.c b/block/blk-merge.c
> index 0e5643a..d05fdd2 100644
> --- a/block/blk-merge.c
> +++ b/block/blk-merge.c
> @@ -83,7 +83,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
>   	struct bio *new = NULL;
>
>   	bio_for_each_segment(bv, bio, iter) {
> -		if (sectors + (bv.bv_len >> 9) > queue_max_sectors(q))
> +		if (sectors + (bv.bv_len >> 9) > blk_max_size_offset(q, bio->bi_iter.bi_sector))
>   			goto split;
>
>   		/*

Looks good, will apply. Thanks Keith!
diff mbox

Patch

diff --git a/block/blk-merge.c b/block/blk-merge.c
index 0e5643a..d05fdd2 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -83,7 +83,7 @@  static struct bio *blk_bio_segment_split(struct request_queue *q,
 	struct bio *new = NULL;
 
 	bio_for_each_segment(bv, bio, iter) {
-		if (sectors + (bv.bv_len >> 9) > queue_max_sectors(q))
+		if (sectors + (bv.bv_len >> 9) > blk_max_size_offset(q, bio->bi_iter.bi_sector))
 			goto split;
 
 		/*