Commit d007c49c authored by Dave Olien's avatar Dave Olien Committed by Linus Torvalds

[PATCH] raid5 and raid6 fixes to current bk tree

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.
parent 5fb4869e
...@@ -458,6 +458,7 @@ static void raid5_build_block (struct stripe_head *sh, int i) ...@@ -458,6 +458,7 @@ static void raid5_build_block (struct stripe_head *sh, int i)
bio_init(&dev->req); bio_init(&dev->req);
dev->req.bi_io_vec = &dev->vec; dev->req.bi_io_vec = &dev->vec;
dev->req.bi_vcnt++; dev->req.bi_vcnt++;
dev->req.bi_max_vecs++;
dev->vec.bv_page = dev->page; dev->vec.bv_page = dev->page;
dev->vec.bv_len = STRIPE_SIZE; dev->vec.bv_len = STRIPE_SIZE;
dev->vec.bv_offset = 0; dev->vec.bv_offset = 0;
...@@ -1288,6 +1289,7 @@ static void handle_stripe(struct stripe_head *sh) ...@@ -1288,6 +1289,7 @@ static void handle_stripe(struct stripe_head *sh)
bi->bi_sector = sh->sector + rdev->data_offset; bi->bi_sector = sh->sector + rdev->data_offset;
bi->bi_flags = 1 << BIO_UPTODATE; bi->bi_flags = 1 << BIO_UPTODATE;
bi->bi_vcnt = 1; bi->bi_vcnt = 1;
bi->bi_max_vecs = 1;
bi->bi_idx = 0; bi->bi_idx = 0;
bi->bi_io_vec = &sh->dev[i].vec; bi->bi_io_vec = &sh->dev[i].vec;
bi->bi_io_vec[0].bv_len = STRIPE_SIZE; bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
......
...@@ -478,6 +478,7 @@ static void raid6_build_block (struct stripe_head *sh, int i) ...@@ -478,6 +478,7 @@ static void raid6_build_block (struct stripe_head *sh, int i)
bio_init(&dev->req); bio_init(&dev->req);
dev->req.bi_io_vec = &dev->vec; dev->req.bi_io_vec = &dev->vec;
dev->req.bi_vcnt++; dev->req.bi_vcnt++;
dev->req.bi_max_vecs++;
dev->vec.bv_page = dev->page; dev->vec.bv_page = dev->page;
dev->vec.bv_len = STRIPE_SIZE; dev->vec.bv_len = STRIPE_SIZE;
dev->vec.bv_offset = 0; dev->vec.bv_offset = 0;
...@@ -1447,6 +1448,7 @@ static void handle_stripe(struct stripe_head *sh) ...@@ -1447,6 +1448,7 @@ static void handle_stripe(struct stripe_head *sh)
bi->bi_sector = sh->sector + rdev->data_offset; bi->bi_sector = sh->sector + rdev->data_offset;
bi->bi_flags = 1 << BIO_UPTODATE; bi->bi_flags = 1 << BIO_UPTODATE;
bi->bi_vcnt = 1; bi->bi_vcnt = 1;
bi->bi_max_vecs = 1;
bi->bi_idx = 0; bi->bi_idx = 0;
bi->bi_io_vec = &sh->dev[i].vec; bi->bi_io_vec = &sh->dev[i].vec;
bi->bi_io_vec[0].bv_len = STRIPE_SIZE; bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment