changeset 13945:7a9c1d41dfbe

3507 Tunable to allow block allocation even on degraded vdevs Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Christopher Siden <csiden@delphix.com>
author Sašo Kiselkov <skiselkov@gmail.com>
date Tue, 05 Feb 2013 11:15:10 -0800
parents bbcbb468dc37
children 41660db11225
files usr/src/uts/common/fs/zfs/metaslab.c
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/metaslab.c	Tue Feb 05 10:10:25 2013 -0800
+++ b/usr/src/uts/common/fs/zfs/metaslab.c	Tue Feb 05 11:15:10 2013 -0800
@@ -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>
@@ -91,6 +92,11 @@
 int metaslab_smo_bonus_pct = 150;
 
 /*
+ * Should we be willing to write data to degraded vdevs?
+ */
+boolean_t zfs_write_to_degraded = B_FALSE;
+
+/*
  * ==========================================================================
  * Metaslab classes
  * ==========================================================================
@@ -1377,10 +1383,13 @@
 
 		/*
 		 * 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;
 		}