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>

@@ -167,10 +167,11 @@
         ZPOOL_PROP_FREE,
         ZPOOL_PROP_ALLOCATED,
         ZPOOL_PROP_READONLY,
         ZPOOL_PROP_COMMENT,
         ZPOOL_PROP_EXPANDSZ,
+        ZPOOL_PROP_FREEING,
         ZPOOL_NUM_PROPS
 } zpool_prop_t;
 
 /* Small enough to not hog a whole line of printout in zpool(1M). */
 #define ZPROP_MAX_COMMENT       32

@@ -241,10 +242,12 @@
 zpool_prop_t zpool_name_to_prop(const char *);
 const char *zpool_prop_to_name(zpool_prop_t);
 const char *zpool_prop_default_string(zpool_prop_t);
 uint64_t zpool_prop_default_numeric(zpool_prop_t);
 boolean_t zpool_prop_readonly(zpool_prop_t);
+boolean_t zpool_prop_feature(const char *);
+boolean_t zpool_prop_unsupported(const char *name);
 int zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **);
 int zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *);
 uint64_t zpool_prop_random_value(zpool_prop_t, uint64_t seed);
 
 /*

@@ -348,19 +351,20 @@
 #define SPA_VERSION_24                  24ULL
 #define SPA_VERSION_25                  25ULL
 #define SPA_VERSION_26                  26ULL
 #define SPA_VERSION_27                  27ULL
 #define SPA_VERSION_28                  28ULL
+#define SPA_VERSION_5000                5000ULL
 
 /*
  * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk
  * format change. Go to usr/src/grub/grub-0.97/stage2/{zfs-include/, fsys_zfs*},
  * and do the appropriate changes.  Also bump the version number in
  * usr/src/grub/capability.
  */
-#define SPA_VERSION                     SPA_VERSION_28
-#define SPA_VERSION_STRING              "28"
+#define SPA_VERSION                     SPA_VERSION_5000
+#define SPA_VERSION_STRING              "5000"
 
 /*
  * Symbolic names for the changes that caused a SPA_VERSION switch.
  * Used in the code when checking for presence or absence of a feature.
  * Feel free to define multiple symbolic names for each version if there

@@ -407,11 +411,17 @@
 #define SPA_VERSION_SCAN                SPA_VERSION_25
 #define SPA_VERSION_DIR_CLONES          SPA_VERSION_26
 #define SPA_VERSION_DEADLISTS           SPA_VERSION_26
 #define SPA_VERSION_FAST_SNAP           SPA_VERSION_27
 #define SPA_VERSION_MULTI_REPLACE       SPA_VERSION_28
+#define SPA_VERSION_BEFORE_FEATURES     SPA_VERSION_28
+#define SPA_VERSION_FEATURES            SPA_VERSION_5000
 
+#define SPA_VERSION_IS_SUPPORTED(v) \
+        (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \
+        ((v) >= SPA_VERSION_FEATURES && (v) <= SPA_VERSION))
+
 /*
  * ZPL version - rev'd whenever an incompatible on-disk format change
  * occurs.  This is independent of SPA/DMU/ZAP versioning.  You must
  * also update the version_table[] and help message in zfs_prop.c.
  *

@@ -504,10 +514,15 @@
 #define ZPOOL_CONFIG_SUSPENDED          "suspended"     /* not stored on disk */
 #define ZPOOL_CONFIG_TIMESTAMP          "timestamp"     /* not stored on disk */
 #define ZPOOL_CONFIG_BOOTFS             "bootfs"        /* not stored on disk */
 #define ZPOOL_CONFIG_MISSING_DEVICES    "missing_vdevs" /* not stored on disk */
 #define ZPOOL_CONFIG_LOAD_INFO          "load_info"     /* not stored on disk */
+#define ZPOOL_CONFIG_REWIND_INFO        "rewind_info"   /* not stored on disk */
+#define ZPOOL_CONFIG_UNSUP_FEAT         "unsup_feat"    /* not stored on disk */
+#define ZPOOL_CONFIG_CAN_RDONLY         "can_rdonly"    /* not stored on disk */
+#define ZPOOL_CONFIG_FEATURES_FOR_READ  "features_for_read"
+#define ZPOOL_CONFIG_FEATURE_STATS      "feature_stats" /* not stored on disk */
 /*
  * The persistent vdev state is stored as separate values rather than a single
  * 'vdev_state' entry.  This is because a device can be in multiple states, such
  * as offline and degraded.
  */

@@ -582,10 +597,11 @@
         VDEV_AUX_BAD_GUID_SUM,  /* vdev guid sum doesn't match          */
         VDEV_AUX_TOO_SMALL,     /* vdev size is too small               */
         VDEV_AUX_BAD_LABEL,     /* the label is OK but invalid          */
         VDEV_AUX_VERSION_NEWER, /* on-disk version is too new           */
         VDEV_AUX_VERSION_OLDER, /* on-disk version is too old           */
+        VDEV_AUX_UNSUP_FEAT,    /* unsupported features                 */
         VDEV_AUX_SPARED,        /* hot spare used in another pool       */
         VDEV_AUX_ERR_EXCEEDED,  /* too many errors                      */
         VDEV_AUX_IO_FAILURE,    /* experienced I/O failure              */
         VDEV_AUX_BAD_LOG,       /* cannot read log chain(s)             */
         VDEV_AUX_EXTERNAL,      /* external diagnosis                   */