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