Print this page
2619 asynchronous destruction of ZFS file systems
2747 SPA versioning with zfs feature flags
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <gwilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/spa_impl.h
          +++ new/usr/src/uts/common/fs/zfs/sys/spa_impl.h
↓ open down ↓ 12 lines elided ↑ open up ↑
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  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      - * Copyright (c) 2011 by Delphix. All rights reserved.
       23 + * Copyright (c) 2012 by Delphix. All rights reserved.
  24   24   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  25   25   */
  26   26  
  27   27  #ifndef _SYS_SPA_IMPL_H
  28   28  #define _SYS_SPA_IMPL_H
  29   29  
  30   30  #include <sys/spa.h>
  31   31  #include <sys/vdev.h>
  32   32  #include <sys/metaslab.h>
  33   33  #include <sys/dmu.h>
↓ open down ↓ 86 lines elided ↑ open up ↑
 120  120          nvlist_t        *spa_load_info;         /* info and errors from load */
 121  121          uint64_t        spa_config_txg;         /* txg of last config change */
 122  122          int             spa_sync_pass;          /* iterate-to-convergence */
 123  123          pool_state_t    spa_state;              /* pool state */
 124  124          int             spa_inject_ref;         /* injection references */
 125  125          uint8_t         spa_sync_on;            /* sync threads are running */
 126  126          spa_load_state_t spa_load_state;        /* current load operation */
 127  127          uint64_t        spa_import_flags;       /* import specific flags */
 128  128          taskq_t         *spa_zio_taskq[ZIO_TYPES][ZIO_TASKQ_TYPES];
 129  129          dsl_pool_t      *spa_dsl_pool;
      130 +        boolean_t       spa_is_initializing;    /* true while opening pool */
 130  131          metaslab_class_t *spa_normal_class;     /* normal data class */
 131  132          metaslab_class_t *spa_log_class;        /* intent log data class */
 132  133          uint64_t        spa_first_txg;          /* first txg after spa_open() */
 133  134          uint64_t        spa_final_txg;          /* txg of export/destroy */
 134  135          uint64_t        spa_freeze_txg;         /* freeze pool at this txg */
 135  136          uint64_t        spa_load_max_txg;       /* best initial ub_txg */
 136  137          uint64_t        spa_claim_max_txg;      /* highest claimed birth txg */
 137  138          timespec_t      spa_loaded_ts;          /* 1st successful open time */
 138  139          objset_t        *spa_meta_objset;       /* copy of dp->dp_meta_objset */
 139  140          txg_list_t      spa_vdev_txg_list;      /* per-txg dirty vdev list */
 140  141          vdev_t          *spa_root_vdev;         /* top-level vdev container */
 141  142          uint64_t        spa_config_guid;        /* config pool guid */
 142  143          uint64_t        spa_load_guid;          /* spa_load initialized guid */
 143  144          list_t          spa_config_dirty_list;  /* vdevs with dirty config */
 144  145          list_t          spa_state_dirty_list;   /* vdevs with dirty state */
 145  146          spa_aux_vdev_t  spa_spares;             /* hot spares */
 146  147          spa_aux_vdev_t  spa_l2cache;            /* L2ARC cache devices */
      148 +        nvlist_t        *spa_label_features;    /* Features for reading MOS */
 147  149          uint64_t        spa_config_object;      /* MOS object for pool config */
 148  150          uint64_t        spa_config_generation;  /* config generation number */
 149  151          uint64_t        spa_syncing_txg;        /* txg currently syncing */
 150  152          bpobj_t         spa_deferred_bpobj;     /* deferred-free bplist */
 151  153          bplist_t        spa_free_bplist[TXG_SIZE]; /* bplist of stuff to free */
 152  154          uberblock_t     spa_ubsync;             /* last synced uberblock */
 153  155          uberblock_t     spa_uberblock;          /* current uberblock */
 154  156          boolean_t       spa_extreme_rewind;     /* rewind past deferred frees */
 155  157          uint64_t        spa_last_io;            /* lbolt of last non-scan I/O */
 156  158          kmutex_t        spa_scrub_lock;         /* resilver/scrub lock */
↓ open down ↓ 56 lines elided ↑ open up ↑
 213  215          uint64_t        spa_dspace;             /* dspace in normal class */
 214  216          kmutex_t        spa_vdev_top_lock;      /* dueling offline/remove */
 215  217          kmutex_t        spa_proc_lock;          /* protects spa_proc* */
 216  218          kcondvar_t      spa_proc_cv;            /* spa_proc_state transitions */
 217  219          spa_proc_state_t spa_proc_state;        /* see definition */
 218  220          struct proc     *spa_proc;              /* "zpool-poolname" process */
 219  221          uint64_t        spa_did;                /* if procp != p0, did of t1 */
 220  222          boolean_t       spa_autoreplace;        /* autoreplace set in open */
 221  223          int             spa_vdev_locks;         /* locks grabbed */
 222  224          uint64_t        spa_creation_version;   /* version at pool creation */
 223      -        uint64_t        spa_prev_software_version;
      225 +        uint64_t        spa_prev_software_version; /* See ub_software_version */
      226 +        uint64_t        spa_feat_for_write_obj; /* required to write to pool */
      227 +        uint64_t        spa_feat_for_read_obj;  /* required to read from pool */
      228 +        uint64_t        spa_feat_desc_obj;      /* Feature descriptions */
 224  229          /*
 225  230           * spa_refcnt & spa_config_lock must be the last elements
 226  231           * because refcount_t changes size based on compilation options.
 227  232           * In order for the MDB module to function correctly, the other
 228  233           * fields must remain in the same location.
 229  234           */
 230  235          spa_config_lock_t spa_config_lock[SCL_LOCKS]; /* config changes */
 231  236          refcount_t      spa_refcount;           /* number of opens */
 232  237  };
 233  238  
 234  239  extern const char *spa_config_path;
 235  240  
 236  241  #ifdef  __cplusplus
 237  242  }
 238  243  #endif
 239  244  
 240  245  #endif  /* _SYS_SPA_IMPL_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX