mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 12:16:20 +00:00
blk_hw_contig_segment(): bad segment size checks
Two bugs in there: - The virt oversize check should use the current bio hardware back size and the next bio front size, not the same bio. Spotted by Neil Brown. - The segment size check should add hw front sizes, not total bio sizes. Spotted by James Bottomley Acked-by: James Bottomley <James.Bottomley@SteelEye.com> Acked-by: NeilBrown <neilb@suse.de> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
7deeed1317
commit
32eef96411
1 changed files with 2 additions and 2 deletions
|
@ -1304,9 +1304,9 @@ static int blk_hw_contig_segment(request_queue_t *q, struct bio *bio,
|
||||||
if (unlikely(!bio_flagged(nxt, BIO_SEG_VALID)))
|
if (unlikely(!bio_flagged(nxt, BIO_SEG_VALID)))
|
||||||
blk_recount_segments(q, nxt);
|
blk_recount_segments(q, nxt);
|
||||||
if (!BIOVEC_VIRT_MERGEABLE(__BVEC_END(bio), __BVEC_START(nxt)) ||
|
if (!BIOVEC_VIRT_MERGEABLE(__BVEC_END(bio), __BVEC_START(nxt)) ||
|
||||||
BIOVEC_VIRT_OVERSIZE(bio->bi_hw_front_size + bio->bi_hw_back_size))
|
BIOVEC_VIRT_OVERSIZE(bio->bi_hw_back_size + nxt->bi_hw_front_size))
|
||||||
return 0;
|
return 0;
|
||||||
if (bio->bi_size + nxt->bi_size > q->max_segment_size)
|
if (bio->bi_hw_back_size + nxt->bi_hw_front_size > q->max_segment_size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in a new issue