Matt, a question:

in the following code path in dnode_sync.c:
....
        if (dn->dn_next_nblkptr[txgoff]) {
                /* this should only happen on a realloc */
                ASSERT(dn->dn_allocated_txg == tx->tx_txg);
                if (dn->dn_next_nblkptr[txgoff] > dnp->dn_nblkptr) {
                        /* zero the new blkptrs we are gaining */
                        bzero(dnp->dn_blkptr + dnp->dn_nblkptr,
                            sizeof (blkptr_t) *
                            (dn->dn_next_nblkptr[txgoff] - dnp->dn_nblkptr));
#ifdef ZFS_DEBUG
                } else {
                        int i;
                        ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
                        /* the blkptrs we are losing better be unallocated */
                        for (i = dn->dn_next_nblkptr[txgoff];
                            i < dnp->dn_nblkptr; i++)
                                ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
#endif
....
when losing the block pointers in the dnode with HOLE_BIRTH feature enabled txg 
<= current txg, should assert birth_epoch != 0 ? 

---
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/46#issuecomment-165572235
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to