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.c52
1 files changed, 26 insertions, 26 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index f12fc288f25d..fb6b866c28f5 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -417,11 +417,11 @@ static int read_balance(conf_t *conf, r1bio_t *r1_bio)
417 new_disk = 0; 417 new_disk = 0;
418 418
419 for (rdev = rcu_dereference(conf->mirrors[new_disk].rdev); 419 for (rdev = rcu_dereference(conf->mirrors[new_disk].rdev);
420 !rdev || !rdev->in_sync 420 !rdev || !test_bit(In_sync, &rdev->flags)
421 || test_bit(WriteMostly, &rdev->flags); 421 || test_bit(WriteMostly, &rdev->flags);
422 rdev = rcu_dereference(conf->mirrors[++new_disk].rdev)) { 422 rdev = rcu_dereference(conf->mirrors[++new_disk].rdev)) {
423 423
424 if (rdev && rdev->in_sync) 424 if (rdev && test_bit(In_sync, &rdev->flags))
425 wonly_disk = new_disk; 425 wonly_disk = new_disk;
426 426
427 if (new_disk == conf->raid_disks - 1) { 427 if (new_disk == conf->raid_disks - 1) {
@@ -435,11 +435,11 @@ static int read_balance(conf_t *conf, r1bio_t *r1_bio)
435 435
436 /* make sure the disk is operational */ 436 /* make sure the disk is operational */
437 for (rdev = rcu_dereference(conf->mirrors[new_disk].rdev); 437 for (rdev = rcu_dereference(conf->mirrors[new_disk].rdev);
438 !rdev || !rdev->in_sync || 438 !rdev || !test_bit(In_sync, &rdev->flags) ||
439 test_bit(WriteMostly, &rdev->flags); 439 test_bit(WriteMostly, &rdev->flags);
440 rdev = rcu_dereference(conf->mirrors[new_disk].rdev)) { 440 rdev = rcu_dereference(conf->mirrors[new_disk].rdev)) {
441 441
442 if (rdev && rdev->in_sync) 442 if (rdev && test_bit(In_sync, &rdev->flags))
443 wonly_disk = new_disk; 443 wonly_disk = new_disk;
444 444
445 if (new_disk <= 0) 445 if (new_disk <= 0)
@@ -477,7 +477,7 @@ static int read_balance(conf_t *conf, r1bio_t *r1_bio)
477 rdev = rcu_dereference(conf->mirrors[disk].rdev); 477 rdev = rcu_dereference(conf->mirrors[disk].rdev);
478 478
479 if (!rdev || 479 if (!rdev ||
480 !rdev->in_sync || 480 !test_bit(In_sync, &rdev->flags) ||
481 test_bit(WriteMostly, &rdev->flags)) 481 test_bit(WriteMostly, &rdev->flags))
482 continue; 482 continue;
483 483
@@ -500,7 +500,7 @@ static int read_balance(conf_t *conf, r1bio_t *r1_bio)
500 if (!rdev) 500 if (!rdev)
501 goto retry; 501 goto retry;
502 atomic_inc(&rdev->nr_pending); 502 atomic_inc(&rdev->nr_pending);
503 if (!rdev->in_sync) { 503 if (!test_bit(In_sync, &rdev->flags)) {
504 /* cannot risk returning a device that failed 504 /* cannot risk returning a device that failed
505 * before we inc'ed nr_pending 505 * before we inc'ed nr_pending
506 */ 506 */
@@ -523,7 +523,7 @@ static void unplug_slaves(mddev_t *mddev)
523 rcu_read_lock(); 523 rcu_read_lock();
524 for (i=0; i<mddev->raid_disks; i++) { 524 for (i=0; i<mddev->raid_disks; i++) {
525 mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev); 525 mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev);
526 if (rdev && !rdev->faulty && atomic_read(&rdev->nr_pending)) { 526 if (rdev && !test_bit(Faulty, &rdev->flags) && atomic_read(&rdev->nr_pending)) {
527 request_queue_t *r_queue = bdev_get_queue(rdev->bdev); 527 request_queue_t *r_queue = bdev_get_queue(rdev->bdev);
528 528
529 atomic_inc(&rdev->nr_pending); 529 atomic_inc(&rdev->nr_pending);
@@ -557,7 +557,7 @@ static int raid1_issue_flush(request_queue_t *q, struct gendisk *disk,
557 rcu_read_lock(); 557 rcu_read_lock();
558 for (i=0; i<mddev->raid_disks && ret == 0; i++) { 558 for (i=0; i<mddev->raid_disks && ret == 0; i++) {
559 mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev); 559 mdk_rdev_t *rdev = rcu_dereference(conf->mirrors[i].rdev);
560 if (rdev && !rdev->faulty) { 560 if (rdev && !test_bit(Faulty, &rdev->flags)) {
561 struct block_device *bdev = rdev->bdev; 561 struct block_device *bdev = rdev->bdev;
562 request_queue_t *r_queue = bdev_get_queue(bdev); 562 request_queue_t *r_queue = bdev_get_queue(bdev);
563 563
@@ -729,9 +729,9 @@ static int make_request(request_queue_t *q, struct bio * bio)
729 rcu_read_lock(); 729 rcu_read_lock();
730 for (i = 0; i < disks; i++) { 730 for (i = 0; i < disks; i++) {
731 if ((rdev=rcu_dereference(conf->mirrors[i].rdev)) != NULL && 731 if ((rdev=rcu_dereference(conf->mirrors[i].rdev)) != NULL &&
732 !rdev->faulty) { 732 !test_bit(Faulty, &rdev->flags)) {
733 atomic_inc(&rdev->nr_pending); 733 atomic_inc(&rdev->nr_pending);
734 if (rdev->faulty) { 734 if (test_bit(Faulty, &rdev->flags)) {
735 atomic_dec(&rdev->nr_pending); 735 atomic_dec(&rdev->nr_pending);
736 r1_bio->bios[i] = NULL; 736 r1_bio->bios[i] = NULL;
737 } else 737 } else
@@ -824,7 +824,7 @@ static void status(struct seq_file *seq, mddev_t *mddev)
824 for (i = 0; i < conf->raid_disks; i++) 824 for (i = 0; i < conf->raid_disks; i++)
825 seq_printf(seq, "%s", 825 seq_printf(seq, "%s",
826 conf->mirrors[i].rdev && 826 conf->mirrors[i].rdev &&
827 conf->mirrors[i].rdev->in_sync ? "U" : "_"); 827 test_bit(In_sync, &conf->mirrors[i].rdev->flags) ? "U" : "_");
828 seq_printf(seq, "]"); 828 seq_printf(seq, "]");
829} 829}
830 830
@@ -840,14 +840,14 @@ static void error(mddev_t *mddev, mdk_rdev_t *rdev)
840 * next level up know. 840 * next level up know.
841 * else mark the drive as failed 841 * else mark the drive as failed
842 */ 842 */
843 if (rdev->in_sync 843 if (test_bit(In_sync, &rdev->flags)
844 && conf->working_disks == 1) 844 && conf->working_disks == 1)
845 /* 845 /*
846 * Don't fail the drive, act as though we were just a 846 * Don't fail the drive, act as though we were just a
847 * normal single drive 847 * normal single drive
848 */ 848 */
849 return; 849 return;
850 if (rdev->in_sync) { 850 if (test_bit(In_sync, &rdev->flags)) {
851 mddev->degraded++; 851 mddev->degraded++;
852 conf->working_disks--; 852 conf->working_disks--;
853 /* 853 /*
@@ -855,8 +855,8 @@ static void error(mddev_t *mddev, mdk_rdev_t *rdev)
855 */ 855 */
856 set_bit(MD_RECOVERY_ERR, &mddev->recovery); 856 set_bit(MD_RECOVERY_ERR, &mddev->recovery);
857 } 857 }
858 rdev->in_sync = 0; 858 clear_bit(In_sync, &rdev->flags);
859 rdev->faulty = 1; 859 set_bit(Faulty, &rdev->flags);
860 mddev->sb_dirty = 1; 860 mddev->sb_dirty = 1;
861 printk(KERN_ALERT "raid1: Disk failure on %s, disabling device. \n" 861 printk(KERN_ALERT "raid1: Disk failure on %s, disabling device. \n"
862 " Operation continuing on %d devices\n", 862 " Operation continuing on %d devices\n",
@@ -881,7 +881,7 @@ static void print_conf(conf_t *conf)
881 tmp = conf->mirrors + i; 881 tmp = conf->mirrors + i;
882 if (tmp->rdev) 882 if (tmp->rdev)
883 printk(" disk %d, wo:%d, o:%d, dev:%s\n", 883 printk(" disk %d, wo:%d, o:%d, dev:%s\n",
884 i, !tmp->rdev->in_sync, !tmp->rdev->faulty, 884 i, !test_bit(In_sync, &tmp->rdev->flags), !test_bit(Faulty, &tmp->rdev->flags),
885 bdevname(tmp->rdev->bdev,b)); 885 bdevname(tmp->rdev->bdev,b));
886 } 886 }
887} 887}
@@ -913,11 +913,11 @@ static int raid1_spare_active(mddev_t *mddev)
913 for (i = 0; i < conf->raid_disks; i++) { 913 for (i = 0; i < conf->raid_disks; i++) {
914 tmp = conf->mirrors + i; 914 tmp = conf->mirrors + i;
915 if (tmp->rdev 915 if (tmp->rdev
916 && !tmp->rdev->faulty 916 && !test_bit(Faulty, &tmp->rdev->flags)
917 && !tmp->rdev->in_sync) { 917 && !test_bit(In_sync, &tmp->rdev->flags)) {
918 conf->working_disks++; 918 conf->working_disks++;
919 mddev->degraded--; 919 mddev->degraded--;
920 tmp->rdev->in_sync = 1; 920 set_bit(In_sync, &tmp->rdev->flags);
921 } 921 }
922 } 922 }
923 923
@@ -972,7 +972,7 @@ static int raid1_remove_disk(mddev_t *mddev, int number)
972 print_conf(conf); 972 print_conf(conf);
973 rdev = p->rdev; 973 rdev = p->rdev;
974 if (rdev) { 974 if (rdev) {
975 if (rdev->in_sync || 975 if (test_bit(In_sync, &rdev->flags) ||
976 atomic_read(&rdev->nr_pending)) { 976 atomic_read(&rdev->nr_pending)) {
977 err = -EBUSY; 977 err = -EBUSY;
978 goto abort; 978 goto abort;
@@ -1282,11 +1282,11 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
1282 /* make sure disk is operational */ 1282 /* make sure disk is operational */
1283 wonly = disk; 1283 wonly = disk;
1284 while (conf->mirrors[disk].rdev == NULL || 1284 while (conf->mirrors[disk].rdev == NULL ||
1285 !conf->mirrors[disk].rdev->in_sync || 1285 !test_bit(In_sync, &conf->mirrors[disk].rdev->flags) ||
1286 test_bit(WriteMostly, &conf->mirrors[disk].rdev->flags) 1286 test_bit(WriteMostly, &conf->mirrors[disk].rdev->flags)
1287 ) { 1287 ) {
1288 if (conf->mirrors[disk].rdev && 1288 if (conf->mirrors[disk].rdev &&
1289 conf->mirrors[disk].rdev->in_sync) 1289 test_bit(In_sync, &conf->mirrors[disk].rdev->flags))
1290 wonly = disk; 1290 wonly = disk;
1291 if (disk <= 0) 1291 if (disk <= 0)
1292 disk = conf->raid_disks; 1292 disk = conf->raid_disks;
@@ -1333,10 +1333,10 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
1333 bio->bi_rw = READ; 1333 bio->bi_rw = READ;
1334 bio->bi_end_io = end_sync_read; 1334 bio->bi_end_io = end_sync_read;
1335 } else if (conf->mirrors[i].rdev == NULL || 1335 } else if (conf->mirrors[i].rdev == NULL ||
1336 conf->mirrors[i].rdev->faulty) { 1336 test_bit(Faulty, &conf->mirrors[i].rdev->flags)) {
1337 still_degraded = 1; 1337 still_degraded = 1;
1338 continue; 1338 continue;
1339 } else if (!conf->mirrors[i].rdev->in_sync || 1339 } else if (!test_bit(In_sync, &conf->mirrors[i].rdev->flags) ||
1340 sector_nr + RESYNC_SECTORS > mddev->recovery_cp) { 1340 sector_nr + RESYNC_SECTORS > mddev->recovery_cp) {
1341 bio->bi_rw = WRITE; 1341 bio->bi_rw = WRITE;
1342 bio->bi_end_io = end_sync_write; 1342 bio->bi_end_io = end_sync_write;
@@ -1478,7 +1478,7 @@ static int run(mddev_t *mddev)
1478 blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9); 1478 blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
1479 1479
1480 disk->head_position = 0; 1480 disk->head_position = 0;
1481 if (!rdev->faulty && rdev->in_sync) 1481 if (!test_bit(Faulty, &rdev->flags) && test_bit(In_sync, &rdev->flags))
1482 conf->working_disks++; 1482 conf->working_disks++;
1483 } 1483 }
1484 conf->raid_disks = mddev->raid_disks; 1484 conf->raid_disks = mddev->raid_disks;
@@ -1518,7 +1518,7 @@ static int run(mddev_t *mddev)
1518 */ 1518 */
1519 for (j = 0; j < conf->raid_disks && 1519 for (j = 0; j < conf->raid_disks &&
1520 (!conf->mirrors[j].rdev || 1520 (!conf->mirrors[j].rdev ||
1521 !conf->mirrors[j].rdev->in_sync) ; j++) 1521 !test_bit(In_sync, &conf->mirrors[j].rdev->flags)) ; j++)
1522 /* nothing */; 1522 /* nothing */;
1523 conf->last_used = j; 1523 conf->last_used = j;
1524 1524