]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000.
authorMassimo Maggi <me@massimo-maggi.eu>
Sun, 14 Jul 2013 12:01:27 +0000 (14:01 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 14 Jul 2013 12:01:27 +0000 (14:01 +0200)
(check_pool_label): Likewise.
* include/grub/zfs/zfs.h: Rewrite SPA_VERSION_* macros.

ChangeLog
grub-core/fs/zfs/zfs.c
include/grub/zfs/zfs.h

index 8a7c7665fe2ab112c5026dd094bc53e4ab5d5247..a36426a719a5567c811b1415bbddd776af770d59 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
-20013-07-14  Massimo Maggi <me@massimo-maggi.eu>
+2013-07-14  Massimo Maggi <me@massimo-maggi.eu>
+
+       * grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000.
+       (check_pool_label): Likewise.
+       * include/grub/zfs/zfs.h: Rewrite SPA_VERSION_* macros.
+
+2013-07-14  Massimo Maggi <me@massimo-maggi.eu>
 
        * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting.
 
index 3d57978f4e0c02b1243df9fb2974c206d3a7b138..beea55509e2551a4851a764dfb73eab4540c306b 100644 (file)
@@ -490,15 +490,11 @@ uberblock_verify (uberblock_phys_t * ub, grub_uint64_t offset,
 
   if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_LITTLE_ENDIAN)
       == UBERBLOCK_MAGIC
-      && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN) > 0 
-      && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN)
-      <= SPA_VERSION)
-    endian = GRUB_ZFS_LITTLE_ENDIAN;
+      && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN)))
+     endian = GRUB_ZFS_LITTLE_ENDIAN;
 
   if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_BIG_ENDIAN) == UBERBLOCK_MAGIC
-      && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN) > 0 
-      && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN)
-      <= SPA_VERSION)
+      && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN)))
     endian = GRUB_ZFS_BIG_ENDIAN;
 
   if (endian == GRUB_ZFS_UNKNOWN_ENDIAN)
@@ -845,13 +841,13 @@ check_pool_label (struct grub_zfs_data *data,
     }
   grub_dprintf ("zfs", "check 8 passed\n");
 
-  if (version > SPA_VERSION)
+  if (!SPA_VERSION_IS_SUPPORTED(version))
     {
       grub_free (nvlist);
       return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
                         "too new version %llu > %llu",
                         (unsigned long long) version,
-                        (unsigned long long) SPA_VERSION);
+                        (unsigned long long) SPA_VERSION_BEFORE_FEATURES);
     }
   grub_dprintf ("zfs", "check 9 passed\n");
 
index e326c8b2f7bc6d50d5a863648258bde62b8e4d6d..42942482016a6320f20cce62bc0bf74efcad8341 100644 (file)
@@ -36,8 +36,12 @@ typedef enum grub_zfs_endian
 /*
  * On-disk version number.
  */
-#define        SPA_VERSION                     33ULL
-
+#define        SPA_VERSION_INITIAL             1ULL
+#define        SPA_VERSION_BEFORE_FEATURES     33ULL
+#define        SPA_VERSION_FEATURES            5000ULL
+#define        SPA_VERSION_IS_SUPPORTED(v) \
+       (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \
+       ((v) == SPA_VERSION_FEATURES))
 /*
  * The following are configuration names used in the nvlist describing a pool's
  * configuration.