changeset 10945:b3afbf06f20d

6897933 zfs_get_data: assertion failed: db->db_offset == offset
author Jeff Bonwick <Jeff.Bonwick@Sun.COM>
date Tue, 03 Nov 2009 21:31:39 -0800
parents 30bda6952fd0
children 324bab2b3370
files usr/src/cmd/ztest/ztest.c usr/src/uts/common/fs/zfs/zfs_vnops.c
diffstat 2 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/ztest/ztest.c	Tue Nov 03 19:20:02 2009 -0800
+++ b/usr/src/cmd/ztest/ztest.c	Tue Nov 03 21:31:39 2009 -0800
@@ -1655,8 +1655,12 @@
 		ASSERT(error == 0);
 	} else {
 		size = doi.doi_data_block_size;
-		if (ISP2(size))
+		if (ISP2(size)) {
 			offset = P2ALIGN(offset, size);
+		} else {
+			ASSERT(offset < size);
+			offset = 0;
+		}
 
 		zgd->zgd_rl = ztest_range_lock(zd, object, offset, size,
 		    RL_READER);
--- a/usr/src/uts/common/fs/zfs/zfs_vnops.c	Tue Nov 03 19:20:02 2009 -0800
+++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c	Tue Nov 03 21:31:39 2009 -0800
@@ -929,7 +929,7 @@
 		for (;;) {
 			uint64_t blkoff;
 			size = zp->z_blksz;
-			blkoff = ISP2(size) ? P2PHASE(offset, size) : 0;
+			blkoff = ISP2(size) ? P2PHASE(offset, size) : offset;
 			offset -= blkoff;
 			zgd->zgd_rl = zfs_range_lock(zp, offset, size,
 			    RL_READER);
@@ -939,7 +939,7 @@
 			zfs_range_unlock(zgd->zgd_rl);
 		}
 		/* test for truncation needs to be done while range locked */
-		if (offset >= zp->z_phys->zp_size)
+		if (lr->lr_offset >= zp->z_phys->zp_size)
 			error = ENOENT;
 #ifdef DEBUG
 		if (zil_fault_io) {