aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c12
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 */