Thread (15 messages) 15 messages, 5 authors, 2021-09-25

Re: [PATCH] raid1: ensure bio doesn't have more than BIO_MAX_VECS sectors

From: Ming Lei <hidden>
Date: 2021-08-16 11:41:08
Also in: linux-block

On Mon, Aug 16, 2021 at 10:37:54AM +0100, Christoph Hellwig wrote:
On Sat, Aug 14, 2021 at 04:57:06PM +0800, Ming Lei wrote:
quoted
quoted
+	if (bitmap)
+		max_sectors = min_t(int, max_sectors, BIO_MAX_VECS * PAGE_SIZE);
s/PAGE_SIZE/PAGE_SECTORS
Yeah, max_sectors is in size units, I messed that up.
quoted
quoted
+
 	if (max_sectors < bio_sectors(bio)) {
 		struct bio *split = bio_split(bio, max_sectors,
 					      GFP_NOIO, &conf->bio_split);
Here the limit is max single-page vectors, and the above way may not work,
such as:

0 ~ 254: each bvec's length is 512
255: bvec's length is 8192

the total length is just 512*255 + 8192 = 138752 bytes = 271 sectors, but it
still may need 257 bvecs, which can't be allocated via bio_alloc_bioset().
Yes, we still need the rounding magic that alloc_behind_master_bio uses
here.
But it is wrong to use max sectors to limit number of bvecs(segments), isn't it?


Thanks,
Ming
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help