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,176 ****
--- 167,177 ----
          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,250 ****
--- 242,253 ----
  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,366 ****
  #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
  
  /*
   * 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"
  
  /*
   * 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
--- 351,370 ----
  #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_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,417 ****
--- 411,427 ----
  #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,513 ****
--- 514,528 ----
  #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,591 ****
--- 597,607 ----
          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                   */