svn commit: r246675 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Martin Matuska mm at FreeBSD.org
Mon Feb 11 13:59:57 UTC 2013


Author: mm
Date: Mon Feb 11 13:59:57 2013
New Revision: 246675
URL: http://svnweb.freebsd.org/changeset/base/246675

Log:
  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

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
Directory Properties:
  head/sys/cddl/contrib/opensolaris/   (props changed)

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c	Mon Feb 11 13:57:03 2013	(r246674)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c	Mon Feb 11 13:59:57 2013	(r246675)
@@ -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_P
 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;
 		}


More information about the svn-src-all mailing list