Move a logic to get a valid mirror leg to a function. It will be reused later. Signed-off-by: Mikulas Patocka --- drivers/md/dm-raid1.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) Index: linux-2.6.31-rc3-devel/drivers/md/dm-raid1.c =================================================================== --- linux-2.6.31-rc3-devel.orig/drivers/md/dm-raid1.c 2009-07-20 20:46:49.000000000 +0200 +++ linux-2.6.31-rc3-devel/drivers/md/dm-raid1.c 2009-07-20 20:47:44.000000000 +0200 @@ -180,6 +180,15 @@ static void set_default_mirror(struct mi 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 @@ -225,13 +234,10 @@ static void fail_mirror(struct mirror *m 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: