svn commit: r250122 - in user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys

Xin LI delphij at FreeBSD.org
Tue Apr 30 22:59:11 UTC 2013


Author: delphij
Date: Tue Apr 30 22:59:09 2013
New Revision: 250122
URL: http://svnweb.freebsd.org/changeset/base/250122

Log:
  Initial draft making LZ4 the default compression method.  Now,
  compression=on means use LZ4 as compression method if the pool
  have LZ4 activated, and LZJB if pool is using old format.  Also,
  metadata is now using LZ4 as compression method by default.
  
  Notes to my self based on talk with mm@:
  
   - Need to check how the LZ4 feature flag is activated.  E.g. what
     happens if a new pool is created, do we need to explicitly do
     the feature activation?
  
   - Do we need a sysctl variable for this?  Do we want to make it
     possible for users to tweak the method themselves?

Modified:
  user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
  user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
  user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
  user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c

Modified: user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
==============================================================================
--- user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c	Tue Apr 30 22:13:55 2013	(r250121)
+++ user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c	Tue Apr 30 22:59:09 2013	(r250122)
@@ -1596,7 +1596,8 @@ dmu_write_policy(objset_t *os, dnode_t *
 		 * that specializes in arrays of bps.
 		 */
 		compress = zfs_mdcomp_disable ? ZIO_COMPRESS_EMPTY :
-		    ZIO_COMPRESS_LZJB;
+		    zio_compress_select(dmu_objset_spa(os),
+			ZIO_COMPRESS_ON, ZIO_COMPRESS_LZJB);
 
 		/*
 		 * Metadata always gets checksummed.  If the data
@@ -1621,7 +1622,8 @@ dmu_write_policy(objset_t *os, dnode_t *
 		compress = ZIO_COMPRESS_OFF;
 		checksum = ZIO_CHECKSUM_OFF;
 	} else {
-		compress = zio_compress_select(dn->dn_compress, compress);
+		compress = zio_compress_select(dmu_objset_spa(os),
+		    dn->dn_compress, compress);
 
 		checksum = (dedup_checksum == ZIO_CHECKSUM_OFF) ?
 		    zio_checksum_select(dn->dn_checksum, checksum) :

Modified: user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c
==============================================================================
--- user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c	Tue Apr 30 22:13:55 2013	(r250121)
+++ user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c	Tue Apr 30 22:59:09 2013	(r250122)
@@ -148,7 +148,8 @@ compression_changed_cb(void *arg, uint64
 	 */
 	ASSERT(newval != ZIO_COMPRESS_INHERIT);
 
-	os->os_compress = zio_compress_select(newval, ZIO_COMPRESS_ON_VALUE);
+	os->os_compress = zio_compress_select(dmu_objset_spa(os),
+	    newval, ZIO_COMPRESS_ON_VALUE);
 }
 
 static void

Modified: user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
==============================================================================
--- user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h	Tue Apr 30 22:13:55 2013	(r250121)
+++ user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h	Tue Apr 30 22:59:09 2013	(r250122)
@@ -112,14 +112,14 @@ enum zio_compress {
 };
 
 /* N.B. when altering this value, also change BOOTFS_COMPRESS_VALID below */
-#define	ZIO_COMPRESS_ON_VALUE	ZIO_COMPRESS_LZJB
+#define	ZIO_COMPRESS_ON_VALUE	ZIO_COMPRESS_LZ4
 #define	ZIO_COMPRESS_DEFAULT	ZIO_COMPRESS_OFF
 
 #define	BOOTFS_COMPRESS_VALID(compress)			\
 	((compress) == ZIO_COMPRESS_LZJB ||		\
 	(compress) == ZIO_COMPRESS_LZ4 ||		\
 	((compress) == ZIO_COMPRESS_ON &&		\
-	ZIO_COMPRESS_ON_VALUE == ZIO_COMPRESS_LZJB) ||	\
+	ZIO_COMPRESS_ON_VALUE == ZIO_COMPRESS_LZ4) ||	\
 	(compress) == ZIO_COMPRESS_OFF)
 
 #define	ZIO_FAILURE_MODE_WAIT		0
@@ -569,8 +569,8 @@ extern enum zio_checksum zio_checksum_se
     enum zio_checksum parent);
 extern enum zio_checksum zio_checksum_dedup_select(spa_t *spa,
     enum zio_checksum child, enum zio_checksum parent);
-extern enum zio_compress zio_compress_select(enum zio_compress child,
-    enum zio_compress parent);
+extern enum zio_compress zio_compress_select(spa_t *spa,
+    enum zio_compress child, enum zio_compress parent);
 
 extern void zio_suspend(spa_t *spa, zio_t *zio);
 extern int zio_resume(spa_t *spa);

Modified: user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c
==============================================================================
--- user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c	Tue Apr 30 22:13:55 2013	(r250121)
+++ user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio_compress.c	Tue Apr 30 22:59:09 2013	(r250122)
@@ -34,6 +34,7 @@
 #include <sys/zfs_context.h>
 #include <sys/compress.h>
 #include <sys/spa.h>
+#include <sys/zfeature.h>
 #include <sys/zio.h>
 #include <sys/zio_compress.h>
 
@@ -61,7 +62,7 @@ zio_compress_info_t zio_compress_table[Z
 };
 
 enum zio_compress
-zio_compress_select(enum zio_compress child, enum zio_compress parent)
+zio_compress_select(spa_t *spa, enum zio_compress child, enum zio_compress parent)
 {
 	ASSERT(child < ZIO_COMPRESS_FUNCTIONS);
 	ASSERT(parent < ZIO_COMPRESS_FUNCTIONS);
@@ -70,8 +71,13 @@ zio_compress_select(enum zio_compress ch
 	if (child == ZIO_COMPRESS_INHERIT)
 		return (parent);
 
-	if (child == ZIO_COMPRESS_ON)
-		return (ZIO_COMPRESS_ON_VALUE);
+	if (child == ZIO_COMPRESS_ON) {
+		if (spa == NULL || !spa_feature_is_active(spa,
+		    &spa_feature_table[SPA_FEATURE_LZ4_COMPRESS]))
+			return (ZIO_COMPRESS_LZJB);
+		else
+			return (ZIO_COMPRESS_ON_VALUE);
+	}
 
 	return (child);
 }


More information about the svn-src-user mailing list