Mercurial > illumos > illumos-gate
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) {