diff options
author | maybee <none@none> | 2006-05-16 15:54:21 -0700 |
---|---|---|
committer | maybee <none@none> | 2006-05-16 15:54:21 -0700 |
commit | 77ed85091c75f96e0c776b6b222bc51695e3ee0c (patch) | |
tree | 5599504070958df247852252b811cf7d478d014b /usr/src | |
parent | fabd6b6f69e3a926eb29b3da3cf84698a105520c (diff) | |
download | illumos-joyent-77ed85091c75f96e0c776b6b222bc51695e3ee0c.tar.gz |
6416794 zfs panics in dnode_reallocate during incremental zfs restore
6425740 assertion failed: new_state != old_state
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); |