summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormm <mm@FreeBSD.org>2013-02-11 13:59:57 +0000
committermm <mm@FreeBSD.org>2013-02-11 13:59:57 +0000
commiteb36612c3261ea6fb263854724f545317a5d4b2e (patch)
tree1939bf5bad7288e9d7b05d1761afdd7ad00e4e35
parentccc66b91fb440e1b4e0b229f8d4ce003f4dc1c79 (diff)
downloadFreeBSD-src-eb36612c3261ea6fb263854724f545317a5d4b2e.zip
FreeBSD-src-eb36612c3261ea6fb263854724f545317a5d4b2e.tar.gz
MFV r246394:
Add tunable to allow block allocation on degraded vdevs. Illumos ZFS issues: 3507 Tunable to allow block allocation even on degraded vdevs References: https://www.illumos.org/issues/3507 MFC after: 2 weeks
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
index 5d83f69..53ffa90 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -97,6 +98,15 @@ int metaslab_prefetch_limit = SPA_DVAS_PER_BP;
int metaslab_smo_bonus_pct = 150;
/*
+ * Should we be willing to write data to degraded vdevs?
+ */
+boolean_t zfs_write_to_degraded = B_FALSE;
+SYSCTL_INT(_vfs_zfs, OID_AUTO, write_to_degraded, CTLFLAG_RW,
+ &zfs_write_to_degraded, 0,
+ "Allow writing data to degraded vdevs");
+TUNABLE_INT("vfs.zfs.write_to_degraded", &zfs_write_to_degraded);
+
+/*
* ==========================================================================
* Metaslab classes
* ==========================================================================
@@ -1383,10 +1393,13 @@ top:
/*
* Avoid writing single-copy data to a failing vdev
+ * unless the user instructs us that it is okay.
*/
if ((vd->vdev_stat.vs_write_errors > 0 ||
vd->vdev_state < VDEV_STATE_HEALTHY) &&
- d == 0 && dshift == 3) {
+ d == 0 && dshift == 3 &&
+ !(zfs_write_to_degraded && vd->vdev_state ==
+ VDEV_STATE_DEGRADED)) {
all_zero = B_FALSE;
goto next;
}
OpenPOWER on IntegriCloud