I suggest either fixing the multi-region functionality, or removing it. I can think of schemes either way. One thing I want to remove if we keep the multi-region case, is to NOT use the bio_vec array to store region number. This is what causes problems for snapshot volumes when specifing a chunk size of 1024k. Notice in do_region(), the line num_bvecs = (remaining / (PAGE_SIZE >> 9)) + 2; The addition of 2 causes the following bio_set_alloc() to hit its BUG() statement. I think it is also what causes dm-io to maintain it's own pools of bio_vec and bio structures, instead of using the kernel-wide pools. On Thu, Jun 10, 2004 at 04:28:01PM -0700, Dave Olien wrote: > > Sorry, I've been in a meeting for the last hour... > > I agree on both your counts. > > I've been wondering about the multiple region stuff. I don't > think these routines are ever used to do multiple region IO. > Is there any plan to use them that way? I could see maybe with > multi-way mirroring, there might be some use. But I don't think > that's done yet. > > the do_region() function in particular seems broken to me. > > If we eliminate the multi-region support entirely, this code can > all be simplified a lot. The allocation and initialization could > of bio's and bvecs could just use the defined code in fs/bio.c > > How about I write up this file to eliminate multi-region IO?