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>
        
@@ -18,11 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #ifndef _SYS_SPA_IMPL_H
 #define _SYS_SPA_IMPL_H
@@ -125,10 +125,11 @@
         uint8_t         spa_sync_on;            /* sync threads are running */
         spa_load_state_t spa_load_state;        /* current load operation */
         uint64_t        spa_import_flags;       /* import specific flags */
         taskq_t         *spa_zio_taskq[ZIO_TYPES][ZIO_TASKQ_TYPES];
         dsl_pool_t      *spa_dsl_pool;
+        boolean_t       spa_is_initializing;    /* true while opening pool */
         metaslab_class_t *spa_normal_class;     /* normal data class */
         metaslab_class_t *spa_log_class;        /* intent log data class */
         uint64_t        spa_first_txg;          /* first txg after spa_open() */
         uint64_t        spa_final_txg;          /* txg of export/destroy */
         uint64_t        spa_freeze_txg;         /* freeze pool at this txg */
@@ -142,10 +143,11 @@
         uint64_t        spa_load_guid;          /* spa_load initialized guid */
         list_t          spa_config_dirty_list;  /* vdevs with dirty config */
         list_t          spa_state_dirty_list;   /* vdevs with dirty state */
         spa_aux_vdev_t  spa_spares;             /* hot spares */
         spa_aux_vdev_t  spa_l2cache;            /* L2ARC cache devices */
+        nvlist_t        *spa_label_features;    /* Features for reading MOS */
         uint64_t        spa_config_object;      /* MOS object for pool config */
         uint64_t        spa_config_generation;  /* config generation number */
         uint64_t        spa_syncing_txg;        /* txg currently syncing */
         bpobj_t         spa_deferred_bpobj;     /* deferred-free bplist */
         bplist_t        spa_free_bplist[TXG_SIZE]; /* bplist of stuff to free */
@@ -218,11 +220,14 @@
         struct proc     *spa_proc;              /* "zpool-poolname" process */
         uint64_t        spa_did;                /* if procp != p0, did of t1 */
         boolean_t       spa_autoreplace;        /* autoreplace set in open */
         int             spa_vdev_locks;         /* locks grabbed */
         uint64_t        spa_creation_version;   /* version at pool creation */
-        uint64_t        spa_prev_software_version;
+        uint64_t        spa_prev_software_version; /* See ub_software_version */
+        uint64_t        spa_feat_for_write_obj; /* required to write to pool */
+        uint64_t        spa_feat_for_read_obj;  /* required to read from pool */
+        uint64_t        spa_feat_desc_obj;      /* Feature descriptions */
         /*
          * spa_refcnt & spa_config_lock must be the last elements
          * because refcount_t changes size based on compilation options.
          * In order for the MDB module to function correctly, the other
          * fields must remain in the same location.