diff options
author | Namhyung Kim <namhyung@gmail.com> | 2011-07-27 11:00:36 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-07-27 11:00:36 +1000 |
commit | 9d3d80113df824a266c5db3fac357a036ebc0b62 (patch) | |
tree | 26607a8761b06cfc05e4259a6609a48d9dab3f26 /drivers/md | |
parent | 65a06f06744d3deae61f3596566952a8da92199f (diff) | |
download | lwn-9d3d80113df824a266c5db3fac357a036ebc0b62.tar.gz lwn-9d3d80113df824a266c5db3fac357a036ebc0b62.zip |
md/raid1: move rdev->corrected_errors counting
Read errors are considered to corrected if write-back and re-read
cycle is finished without further problems. Thus moving the rdev->
corrected_errors counting after the re-reading looks more reasonable
IMHO. Also included a couple of whitespace fixes on sync_page_io().
Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/raid1.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 44069b38d6dd..a7e69081187f 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1224,9 +1224,7 @@ static int fix_sync_read_error(r1bio_t *r1_bio) * active, and resync is currently active */ rdev = conf->mirrors[d].rdev; - if (sync_page_io(rdev, - sect, - s<<9, + if (sync_page_io(rdev, sect, s<<9, bio->bi_io_vec[idx].bv_page, READ, false)) { success = 1; @@ -1261,16 +1259,13 @@ static int fix_sync_read_error(r1bio_t *r1_bio) if (r1_bio->bios[d]->bi_end_io != end_sync_read) continue; rdev = conf->mirrors[d].rdev; - if (sync_page_io(rdev, - sect, - s<<9, + if (sync_page_io(rdev, sect, s<<9, bio->bi_io_vec[idx].bv_page, WRITE, false) == 0) { r1_bio->bios[d]->bi_end_io = NULL; rdev_dec_pending(rdev, mddev); md_error(mddev, rdev); - } else - atomic_add(s, &rdev->corrected_errors); + } } d = start; while (d != r1_bio->read_disk) { @@ -1280,12 +1275,12 @@ static int fix_sync_read_error(r1bio_t *r1_bio) if (r1_bio->bios[d]->bi_end_io != end_sync_read) continue; rdev = conf->mirrors[d].rdev; - if (sync_page_io(rdev, - sect, - s<<9, + if (sync_page_io(rdev, sect, s<<9, bio->bi_io_vec[idx].bv_page, READ, false) == 0) md_error(mddev, rdev); + else + atomic_add(s, &rdev->corrected_errors); } sectors -= s; sect += s; |