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