From owner-svn-src-user@FreeBSD.ORG Tue Apr 30 22:59:11 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 52F8E659; Tue, 30 Apr 2013 22:59:11 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 452001E0B; Tue, 30 Apr 2013 22:59:11 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r3UMxACM043213; Tue, 30 Apr 2013 22:59:10 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r3UMxAef043209; Tue, 30 Apr 2013 22:59:10 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201304302259.r3UMxAef043209@svn.freebsd.org> From: Xin LI Date: Tue, 30 Apr 2013 22:59:10 +0000 (UTC) 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 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Apr 2013 22:59:11 -0000 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 #include #include +#include #include #include @@ -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); }