[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [dm-devel] [PATCH-RFC] Bug in dm-raid1 as used by pvmove



It looks reasonable at first glance, but I have to think about it more. Do you have a test case that I can reproduce with?

 brassow

On May 8, 2006, at 11:55 PM, Neil Brown wrote:


Hi,
 We have a report of a system oops during pvmove.

 What appears to be happening is core_in_sync is being passed
 a 'region' is which much too large.  When this is indexed into the
 bitset at lc->sync_bits it hits an unmapped page, and results in an
 oops.

 I believe the problem is in bio_to_region.  See the patch below.

 If a section of an lv which is *not* at the start of the lv is being
 moved using dm-raid1, I think the region number is being calculated
 wrongly resulting in the inappropriately large index.  We really
 need to subtract ti->begin from bi_sector before shifting.

 We will try to get this patch tested on the machine that showed the
 fault, but I would appreciate any feedback about the patch and I am
 still not very familiar with this code.

Thanks,
NeilBrown



Signed-off-by: Neil Brown <neilb suse de>

### Diffstat output
 ./drivers/md/dm-raid1.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff ./drivers/md/dm-raid1.c~current~ ./drivers/md/dm-raid1.c
--- ./drivers/md/dm-raid1.c~current~ 2006-05-09 14:47:35.000000000 +1000
+++ ./drivers/md/dm-raid1.c	2006-05-09 14:47:35.000000000 +1000
@@ -111,7 +111,7 @@ struct region {
  */
static inline region_t bio_to_region(struct region_hash *rh, struct bio *bio)
 {
-	return bio->bi_sector >> rh->region_shift;
+	return (bio->bi_sector - rh->ms->ti->begin) >> rh->region_shift;
 }

static inline sector_t region_to_sector(struct region_hash *rh, region_t region)

--
dm-devel mailing list
dm-devel redhat com
https://www.redhat.com/mailman/listinfo/dm-devel



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]