]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
ZFS: support inode type embed into its ID
authorVladimir Serbinenko <phcoder@gmail.com>
Mon, 3 Jul 2023 17:41:27 +0000 (19:41 +0200)
committerVladimir Serbinenko <phcoder@gmail.com>
Mon, 18 Sep 2023 00:42:21 +0000 (02:42 +0200)
This is a speedup used in some ZFS version. This trips GRUB and makes it
unable to access directories. Just skip it for now and revisit
if we ever need this speedup.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/fs/zfs/zfs.c

index 0e195db9724caa768f42732f3360aab0445d0856..d6a321f086a11de75f5ac746d400121b29d315cb 100644 (file)
@@ -73,6 +73,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
 #define        DATA_TYPE_NVLIST        19
 #define        DATA_TYPE_NVLIST_ARRAY  20
 
+#define DNODE_NUM_MASK 0xffffffffffffULL
+
 #ifndef GRUB_UTIL
 static grub_dl_t my_mod;
 #endif
@@ -2669,6 +2671,8 @@ dnode_get (dnode_end_t * mdn, grub_uint64_t objnum, grub_uint8_t type,
   grub_err_t err;
   grub_zfs_endian_t endian;
 
+  objnum &= DNODE_NUM_MASK;
+
   blksz = grub_zfs_to_cpu16 (mdn->dn.dn_datablkszsec,
                             mdn->endian) << SPA_MINBLOCKSHIFT;
   epbs = zfs_log2 (blksz) - DNODE_SHIFT;