Skip to content

Commit

Permalink
md: raid1: retrieve page from pre-allocated resync page array
Browse files Browse the repository at this point in the history
Now one page array is allocated for each resync bio, and we can
retrieve page from this table directly.

Signed-off-by: Ming Lei <[email protected]>
Signed-off-by: Shaohua Li <[email protected]>
  • Loading branch information
ming1 authored and shligit committed Mar 24, 2017
1 parent 98d30c5 commit 44cf0f4
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/md/raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -1973,6 +1973,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
struct mddev *mddev = r1_bio->mddev;
struct r1conf *conf = mddev->private;
struct bio *bio = r1_bio->bios[r1_bio->read_disk];
struct page **pages = get_resync_pages(bio)->pages;
sector_t sect = r1_bio->sector;
int sectors = r1_bio->sectors;
int idx = 0;
Expand Down Expand Up @@ -2006,7 +2007,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
*/
rdev = conf->mirrors[d].rdev;
if (sync_page_io(rdev, sect, s<<9,
bio->bi_io_vec[idx].bv_page,
pages[idx],
REQ_OP_READ, 0, false)) {
success = 1;
break;
Expand Down Expand Up @@ -2061,7 +2062,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
continue;
rdev = conf->mirrors[d].rdev;
if (r1_sync_page_io(rdev, sect, s,
bio->bi_io_vec[idx].bv_page,
pages[idx],
WRITE) == 0) {
r1_bio->bios[d]->bi_end_io = NULL;
rdev_dec_pending(rdev, mddev);
Expand All @@ -2076,7 +2077,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
continue;
rdev = conf->mirrors[d].rdev;
if (r1_sync_page_io(rdev, sect, s,
bio->bi_io_vec[idx].bv_page,
pages[idx],
READ) != 0)
atomic_add(s, &rdev->corrected_errors);
}
Expand Down Expand Up @@ -2152,6 +2153,8 @@ static void process_checks(struct r1bio *r1_bio)
struct bio *pbio = r1_bio->bios[primary];
struct bio *sbio = r1_bio->bios[i];
int error = sbio->bi_error;
struct page **ppages = get_resync_pages(pbio)->pages;
struct page **spages = get_resync_pages(sbio)->pages;

if (sbio->bi_end_io != end_sync_read)
continue;
Expand All @@ -2160,11 +2163,8 @@ static void process_checks(struct r1bio *r1_bio)

if (!error) {
for (j = vcnt; j-- ; ) {
struct page *p, *s;
p = pbio->bi_io_vec[j].bv_page;
s = sbio->bi_io_vec[j].bv_page;
if (memcmp(page_address(p),
page_address(s),
if (memcmp(page_address(ppages[j]),
page_address(spages[j]),
sbio->bi_io_vec[j].bv_len))
break;
}
Expand Down

0 comments on commit 44cf0f4

Please sign in to comment.