diff options
author | NeilBrown <neilb@suse.de> | 2012-04-01 19:39:05 +0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-04-03 09:39:23 +0400 |
commit | 5020ad7d143ccfcf8149974096220d59e5572120 (patch) | |
tree | 0124b6866ecd63b3a8913a6661e1d96699d60b71 /drivers/md/raid10.c | |
parent | c6d2e084c7411f61f2b446d94989e5aaf9879b0f (diff) | |
download | linux-5020ad7d143ccfcf8149974096220d59e5572120.tar.xz |
md/raid1,raid10: don't compare excess byte during consistency check.
When comparing two pages read from different legs of a mirror, only
compare the bytes that were read, not the whole page.
In most cases we read a whole page, but in some cases with
bad blocks or odd sizes devices we might read fewer than that.
This bug has been present "forever" but at worst it might cause
a report of two many mismatches and generate a little bit
extra resync IO, so there is no need to back-port to -stable
kernels.
Reported-by: majianpeng <majianpeng@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r-- | drivers/md/raid10.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 3540316886f2..fff782189e48 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1821,7 +1821,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio) for (j = 0; j < vcnt; j++) if (memcmp(page_address(fbio->bi_io_vec[j].bv_page), page_address(tbio->bi_io_vec[j].bv_page), - PAGE_SIZE)) + fbio->bi_io_vec[j].bv_len)) break; if (j == vcnt) continue; |