Skip to content

Commit

Permalink
system/physmem: take into account fd_offset for file fallocate
Browse files Browse the repository at this point in the history
Punching a hole in a file with fallocate needs to take into account the
fd_offset value for a correct file location.

Fixes: 4b870dc ("hostmem-file: add offset option")

Signed-off-by: William Roche <william.roche@oracle.com>
  • Loading branch information
RocheWilliam authored and GitHub Actions Bot committed Jan 21, 2025
1 parent d6430c1 commit e6ce974
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions system/physmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -3689,18 +3689,20 @@ int ram_block_discard_range(RAMBlock *rb, uint64_t start, size_t length)
}

ret = fallocate(rb->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
start, length);
start + rb->fd_offset, length);
if (ret) {
ret = -errno;
error_report("%s: Failed to fallocate %s:%" PRIx64 " +%zx (%d)",
__func__, rb->idstr, start, length, ret);
__func__, rb->idstr, start + rb->fd_offset, length,
ret);
goto err;
}
#else
ret = -ENOSYS;
error_report("%s: fallocate not available/file"
"%s:%" PRIx64 " +%zx (%d)",
__func__, rb->idstr, start, length, ret);
__func__, rb->idstr, start + rb->fd_offset, length,
ret);
goto err;
#endif
}
Expand Down Expand Up @@ -3748,17 +3750,17 @@ int ram_block_discard_guest_memfd_range(RAMBlock *rb, uint64_t start,

#ifdef CONFIG_FALLOCATE_PUNCH_HOLE
ret = fallocate(rb->guest_memfd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
start, length);
start + rb->offset, length);

if (ret) {
ret = -errno;
error_report("%s: Failed to fallocate %s:%" PRIx64 " +%zx (%d)",
__func__, rb->idstr, start, length, ret);
__func__, rb->idstr, start + rb->fd_offset, length, ret);
}
#else
ret = -ENOSYS;
error_report("%s: fallocate not available %s:%" PRIx64 " +%zx (%d)",
__func__, rb->idstr, start, length, ret);
__func__, rb->idstr, start + rb->fd_offset, length, ret);
#endif

return ret;
Expand Down

0 comments on commit e6ce974

Please sign in to comment.