]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix *_mergeable_bvec routines for linear/raid0.
authorNeil Brown <neilb@cse.unsw.edu.au>
Thu, 21 Nov 2002 06:43:38 +0000 (22:43 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Thu, 21 Nov 2002 06:43:38 +0000 (22:43 -0800)
They take the length of the passed bvec into account, which is wrong.

drivers/md/linear.c
drivers/md/raid0.c

index 66db51bcd9c43c4a7ca5c80b7e3d8c98c43d002a..f996046ad4081b369dfa7a349b02e4218bd1322c 100644 (file)
@@ -58,15 +58,12 @@ static int linear_mergeable_bvec(request_queue_t *q, struct bio *bio, struct bio
 {
        mddev_t *mddev = q->queuedata;
        dev_info_t *dev0;
-       int maxsectors, bio_sectors = (bio->bi_size + biovec->bv_len) >> 9;
+       unsigned long maxsectors, bio_sectors = bio->bi_size >> 9;
 
        dev0 = which_dev(mddev, bio->bi_sector);
        maxsectors = (dev0->size << 1) - (bio->bi_sector - (dev0->offset<<1));
 
-       if (bio_sectors <= maxsectors)
-               return biovec->bv_len;
-
-       return (maxsectors << 9) - bio->bi_size;
+       return (maxsectors - bio_sectors) << 9;
 }
 
 static int linear_run (mddev_t *mddev)
index 69188e7a78f0176bae8aae712a646878e27b83dd..a3d14004c2b7f3e18e4e7d5813ea4044ff7b44f4 100644 (file)
@@ -173,15 +173,15 @@ static int create_strip_zones (mddev_t *mddev)
 static int raid0_mergeable_bvec(request_queue_t *q, struct bio *bio, struct bio_vec *biovec)
 {
        mddev_t *mddev = q->queuedata;
-       sector_t block;
-       unsigned int chunk_size;
-       unsigned int bio_sz;
+       sector_t sector;
+       unsigned int chunk_sectors;
+       unsigned int bio_sectors;
 
-       chunk_size = mddev->chunk_size >> 10;
-       block = bio->bi_sector >> 1;
-       bio_sz = (bio->bi_size + biovec->bv_len) >> 10;
+       chunk_sectors = mddev->chunk_size >> 9;
+       sector = bio->bi_sector;
+       bio_sectors = bio->bi_size >> 9;
 
-       return (chunk_size - ((block & (chunk_size - 1)) + bio_sz)) << 10;
+       return (chunk_sectors - ((sector & (chunk_sectors - 1)) + bio_sectors)) << 9;
 }
 
 static int raid0_run (mddev_t *mddev)