Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/thorpej-cfargs2]: src/sys/dev/raidframe Sync w/ HEAD.
details: https://anonhg.NetBSD.org/src/rev/d5de8c09b37c
branches: thorpej-cfargs2
changeset: 1022681:d5de8c09b37c
user: thorpej <thorpej%NetBSD.org@localhost>
date: Thu Aug 05 03:37:41 2021 +0000
description:
Sync w/ HEAD.
diffstat:
sys/dev/raidframe/raidframeio.h | 5 +-
sys/dev/raidframe/raidframevar.h | 3 +-
sys/dev/raidframe/rf_dagfuncs.c | 6 +-
sys/dev/raidframe/rf_netbsdkintf.c | 78 ++++++++++++++++++++++++++++++++++++-
sys/dev/raidframe/rf_pqdegdags.c | 6 +-
sys/dev/raidframe/rf_raid.h | 3 +-
6 files changed, 88 insertions(+), 13 deletions(-)
diffs (243 lines):
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/raidframeio.h
--- a/sys/dev/raidframe/raidframeio.h Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/raidframeio.h Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: raidframeio.h,v 1.9 2018/01/20 01:32:45 mrg Exp $ */
+/* $NetBSD: raidframeio.h,v 1.9.28.1 2021/08/05 03:37:41 thorpej Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -133,5 +133,6 @@
#define RAIDFRAME_SET_LAST_UNIT _IOW('r', 41, int)
#define RAIDFRAME_GET_INFO _IOWR('r', 42, RF_DeviceConfig_t *) /* get configuration */
#define RAIDFRAME_CONFIGURE _IOW ('r', 43, void *) /* configure the driver */
+#define RAIDFRAME_RESCAN _IO ('r', 44)
+#endif /* !_RF_RAIDFRAMEIO_H_ */
-#endif /* !_RF_RAIDFRAMEIO_H_ */
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/raidframevar.h
--- a/sys/dev/raidframe/raidframevar.h Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/raidframevar.h Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: raidframevar.h,v 1.21 2019/10/10 03:43:59 christos Exp $ */
+/* $NetBSD: raidframevar.h,v 1.21.18.1 2021/08/05 03:37:41 thorpej Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -355,6 +355,7 @@
/* flags that can be put in the rf_recon_req structure */
#define RF_FDFLAGS_NONE 0x0 /* just fail the disk */
#define RF_FDFLAGS_RECON 0x1 /* fail and initiate recon */
+#define RF_FDFLAGS_RECON_FORCE 0x2 /* fail and initiate recon, ignoring errors */
struct rf_recon_req { /* used to tell the kernel to fail a disk */
RF_RowCol_t col;
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/rf_dagfuncs.c
--- a/sys/dev/raidframe/rf_dagfuncs.c Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/rf_dagfuncs.c Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_dagfuncs.c,v 1.33 2021/07/27 03:01:48 oster Exp $ */
+/* $NetBSD: rf_dagfuncs.c,v 1.33.2.1 2021/08/05 03:37:41 thorpej Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_dagfuncs.c,v 1.33 2021/07/27 03:01:48 oster Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_dagfuncs.c,v 1.33.2.1 2021/08/05 03:37:41 thorpej Exp $");
#include <sys/param.h>
#include <sys/ioctl.h>
@@ -121,7 +121,7 @@
*
* parameters:
*
- * 0 - physical disk addres of data
+ * 0 - physical disk address of data
* 1 - buffer for holding read data
* 2 - parity stripe ID
* 3 - flags
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/rf_netbsdkintf.c
--- a/sys/dev/raidframe/rf_netbsdkintf.c Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/rf_netbsdkintf.c Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_netbsdkintf.c,v 1.397 2021/07/26 22:50:36 oster Exp $ */
+/* $NetBSD: rf_netbsdkintf.c,v 1.397.2.1 2021/08/05 03:37:41 thorpej Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
***********************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.397 2021/07/26 22:50:36 oster Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.397.2.1 2021/08/05 03:37:41 thorpej Exp $");
#ifdef _KERNEL_OPT
#include "opt_raid_autoconfig.h"
@@ -305,6 +305,7 @@
static void rf_CopybackThread(RF_Raid_t *raidPtr);
static void rf_ReconstructInPlaceThread(struct rf_recon_req_internal *);
static int rf_autoconfig(device_t);
+static int rf_rescan(void);
static void rf_buildroothack(RF_ConfigSet_t *);
static RF_AutoConfig_t *rf_find_raid_components(void);
@@ -480,6 +481,56 @@
return 0;
}
+static int
+rf_rescan(void)
+{
+ RF_AutoConfig_t *ac_list;
+ RF_ConfigSet_t *config_sets, *cset, *next_cset;
+ struct raid_softc *sc;
+ int raid_added;
+
+ ac_list = rf_find_raid_components();
+ config_sets = rf_create_auto_sets(ac_list);
+
+ raid_added = 1;
+ while (raid_added > 0) {
+ raid_added = 0;
+ cset = config_sets;
+ while (cset != NULL) {
+ next_cset = cset->next;
+ if (rf_have_enough_components(cset) &&
+ cset->ac->clabel->autoconfigure == 1) {
+ sc = rf_auto_config_set(cset);
+ if (sc != NULL) {
+ aprint_debug("raid%d: configured ok, rootable %d\n",
+ sc->sc_unit, cset->rootable);
+ /* We added one RAID set */
+ raid_added++;
+ } else {
+ /* The autoconfig didn't work :( */
+ aprint_debug("Autoconfig failed\n");
+ rf_release_all_vps(cset);
+ }
+ } else {
+ /* we're not autoconfiguring this set...
+ release the associated resources */
+ rf_release_all_vps(cset);
+ }
+ /* cleanup */
+ rf_cleanup_config_set(cset);
+ cset = next_cset;
+ }
+ if (raid_added > 0) {
+ /* We added at least one RAID set, so re-scan for recursive RAID */
+ ac_list = rf_find_raid_components();
+ config_sets = rf_create_auto_sets(ac_list);
+ }
+ }
+
+ return 0;
+}
+
+
static void
rf_buildroothack(RF_ConfigSet_t *config_sets)
{
@@ -1529,7 +1580,7 @@
case RAIDFRAME_REBUILD_IN_PLACE:
return rf_rebuild_in_place(raidPtr, data);
-
+
case RAIDFRAME_GET_INFO:
ucfgp = *(RF_DeviceConfig_t **)data;
d_cfg = RF_Malloc(sizeof(*d_cfg));
@@ -1574,6 +1625,9 @@
/* XXX should errors be passed up? */
return 0;
+ case RAIDFRAME_RESCAN:
+ return rf_rescan();
+
case RAIDFRAME_RESET_ACCTOTALS:
memset(&raidPtr->acc_totals, 0, sizeof(raidPtr->acc_totals));
return 0;
@@ -2680,9 +2734,17 @@
raidPtr = (RF_Raid_t *) req->raidPtr;
raidPtr->recon_in_progress = 1;
+ if (req->flags & RF_FDFLAGS_RECON_FORCE) {
+ raidPtr->forceRecon = 1;
+ }
+
rf_FailDisk((RF_Raid_t *) req->raidPtr, req->col,
((req->flags & RF_FDFLAGS_RECON) ? 1 : 0));
+ if (req->flags & RF_FDFLAGS_RECON_FORCE) {
+ raidPtr->forceRecon = 0;
+ }
+
RF_Free(req, sizeof(*req));
raidPtr->recon_in_progress = 0;
@@ -2751,7 +2813,17 @@
s = splbio();
raidPtr = req->raidPtr;
raidPtr->recon_in_progress = 1;
+
+ if (req->flags & RF_FDFLAGS_RECON_FORCE) {
+ raidPtr->forceRecon = 1;
+ }
+
rf_ReconstructInPlace(raidPtr, req->col);
+
+ if (req->flags & RF_FDFLAGS_RECON_FORCE) {
+ raidPtr->forceRecon = 0;
+ }
+
RF_Free(req, sizeof(*req));
raidPtr->recon_in_progress = 0;
splx(s);
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/rf_pqdegdags.c
--- a/sys/dev/raidframe/rf_pqdegdags.c Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/rf_pqdegdags.c Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_pqdegdags.c,v 1.14 2021/08/01 15:29:30 andvar Exp $ */
+/* $NetBSD: rf_pqdegdags.c,v 1.14.2.1 2021/08/05 03:37:41 thorpej Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_pqdegdags.c,v 1.14 2021/08/01 15:29:30 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_pqdegdags.c,v 1.14.2.1 2021/08/05 03:37:41 thorpej Exp $");
#include "rf_archs.h"
@@ -379,7 +379,7 @@
failed data units will do the correct thing. So in this case,
the dag looks like
- full stripe read of surviving data units (not being overwriten)
+ full stripe read of surviving data units (not being overwritten)
write new data (ignoring failed units) compute P&Q
write P&Q
diff -r dfffae5201c7 -r d5de8c09b37c sys/dev/raidframe/rf_raid.h
--- a/sys/dev/raidframe/rf_raid.h Thu Aug 05 00:39:16 2021 +0000
+++ b/sys/dev/raidframe/rf_raid.h Thu Aug 05 03:37:41 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_raid.h,v 1.49 2021/07/23 00:54:45 oster Exp $ */
+/* $NetBSD: rf_raid.h,v 1.49.2.1 2021/08/05 03:37:41 thorpej Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -187,6 +187,7 @@
RF_HeadSepLimit_t headSepLimit;
int numFloatingReconBufs;
int reconInProgress;
+ int forceRecon;
rf_declare_cond2(waitForReconCond); /* goes with raidPtr->mutex */
RF_RaidReconDesc_t *reconDesc; /* reconstruction descriptor */
RF_ReconCtrl_t *reconControl; /* reconstruction control structure
Home |
Main Index |
Thread Index |
Old Index