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.c174
1 files changed, 131 insertions, 43 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index ede2461e79c5..cc24f0cb7ee3 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -135,7 +135,7 @@ out_free_pages:
135 put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page); 135 put_page(r1_bio->bios[j]->bi_io_vec[i].bv_page);
136 j = -1; 136 j = -1;
137out_free_bio: 137out_free_bio:
138 while ( ++j < pi->raid_disks ) 138 while (++j < pi->raid_disks)
139 bio_put(r1_bio->bios[j]); 139 bio_put(r1_bio->bios[j]);
140 r1bio_pool_free(r1_bio, data); 140 r1bio_pool_free(r1_bio, data);
141 return NULL; 141 return NULL;
@@ -164,7 +164,7 @@ static void put_all_bios(struct r1conf *conf, struct r1bio *r1_bio)
164{ 164{
165 int i; 165 int i;
166 166
167 for (i = 0; i < conf->raid_disks; i++) { 167 for (i = 0; i < conf->raid_disks * 2; i++) {
168 struct bio **bio = r1_bio->bios + i; 168 struct bio **bio = r1_bio->bios + i;
169 if (!BIO_SPECIAL(*bio)) 169 if (!BIO_SPECIAL(*bio))
170 bio_put(*bio); 170 bio_put(*bio);
@@ -185,7 +185,7 @@ static void put_buf(struct r1bio *r1_bio)
185 struct r1conf *conf = r1_bio->mddev->private; 185 struct r1conf *conf = r1_bio->mddev->private;
186 int i; 186 int i;
187 187
188 for (i=0; i<conf->raid_disks; i++) { 188 for (i = 0; i < conf->raid_disks * 2; i++) {
189 struct bio *bio = r1_bio->bios[i]; 189 struct bio *bio = r1_bio->bios[i];
190 if (bio->bi_end_io) 190 if (bio->bi_end_io)
191 rdev_dec_pending(conf->mirrors[i].rdev, r1_bio->mddev); 191 rdev_dec_pending(conf->mirrors[i].rdev, r1_bio->mddev);
@@ -277,13 +277,14 @@ static inline void update_head_pos(int disk, struct r1bio *r1_bio)
277static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio) 277static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio)
278{ 278{
279 int mirror; 279 int mirror;
280 int raid_disks = r1_bio->mddev->raid_disks; 280 struct r1conf *conf = r1_bio->mddev->private;
281 int raid_disks = conf->raid_disks;
281 282
282 for (mirror = 0; mirror < raid_disks; mirror++) 283 for (mirror = 0; mirror < raid_disks * 2; mirror++)
283 if (r1_bio->bios[mirror] == bio) 284 if (r1_bio->bios[mirror] == bio)
284 break; 285 break;
285 286
286 BUG_ON(mirror == raid_disks); 287 BUG_ON(mirror == raid_disks * 2);
287 update_head_pos(mirror, r1_bio); 288 update_head_pos(mirror, r1_bio);
288 289
289 return mirror; 290 return mirror;
@@ -390,6 +391,11 @@ static void raid1_end_write_request(struct bio *bio, int error)
390 if (!uptodate) { 391 if (!uptodate) {
391 set_bit(WriteErrorSeen, 392 set_bit(WriteErrorSeen,
392 &conf->mirrors[mirror].rdev->flags); 393 &conf->mirrors[mirror].rdev->flags);
394 if (!test_and_set_bit(WantReplacement,
395 &conf->mirrors[mirror].rdev->flags))
396 set_bit(MD_RECOVERY_NEEDED, &
397 conf->mddev->recovery);
398
393 set_bit(R1BIO_WriteError, &r1_bio->state); 399 set_bit(R1BIO_WriteError, &r1_bio->state);
394 } else { 400 } else {
395 /* 401 /*
@@ -505,7 +511,7 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
505 start_disk = conf->last_used; 511 start_disk = conf->last_used;
506 } 512 }
507 513
508 for (i = 0 ; i < conf->raid_disks ; i++) { 514 for (i = 0 ; i < conf->raid_disks * 2 ; i++) {
509 sector_t dist; 515 sector_t dist;
510 sector_t first_bad; 516 sector_t first_bad;
511 int bad_sectors; 517 int bad_sectors;
@@ -609,7 +615,7 @@ int md_raid1_congested(struct mddev *mddev, int bits)
609 return 1; 615 return 1;
610 616
611 rcu_read_lock(); 617 rcu_read_lock();
612 for (i = 0; i < mddev->raid_disks; i++) { 618 for (i = 0; i < conf->raid_disks; i++) {
613 struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev); 619 struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
614 if (rdev && !test_bit(Faulty, &rdev->flags)) { 620 if (rdev && !test_bit(Faulty, &rdev->flags)) {
615 struct request_queue *q = bdev_get_queue(rdev->bdev); 621 struct request_queue *q = bdev_get_queue(rdev->bdev);
@@ -974,7 +980,7 @@ read_again:
974 */ 980 */
975 plugged = mddev_check_plugged(mddev); 981 plugged = mddev_check_plugged(mddev);
976 982
977 disks = conf->raid_disks; 983 disks = conf->raid_disks * 2;
978 retry_write: 984 retry_write:
979 blocked_rdev = NULL; 985 blocked_rdev = NULL;
980 rcu_read_lock(); 986 rcu_read_lock();
@@ -988,7 +994,8 @@ read_again:
988 } 994 }
989 r1_bio->bios[i] = NULL; 995 r1_bio->bios[i] = NULL;
990 if (!rdev || test_bit(Faulty, &rdev->flags)) { 996 if (!rdev || test_bit(Faulty, &rdev->flags)) {
991 set_bit(R1BIO_Degraded, &r1_bio->state); 997 if (i < conf->raid_disks)
998 set_bit(R1BIO_Degraded, &r1_bio->state);
992 continue; 999 continue;
993 } 1000 }
994 1001
@@ -1263,6 +1270,25 @@ static int raid1_spare_active(struct mddev *mddev)
1263 */ 1270 */
1264 for (i = 0; i < conf->raid_disks; i++) { 1271 for (i = 0; i < conf->raid_disks; i++) {
1265 struct md_rdev *rdev = conf->mirrors[i].rdev; 1272 struct md_rdev *rdev = conf->mirrors[i].rdev;
1273 struct md_rdev *repl = conf->mirrors[conf->raid_disks + i].rdev;
1274 if (repl
1275 && repl->recovery_offset == MaxSector
1276 && !test_bit(Faulty, &repl->flags)
1277 && !test_and_set_bit(In_sync, &repl->flags)) {
1278 /* replacement has just become active */
1279 if (!rdev ||
1280 !test_and_clear_bit(In_sync, &rdev->flags))
1281 count++;
1282 if (rdev) {
1283 /* Replaced device not technically
1284 * faulty, but we need to be sure
1285 * it gets removed and never re-added
1286 */
1287 set_bit(Faulty, &rdev->flags);
1288 sysfs_notify_dirent_safe(
1289 rdev->sysfs_state);
1290 }
1291 }
1266 if (rdev 1292 if (rdev
1267 && !test_bit(Faulty, &rdev->flags) 1293 && !test_bit(Faulty, &rdev->flags)
1268 && !test_and_set_bit(In_sync, &rdev->flags)) { 1294 && !test_and_set_bit(In_sync, &rdev->flags)) {
@@ -1286,7 +1312,7 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
1286 int mirror = 0; 1312 int mirror = 0;
1287 struct mirror_info *p; 1313 struct mirror_info *p;
1288 int first = 0; 1314 int first = 0;
1289 int last = mddev->raid_disks - 1; 1315 int last = conf->raid_disks - 1;
1290 1316
1291 if (mddev->recovery_disabled == conf->recovery_disabled) 1317 if (mddev->recovery_disabled == conf->recovery_disabled)
1292 return -EBUSY; 1318 return -EBUSY;
@@ -1294,8 +1320,9 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
1294 if (rdev->raid_disk >= 0) 1320 if (rdev->raid_disk >= 0)
1295 first = last = rdev->raid_disk; 1321 first = last = rdev->raid_disk;
1296 1322
1297 for (mirror = first; mirror <= last; mirror++) 1323 for (mirror = first; mirror <= last; mirror++) {
1298 if ( !(p=conf->mirrors+mirror)->rdev) { 1324 p = conf->mirrors+mirror;
1325 if (!p->rdev) {
1299 1326
1300 disk_stack_limits(mddev->gendisk, rdev->bdev, 1327 disk_stack_limits(mddev->gendisk, rdev->bdev,
1301 rdev->data_offset << 9); 1328 rdev->data_offset << 9);
@@ -1322,21 +1349,35 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
1322 rcu_assign_pointer(p->rdev, rdev); 1349 rcu_assign_pointer(p->rdev, rdev);
1323 break; 1350 break;
1324 } 1351 }
1352 if (test_bit(WantReplacement, &p->rdev->flags) &&
1353 p[conf->raid_disks].rdev == NULL) {
1354 /* Add this device as a replacement */
1355 clear_bit(In_sync, &rdev->flags);
1356 set_bit(Replacement, &rdev->flags);
1357 rdev->raid_disk = mirror;
1358 err = 0;
1359 conf->fullsync = 1;
1360 rcu_assign_pointer(p[conf->raid_disks].rdev, rdev);
1361 break;
1362 }
1363 }
1325 md_integrity_add_rdev(rdev, mddev); 1364 md_integrity_add_rdev(rdev, mddev);
1326 print_conf(conf); 1365 print_conf(conf);
1327 return err; 1366 return err;
1328} 1367}
1329 1368
1330static int raid1_remove_disk(struct mddev *mddev, int number) 1369static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
1331{ 1370{
1332 struct r1conf *conf = mddev->private; 1371 struct r1conf *conf = mddev->private;
1333 int err = 0; 1372 int err = 0;
1334 struct md_rdev *rdev; 1373 int number = rdev->raid_disk;
1335 struct mirror_info *p = conf->mirrors+ number; 1374 struct mirror_info *p = conf->mirrors+ number;
1336 1375
1376 if (rdev != p->rdev)
1377 p = conf->mirrors + conf->raid_disks + number;
1378
1337 print_conf(conf); 1379 print_conf(conf);
1338 rdev = p->rdev; 1380 if (rdev == p->rdev) {
1339 if (rdev) {
1340 if (test_bit(In_sync, &rdev->flags) || 1381 if (test_bit(In_sync, &rdev->flags) ||
1341 atomic_read(&rdev->nr_pending)) { 1382 atomic_read(&rdev->nr_pending)) {
1342 err = -EBUSY; 1383 err = -EBUSY;
@@ -1358,7 +1399,21 @@ static int raid1_remove_disk(struct mddev *mddev, int number)
1358 err = -EBUSY; 1399 err = -EBUSY;
1359 p->rdev = rdev; 1400 p->rdev = rdev;
1360 goto abort; 1401 goto abort;
1361 } 1402 } else if (conf->mirrors[conf->raid_disks + number].rdev) {
1403 /* We just removed a device that is being replaced.
1404 * Move down the replacement. We drain all IO before
1405 * doing this to avoid confusion.
1406 */
1407 struct md_rdev *repl =
1408 conf->mirrors[conf->raid_disks + number].rdev;
1409 raise_barrier(conf);
1410 clear_bit(Replacement, &repl->flags);
1411 p->rdev = repl;
1412 conf->mirrors[conf->raid_disks + number].rdev = NULL;
1413 lower_barrier(conf);
1414 clear_bit(WantReplacement, &rdev->flags);
1415 } else
1416 clear_bit(WantReplacement, &rdev->flags);
1362 err = md_integrity_register(mddev); 1417 err = md_integrity_register(mddev);
1363 } 1418 }
1364abort: 1419abort:
@@ -1411,6 +1466,10 @@ static void end_sync_write(struct bio *bio, int error)
1411 } while (sectors_to_go > 0); 1466 } while (sectors_to_go > 0);
1412 set_bit(WriteErrorSeen, 1467 set_bit(WriteErrorSeen,
1413 &conf->mirrors[mirror].rdev->flags); 1468 &conf->mirrors[mirror].rdev->flags);
1469 if (!test_and_set_bit(WantReplacement,
1470 &conf->mirrors[mirror].rdev->flags))
1471 set_bit(MD_RECOVERY_NEEDED, &
1472 mddev->recovery);
1414 set_bit(R1BIO_WriteError, &r1_bio->state); 1473 set_bit(R1BIO_WriteError, &r1_bio->state);
1415 } else if (is_badblock(conf->mirrors[mirror].rdev, 1474 } else if (is_badblock(conf->mirrors[mirror].rdev,
1416 r1_bio->sector, 1475 r1_bio->sector,
@@ -1441,8 +1500,13 @@ static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
1441 if (sync_page_io(rdev, sector, sectors << 9, page, rw, false)) 1500 if (sync_page_io(rdev, sector, sectors << 9, page, rw, false))
1442 /* success */ 1501 /* success */
1443 return 1; 1502 return 1;
1444 if (rw == WRITE) 1503 if (rw == WRITE) {
1445 set_bit(WriteErrorSeen, &rdev->flags); 1504 set_bit(WriteErrorSeen, &rdev->flags);
1505 if (!test_and_set_bit(WantReplacement,
1506 &rdev->flags))
1507 set_bit(MD_RECOVERY_NEEDED, &
1508 rdev->mddev->recovery);
1509 }
1446 /* need to record an error - either for the block or the device */ 1510 /* need to record an error - either for the block or the device */
1447 if (!rdev_set_badblocks(rdev, sector, sectors, 0)) 1511 if (!rdev_set_badblocks(rdev, sector, sectors, 0))
1448 md_error(rdev->mddev, rdev); 1512 md_error(rdev->mddev, rdev);
@@ -1493,7 +1557,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
1493 } 1557 }
1494 } 1558 }
1495 d++; 1559 d++;
1496 if (d == conf->raid_disks) 1560 if (d == conf->raid_disks * 2)
1497 d = 0; 1561 d = 0;
1498 } while (!success && d != r1_bio->read_disk); 1562 } while (!success && d != r1_bio->read_disk);
1499 1563
@@ -1510,7 +1574,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
1510 mdname(mddev), 1574 mdname(mddev),
1511 bdevname(bio->bi_bdev, b), 1575 bdevname(bio->bi_bdev, b),
1512 (unsigned long long)r1_bio->sector); 1576 (unsigned long long)r1_bio->sector);
1513 for (d = 0; d < conf->raid_disks; d++) { 1577 for (d = 0; d < conf->raid_disks * 2; d++) {
1514 rdev = conf->mirrors[d].rdev; 1578 rdev = conf->mirrors[d].rdev;
1515 if (!rdev || test_bit(Faulty, &rdev->flags)) 1579 if (!rdev || test_bit(Faulty, &rdev->flags))
1516 continue; 1580 continue;
@@ -1536,7 +1600,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
1536 /* write it back and re-read */ 1600 /* write it back and re-read */
1537 while (d != r1_bio->read_disk) { 1601 while (d != r1_bio->read_disk) {
1538 if (d == 0) 1602 if (d == 0)
1539 d = conf->raid_disks; 1603 d = conf->raid_disks * 2;
1540 d--; 1604 d--;
1541 if (r1_bio->bios[d]->bi_end_io != end_sync_read) 1605 if (r1_bio->bios[d]->bi_end_io != end_sync_read)
1542 continue; 1606 continue;
@@ -1551,7 +1615,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
1551 d = start; 1615 d = start;
1552 while (d != r1_bio->read_disk) { 1616 while (d != r1_bio->read_disk) {
1553 if (d == 0) 1617 if (d == 0)
1554 d = conf->raid_disks; 1618 d = conf->raid_disks * 2;
1555 d--; 1619 d--;
1556 if (r1_bio->bios[d]->bi_end_io != end_sync_read) 1620 if (r1_bio->bios[d]->bi_end_io != end_sync_read)
1557 continue; 1621 continue;
@@ -1584,7 +1648,7 @@ static int process_checks(struct r1bio *r1_bio)
1584 int primary; 1648 int primary;
1585 int i; 1649 int i;
1586 1650
1587 for (primary = 0; primary < conf->raid_disks; primary++) 1651 for (primary = 0; primary < conf->raid_disks * 2; primary++)
1588 if (r1_bio->bios[primary]->bi_end_io == end_sync_read && 1652 if (r1_bio->bios[primary]->bi_end_io == end_sync_read &&
1589 test_bit(BIO_UPTODATE, &r1_bio->bios[primary]->bi_flags)) { 1653 test_bit(BIO_UPTODATE, &r1_bio->bios[primary]->bi_flags)) {
1590 r1_bio->bios[primary]->bi_end_io = NULL; 1654 r1_bio->bios[primary]->bi_end_io = NULL;
@@ -1592,7 +1656,7 @@ static int process_checks(struct r1bio *r1_bio)
1592 break; 1656 break;
1593 } 1657 }
1594 r1_bio->read_disk = primary; 1658 r1_bio->read_disk = primary;
1595 for (i = 0; i < conf->raid_disks; i++) { 1659 for (i = 0; i < conf->raid_disks * 2; i++) {
1596 int j; 1660 int j;
1597 int vcnt = r1_bio->sectors >> (PAGE_SHIFT- 9); 1661 int vcnt = r1_bio->sectors >> (PAGE_SHIFT- 9);
1598 struct bio *pbio = r1_bio->bios[primary]; 1662 struct bio *pbio = r1_bio->bios[primary];
@@ -1656,7 +1720,7 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
1656{ 1720{
1657 struct r1conf *conf = mddev->private; 1721 struct r1conf *conf = mddev->private;
1658 int i; 1722 int i;
1659 int disks = conf->raid_disks; 1723 int disks = conf->raid_disks * 2;
1660 struct bio *bio, *wbio; 1724 struct bio *bio, *wbio;
1661 1725
1662 bio = r1_bio->bios[r1_bio->read_disk]; 1726 bio = r1_bio->bios[r1_bio->read_disk];
@@ -1737,7 +1801,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
1737 success = 1; 1801 success = 1;
1738 else { 1802 else {
1739 d++; 1803 d++;
1740 if (d == conf->raid_disks) 1804 if (d == conf->raid_disks * 2)
1741 d = 0; 1805 d = 0;
1742 } 1806 }
1743 } while (!success && d != read_disk); 1807 } while (!success && d != read_disk);
@@ -1753,7 +1817,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
1753 start = d; 1817 start = d;
1754 while (d != read_disk) { 1818 while (d != read_disk) {
1755 if (d==0) 1819 if (d==0)
1756 d = conf->raid_disks; 1820 d = conf->raid_disks * 2;
1757 d--; 1821 d--;
1758 rdev = conf->mirrors[d].rdev; 1822 rdev = conf->mirrors[d].rdev;
1759 if (rdev && 1823 if (rdev &&
@@ -1765,7 +1829,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
1765 while (d != read_disk) { 1829 while (d != read_disk) {
1766 char b[BDEVNAME_SIZE]; 1830 char b[BDEVNAME_SIZE];
1767 if (d==0) 1831 if (d==0)
1768 d = conf->raid_disks; 1832 d = conf->raid_disks * 2;
1769 d--; 1833 d--;
1770 rdev = conf->mirrors[d].rdev; 1834 rdev = conf->mirrors[d].rdev;
1771 if (rdev && 1835 if (rdev &&
@@ -1887,7 +1951,7 @@ static void handle_sync_write_finished(struct r1conf *conf, struct r1bio *r1_bio
1887{ 1951{
1888 int m; 1952 int m;
1889 int s = r1_bio->sectors; 1953 int s = r1_bio->sectors;
1890 for (m = 0; m < conf->raid_disks ; m++) { 1954 for (m = 0; m < conf->raid_disks * 2 ; m++) {
1891 struct md_rdev *rdev = conf->mirrors[m].rdev; 1955 struct md_rdev *rdev = conf->mirrors[m].rdev;
1892 struct bio *bio = r1_bio->bios[m]; 1956 struct bio *bio = r1_bio->bios[m];
1893 if (bio->bi_end_io == NULL) 1957 if (bio->bi_end_io == NULL)
@@ -1909,7 +1973,7 @@ static void handle_sync_write_finished(struct r1conf *conf, struct r1bio *r1_bio
1909static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio) 1973static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio)
1910{ 1974{
1911 int m; 1975 int m;
1912 for (m = 0; m < conf->raid_disks ; m++) 1976 for (m = 0; m < conf->raid_disks * 2 ; m++)
1913 if (r1_bio->bios[m] == IO_MADE_GOOD) { 1977 if (r1_bio->bios[m] == IO_MADE_GOOD) {
1914 struct md_rdev *rdev = conf->mirrors[m].rdev; 1978 struct md_rdev *rdev = conf->mirrors[m].rdev;
1915 rdev_clear_badblocks(rdev, 1979 rdev_clear_badblocks(rdev,
@@ -2184,7 +2248,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2184 r1_bio->state = 0; 2248 r1_bio->state = 0;
2185 set_bit(R1BIO_IsSync, &r1_bio->state); 2249 set_bit(R1BIO_IsSync, &r1_bio->state);
2186 2250
2187 for (i=0; i < conf->raid_disks; i++) { 2251 for (i = 0; i < conf->raid_disks * 2; i++) {
2188 struct md_rdev *rdev; 2252 struct md_rdev *rdev;
2189 bio = r1_bio->bios[i]; 2253 bio = r1_bio->bios[i];
2190 2254
@@ -2203,7 +2267,8 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2203 rdev = rcu_dereference(conf->mirrors[i].rdev); 2267 rdev = rcu_dereference(conf->mirrors[i].rdev);
2204 if (rdev == NULL || 2268 if (rdev == NULL ||
2205 test_bit(Faulty, &rdev->flags)) { 2269 test_bit(Faulty, &rdev->flags)) {
2206 still_degraded = 1; 2270 if (i < conf->raid_disks)
2271 still_degraded = 1;
2207 } else if (!test_bit(In_sync, &rdev->flags)) { 2272 } else if (!test_bit(In_sync, &rdev->flags)) {
2208 bio->bi_rw = WRITE; 2273 bio->bi_rw = WRITE;
2209 bio->bi_end_io = end_sync_write; 2274 bio->bi_end_io = end_sync_write;
@@ -2254,7 +2319,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2254 * need to mark them bad on all write targets 2319 * need to mark them bad on all write targets
2255 */ 2320 */
2256 int ok = 1; 2321 int ok = 1;
2257 for (i = 0 ; i < conf->raid_disks ; i++) 2322 for (i = 0 ; i < conf->raid_disks * 2 ; i++)
2258 if (r1_bio->bios[i]->bi_end_io == end_sync_write) { 2323 if (r1_bio->bios[i]->bi_end_io == end_sync_write) {
2259 struct md_rdev *rdev = 2324 struct md_rdev *rdev =
2260 rcu_dereference(conf->mirrors[i].rdev); 2325 rcu_dereference(conf->mirrors[i].rdev);
@@ -2323,7 +2388,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2323 len = sync_blocks<<9; 2388 len = sync_blocks<<9;
2324 } 2389 }
2325 2390
2326 for (i=0 ; i < conf->raid_disks; i++) { 2391 for (i = 0 ; i < conf->raid_disks * 2; i++) {
2327 bio = r1_bio->bios[i]; 2392 bio = r1_bio->bios[i];
2328 if (bio->bi_end_io) { 2393 if (bio->bi_end_io) {
2329 page = bio->bi_io_vec[bio->bi_vcnt].bv_page; 2394 page = bio->bi_io_vec[bio->bi_vcnt].bv_page;
@@ -2356,7 +2421,7 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, int *skipp
2356 */ 2421 */
2357 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) { 2422 if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
2358 atomic_set(&r1_bio->remaining, read_targets); 2423 atomic_set(&r1_bio->remaining, read_targets);
2359 for (i=0; i<conf->raid_disks; i++) { 2424 for (i = 0; i < conf->raid_disks * 2; i++) {
2360 bio = r1_bio->bios[i]; 2425 bio = r1_bio->bios[i];
2361 if (bio->bi_end_io == end_sync_read) { 2426 if (bio->bi_end_io == end_sync_read) {
2362 md_sync_acct(bio->bi_bdev, nr_sectors); 2427 md_sync_acct(bio->bi_bdev, nr_sectors);
@@ -2393,7 +2458,8 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2393 if (!conf) 2458 if (!conf)
2394 goto abort; 2459 goto abort;
2395 2460
2396 conf->mirrors = kzalloc(sizeof(struct mirror_info)*mddev->raid_disks, 2461 conf->mirrors = kzalloc(sizeof(struct mirror_info)
2462 * mddev->raid_disks * 2,
2397 GFP_KERNEL); 2463 GFP_KERNEL);
2398 if (!conf->mirrors) 2464 if (!conf->mirrors)
2399 goto abort; 2465 goto abort;
@@ -2405,7 +2471,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2405 conf->poolinfo = kzalloc(sizeof(*conf->poolinfo), GFP_KERNEL); 2471 conf->poolinfo = kzalloc(sizeof(*conf->poolinfo), GFP_KERNEL);
2406 if (!conf->poolinfo) 2472 if (!conf->poolinfo)
2407 goto abort; 2473 goto abort;
2408 conf->poolinfo->raid_disks = mddev->raid_disks; 2474 conf->poolinfo->raid_disks = mddev->raid_disks * 2;
2409 conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc, 2475 conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc,
2410 r1bio_pool_free, 2476 r1bio_pool_free,
2411 conf->poolinfo); 2477 conf->poolinfo);
@@ -2414,14 +2480,20 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2414 2480
2415 conf->poolinfo->mddev = mddev; 2481 conf->poolinfo->mddev = mddev;
2416 2482
2483 err = -EINVAL;
2417 spin_lock_init(&conf->device_lock); 2484 spin_lock_init(&conf->device_lock);
2418 list_for_each_entry(rdev, &mddev->disks, same_set) { 2485 list_for_each_entry(rdev, &mddev->disks, same_set) {
2419 int disk_idx = rdev->raid_disk; 2486 int disk_idx = rdev->raid_disk;
2420 if (disk_idx >= mddev->raid_disks 2487 if (disk_idx >= mddev->raid_disks
2421 || disk_idx < 0) 2488 || disk_idx < 0)
2422 continue; 2489 continue;
2423 disk = conf->mirrors + disk_idx; 2490 if (test_bit(Replacement, &rdev->flags))
2491 disk = conf->mirrors + conf->raid_disks + disk_idx;
2492 else
2493 disk = conf->mirrors + disk_idx;
2424 2494
2495 if (disk->rdev)
2496 goto abort;
2425 disk->rdev = rdev; 2497 disk->rdev = rdev;
2426 2498
2427 disk->head_position = 0; 2499 disk->head_position = 0;
@@ -2437,11 +2509,27 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2437 conf->pending_count = 0; 2509 conf->pending_count = 0;
2438 conf->recovery_disabled = mddev->recovery_disabled - 1; 2510 conf->recovery_disabled = mddev->recovery_disabled - 1;
2439 2511
2512 err = -EIO;
2440 conf->last_used = -1; 2513 conf->last_used = -1;
2441 for (i = 0; i < conf->raid_disks; i++) { 2514 for (i = 0; i < conf->raid_disks * 2; i++) {
2442 2515
2443 disk = conf->mirrors + i; 2516 disk = conf->mirrors + i;
2444 2517
2518 if (i < conf->raid_disks &&
2519 disk[conf->raid_disks].rdev) {
2520 /* This slot has a replacement. */
2521 if (!disk->rdev) {
2522 /* No original, just make the replacement
2523 * a recovering spare
2524 */
2525 disk->rdev =
2526 disk[conf->raid_disks].rdev;
2527 disk[conf->raid_disks].rdev = NULL;
2528 } else if (!test_bit(In_sync, &disk->rdev->flags))
2529 /* Original is not in_sync - bad */
2530 goto abort;
2531 }
2532
2445 if (!disk->rdev || 2533 if (!disk->rdev ||
2446 !test_bit(In_sync, &disk->rdev->flags)) { 2534 !test_bit(In_sync, &disk->rdev->flags)) {
2447 disk->head_position = 0; 2535 disk->head_position = 0;
@@ -2455,7 +2543,6 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2455 conf->last_used = i; 2543 conf->last_used = i;
2456 } 2544 }
2457 2545
2458 err = -EIO;
2459 if (conf->last_used < 0) { 2546 if (conf->last_used < 0) {
2460 printk(KERN_ERR "md/raid1:%s: no operational mirrors\n", 2547 printk(KERN_ERR "md/raid1:%s: no operational mirrors\n",
2461 mdname(mddev)); 2548 mdname(mddev));
@@ -2665,7 +2752,7 @@ static int raid1_reshape(struct mddev *mddev)
2665 if (!newpoolinfo) 2752 if (!newpoolinfo)
2666 return -ENOMEM; 2753 return -ENOMEM;
2667 newpoolinfo->mddev = mddev; 2754 newpoolinfo->mddev = mddev;
2668 newpoolinfo->raid_disks = raid_disks; 2755 newpoolinfo->raid_disks = raid_disks * 2;
2669 2756
2670 newpool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc, 2757 newpool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc,
2671 r1bio_pool_free, newpoolinfo); 2758 r1bio_pool_free, newpoolinfo);
@@ -2673,7 +2760,8 @@ static int raid1_reshape(struct mddev *mddev)
2673 kfree(newpoolinfo); 2760 kfree(newpoolinfo);
2674 return -ENOMEM; 2761 return -ENOMEM;
2675 } 2762 }
2676 newmirrors = kzalloc(sizeof(struct mirror_info) * raid_disks, GFP_KERNEL); 2763 newmirrors = kzalloc(sizeof(struct mirror_info) * raid_disks * 2,
2764 GFP_KERNEL);
2677 if (!newmirrors) { 2765 if (!newmirrors) {
2678 kfree(newpoolinfo); 2766 kfree(newpoolinfo);
2679 mempool_destroy(newpool); 2767 mempool_destroy(newpool);