diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/zfs/arc.c | 3 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/dnode.c | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index 1edcc258e8..7ad5cb634b 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -2246,7 +2246,8 @@ arc_free(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, */ ASSERT(bp->blk_cksum.zc_word[0] == 0 || ab->b_cksum0 == bp->blk_cksum.zc_word[0]); - arc_change_state(arc.anon, ab, hash_lock); + if (ab->b_state != arc.anon) + arc_change_state(arc.anon, ab, hash_lock); if (refcount_is_zero(&ab->b_refcnt)) { mutex_exit(hash_lock); arc_hdr_destroy(ab); diff --git a/usr/src/uts/common/fs/zfs/dnode.c b/usr/src/uts/common/fs/zfs/dnode.c index b448efd2eb..6de40f5081 100644 --- a/usr/src/uts/common/fs/zfs/dnode.c +++ b/usr/src/uts/common/fs/zfs/dnode.c @@ -442,6 +442,7 @@ dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, rw_exit(&dn->dn_struct_rwlock); if (refcount_add(&db->db_holds, FTAG) == 1) dnode_add_ref(dn, db); + VERIFY(0 == dbuf_read(db, NULL, DB_RF_MUST_SUCCEED)); mutex_enter(&db->db_mtx); ASSERT3U(db->db.db_size, ==, dn->dn_bonuslen); ASSERT(db->db.db_data != NULL); |