Commit 1545f137 authored by Kent Overstreet's avatar Kent Overstreet

bcache: Correctly check against BIO_MAX_PAGES

bch_bio_max_sectors() was checking against BIO_MAX_PAGES as if the limit
was for the total bytes in the bio, not the number of segments.
Signed-off-by: default avatarKent Overstreet <koverstreet@google.com>
parent bca97ada
...@@ -158,8 +158,10 @@ static unsigned bch_bio_max_sectors(struct bio *bio) ...@@ -158,8 +158,10 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
{ {
unsigned ret = bio_sectors(bio); unsigned ret = bio_sectors(bio);
struct request_queue *q = bdev_get_queue(bio->bi_bdev); struct request_queue *q = bdev_get_queue(bio->bi_bdev);
unsigned max_segments = min_t(unsigned, BIO_MAX_PAGES,
queue_max_segments(q));
struct bio_vec *bv, *end = bio_iovec(bio) + struct bio_vec *bv, *end = bio_iovec(bio) +
min_t(int, bio_segments(bio), queue_max_segments(q)); min_t(int, bio_segments(bio), max_segments);
struct bvec_merge_data bvm = { struct bvec_merge_data bvm = {
.bi_bdev = bio->bi_bdev, .bi_bdev = bio->bi_bdev,
...@@ -171,7 +173,7 @@ static unsigned bch_bio_max_sectors(struct bio *bio) ...@@ -171,7 +173,7 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
if (bio->bi_rw & REQ_DISCARD) if (bio->bi_rw & REQ_DISCARD)
return min(ret, q->limits.max_discard_sectors); return min(ret, q->limits.max_discard_sectors);
if (bio_segments(bio) > queue_max_segments(q) || if (bio_segments(bio) > max_segments ||
q->merge_bvec_fn) { q->merge_bvec_fn) {
ret = 0; ret = 0;
...@@ -183,9 +185,6 @@ static unsigned bch_bio_max_sectors(struct bio *bio) ...@@ -183,9 +185,6 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
ret += bv->bv_len >> 9; ret += bv->bv_len >> 9;
bvm.bi_size += bv->bv_len; bvm.bi_size += bv->bv_len;
} }
if (ret >= (BIO_MAX_PAGES * PAGE_SIZE) >> 9)
return (BIO_MAX_PAGES * PAGE_SIZE) >> 9;
} }
ret = min(ret, queue_max_sectors(q)); ret = min(ret, queue_max_sectors(q));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment