1
Description: Accept ZFS version 5000 (feature based)
2
Origin: http://git.savannah.gnu.org/cgit/grub.git/commit/?id=c71dbd40a9f788d5cdba26e8293dbb95b70f33be
3
Author: Massimo Maggi <me@massimo-maggi.eu>
5
Last-Update: 2013-11-21
7
--- a/grub-core/fs/zfs/zfs.c
8
+++ b/grub-core/fs/zfs/zfs.c
11
if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_LITTLE_ENDIAN)
13
- && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN) > 0
14
- && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN)
16
- endian = GRUB_ZFS_LITTLE_ENDIAN;
17
+ && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN)))
18
+ endian = GRUB_ZFS_LITTLE_ENDIAN;
20
if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_BIG_ENDIAN) == UBERBLOCK_MAGIC
21
- && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN) > 0
22
- && grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN)
24
+ && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN)))
25
endian = GRUB_ZFS_BIG_ENDIAN;
27
if (endian == GRUB_ZFS_UNKNOWN_ENDIAN)
30
grub_dprintf ("zfs", "check 8 passed\n");
32
- if (version > SPA_VERSION)
33
+ if (!SPA_VERSION_IS_SUPPORTED(version))
36
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
37
"too new version %llu > %llu",
38
(unsigned long long) version,
39
- (unsigned long long) SPA_VERSION);
40
+ (unsigned long long) SPA_VERSION_BEFORE_FEATURES);
42
grub_dprintf ("zfs", "check 9 passed\n");
44
--- a/include/grub/zfs/zfs.h
45
+++ b/include/grub/zfs/zfs.h
48
* On-disk version number.
50
-#define SPA_VERSION 33ULL
52
+#define SPA_VERSION_INITIAL 1ULL
53
+#define SPA_VERSION_BEFORE_FEATURES 33ULL
54
+#define SPA_VERSION_FEATURES 5000ULL
55
+#define SPA_VERSION_IS_SUPPORTED(v) \
56
+ (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \
57
+ ((v) == SPA_VERSION_FEATURES))
59
* The following are configuration names used in the nvlist describing a pool's