Print this page
3756 want lz4 support for metadata compression
*** 19,28 ****
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2013 Martin Matuska. All rights reserved.
*/
#include <sys/dmu.h>
#include <sys/dmu_impl.h>
#include <sys/dmu_tx.h>
*** 40,49 ****
--- 41,51 ----
#include <sys/zfs_ioctl.h>
#include <sys/zap.h>
#include <sys/zio_checksum.h>
#include <sys/zio_compress.h>
#include <sys/sa.h>
+ #include <sys/zfeature.h>
#ifdef _KERNEL
#include <sys/vmsystm.h>
#include <sys/zfs_znode.h>
#endif
*** 1415,1425 ****
SET_BOOKMARK(&zb, ds->ds_object,
db->db.db_object, db->db_level, db->db_blkid);
DB_DNODE_ENTER(db);
dn = DB_DNODE(db);
! dmu_write_policy(os, dn, db->db_level, WP_DMU_SYNC, &zp);
DB_DNODE_EXIT(db);
/*
* If we're frozen (running ziltest), we always need to generate a bp.
*/
--- 1417,1427 ----
SET_BOOKMARK(&zb, ds->ds_object,
db->db.db_object, db->db_level, db->db_blkid);
DB_DNODE_ENTER(db);
dn = DB_DNODE(db);
! dmu_write_policy(os, dn, db->db_level, WP_DMU_SYNC, &zp, txg);
DB_DNODE_EXIT(db);
/*
* If we're frozen (running ziltest), we always need to generate a bp.
*/
*** 1553,1565 ****
dnode_setdirty(dn, tx);
dnode_rele(dn, FTAG);
}
int zfs_mdcomp_disable = 0;
void
! dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp)
{
dmu_object_type_t type = dn ? dn->dn_type : DMU_OT_OBJSET;
boolean_t ismd = (level > 0 || DMU_OT_IS_METADATA(type) ||
(wp & WP_SPILL));
enum zio_checksum checksum = os->os_checksum;
--- 1555,1569 ----
dnode_setdirty(dn, tx);
dnode_rele(dn, FTAG);
}
int zfs_mdcomp_disable = 0;
+ int zfs_mdcomp_lz4 = 0;
void
! dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp, zio_prop_t *zp,
! uint64_t txg)
{
dmu_object_type_t type = dn ? dn->dn_type : DMU_OT_OBJSET;
boolean_t ismd = (level > 0 || DMU_OT_IS_METADATA(type) ||
(wp & WP_SPILL));
enum zio_checksum checksum = os->os_checksum;
*** 1580,1591 ****
if (ismd) {
/*
* XXX -- we should design a compression algorithm
* that specializes in arrays of bps.
*/
! compress = zfs_mdcomp_disable ? ZIO_COMPRESS_EMPTY :
! ZIO_COMPRESS_LZJB;
/*
* Metadata always gets checksummed. If the data
* checksum is multi-bit correctable, and it's not a
* ZBT-style checksum, then it's suitable for metadata
--- 1584,1613 ----
if (ismd) {
/*
* XXX -- we should design a compression algorithm
* that specializes in arrays of bps.
*/
! if (zfs_mdcomp_disable)
! compress = ZIO_COMPRESS_EMPTY;
! else if (zfs_mdcomp_lz4 && os->os_spa != NULL) {
! zfeature_info_t *feat = &spa_feature_table
! [SPA_FEATURE_LZ4_COMPRESS];
!
! if (spa_feature_is_active(os->os_spa, feat))
! compress = ZIO_COMPRESS_LZ4;
! else if (spa_feature_is_enabled(os->os_spa, feat)) {
! dmu_tx_t *tx;
!
! tx = dmu_tx_create_assigned(
! spa_get_dsl(os->os_spa), txg);
! spa_feature_incr(os->os_spa, feat, tx);
! dmu_tx_commit(tx);
! compress = ZIO_COMPRESS_LZ4;
! } else
! compress = ZIO_COMPRESS_LZJB;
! } else
! compress = ZIO_COMPRESS_LZJB;
/*
* Metadata always gets checksummed. If the data
* checksum is multi-bit correctable, and it's not a
* ZBT-style checksum, then it's suitable for metadata