Commit 35c820e7 authored by Jens Axboe's avatar Jens Axboe

Revert "bio: limit bio max size"

This reverts commit cd2c7545.

Alex reports that the commit causes corruption with LUKS on ext4. Revert
it for now so that this can be investigated properly.

Link: https://lore.kernel.org/linux-block/1620493841.bxdq8r5haw.none@localhost/Reported-by: default avatarAlex Xu (Hello71) <alex_y_xu@yahoo.ca>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent cf7b39a0
...@@ -255,13 +255,6 @@ void bio_init(struct bio *bio, struct bio_vec *table, ...@@ -255,13 +255,6 @@ void bio_init(struct bio *bio, struct bio_vec *table,
} }
EXPORT_SYMBOL(bio_init); EXPORT_SYMBOL(bio_init);
unsigned int bio_max_size(struct bio *bio)
{
struct block_device *bdev = bio->bi_bdev;
return bdev ? bdev->bd_disk->queue->limits.bio_max_bytes : UINT_MAX;
}
/** /**
* bio_reset - reinitialize a bio * bio_reset - reinitialize a bio
* @bio: bio to reset * @bio: bio to reset
...@@ -873,7 +866,7 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page, ...@@ -873,7 +866,7 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,
struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1]; struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1];
if (page_is_mergeable(bv, page, len, off, same_page)) { if (page_is_mergeable(bv, page, len, off, same_page)) {
if (bio->bi_iter.bi_size > bio_max_size(bio) - len) { if (bio->bi_iter.bi_size > UINT_MAX - len) {
*same_page = false; *same_page = false;
return false; return false;
} }
...@@ -1002,7 +995,6 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) ...@@ -1002,7 +995,6 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
{ {
unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt; unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt;
unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt; unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt;
unsigned int bytes_left = bio_max_size(bio) - bio->bi_iter.bi_size;
struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt; struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt;
struct page **pages = (struct page **)bv; struct page **pages = (struct page **)bv;
bool same_page = false; bool same_page = false;
...@@ -1018,8 +1010,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) ...@@ -1018,8 +1010,7 @@ static int __bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2); BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2);
pages += entries_left * (PAGE_PTRS_PER_BVEC - 1); pages += entries_left * (PAGE_PTRS_PER_BVEC - 1);
size = iov_iter_get_pages(iter, pages, bytes_left, nr_pages, size = iov_iter_get_pages(iter, pages, LONG_MAX, nr_pages, &offset);
&offset);
if (unlikely(size <= 0)) if (unlikely(size <= 0))
return size ? size : -EFAULT; return size ? size : -EFAULT;
......
...@@ -31,7 +31,6 @@ EXPORT_SYMBOL_GPL(blk_queue_rq_timeout); ...@@ -31,7 +31,6 @@ EXPORT_SYMBOL_GPL(blk_queue_rq_timeout);
*/ */
void blk_set_default_limits(struct queue_limits *lim) void blk_set_default_limits(struct queue_limits *lim)
{ {
lim->bio_max_bytes = UINT_MAX;
lim->max_segments = BLK_MAX_SEGMENTS; lim->max_segments = BLK_MAX_SEGMENTS;
lim->max_discard_segments = 1; lim->max_discard_segments = 1;
lim->max_integrity_segments = 0; lim->max_integrity_segments = 0;
...@@ -140,10 +139,6 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto ...@@ -140,10 +139,6 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto
limits->logical_block_size >> SECTOR_SHIFT); limits->logical_block_size >> SECTOR_SHIFT);
limits->max_sectors = max_sectors; limits->max_sectors = max_sectors;
if (check_shl_overflow(max_sectors, SECTOR_SHIFT,
&limits->bio_max_bytes))
limits->bio_max_bytes = UINT_MAX;
q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9); q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9);
} }
EXPORT_SYMBOL(blk_queue_max_hw_sectors); EXPORT_SYMBOL(blk_queue_max_hw_sectors);
......
...@@ -106,8 +106,6 @@ static inline void *bio_data(struct bio *bio) ...@@ -106,8 +106,6 @@ static inline void *bio_data(struct bio *bio)
return NULL; return NULL;
} }
extern unsigned int bio_max_size(struct bio *bio);
/** /**
* bio_full - check if the bio is full * bio_full - check if the bio is full
* @bio: bio to check * @bio: bio to check
...@@ -121,7 +119,7 @@ static inline bool bio_full(struct bio *bio, unsigned len) ...@@ -121,7 +119,7 @@ static inline bool bio_full(struct bio *bio, unsigned len)
if (bio->bi_vcnt >= bio->bi_max_vecs) if (bio->bi_vcnt >= bio->bi_max_vecs)
return true; return true;
if (bio->bi_iter.bi_size > bio_max_size(bio) - len) if (bio->bi_iter.bi_size > UINT_MAX - len)
return true; return true;
return false; return false;
......
...@@ -327,8 +327,6 @@ enum blk_bounce { ...@@ -327,8 +327,6 @@ enum blk_bounce {
}; };
struct queue_limits { struct queue_limits {
unsigned int bio_max_bytes;
enum blk_bounce bounce; enum blk_bounce bounce;
unsigned long seg_boundary_mask; unsigned long seg_boundary_mask;
unsigned long virt_boundary_mask; unsigned long virt_boundary_mask;
......
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