From 383fc4a9970ede483dc4bd7579f1c62942d1312f Mon Sep 17 00:00:00 2001 From: Matthew Ahrens Date: Wed, 7 Aug 2013 10:32:46 -0800 Subject: [PATCH] Illumos #3955 3955 ztest failure: assertion refcount_count(&tx->tx_space_written) + delta <= tx->tx_space_towrite Reviewed by: Adam Leventhal Reviewed by: Dan Kimmel Reviewed by: George Wilson Approved by: Richard Lowe References: https://www.illumos.org/issues/3955 illumos/illumos-gate@be9000cc677e0a8d04e5be45c61d7370fc8c7b54 Ported-by: Richard Yao Signed-off-by: Brian Behlendorf Issue #1775 --- cmd/ztest/ztest.c | 3 +++ module/zfs/dmu_tx.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c index 3b26f8d1e..0a7ca1c16 100644 --- a/cmd/ztest/ztest.c +++ b/cmd/ztest/ztest.c @@ -3715,6 +3715,9 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id) else dmu_tx_hold_write(tx, bigobj, bigoff, bigsize); + /* This accounts for setting the checksum/compression. */ + dmu_tx_hold_bonus(tx, bigobj); + txg = ztest_tx_assign(tx, TXG_MIGHTWAIT, FTAG); if (txg == 0) { umem_free(packbuf, packsize); diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c index 7ee214bb0..5e4a5cbbe 100644 --- a/module/zfs/dmu_tx.c +++ b/module/zfs/dmu_tx.c @@ -465,12 +465,12 @@ dmu_tx_count_free(dmu_tx_hold_t *txh, uint64_t off, uint64_t len) blkid = off >> dn->dn_datablkshift; nblks = (len + dn->dn_datablksz - 1) >> dn->dn_datablkshift; - if (blkid >= dn->dn_maxblkid) { + if (blkid > dn->dn_maxblkid) { rw_exit(&dn->dn_struct_rwlock); return; } if (blkid + nblks > dn->dn_maxblkid) - nblks = dn->dn_maxblkid - blkid; + nblks = dn->dn_maxblkid - blkid + 1; } l0span = nblks; /* save for later use to calc level > 1 overhead */ -- 2.39.2