diff options
-rw-r--r-- | drivers/md/raid1.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 3cb0872a845d..9b374c91db66 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -1135,8 +1135,19 @@ static int end_sync_write(struct bio *bio, unsigned int bytes_done, int error) | |||
1135 | mirror = i; | 1135 | mirror = i; |
1136 | break; | 1136 | break; |
1137 | } | 1137 | } |
1138 | if (!uptodate) | 1138 | if (!uptodate) { |
1139 | int sync_blocks = 0; | ||
1140 | sector_t s = r1_bio->sector; | ||
1141 | long sectors_to_go = r1_bio->sectors; | ||
1142 | /* make sure these bits doesn't get cleared. */ | ||
1143 | do { | ||
1144 | bitmap_end_sync(mddev->bitmap, r1_bio->sector, | ||
1145 | &sync_blocks, 1); | ||
1146 | s += sync_blocks; | ||
1147 | sectors_to_go -= sync_blocks; | ||
1148 | } while (sectors_to_go > 0); | ||
1139 | md_error(mddev, conf->mirrors[mirror].rdev); | 1149 | md_error(mddev, conf->mirrors[mirror].rdev); |
1150 | } | ||
1140 | 1151 | ||
1141 | update_head_pos(mirror, r1_bio); | 1152 | update_head_pos(mirror, r1_bio); |
1142 | 1153 | ||