dm raid1: abstract get_valid_mirror function
Move the logic to get a valid mirror leg into a function for re-use in a later patch. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Reviewed-by: Takahiro Yasui <tyasui@redhat.com> Tested-by: Takahiro Yasui <tyasui@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
This commit is contained in:
parent
0f398a8403
commit
87968ddd2f
1 changed files with 15 additions and 7 deletions
|
@ -181,6 +181,17 @@ static void set_default_mirror(struct mirror *m)
|
|||
atomic_set(&ms->default_mirror, m - m0);
|
||||
}
|
||||
|
||||
static struct mirror *get_valid_mirror(struct mirror_set *ms)
|
||||
{
|
||||
struct mirror *m;
|
||||
|
||||
for (m = ms->mirror; m < ms->mirror + ms->nr_mirrors; m++)
|
||||
if (!atomic_read(&m->error_count))
|
||||
return m;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* fail_mirror
|
||||
* @m: mirror device to fail
|
||||
* @error_type: one of the enum's, DM_RAID1_*_ERROR
|
||||
|
@ -226,13 +237,10 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
|
|||
goto out;
|
||||
}
|
||||
|
||||
for (new = ms->mirror; new < ms->mirror + ms->nr_mirrors; new++)
|
||||
if (!atomic_read(&new->error_count)) {
|
||||
set_default_mirror(new);
|
||||
break;
|
||||
}
|
||||
|
||||
if (unlikely(new == ms->mirror + ms->nr_mirrors))
|
||||
new = get_valid_mirror(ms);
|
||||
if (new)
|
||||
set_default_mirror(new);
|
||||
else
|
||||
DMWARN("All sides of mirror have failed.");
|
||||
|
||||
out:
|
||||
|
|
Loading…
Reference in a new issue