Ping!
yuchen...@synology.com 於 2018-08-28 11:18 寫道:
> From: yuchenlin <yuchen...@synology.com> There is a rare case which the size
> of last compressed cluster is larger than the cluster size, which will cause
> the file is not aligned at the sector boundary. Signed-off-by: yuchenlin
> <yuchen...@synology.com> --- block/vmdk.c | 18 ++++++++++++++++++ 1 file
> changed, 18 insertions(+) diff --git a/block/vmdk.c b/block/vmdk.c index
> a9d0084e36..a8ae7c65d2 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@
> -1698,6 +1698,24 @@ static int coroutine_fn
> vmdk_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, uint64_t
> bytes, QEMUIOVector *qiov) { + if (bytes == 0) { + /* align end of file to a
> sector boundary. */ + BDRVVmdkState *s = bs->opaque; + int i, ret; + int64_t
> length; + + for (i = 0; i < s->num_extents; i++) { + length =
> bdrv_getlength(s->extents[i].file->bs); + if (length < 0) { + return length;
> + } + ret = bdrv_truncate(s->extents[i].file, length, PREALLOC_MODE_OFF,
> NULL); + if (ret < 0) { + return ret; + } + } + return 0; + } return
> vmdk_co_pwritev(bs, offset, bytes, qiov, 0); } -- 2.17.0