From 6b51856ae3ac2bcf47a83f7feed9365deeec5aa7 Mon Sep 17 00:00:00 2001 From: George Amanakis Date: Fri, 19 Feb 2021 21:10:20 +0100 Subject: [PATCH] now fails looking up the key mapping Signed-off-by: George Amanakis --- module/zfs/dnode.c | 6 +++++- module/zfs/dnode_sync.c | 5 +++-- module/zfs/dsl_crypt.c | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/module/zfs/dnode.c b/module/zfs/dnode.c index eaba9c0c0e7f..cafa650869a3 100644 --- a/module/zfs/dnode.c +++ b/module/zfs/dnode.c @@ -1610,7 +1610,11 @@ dnode_rele_and_unlock(dnode_t *dn, void *tag, boolean_t evicting) dmu_buf_impl_t *db = dn->dn_dbuf; dnode_handle_t *dnh = dn->dn_handle; - refs = zfs_refcount_remove(&dn->dn_holds, tag); + if (zfs_refcount_count(&dn->dn_holds) > 0) { + refs = zfs_refcount_remove(&dn->dn_holds, tag); + } else { + refs = 0; + } if (refs == 0) cv_broadcast(&dn->dn_nodnholds); mutex_exit(&dn->dn_mtx); diff --git a/module/zfs/dnode_sync.c b/module/zfs/dnode_sync.c index 66e48a1e17d4..e0da2e130b1b 100644 --- a/module/zfs/dnode_sync.c +++ b/module/zfs/dnode_sync.c @@ -594,10 +594,11 @@ dnode_sync_free(dnode_t *dn, dmu_tx_t *tx) ASSERT(dn->dn_type != DMU_OT_NONE); ASSERT(dn->dn_free_txg > 0); - if (dn->dn_allocated_txg != dn->dn_free_txg) + if (dn->dn_allocated_txg != dn->dn_free_txg && &dn->dn_dbuf->db != NULL) dmu_buf_will_dirty(&dn->dn_dbuf->db, tx); bzero(dn->dn_phys, sizeof (dnode_phys_t) * dn->dn_num_slots); - dnode_free_interior_slots(dn); + if (&dn->dn_dbuf->db != NULL) + dnode_free_interior_slots(dn); mutex_enter(&dn->dn_mtx); dn->dn_type = DMU_OT_NONE; diff --git a/module/zfs/dsl_crypt.c b/module/zfs/dsl_crypt.c index 1f24c750c8e4..7e3bc35e3ae9 100644 --- a/module/zfs/dsl_crypt.c +++ b/module/zfs/dsl_crypt.c @@ -2687,14 +2687,18 @@ spa_do_crypt_objset_mac_abd(boolean_t generate, spa_t *spa, uint64_t dsobj, /* look up the key from the spa's keystore */ ret = spa_keystore_lookup_key(spa, dsobj, FTAG, &dck); - if (ret != 0) + if (ret != 0) { + zfs_dbgmsg("lookup failed"); goto error; + } /* calculate both HMACs */ ret = zio_crypt_do_objset_hmacs(&dck->dck_key, buf, datalen, byteswap, portable_mac, local_mac); - if (ret != 0) + if (ret != 0) { + zfs_dbgmsg("calc failed"); goto error; + } spa_keystore_dsl_key_rele(spa, dck, FTAG); @@ -2709,6 +2713,7 @@ spa_do_crypt_objset_mac_abd(boolean_t generate, spa_t *spa, uint64_t dsobj, if (bcmp(portable_mac, osp->os_portable_mac, ZIO_OBJSET_MAC_LEN) != 0 || bcmp(local_mac, osp->os_local_mac, ZIO_OBJSET_MAC_LEN) != 0) { abd_return_buf(abd, buf, datalen); + zfs_dbgmsg("cksum failed"); return (SET_ERROR(ECKSUM)); }