[Evms-devel] Re: [dm-devel] dev kernels(bio change), evms_activate still produces oops
Dave Olien
dmo at osdl.org
Wed Feb 16 22:56:01 UTC 2005
I apologize again for being slow about this. Below are the two
patches I developed. The first one is in 2.6.11-rc4. The other
one should appear in the Andrew's mm tree for rc4.
They both apply to linux-2.6.11-rc3-udm2, with some offsets.
The problems both appear because of the way raid5 and raid6 created
its bio's that it then passed into bio_clone().
On Fri, Feb 11, 2005 at 01:14:33PM -0800, Dave Olien wrote:
>
>
> I've found two problems with bio_clone(). One a consequencey
> of my patch to bio.c, and the other from Jen's patch to bio.c
> Just the 2.6.11-rc3-bk4 will Oops, without my bio patch.
>
> I'm working on two patches. I'll have them in the mail
> by the end of today.
>
------------------ patch 1 ----------------------------------------------------
diff -ur linux-2.6.11-rc3-mm2-orig/fs/bio.c linux-2.6.11-rc3-mm2-patch/fs/bio.c
--- linux-2.6.11-rc3-mm2-orig/fs/bio.c 2005-02-11 20:37:59.000000000 -0800
+++ linux-2.6.11-rc3-mm2-patch/fs/bio.c 2005-02-11 20:41:30.000000000 -0800
@@ -273,7 +273,7 @@
*/
struct bio *bio_clone(struct bio *bio, int gfp_mask)
{
- struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, bio->bi_set);
+ struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, fs_bio_set);
if (b)
__bio_clone(b, bio);
------------------ patch 2 ----------------------------------------------------
This patch applies to the current bk tree, and fixes the raid5 and raid6
prolems in that tree (at least, raid5 and raid6 successfully begin to sync
without an oops).
===== drivers/md/raid5.c 1.110 vs edited =====
--- 1.110/drivers/md/raid5.c 2005-02-08 02:35:58 -08:00
+++ edited/drivers/md/raid5.c 2005-02-11 20:23:56 -08:00
@@ -458,6 +458,7 @@ static void raid5_build_block (struct st
bio_init(&dev->req);
dev->req.bi_io_vec = &dev->vec;
dev->req.bi_vcnt++;
+ dev->req.bi_max_vecs++;
dev->vec.bv_page = dev->page;
dev->vec.bv_len = STRIPE_SIZE;
dev->vec.bv_offset = 0;
@@ -1288,6 +1289,7 @@ static void handle_stripe(struct stripe_
bi->bi_sector = sh->sector + rdev->data_offset;
bi->bi_flags = 1 << BIO_UPTODATE;
bi->bi_vcnt = 1;
+ bi->bi_max_vecs = 1;
bi->bi_idx = 0;
bi->bi_io_vec = &sh->dev[i].vec;
bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
===== drivers/md/raid6main.c 1.31 vs edited =====
--- 1.31/drivers/md/raid6main.c 2005-02-08 02:35:58 -08:00
+++ edited/drivers/md/raid6main.c 2005-02-11 20:23:56 -08:00
@@ -478,6 +478,7 @@ static void raid6_build_block (struct st
bio_init(&dev->req);
dev->req.bi_io_vec = &dev->vec;
dev->req.bi_vcnt++;
+ dev->req.bi_max_vecs++;
dev->vec.bv_page = dev->page;
dev->vec.bv_len = STRIPE_SIZE;
dev->vec.bv_offset = 0;
@@ -1447,6 +1448,7 @@ static void handle_stripe(struct stripe_
bi->bi_sector = sh->sector + rdev->data_offset;
bi->bi_flags = 1 << BIO_UPTODATE;
bi->bi_vcnt = 1;
+ bi->bi_max_vecs = 1;
bi->bi_idx = 0;
bi->bi_io_vec = &sh->dev[i].vec;
bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
More information about the dm-devel
mailing list