Re: LVM on md0: raid0_make_request bug: can't convert block acrosschunks or bigger than 64k

From: Neil Brown
Date: Mon Oct 20 2003 - 19:12:00 EST


On Monday October 20, karl.vogel@xxxxxxxxxx wrote:
> On Mon, 2003-10-20 at 23:06, Kevin Corry wrote:
> > On Monday 20 October 2003 15:35, Karl Vogel wrote:
> > > I'm getting the following kernel messages on V2.6.0-test8-mm1 (I've also
> > > tried plain -test7 and some kernels before that) when copying moderately
> > > sized files from a raid-0/LVM volume:
> > >
> > > --- snip ---
> > > raid0_make_request bug: can't convert block across chunks or bigger than
> > > 64k 24081064 64
> > > raid0_make_request bug: can't convert block across chunks or bigger than
> > > 64k 24080656 64
> > > raid0_make_request bug: can't convert block across chunks or bigger than
> > > 64k 24080784 64
> > > raid0_make_request bug: can't convert block across chunks or bigger than
> > > 64k 24080928 64
> >
> > Looks like this was just recently fixed on the linux-raid list.
> >
> > http://marc.theaimsgroup.com/?l=linux-raid&m=106661294929434
>
> Applied the patch on 2.6.0-test8-mm1 but it made no difference.

no, thats a completely different problem.

>
> Somebody else referred to this posting:
> http://marc.theaimsgroup.com/?l=linux-kernel&m=103369952814053&w=2
>
> but that patch doesn't apply cleanly anymore and I'm not familiar with
> the code to be confident to fix it up myself. (that post was from almost
> exactly 1 year ago, so alot changed probably :)

That patch is already included.

The problem is that dm is not honouring the merge_bvec_fn that
raid0 has set.

This patch might fix it, but I'm not very familiar with the dm code,
so I make no promises.

(I wonder why you are running LVM on top of raid0 given that lvm
contains raid0 functionality).

NeilBrown



----------- Diffstat output ------------
./drivers/md/dm-table.c | 5 +++++
1 files changed, 5 insertions(+)

diff ./drivers/md/dm-table.c~current~ ./drivers/md/dm-table.c
--- ./drivers/md/dm-table.c~current~ 2003-10-21 10:05:29.000000000 +1000
+++ ./drivers/md/dm-table.c 2003-10-21 10:06:27.000000000 +1000
@@ -489,6 +489,11 @@ int dm_get_device(struct dm_target *ti,
rs->max_sectors =
min_not_zero(rs->max_sectors, q->max_sectors);

+ if (q->merge_bvec_fn)
+ rs->max_sectors =
+ min_not_zero(rs->max_sectors, PAGE_SIZE>>9);
+
+
rs->max_phys_segments =
min_not_zero(rs->max_phys_segments,
q->max_phys_segments);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/