diff options
| author | christos <christos@NetBSD.org> | 2017-01-13 04:22:16 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2017-01-13 04:22:16 +0000 |
| commit | 6230ae07440309ebea07a7e76df8a523b9208a14 (patch) | |
| tree | 5244914c63b25c0d1e894b6f7b95495f53a038b1 /sys/dev/raidframe | |
| parent | 16d472b3456f5cb2ba6bd28d0c07b51139e2e48e (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.c | 52 |
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; } |
