Date: Tue, 30 Apr 2013 22:59:10 +0000 (UTC) From: Xin LI <delphij@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r250122 - in user/delphij/zfs-lz4/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys Message-ID: <201304302259.r3UMxAef043209@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304302259.r3UMxAef043209>