summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/cmd/ztest/ztest.c6
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_vnops.c4
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) {