# HG changeset patch # User Matthew Ahrens # Date 1375900366 28800 # Node ID 6f5ac5d649aff1ba7c8521e5af310ae572435137 # Parent e9e346400fef3a8a20e326deebff967a7b78321f 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 diff -r e9e346400fef -r 6f5ac5d649af usr/src/cmd/ztest/ztest.c --- a/usr/src/cmd/ztest/ztest.c Wed Aug 07 10:24:34 2013 -0800 +++ b/usr/src/cmd/ztest/ztest.c Wed Aug 07 10:32:46 2013 -0800 @@ -3605,6 +3605,9 @@ 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 -r e9e346400fef -r 6f5ac5d649af usr/src/uts/common/fs/zfs/dmu_tx.c --- a/usr/src/uts/common/fs/zfs/dmu_tx.c Wed Aug 07 10:24:34 2013 -0800 +++ b/usr/src/uts/common/fs/zfs/dmu_tx.c Wed Aug 07 10:32:46 2013 -0800 @@ -448,12 +448,12 @@ 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 */