summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2017-01-13 04:22:16 +0000
committerchristos <christos@NetBSD.org>2017-01-13 04:22:16 +0000
commit6230ae07440309ebea07a7e76df8a523b9208a14 (patch)
tree5244914c63b25c0d1e894b6f7b95495f53a038b1 /sys/dev/raidframe
parent16d472b3456f5cb2ba6bd28d0c07b51139e2e48e (diff)
Don't consider a disk hosed if we did not find a column for it; dedup code.
Diffstat (limited to 'sys/dev/raidframe')
-rw-r--r--sys/dev/raidframe/rf_disks.c52
1 files changed, 24 insertions, 28 deletions
diff --git a/sys/dev/raidframe/rf_disks.c b/sys/dev/raidframe/rf_disks.c
index 6d344618772..4abccd42ef2 100644
--- a/sys/dev/raidframe/rf_disks.c
+++ b/sys/dev/raidframe/rf_disks.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_disks.c,v 1.87 2014/10/18 08:33:28 snj Exp $ */
+/* $NetBSD: rf_disks.c,v 1.88 2017/01/13 04:22:16 christos Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -60,7 +60,7 @@
***************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.87 2014/10/18 08:33:28 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_disks.c,v 1.88 2017/01/13 04:22:16 christos Exp $");
#include <dev/raidframe/raidframevar.h>
@@ -700,6 +700,24 @@ static int rf_check_label_vitals(RF_Raid_t *raidPtr, int row, int column,
}
+static void
+rf_handle_hosed(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr, int hosed_column)
+{
+ printf("Hosed component: %s\n", &cfgPtr->devnames[0][hosed_column][0]);
+ if (!cfgPtr->force)
+ return;
+
+ /* we'll fail this component, as if there are
+ other major errors, we arn't forcing things
+ and we'll abort the config anyways */
+ if (raidPtr->Disks[hosed_column].status == rf_ds_failed)
+ return;
+
+ raidPtr->Disks[hosed_column].status = rf_ds_failed;
+ raidPtr->numFailures++;
+ raidPtr->status = rf_rs_degraded;
+}
+
/*
rf_CheckLabels() - check all the component labels for consistency.
@@ -727,11 +745,9 @@ rf_CheckLabels(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr)
int hosed_column;
int too_fatal;
int parity_good;
- int force;
hosed_column = -1;
too_fatal = 0;
- force = cfgPtr->force;
/*
We're going to try to be a little intelligent here. If one
@@ -823,17 +839,8 @@ rf_CheckLabels(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr)
break;
}
}
- printf("Hosed component: %s\n",
- &cfgPtr->devnames[0][hosed_column][0]);
- if (!force) {
- /* we'll fail this component, as if there are
- other major errors, we arn't forcing things
- and we'll abort the config anyways */
- raidPtr->Disks[hosed_column].status
- = rf_ds_failed;
- raidPtr->numFailures++;
- raidPtr->status = rf_rs_degraded;
- }
+ if (hosed_column != -1)
+ rf_handle_hosed(raidPtr, cfgPtr, hosed_column);
} else {
too_fatal = 1;
}
@@ -889,19 +896,8 @@ rf_CheckLabels(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr)
}
}
}
- printf("Hosed component: %s\n",
- &cfgPtr->devnames[0][hosed_column][0]);
- if (!force) {
- /* we'll fail this component, as if there are
- other major errors, we arn't forcing things
- and we'll abort the config anyways */
- if (raidPtr->Disks[hosed_column].status != rf_ds_failed) {
- raidPtr->Disks[hosed_column].status
- = rf_ds_failed;
- raidPtr->numFailures++;
- raidPtr->status = rf_rs_degraded;
- }
- }
+ if (hosed_column != -1)
+ rf_handle_hosed(raidPtr, cfgPtr, hosed_column);
} else {
too_fatal = 1;
}