]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] raid5 and raid6 fixes to current bk tree
authorDave Olien <dmo@osdl.org>
Fri, 11 Feb 2005 12:42:01 +0000 (04:42 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Fri, 11 Feb 2005 12:42:01 +0000 (04:42 -0800)
This fixes the raid5 and raid6 prolems that crept in with the recent
introduction of "bi_max_vecs".

Since raid5/raid6 allocate their own bio's, they need to make sure
that bi_max_vecs is updated along with bi_vcnt.

drivers/md/raid5.c
drivers/md/raid6main.c

index 5ee4c2b553e916671b1ab48309c51546aec07890..470e17e609975b95ee99823c19f9a5e6e1772a5c 100644 (file)
@@ -458,6 +458,7 @@ static void raid5_build_block (struct stripe_head *sh, int i)
        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_head *sh)
                        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;
index 0f82d85939e7c893fcdc693f7bea39a17aa179e8..ac9420f77b219a91753d334f6e095e13fa16bd1d 100644 (file)
@@ -478,6 +478,7 @@ static void raid6_build_block (struct stripe_head *sh, int i)
        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_head *sh)
                        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;