forked from Minki/linux
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>
This commit is contained in:
parent
c6d2e084c7
commit
5020ad7d14
@ -1738,7 +1738,7 @@ static int process_checks(struct r1bio *r1_bio)
|
||||
s = sbio->bi_io_vec[j].bv_page;
|
||||
if (memcmp(page_address(p),
|
||||
page_address(s),
|
||||
PAGE_SIZE))
|
||||
sbio->bi_io_vec[j].bv_len))
|
||||
break;
|
||||
}
|
||||
} else
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user