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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/dmu_objset.h
          +++ new/usr/src/uts/common/fs/zfs/sys/dmu_objset.h
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright (c) 2012, 2017 by Delphix. All rights reserved.
  24   24   * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  25   25   * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
  26   26   * Copyright (c) 2014 Integros [integros.com]
       27 + * Copyright 2016 Nexenta Systems, Inc.  All rights reserved.
  27   28   */
  28   29  
  29   30  /* Portions Copyright 2010 Robert Milkowski */
  30   31  
  31   32  #ifndef _SYS_DMU_OBJSET_H
  32   33  #define _SYS_DMU_OBJSET_H
  33   34  
  34   35  #include <sys/spa.h>
       36 +#include <sys/special_impl.h>
  35   37  #include <sys/arc.h>
  36   38  #include <sys/txg.h>
  37   39  #include <sys/zfs_context.h>
  38   40  #include <sys/dnode.h>
  39   41  #include <sys/zio.h>
  40   42  #include <sys/zil.h>
  41   43  #include <sys/sa.h>
       44 +#include <sys/zfs_ioctl.h>
  42   45  
  43   46  #ifdef  __cplusplus
  44   47  extern "C" {
  45   48  #endif
  46   49  
  47   50  extern krwlock_t os_lock;
  48   51  
  49   52  struct dsl_pool;
  50   53  struct dsl_dataset;
  51   54  struct dmu_tx;
↓ open down ↓ 10 lines elided ↑ open up ↑
  62   65          dnode_phys_t os_meta_dnode;
  63   66          zil_header_t os_zil_header;
  64   67          uint64_t os_type;
  65   68          uint64_t os_flags;
  66   69          char os_pad[OBJSET_PHYS_SIZE - sizeof (dnode_phys_t)*3 -
  67   70              sizeof (zil_header_t) - sizeof (uint64_t)*2];
  68   71          dnode_phys_t os_userused_dnode;
  69   72          dnode_phys_t os_groupused_dnode;
  70   73  } objset_phys_t;
  71   74  
       75 +#define OBJSET_PROP_UNINITIALIZED       ((uint64_t)-1)
  72   76  struct objset {
  73   77          /* Immutable: */
  74   78          struct dsl_dataset *os_dsl_dataset;
  75   79          spa_t *os_spa;
  76   80          arc_buf_t *os_phys_buf;
  77   81          objset_phys_t *os_phys;
  78   82          /*
  79   83           * The following "special" dnodes have no parent, are exempt
  80   84           * from dnode_move(), and are not recorded in os_dnodes, but they
  81   85           * root their descendents in this objset using handles anyway, so
↓ open down ↓ 2 lines elided ↑ open up ↑
  84   88          dnode_handle_t os_meta_dnode;
  85   89          dnode_handle_t os_userused_dnode;
  86   90          dnode_handle_t os_groupused_dnode;
  87   91          zilog_t *os_zil;
  88   92  
  89   93          list_node_t os_evicting_node;
  90   94  
  91   95          /* can change, under dsl_dir's locks: */
  92   96          enum zio_checksum os_checksum;
  93   97          enum zio_compress os_compress;
       98 +        boolean_t os_smartcomp_enabled;
  94   99          uint8_t os_copies;
  95  100          enum zio_checksum os_dedup_checksum;
  96  101          boolean_t os_dedup_verify;
  97  102          zfs_logbias_op_t os_logbias;
  98  103          zfs_cache_type_t os_primary_cache;
  99  104          zfs_cache_type_t os_secondary_cache;
 100  105          zfs_sync_type_t os_sync;
 101  106          zfs_redundant_metadata_type_t os_redundant_metadata;
 102  107          int os_recordsize;
      108 +        uint64_t os_zpl_meta_to_special;
      109 +        zfs_wbc_mode_t os_wbc_mode;
      110 +        uint64_t os_wbc_root_ds_obj;
      111 +        uint64_t os_wbc_off_txg;
      112 +        /*
      113 +         * The next four values are used as a cache of whatever's on disk, and
      114 +         * are initialized the first time these properties are queried. Before
      115 +         * being initialized with their real values, their values are
      116 +         * OBJSET_PROP_UNINITIALIZED.
      117 +         */
      118 +        uint64_t os_version;
      119 +        uint64_t os_normalization;
      120 +        uint64_t os_utf8only;
      121 +        uint64_t os_casesensitivity;
 103  122  
 104  123          /*
 105  124           * Pointer is constant; the blkptr it points to is protected by
 106  125           * os_dsl_dataset->ds_bp_rwlock
 107  126           */
 108  127          blkptr_t *os_rootbp;
 109  128  
 110  129          /* no lock needed: */
 111  130          struct dmu_tx *os_synctx; /* XXX sketchy */
 112  131          zil_header_t os_zil_header;
↓ open down ↓ 23 lines elided ↑ open up ↑
 136  155  
 137  156  #define DMU_META_OBJSET         0
 138  157  #define DMU_META_DNODE_OBJECT   0
 139  158  #define DMU_OBJECT_IS_SPECIAL(obj) ((int64_t)(obj) <= 0)
 140  159  #define DMU_META_DNODE(os)      ((os)->os_meta_dnode.dnh_dnode)
 141  160  #define DMU_USERUSED_DNODE(os)  ((os)->os_userused_dnode.dnh_dnode)
 142  161  #define DMU_GROUPUSED_DNODE(os) ((os)->os_groupused_dnode.dnh_dnode)
 143  162  
 144  163  #define DMU_OS_IS_L2CACHEABLE(os)                               \
 145  164          ((os)->os_secondary_cache == ZFS_CACHE_ALL ||           \
 146      -        (os)->os_secondary_cache == ZFS_CACHE_METADATA)
      165 +        (os)->os_secondary_cache == ZFS_CACHE_METADATA ||       \
      166 +        (os)->os_secondary_cache == ZFS_CACHE_DATA)
 147  167  
 148  168  #define DMU_OS_IS_L2COMPRESSIBLE(os)    (zfs_mdcomp_disable == B_FALSE)
 149  169  
 150  170  /* called from zpl */
 151  171  int dmu_objset_hold(const char *name, void *tag, objset_t **osp);
 152  172  int dmu_objset_own(const char *name, dmu_objset_type_t type,
 153  173      boolean_t readonly, void *tag, objset_t **osp);
 154  174  int dmu_objset_own_obj(struct dsl_pool *dp, uint64_t obj,
 155  175      dmu_objset_type_t type, boolean_t readonly, void *tag, objset_t **osp);
 156  176  void dmu_objset_refresh_ownership(objset_t *os, void *tag);
↓ open down ↓ 42 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX