summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYing Zhu <[email protected]>2013-04-30 11:15:12 +0800
committerBrian Behlendorf <[email protected]>2013-05-06 14:10:55 -0700
commitee664d463189d6302877461967afe21ce9d861a0 (patch)
treed0479010b1061cfda7d4821dad64338a94a81523
parent044baf009aac4935eca0f96477eb3c43e95d758a (diff)
Fix incorrect assertions in ddt_phys_decref and ddt_sync_entry
The assertions in ddt_phys_decref and ddt_sync_entry cast ddp->ddp_refcnt from uint64_t to int64_t, with a reference count bigger than 2^63, e.g. the reference count of zero blocks commonly available in spare files, we may mistakenly hit these assertations, so drop the type conversions here. Signed-off-by: Ying Zhu <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #1436
-rw-r--r--module/zfs/ddt.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/module/zfs/ddt.c b/module/zfs/ddt.c
index 2d8763a54..286f3bb60 100644
--- a/module/zfs/ddt.c
+++ b/module/zfs/ddt.c
@@ -324,7 +324,7 @@ void
ddt_phys_decref(ddt_phys_t *ddp)
{
if (ddp) {
- ASSERT((int64_t)ddp->ddp_refcnt > 0);
+ ASSERT(ddp->ddp_refcnt > 0);
ddp->ddp_refcnt--;
}
}
@@ -1058,7 +1058,6 @@ ddt_sync_entry(ddt_t *ddt, ddt_entry_t *dde, dmu_tx_t *tx, uint64_t txg)
for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) {
ASSERT(dde->dde_lead_zio[p] == NULL);
- ASSERT((int64_t)ddp->ddp_refcnt >= 0);
if (ddp->ddp_phys_birth == 0) {
ASSERT(ddp->ddp_refcnt == 0);
continue;