diff options
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r-- | drivers/md/raid1.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index cead918578a7..87bfe9e7d8ca 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -1145,7 +1145,7 @@ static int end_sync_write(struct bio *bio, unsigned int bytes_done, int error) | |||
1145 | long sectors_to_go = r1_bio->sectors; | 1145 | long sectors_to_go = r1_bio->sectors; |
1146 | /* make sure these bits doesn't get cleared. */ | 1146 | /* make sure these bits doesn't get cleared. */ |
1147 | do { | 1147 | do { |
1148 | bitmap_end_sync(mddev->bitmap, r1_bio->sector, | 1148 | bitmap_end_sync(mddev->bitmap, s, |
1149 | &sync_blocks, 1); | 1149 | &sync_blocks, 1); |
1150 | s += sync_blocks; | 1150 | s += sync_blocks; |
1151 | sectors_to_go -= sync_blocks; | 1151 | sectors_to_go -= sync_blocks; |
@@ -1509,6 +1509,9 @@ static void raid1d(mddev_t *mddev) | |||
1509 | s<<9, conf->tmppage, READ) == 0) | 1509 | s<<9, conf->tmppage, READ) == 0) |
1510 | /* Well, this device is dead */ | 1510 | /* Well, this device is dead */ |
1511 | md_error(mddev, rdev); | 1511 | md_error(mddev, rdev); |
1512 | else | ||
1513 | printk(KERN_INFO "raid1:%s: read error corrected (%d sectors at %llu on %s)\n", | ||
1514 | mdname(mddev), s, (unsigned long long)(sect + rdev->data_offset), bdevname(rdev->bdev, b)); | ||
1512 | } | 1515 | } |
1513 | } | 1516 | } |
1514 | } else { | 1517 | } else { |
@@ -1622,15 +1625,16 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i | |||
1622 | return 0; | 1625 | return 0; |
1623 | } | 1626 | } |
1624 | 1627 | ||
1625 | /* before building a request, check if we can skip these blocks.. | ||
1626 | * This call the bitmap_start_sync doesn't actually record anything | ||
1627 | */ | ||
1628 | if (mddev->bitmap == NULL && | 1628 | if (mddev->bitmap == NULL && |
1629 | mddev->recovery_cp == MaxSector && | 1629 | mddev->recovery_cp == MaxSector && |
1630 | !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && | ||
1630 | conf->fullsync == 0) { | 1631 | conf->fullsync == 0) { |
1631 | *skipped = 1; | 1632 | *skipped = 1; |
1632 | return max_sector - sector_nr; | 1633 | return max_sector - sector_nr; |
1633 | } | 1634 | } |
1635 | /* before building a request, check if we can skip these blocks.. | ||
1636 | * This call the bitmap_start_sync doesn't actually record anything | ||
1637 | */ | ||
1634 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) && | 1638 | if (!bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks, 1) && |
1635 | !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { | 1639 | !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { |
1636 | /* We can skip this block, and probably several more */ | 1640 | /* We can skip this block, and probably several more */ |