Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 127733
b: refs/heads/master
c: 4044ba5
h: refs/heads/master
i:
  127731: 7284bea
v: v3
  • Loading branch information
NeilBrown committed Jan 8, 2009
1 parent d4efe7a commit c337c53
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: efeb53c0e57213e843b7ef3cc6ebcdea7d6186ac
refs/heads/master: 4044ba58dd15cb01797c4fd034f39ef4a75f7cc3
5 changes: 4 additions & 1 deletion trunk/drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -1500,6 +1500,9 @@ static int bind_rdev_to_array(mdk_rdev_t * rdev, mddev_t * mddev)

list_add_rcu(&rdev->same_set, &mddev->disks);
bd_claim_by_disk(rdev->bdev, rdev->bdev->bd_holder, mddev->gendisk);

/* May as well allow recovery to be retried once */
mddev->recovery_disabled = 0;
return 0;

fail:
Expand Down Expand Up @@ -6175,7 +6178,7 @@ static int remove_and_add_spares(mddev_t *mddev)
}
}

if (mddev->degraded && ! mddev->ro) {
if (mddev->degraded && ! mddev->ro && !mddev->recovery_disabled) {
list_for_each_entry(rdev, &mddev->disks, same_set) {
if (rdev->raid_disk >= 0 &&
!test_bit(In_sync, &rdev->flags) &&
Expand Down
8 changes: 6 additions & 2 deletions trunk/drivers/md/raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -1016,12 +1016,16 @@ static void error(mddev_t *mddev, mdk_rdev_t *rdev)
* else mark the drive as failed
*/
if (test_bit(In_sync, &rdev->flags)
&& (conf->raid_disks - mddev->degraded) == 1)
&& (conf->raid_disks - mddev->degraded) == 1) {
/*
* Don't fail the drive, act as though we were just a
* normal single drive
* normal single drive.
* However don't try a recovery from this drive as
* it is very likely to fail.
*/
mddev->recovery_disabled = 1;
return;
}
if (test_and_clear_bit(In_sync, &rdev->flags)) {
unsigned long flags;
spin_lock_irqsave(&conf->device_lock, flags);
Expand Down
3 changes: 3 additions & 0 deletions trunk/include/linux/raid/md_k.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@ struct mddev_s
#define MD_RECOVERY_FROZEN 9

unsigned long recovery;
int recovery_disabled; /* if we detect that recovery
* will always fail, set this
* so we don't loop trying */

int in_sync; /* know to not need resync */
struct mutex reconfig_mutex;
Expand Down

0 comments on commit c337c53

Please sign in to comment.