Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

block: consider discard merge last

If the next discard range is contiguous with the current range being
considered, it's cheaper to expand the current range than to append an
additional bio.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Keith Busch and committed by
Jens Axboe
2516c246 82d20481

+6 -6
+6 -6
block/blk-merge.c
··· 712 712 static enum elv_merge blk_try_req_merge(struct request *req, 713 713 struct request *next) 714 714 { 715 - if (blk_discard_mergable(req)) 716 - return ELEVATOR_DISCARD_MERGE; 717 - else if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next)) 715 + if (blk_rq_pos(req) + blk_rq_sectors(req) == blk_rq_pos(next)) 718 716 return ELEVATOR_BACK_MERGE; 717 + else if (blk_discard_mergable(req)) 718 + return ELEVATOR_DISCARD_MERGE; 719 719 720 720 return ELEVATOR_NO_MERGE; 721 721 } ··· 903 903 904 904 enum elv_merge blk_try_merge(struct request *rq, struct bio *bio) 905 905 { 906 - if (blk_discard_mergable(rq)) 907 - return ELEVATOR_DISCARD_MERGE; 908 - else if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) 906 + if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector) 909 907 return ELEVATOR_BACK_MERGE; 910 908 else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector) 911 909 return ELEVATOR_FRONT_MERGE; 910 + else if (blk_discard_mergable(rq)) 911 + return ELEVATOR_DISCARD_MERGE; 912 912 return ELEVATOR_NO_MERGE; 913 913 } 914 914