aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/raid1.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 2b9e86ceaf2f..b9d6da1272f1 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -1282,6 +1282,7 @@ static int fix_sync_read_error(r1bio_t *r1_bio)
1282 idx ++; 1282 idx ++;
1283 } 1283 }
1284 set_bit(R1BIO_Uptodate, &r1_bio->state); 1284 set_bit(R1BIO_Uptodate, &r1_bio->state);
1285 set_bit(BIO_UPTODATE, &bio->bi_flags);
1285 return 1; 1286 return 1;
1286} 1287}
1287 1288
@@ -1299,15 +1300,6 @@ static int process_checks(r1bio_t *r1_bio)
1299 int primary; 1300 int primary;
1300 int i; 1301 int i;
1301 1302
1302 if (!test_bit(R1BIO_Uptodate, &r1_bio->state)) {
1303 for (i=0; i < conf->raid_disks; i++)
1304 if (r1_bio->bios[i]->bi_end_io == end_sync_read)
1305 md_error(mddev, conf->mirrors[i].rdev);
1306
1307 md_done_sync(mddev, r1_bio->sectors, 1);
1308 put_buf(r1_bio);
1309 return -1;
1310 }
1311 for (primary = 0; primary < conf->raid_disks; primary++) 1303 for (primary = 0; primary < conf->raid_disks; primary++)
1312 if (r1_bio->bios[primary]->bi_end_io == end_sync_read && 1304 if (r1_bio->bios[primary]->bi_end_io == end_sync_read &&
1313 test_bit(BIO_UPTODATE, &r1_bio->bios[primary]->bi_flags)) { 1305 test_bit(BIO_UPTODATE, &r1_bio->bios[primary]->bi_flags)) {
@@ -1385,15 +1377,14 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
1385 1377
1386 bio = r1_bio->bios[r1_bio->read_disk]; 1378 bio = r1_bio->bios[r1_bio->read_disk];
1387 1379
1388
1389 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
1390 if (process_checks(r1_bio) < 0)
1391 return;
1392
1393 if (!test_bit(R1BIO_Uptodate, &r1_bio->state)) 1380 if (!test_bit(R1BIO_Uptodate, &r1_bio->state))
1394 /* ouch - failed to read all of that. */ 1381 /* ouch - failed to read all of that. */
1395 if (!fix_sync_read_error(r1_bio)) 1382 if (!fix_sync_read_error(r1_bio))
1396 return; 1383 return;
1384
1385 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
1386 if (process_checks(r1_bio) < 0)
1387 return;
1397 /* 1388 /*
1398 * schedule writes 1389 * schedule writes
1399 */ 1390 */