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   


Reply via email to