This series adds two preallocation mode to qcow2 and raw: Option preallocation=full preallocates disk space for image by writing zeros to disk, this ensures disk space in any cases.
Option preallocation=falloc preallocates disk space by calling posix_fallocate(). This is faster than preallocation=full. Note: there is a false positive reported by checkpatch.pl to patch 1. changes to v14: - add detailed commit message to patch 1 - change the coding style as Eric and Benoît suggested (patch 3) - use break as Benoît suggested (patch 4) changes to v13: - rebase (patch 3 in v13 is already in) - don't convert file size to sector size in hdev_create(), too (patch 2) - reintroduce preallocation=falloc. (patch 3) - split the implementation of preallocation=full in v13 into preallocation=falloc and preallocation=full (patch 4) changes to v12: - remove dependence on minimal_blob_size() (patch 6) - remove preallocation=falloc. (patch 4) - preallocation=full tries posix_fallocate() first then writing zeros (patch 5) - round up file size for all formats (patch 1) - avoid converting file size for more formats (patch 2) changes to v11: - fix test case 049 (patch 4) - unsigned nl2e -> uint64_t nl2e (patch 6) - use >> instead of / (patch 6) changes to v10: - PreallocMode is moved from file qapi-schema.json to qapi/block-core.json - introdues preallocation=falloc, no changes to preallocation=metadata - using minimal_blob_size() to calculate metadata size for qcow2 - indentation fix in file blockdev.c changes to v9: - use ROUND_UP to do round up - split the round up into its own patch and add test case - new patch rename parse_enum_option to qapi_enum_parse and make it public - reuse qapi_enum_parse changes to v8: - round up image file size to nearest sector size - dont' blindly lose error info - target for 2.1 rather than 2.0 - and, rebase to latest git tree changes to v5: - add `Since 2.0' to PreallocMode - apply total_size change to raw-win32.c as well changes to v4: - fix wrong calculation of qcow2 metadata size in v4 - remove raw_preallocate2() - better error out path in raw_create() - fix coding style changes to v3: - remove bdrv_preallocate and make preallocation a bdrv_create_file option - prealloc_mode -> PreallocMode and add it to QAPI - fix return value in raw_preallocate2 changes to v2: - Fix comments to v2 by Fam. - qcow2: first fallocate disk space, then allocate metadata. This avoids the problem in v2 that bdrv_preallocate may clear all information in metadata. This does not necessarily map all data clusters sequentially but does keep information in metadata. Peter, is this acceptable? Hu Tao (5): block: round up file size to nearest sector block: don't convert file size to sector size qapi: introduce PreallocMode and new PreallocModes full and falloc. raw-posix: Add falloc and full preallocation option qcow2: Add falloc and full preallocation option block/archipelago.c | 3 +- block/cow.c | 3 +- block/gluster.c | 9 ++-- block/iscsi.c | 4 +- block/nfs.c | 3 +- block/qcow.c | 7 +-- block/qcow2.c | 82 +++++++++++++++++++++++++------ block/qed.c | 3 +- block/raw-posix.c | 102 ++++++++++++++++++++++++++++++--------- block/raw-win32.c | 6 +-- block/rbd.c | 3 +- block/sheepdog.c | 3 +- block/ssh.c | 3 +- block/vdi.c | 3 +- block/vhdx.c | 3 +- block/vmdk.c | 3 +- block/vpc.c | 3 +- qapi/block-core.json | 17 +++++++ qemu-doc.texi | 17 +++++-- qemu-img.texi | 17 +++++-- tests/qemu-iotests/049.out | 2 +- tests/qemu-iotests/082.out | 54 ++++++++++----------- tests/qemu-iotests/104 | 57 ++++++++++++++++++++++ tests/qemu-iotests/104.out | 12 +++++ tests/qemu-iotests/common.filter | 21 ++++++++ tests/qemu-iotests/group | 1 + 26 files changed, 344 insertions(+), 97 deletions(-) create mode 100755 tests/qemu-iotests/104 create mode 100644 tests/qemu-iotests/104.out -- 1.9.3