summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authormaybee <none@none>2006-05-16 15:54:21 -0700
committermaybee <none@none>2006-05-16 15:54:21 -0700
commit77ed85091c75f96e0c776b6b222bc51695e3ee0c (patch)
tree5599504070958df247852252b811cf7d478d014b /usr/src
parentfabd6b6f69e3a926eb29b3da3cf84698a105520c (diff)
downloadillumos-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.c3
-rw-r--r--usr/src/uts/common/fs/zfs/dnode.c1
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);