changeset 14121:6f5ac5d649af

3955 ztest failure: assertion refcount_count(&tx->tx_space_written) + delta <= tx->tx_space_towrite Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Approved by: Richard Lowe <richlowe@richlowe.net>
author Matthew Ahrens <mahrens@delphix.com>
date Wed, 07 Aug 2013 10:32:46 -0800
parents e9e346400fef
children 1e57939bc87d
files usr/src/cmd/ztest/ztest.c usr/src/uts/common/fs/zfs/dmu_tx.c
diffstat 2 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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 */