Print this page
NEX-5078 Want ability to see progress of freeing data and how much is left to free after large file delete patch
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-5024 Slow performance with a single large file delete
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-4608 WRC: Possible deadlock during the disabling of WRC for a dataset
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
5981 Deadlock in dmu_objset_find_dp
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Robert Mustacchi <rm@joyent.com>
5269 zpool import slow
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Dan McDonald <danmcd@omniti.com>
NEX-3558 KRRP Integration
re #12585 rb4049 ZFS++ work port - refactoring to improve separation of open/closed code, bug fixes, performance improvements - open code
Bug 11205: add missing libzfs_closed_stubs.c to fix opensource-only build.
ZFS plus work: special vdevs, cos, cos/vdev properties

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/dsl_pool.h
          +++ new/usr/src/uts/common/fs/zfs/sys/dsl_pool.h
↓ open down ↓ 88 lines elided ↑ open up ↑
  89   89          struct dsl_dataset *dp_origin_snap;
  90   90          uint64_t dp_root_dir_obj;
  91   91          struct taskq *dp_vnrele_taskq;
  92   92  
  93   93          /* No lock needed - sync context only */
  94   94          blkptr_t dp_meta_rootbp;
  95   95          uint64_t dp_tmp_userrefs_obj;
  96   96          bpobj_t dp_free_bpobj;
  97   97          uint64_t dp_bptree_obj;
  98   98          uint64_t dp_empty_bpobj;
  99      -        bpobj_t dp_obsolete_bpobj;
 100   99  
      100 +        /*
      101 +         * Used for "special" device only
      102 +         * dp_rtime: the time (in ms) when we moved the data
      103 +         */
      104 +        hrtime_t dp_spec_rtime;
      105 +        uint64_t dp_sync_history[2];
      106 +
 101  107          struct dsl_scan *dp_scan;
 102  108  
 103  109          /* Uses dp_lock */
 104  110          kmutex_t dp_lock;
 105  111          kcondvar_t dp_spaceavail_cv;
 106  112          uint64_t dp_dirty_pertxg[TXG_SIZE];
 107  113          uint64_t dp_dirty_total;
      114 +        uint64_t dp_long_freeing_total;
 108  115          uint64_t dp_long_free_dirty_pertxg[TXG_SIZE];
 109  116          uint64_t dp_mos_used_delta;
 110  117          uint64_t dp_mos_compressed_delta;
 111  118          uint64_t dp_mos_uncompressed_delta;
 112  119  
 113  120          /*
 114  121           * Time of most recently scheduled (furthest in the future)
 115  122           * wakeup for delayed transactions.
 116  123           */
 117  124          hrtime_t dp_last_wakeup;
↓ open down ↓ 20 lines elided ↑ open up ↑
 138  145  } dsl_pool_t;
 139  146  
 140  147  int dsl_pool_init(spa_t *spa, uint64_t txg, dsl_pool_t **dpp);
 141  148  int dsl_pool_open(dsl_pool_t *dp);
 142  149  void dsl_pool_close(dsl_pool_t *dp);
 143  150  dsl_pool_t *dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg);
 144  151  void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg);
 145  152  void dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg);
 146  153  int dsl_pool_sync_context(dsl_pool_t *dp);
 147  154  uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree);
      155 +uint64_t dsl_pool_adjustedfree(dsl_pool_t *dp, boolean_t netfree);
 148  156  void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx);
 149  157  void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg);
 150  158  void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp);
 151  159  void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg,
 152  160      const blkptr_t *bpp);
 153  161  void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
 154  162  void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 155  163  void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 156  164  void dsl_pool_mos_diduse_space(dsl_pool_t *dp,
 157  165      int64_t used, int64_t comp, int64_t uncomp);
↓ open down ↓ 8 lines elided ↑ open up ↑
 166  174  
 167  175  int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj,
 168  176      const char *tag, uint64_t now, dmu_tx_t *tx);
 169  177  int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
 170  178      const char *tag, dmu_tx_t *tx);
 171  179  void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
 172  180  int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
 173  181  int dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp);
 174  182  void dsl_pool_rele(dsl_pool_t *dp, void *tag);
 175  183  
 176      -void dsl_pool_create_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx);
 177      -void dsl_pool_destroy_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx);
 178      -
 179  184  #ifdef  __cplusplus
 180  185  }
 181  186  #endif
 182  187  
 183  188  #endif /* _SYS_DSL_POOL_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX