diff --git a/include/sys/spa.h b/include/sys/spa.h index 715be9eb163f..1606d45e2a1b 100644 --- a/include/sys/spa.h +++ b/include/sys/spa.h @@ -670,7 +670,6 @@ typedef struct blkptr { (u_longlong_t)DVA_GET_ASIZE(dva), \ ws); \ } \ - ASSERT3S(copies, >, 0); \ if (BP_IS_ENCRYPTED(bp)) { \ len += func(buf + len, size - len, \ "salt=%llx iv=%llx:%llx%c", \ @@ -679,10 +678,6 @@ typedef struct blkptr { (u_longlong_t)BP_GET_IV2(bp), \ ws); \ } \ - if (BP_IS_GANG(bp) && \ - DVA_GET_ASIZE(&bp->blk_dva[2]) <= \ - DVA_GET_ASIZE(&bp->blk_dva[1]) / 2) \ - copies--; \ len += func(buf + len, size - len, \ "[L%llu %s] %s %s %s %s %s %s %s%c" \ "size=%llxL/%llxP birth=%lluL/%lluP fill=%llu%c" \ diff --git a/module/zfs/zio.c b/module/zfs/zio.c index 36e2f5e4bba8..9058c19084cd 100644 --- a/module/zfs/zio.c +++ b/module/zfs/zio.c @@ -1212,6 +1212,16 @@ zfs_blkptr_verify(spa_t *spa, const blkptr_t *bp, bp, (longlong_t)BPE_GET_PSIZE(bp)); } return (errors ? ECKSUM : 0); + } else if (BP_IS_HOLE(bp)) { + /* + * Holes are allowed (expected, even) to have no DVAs, no + * checksum, and no psize. + */ + return (errors ? ECKSUM : 0); + } else if (unlikely(!DVA_IS_VALID(&bp->blk_dva[0]))) { + /* Non-hole, non-embedded BPs _must_ have at least one DVA */ + errors += zfs_blkptr_verify_log(spa, bp, blk_verify, + "blkptr at %px has no valid DVAs", bp); } if (unlikely(BP_GET_CHECKSUM(bp) >= ZIO_CHECKSUM_FUNCTIONS)) { errors += zfs_blkptr_verify_log(spa, bp, blk_verify,