]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
zfs: com.delphix:hole_birth feature support
authorToomas Soome <tsoome@me.com>
Thu, 16 Apr 2015 05:22:08 +0000 (08:22 +0300)
committerAndrei Borzenkov <arvidjaar@gmail.com>
Sun, 3 May 2015 15:11:29 +0000 (18:11 +0300)
In the past birth was always zero for holes. This feature started
to make use of birth for holes as well, so change code to test for
valid DVA address instead.

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

index 0cbb84bb36c2aae4ef6e6be76276300bc3595d7f..71c155df2a969c4f68ad0fe11e3f21bd1e92d310 100644 (file)
@@ -280,7 +280,9 @@ grub_crypto_cipher_handle_t (*grub_zfs_load_key) (const struct grub_zfs_key *key
  */
 #define MAX_SUPPORTED_FEATURE_STRLEN 50
 static const char *spa_feature_names[] = {
-  "org.illumos:lz4_compress",NULL
+  "org.illumos:lz4_compress",
+  "com.delphix:hole_birth",
+  NULL
 };
 
 static int
@@ -1751,7 +1753,7 @@ zio_read_gang (blkptr_t * bp, grub_zfs_endian_t endian, dva_t * dva, void *buf,
 
   for (i = 0; i < SPA_GBH_NBLKPTRS; i++)
     {
-      if (zio_gb->zg_blkptr[i].blk_birth == 0)
+      if (BP_IS_HOLE(&zio_gb->zg_blkptr[i]))
        continue;
 
       err = zio_read_data (&zio_gb->zg_blkptr[i], endian, buf, data);
index 7edb8ab7d701affc0d3e47105792e4182fd25a14..df43b6b3275b5c323d34df2c49030fde95e71ce6 100644 (file)
@@ -279,7 +279,9 @@ typedef struct blkptr {
 
 #define        BP_IDENTITY(bp)         (&(bp)->blk_dva[0])
 #define        BP_IS_GANG(bp)          DVA_GET_GANG(BP_IDENTITY(bp))
-#define        BP_IS_HOLE(bp)          ((bp)->blk_birth == 0)
+#define        DVA_IS_EMPTY(dva)       ((dva)->dva_word[0] == 0ULL && \
+                               (dva)->dva_word[1] == 0ULL)
+#define        BP_IS_HOLE(bp)          DVA_IS_EMPTY(BP_IDENTITY(bp))
 
 /* BP_IS_RAIDZ(bp) assumes no block compression */
 #define        BP_IS_RAIDZ(bp)         (DVA_GET_ASIZE(&(bp)->blk_dva[0]) > \