diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-05-16 21:53:15 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-17 07:59:11 -0700 |
commit | 29ac8e056f2016a8404edc02749d095019aa1f82 (patch) | |
tree | e397738144d80b3c3d78edde36ab739892f4d3dc /drivers/md/linear.c | |
parent | 8f332287bc3f2801ba43682fd79baf24dc8ac1ce (diff) | |
download | linux-29ac8e056f2016a8404edc02749d095019aa1f82.tar.gz linux-29ac8e056f2016a8404edc02749d095019aa1f82.tar.bz2 linux-29ac8e056f2016a8404edc02749d095019aa1f82.zip |
[PATCH] md: fix splitting of md/linear request that cross a device boundary
When a request crosses a boundary between devices, it needs to be split.
But where we should calculate the amount of the request before the boundary
to find the split-point, we care currently calculating the amount that is
*after* the boundary !!!
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/linear.c')
-rw-r--r-- | drivers/md/linear.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/md/linear.c b/drivers/md/linear.c index 161e9aa87291..b1941b887f46 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c @@ -269,9 +269,8 @@ static int linear_make_request (request_queue_t *q, struct bio *bio) * split it. */ struct bio_pair *bp; - bp = bio_split(bio, bio_split_pool, - (bio->bi_sector + (bio->bi_size >> 9) - - (tmp_dev->offset + tmp_dev->size))<<1); + bp = bio_split(bio, bio_split_pool, + ((tmp_dev->offset + tmp_dev->size)<<1) - bio->bi_sector); if (linear_make_request(q, &bp->bio1)) generic_make_request(&bp->bio1); if (linear_make_request(q, &bp->bio2)) |