Re: [PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-23 Thread Neil Brown
On Tuesday January 23, [EMAIL PROTECTED] wrote:
> On Tue, 23 Jan 2007 11:26:52 +1100
> NeilBrown <[EMAIL PROTECTED]> wrote:
> 
> > +   for (j = 0; j < vcnt ; j++)
> > +   
> > memcpy(page_address(sbio->bi_io_vec[j].bv_page),
> > +  
> > page_address(pbio->bi_io_vec[j].bv_page),
> > +  PAGE_SIZE);
> 
> I trust these BIOs are known to only contain suitably-allocated, MD-private
> pages?  Because if these pages can be user pages then this change is
> spectacularly buggy ;)

Your trust is well placed.
This is in the 'resync' path, were all buffers are allocated in lowmem
and are full pages and so-forth, so this is perfectly safe.

NeilBrown
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-23 Thread Andrew Morton
On Tue, 23 Jan 2007 11:26:52 +1100
NeilBrown <[EMAIL PROTECTED]> wrote:

> + for (j = 0; j < vcnt ; j++)
> + 
> memcpy(page_address(sbio->bi_io_vec[j].bv_page),
> +
> page_address(pbio->bi_io_vec[j].bv_page),
> +PAGE_SIZE);

I trust these BIOs are known to only contain suitably-allocated, MD-private
pages?  Because if these pages can be user pages then this change is
spectacularly buggy ;)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-23 Thread Andrew Morton
On Tue, 23 Jan 2007 11:26:52 +1100
NeilBrown [EMAIL PROTECTED] wrote:

 + for (j = 0; j  vcnt ; j++)
 + 
 memcpy(page_address(sbio-bi_io_vec[j].bv_page),
 +
 page_address(pbio-bi_io_vec[j].bv_page),
 +PAGE_SIZE);

I trust these BIOs are known to only contain suitably-allocated, MD-private
pages?  Because if these pages can be user pages then this change is
spectacularly buggy ;)

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-23 Thread Neil Brown
On Tuesday January 23, [EMAIL PROTECTED] wrote:
 On Tue, 23 Jan 2007 11:26:52 +1100
 NeilBrown [EMAIL PROTECTED] wrote:
 
  +   for (j = 0; j  vcnt ; j++)
  +   
  memcpy(page_address(sbio-bi_io_vec[j].bv_page),
  +  
  page_address(pbio-bi_io_vec[j].bv_page),
  +  PAGE_SIZE);
 
 I trust these BIOs are known to only contain suitably-allocated, MD-private
 pages?  Because if these pages can be user pages then this change is
 spectacularly buggy ;)

Your trust is well placed.
This is in the 'resync' path, were all buffers are allocated in lowmem
and are full pages and so-forth, so this is perfectly safe.

NeilBrown
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-22 Thread NeilBrown

When 'repair' finds a block that is different one the various
parts of the mirror. it is meant to write a chosen good version
to the others.  However it currently writes out the original data
to each. The memcpy to make all the data the same is missing.


Signed-off-by: Neil Brown <[EMAIL PROTECTED]>

### Diffstat output
 ./drivers/md/raid1.c |5 +
 1 file changed, 5 insertions(+)

diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c
--- .prev/drivers/md/raid1.c2007-01-23 11:13:45.0 +1100
+++ ./drivers/md/raid1.c2007-01-23 11:23:43.0 +1100
@@ -1221,6 +1221,11 @@ static void sync_request_write(mddev_t *
sbio->bi_sector = r1_bio->sector +

conf->mirrors[i].rdev->data_offset;
sbio->bi_bdev = 
conf->mirrors[i].rdev->bdev;
+   for (j = 0; j < vcnt ; j++)
+   
memcpy(page_address(sbio->bi_io_vec[j].bv_page),
+  
page_address(pbio->bi_io_vec[j].bv_page),
+  PAGE_SIZE);
+
}
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 002 of 4] md: Make 'repair' actually work for raid1.

2007-01-22 Thread NeilBrown

When 'repair' finds a block that is different one the various
parts of the mirror. it is meant to write a chosen good version
to the others.  However it currently writes out the original data
to each. The memcpy to make all the data the same is missing.


Signed-off-by: Neil Brown [EMAIL PROTECTED]

### Diffstat output
 ./drivers/md/raid1.c |5 +
 1 file changed, 5 insertions(+)

diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c
--- .prev/drivers/md/raid1.c2007-01-23 11:13:45.0 +1100
+++ ./drivers/md/raid1.c2007-01-23 11:23:43.0 +1100
@@ -1221,6 +1221,11 @@ static void sync_request_write(mddev_t *
sbio-bi_sector = r1_bio-sector +

conf-mirrors[i].rdev-data_offset;
sbio-bi_bdev = 
conf-mirrors[i].rdev-bdev;
+   for (j = 0; j  vcnt ; j++)
+   
memcpy(page_address(sbio-bi_io_vec[j].bv_page),
+  
page_address(pbio-bi_io_vec[j].bv_page),
+  PAGE_SIZE);
+
}
}
}
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/