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.

Merge tag 'block-5.13-2021-05-09' of git://git.kernel.dk/linux-block

Pull block fix from Jens Axboe:
"Turns out the bio max size change still has issues, so let's get it
reverted for 5.13-rc1. We'll shake out the issues there and defer it
to 5.14 instead"

* tag 'block-5.13-2021-05-09' of git://git.kernel.dk/linux-block:
Revert "bio: limit bio max size"

+3 -21
+2 -11
block/bio.c
··· 255 255 } 256 256 EXPORT_SYMBOL(bio_init); 257 257 258 - unsigned int bio_max_size(struct bio *bio) 259 - { 260 - struct block_device *bdev = bio->bi_bdev; 261 - 262 - return bdev ? bdev->bd_disk->queue->limits.bio_max_bytes : UINT_MAX; 263 - } 264 - 265 258 /** 266 259 * bio_reset - reinitialize a bio 267 260 * @bio: bio to reset ··· 866 873 struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1]; 867 874 868 875 if (page_is_mergeable(bv, page, len, off, same_page)) { 869 - if (bio->bi_iter.bi_size > bio_max_size(bio) - len) { 876 + if (bio->bi_iter.bi_size > UINT_MAX - len) { 870 877 *same_page = false; 871 878 return false; 872 879 } ··· 995 1002 { 996 1003 unsigned short nr_pages = bio->bi_max_vecs - bio->bi_vcnt; 997 1004 unsigned short entries_left = bio->bi_max_vecs - bio->bi_vcnt; 998 - unsigned int bytes_left = bio_max_size(bio) - bio->bi_iter.bi_size; 999 1005 struct bio_vec *bv = bio->bi_io_vec + bio->bi_vcnt; 1000 1006 struct page **pages = (struct page **)bv; 1001 1007 bool same_page = false; ··· 1010 1018 BUILD_BUG_ON(PAGE_PTRS_PER_BVEC < 2); 1011 1019 pages += entries_left * (PAGE_PTRS_PER_BVEC - 1); 1012 1020 1013 - size = iov_iter_get_pages(iter, pages, bytes_left, nr_pages, 1014 - &offset); 1021 + size = iov_iter_get_pages(iter, pages, LONG_MAX, nr_pages, &offset); 1015 1022 if (unlikely(size <= 0)) 1016 1023 return size ? size : -EFAULT; 1017 1024
-5
block/blk-settings.c
··· 32 32 */ 33 33 void blk_set_default_limits(struct queue_limits *lim) 34 34 { 35 - lim->bio_max_bytes = UINT_MAX; 36 35 lim->max_segments = BLK_MAX_SEGMENTS; 37 36 lim->max_discard_segments = 1; 38 37 lim->max_integrity_segments = 0; ··· 139 140 max_sectors = round_down(max_sectors, 140 141 limits->logical_block_size >> SECTOR_SHIFT); 141 142 limits->max_sectors = max_sectors; 142 - 143 - if (check_shl_overflow(max_sectors, SECTOR_SHIFT, 144 - &limits->bio_max_bytes)) 145 - limits->bio_max_bytes = UINT_MAX; 146 143 147 144 q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9); 148 145 }
+1 -3
include/linux/bio.h
··· 106 106 return NULL; 107 107 } 108 108 109 - extern unsigned int bio_max_size(struct bio *bio); 110 - 111 109 /** 112 110 * bio_full - check if the bio is full 113 111 * @bio: bio to check ··· 119 121 if (bio->bi_vcnt >= bio->bi_max_vecs) 120 122 return true; 121 123 122 - if (bio->bi_iter.bi_size > bio_max_size(bio) - len) 124 + if (bio->bi_iter.bi_size > UINT_MAX - len) 123 125 return true; 124 126 125 127 return false;
-2
include/linux/blkdev.h
··· 326 326 }; 327 327 328 328 struct queue_limits { 329 - unsigned int bio_max_bytes; 330 - 331 329 enum blk_bounce bounce; 332 330 unsigned long seg_boundary_mask; 333 331 unsigned long virt_boundary_mask;