]> git.hungrycats.org Git - linux/commitdiff
[PATCH] dm: fix bio duplication
authorJoe Thornber <joe@fib011235813.fsnet.co.uk>
Mon, 16 Dec 2002 01:16:58 +0000 (17:16 -0800)
committerLinus Torvalds <torvalds@home.transmeta.com>
Mon, 16 Dec 2002 01:16:58 +0000 (17:16 -0800)
Some fields in the duplicated bio weren't being set up properly in
__split_page(). [Kevin Corry]

drivers/md/dm.c

index 0564dcd9611654bf598e8e86e5e9bab318d21f53..94dd1b6f4c44b716f817327092137d57003ed5d0 100644 (file)
@@ -337,7 +337,7 @@ static void __split_page(struct clone_info *ci, unsigned int len)
 {
        struct dm_target *ti = dm_table_find_target(ci->md->map, ci->sector);
        struct bio *clone, *bio = ci->bio;
-       struct bio_vec *bv = bio->bi_io_vec + (bio->bi_vcnt - 1);
+       struct bio_vec *bv = bio->bi_io_vec + ci->idx;
 
        DMWARN("splitting page");
 
@@ -349,11 +349,13 @@ static void __split_page(struct clone_info *ci, unsigned int len)
 
        clone->bi_sector = ci->sector;
        clone->bi_bdev = bio->bi_bdev;
-       clone->bi_flags = bio->bi_flags | (1 << BIO_SEG_VALID);
        clone->bi_rw = bio->bi_rw;
+       clone->bi_vcnt = 1;
        clone->bi_size = len << SECTOR_SHIFT;
        clone->bi_end_io = clone_endio;
        clone->bi_private = ci->io;
+       clone->bi_io_vec->bv_offset = bv->bv_len - clone->bi_size;
+       clone->bi_io_vec->bv_len = clone->bi_size;
 
        ci->sector += len;
        ci->sector_count -= len;