Commit 585ea0c8 authored by Fam Zheng's avatar Fam Zheng Committed by Kevin Wolf
Browse files

vmdk: Fix big flat extent IO



Local variable "n" as int64_t avoids overflow with large sector number
calculation. See test case change for failure case.

Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 7fa9e1f9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1325,8 +1325,8 @@ static int vmdk_write(BlockDriverState *bs, int64_t sector_num,
{
    BDRVVmdkState *s = bs->opaque;
    VmdkExtent *extent = NULL;
    int n, ret;
    int64_t index_in_cluster;
    int ret;
    int64_t index_in_cluster, n;
    uint64_t extent_begin_sector, extent_relative_sector_num;
    uint64_t cluster_offset;
    VmdkMetaData m_data;
+7 −0
Original line number Diff line number Diff line
@@ -102,6 +102,13 @@ echo "=== Testing version 3 ==="
_use_sample_img iotest-version3.vmdk.bz2
_img_info

echo
echo "=== Testing 4TB monolithicFlat creation and IO ==="
IMGOPTS="subformat=monolithicFlat" _make_test_img 4T
_img_info
$QEMU_IO -c "write -P 0xa 900G 512" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -v 900G 1024" "$TEST_IMG" | _filter_qemu_io

# success, all done
echo "*** done"
rm -f $seq.full
+74 −0
Original line number Diff line number Diff line
@@ -2047,4 +2047,78 @@ RW 12582912 VMFS "dummy.IMGFMT" 1
image: TEST_DIR/iotest-version3.IMGFMT
file format: IMGFMT
virtual size: 1.0G (1073741824 bytes)

=== Testing 4TB monolithicFlat creation and IO ===
Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104
image: TEST_DIR/iotest-version3.IMGFMT
file format: IMGFMT
virtual size: 4.0T (4398046511104 bytes)
wrote 512/512 bytes at offset 966367641600
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
e100000000:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000010:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000020:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000030:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000040:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000050:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000060:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000070:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000080:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000090:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000a0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000b0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000c0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000d0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000e0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000000f0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000100:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000110:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000120:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000130:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000140:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000150:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000160:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000170:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000180:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000190:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001a0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001b0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001c0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001d0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001e0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e1000001f0:  0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a  ................
e100000200:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000210:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000220:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000230:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000240:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000250:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000260:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000270:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000280:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000290:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002a0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002b0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002c0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002d0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002e0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000002f0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000300:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000310:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000320:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000330:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000340:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000350:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000360:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000370:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000380:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e100000390:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003a0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003b0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003c0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003d0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003e0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
e1000003f0:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
read 1024/1024 bytes at offset 966367641600
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
*** done