diff options
| -rw-r--r-- | usr/src/cmd/ztest/ztest.c | 6 | ||||
| -rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_vnops.c | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/usr/src/cmd/ztest/ztest.c b/usr/src/cmd/ztest/ztest.c index c18803b3d3..37d695905b 100644 --- a/usr/src/cmd/ztest/ztest.c +++ b/usr/src/cmd/ztest/ztest.c @@ -1655,8 +1655,12 @@ ztest_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio) 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); diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c index ec7a3dcc11..7694a5bc68 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vnops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c @@ -929,7 +929,7 @@ zfs_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio) 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_get_data(void *arg, lr_write_t *lr, char *buf, zio_t *zio) 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) { |
