Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84595
b: refs/heads/master
c: 8f0205b
h: refs/heads/master
i:
  84593: b094a82
  84591: d12cd1c
v: v3
  • Loading branch information
Jonathan Brassow authored and Alasdair G Kergon committed Feb 8, 2008
1 parent cb4b489 commit a57edde
Show file tree
Hide file tree
Showing 2 changed files with 21 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: 72f4b314100bae85c75d8e4c6fec621ab44e777d
refs/heads/master: 8f0205b798f926e2745de5fdebf0a8605c621de6
23 changes: 20 additions & 3 deletions trunk/drivers/md/dm-raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,15 +737,32 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
static void recovery_complete(int read_err, unsigned int write_err,
void *context)
{
struct region *reg = (struct region *) context;
struct region *reg = (struct region *)context;
struct mirror_set *ms = reg->rh->ms;
int m, bit = 0;

if (read_err)
if (read_err) {
/* Read error means the failure of default mirror. */
DMERR_LIMIT("Unable to read primary mirror during recovery");
fail_mirror(get_default_mirror(ms), DM_RAID1_SYNC_ERROR);
}

if (write_err)
if (write_err) {
DMERR_LIMIT("Write error during recovery (error = 0x%x)",
write_err);
/*
* Bits correspond to devices (excluding default mirror).
* The default mirror cannot change during recovery.
*/
for (m = 0; m < ms->nr_mirrors; m++) {
if (&ms->mirror[m] == get_default_mirror(ms))
continue;
if (test_bit(bit, &write_err))
fail_mirror(ms->mirror + m,
DM_RAID1_SYNC_ERROR);
bit++;
}
}

rh_recovery_end(reg, !(read_err || write_err));
}
Expand Down

0 comments on commit a57edde

Please sign in to comment.