В Thu, 16 Apr 2015 08:22:08 +0300 Toomas Soome <tso...@me.com> пишет:
This really needs better explanation. Otherwise this looks like either old code was broken to start with and it is a bug fix or new code needs some conditionals on new feature. > > --- > grub-core/fs/zfs/zfs.c | 6 ++++-- > include/grub/zfs/spa.h | 4 +++- > 2 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c > index 2689986..a731c3d 100644 > --- a/grub-core/fs/zfs/zfs.c > +++ b/grub-core/fs/zfs/zfs.c > @@ -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); > diff --git a/include/grub/zfs/spa.h b/include/grub/zfs/spa.h > index 7edb8ab..df43b6b 100644 > --- a/include/grub/zfs/spa.h > +++ b/include/grub/zfs/spa.h > @@ -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]) > \ _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel