grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/5] Accept pool version 5000 for feature flags


From: Massimo Maggi
Subject: [PATCH 2/5] Accept pool version 5000 for feature flags
Date: Mon, 04 Feb 2013 12:09:00 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130128 Thunderbird/17.0.2

Ported to GRUB2 from IllumOS changeset 13700    2889e2596bd6

Author: Christopher Siden <address@hidden>
Ported-by: Massimo Maggi <address@hidden>
---
 grub-core/fs/zfs/zfs.c | 14 +++++---------
 include/grub/zfs/zfs.h |  9 +++++++--
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
index 822d65b..3ea9c95 100644
--- a/grub-core/fs/zfs/zfs.c
+++ b/grub-core/fs/zfs/zfs.c
@@ -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");
 diff --git a/include/grub/zfs/zfs.h b/include/grub/zfs/zfs.h
index e326c8b..20b23b7 100644
--- a/include/grub/zfs/zfs.h
+++ b/include/grub/zfs/zfs.h
@@ -36,8 +36,13 @@ 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                     5000ULL
+#define        SPA_VERSION_FEATURES            5000ULL
+#define        SPA_VERSION_IS_SUPPORTED(v) \
+       (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \
+       ((v) >= SPA_VERSION_FEATURES && (v) <= SPA_VERSION))
 /*
  * The following are configuration names used in the nvlist describing
a pool's
  * configuration.
-- 
1.8.1.1


Attachment: Attached Message Part
Description: Text document

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]