Print this page
usr/src/uts/common/fs/zfs/ddt.c

@@ -22,25 +22,28 @@
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
  * Copyright (c) 2014 Integros [integros.com]
+ * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
  */
 
 /* Portions Copyright 2010 Robert Milkowski */
 
 #ifndef _SYS_DMU_OBJSET_H
 #define _SYS_DMU_OBJSET_H
 
 #include <sys/spa.h>
+#include <sys/special_impl.h>
 #include <sys/arc.h>
 #include <sys/txg.h>
 #include <sys/zfs_context.h>
 #include <sys/dnode.h>
 #include <sys/zio.h>
 #include <sys/zil.h>
 #include <sys/sa.h>
+#include <sys/zfs_ioctl.h>
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 

@@ -67,10 +70,11 @@
             sizeof (zil_header_t) - sizeof (uint64_t)*2];
         dnode_phys_t os_userused_dnode;
         dnode_phys_t os_groupused_dnode;
 } objset_phys_t;
 
+#define OBJSET_PROP_UNINITIALIZED       ((uint64_t)-1)
 struct objset {
         /* Immutable: */
         struct dsl_dataset *os_dsl_dataset;
         spa_t *os_spa;
         arc_buf_t *os_phys_buf;

@@ -89,19 +93,34 @@
         list_node_t os_evicting_node;
 
         /* can change, under dsl_dir's locks: */
         enum zio_checksum os_checksum;
         enum zio_compress os_compress;
+        boolean_t os_smartcomp_enabled;
         uint8_t os_copies;
         enum zio_checksum os_dedup_checksum;
         boolean_t os_dedup_verify;
         zfs_logbias_op_t os_logbias;
         zfs_cache_type_t os_primary_cache;
         zfs_cache_type_t os_secondary_cache;
         zfs_sync_type_t os_sync;
         zfs_redundant_metadata_type_t os_redundant_metadata;
         int os_recordsize;
+        uint64_t os_zpl_meta_to_special;
+        zfs_wbc_mode_t os_wbc_mode;
+        uint64_t os_wbc_root_ds_obj;
+        uint64_t os_wbc_off_txg;
+        /*
+         * The next four values are used as a cache of whatever's on disk, and
+         * are initialized the first time these properties are queried. Before
+         * being initialized with their real values, their values are
+         * OBJSET_PROP_UNINITIALIZED.
+         */
+        uint64_t os_version;
+        uint64_t os_normalization;
+        uint64_t os_utf8only;
+        uint64_t os_casesensitivity;
 
         /*
          * Pointer is constant; the blkptr it points to is protected by
          * os_dsl_dataset->ds_bp_rwlock
          */

@@ -141,11 +160,12 @@
 #define DMU_USERUSED_DNODE(os)  ((os)->os_userused_dnode.dnh_dnode)
 #define DMU_GROUPUSED_DNODE(os) ((os)->os_groupused_dnode.dnh_dnode)
 
 #define DMU_OS_IS_L2CACHEABLE(os)                               \
         ((os)->os_secondary_cache == ZFS_CACHE_ALL ||           \
-        (os)->os_secondary_cache == ZFS_CACHE_METADATA)
+        (os)->os_secondary_cache == ZFS_CACHE_METADATA ||       \
+        (os)->os_secondary_cache == ZFS_CACHE_DATA)
 
 #define DMU_OS_IS_L2COMPRESSIBLE(os)    (zfs_mdcomp_disable == B_FALSE)
 
 /* called from zpl */
 int dmu_objset_hold(const char *name, void *tag, objset_t **osp);