cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

qcow2.h (37072B)


      1/*
      2 * Block driver for the QCOW version 2 format
      3 *
      4 * Copyright (c) 2004-2006 Fabrice Bellard
      5 *
      6 * Permission is hereby granted, free of charge, to any person obtaining a copy
      7 * of this software and associated documentation files (the "Software"), to deal
      8 * in the Software without restriction, including without limitation the rights
      9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     10 * copies of the Software, and to permit persons to whom the Software is
     11 * furnished to do so, subject to the following conditions:
     12 *
     13 * The above copyright notice and this permission notice shall be included in
     14 * all copies or substantial portions of the Software.
     15 *
     16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     22 * THE SOFTWARE.
     23 */
     24
     25#ifndef BLOCK_QCOW2_H
     26#define BLOCK_QCOW2_H
     27
     28#include "crypto/block.h"
     29#include "qemu/coroutine.h"
     30#include "qemu/units.h"
     31#include "block/block_int.h"
     32
     33//#define DEBUG_ALLOC
     34//#define DEBUG_ALLOC2
     35//#define DEBUG_EXT
     36
     37#define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
     38
     39#define QCOW_CRYPT_NONE 0
     40#define QCOW_CRYPT_AES  1
     41#define QCOW_CRYPT_LUKS 2
     42
     43#define QCOW_MAX_CRYPT_CLUSTERS 32
     44#define QCOW_MAX_SNAPSHOTS 65536
     45
     46/* Field widths in qcow2 mean normal cluster offsets cannot reach
     47 * 64PB; depending on cluster size, compressed clusters can have a
     48 * smaller limit (64PB for up to 16k clusters, then ramps down to
     49 * 512TB for 2M clusters).  */
     50#define QCOW_MAX_CLUSTER_OFFSET ((1ULL << 56) - 1)
     51
     52/* 8 MB refcount table is enough for 2 PB images at 64k cluster size
     53 * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */
     54#define QCOW_MAX_REFTABLE_SIZE (8 * MiB)
     55
     56/* 32 MB L1 table is enough for 2 PB images at 64k cluster size
     57 * (128 GB for 512 byte clusters, 2 EB for 2 MB clusters) */
     58#define QCOW_MAX_L1_SIZE (32 * MiB)
     59
     60/* Allow for an average of 1k per snapshot table entry, should be plenty of
     61 * space for snapshot names and IDs */
     62#define QCOW_MAX_SNAPSHOTS_SIZE (1024 * QCOW_MAX_SNAPSHOTS)
     63
     64/* Maximum amount of extra data per snapshot table entry to accept */
     65#define QCOW_MAX_SNAPSHOT_EXTRA_DATA 1024
     66
     67/* Bitmap header extension constraints */
     68#define QCOW2_MAX_BITMAPS 65535
     69#define QCOW2_MAX_BITMAP_DIRECTORY_SIZE (1024 * QCOW2_MAX_BITMAPS)
     70
     71/* Maximum of parallel sub-request per guest request */
     72#define QCOW2_MAX_WORKERS 8
     73
     74/* indicate that the refcount of the referenced cluster is exactly one. */
     75#define QCOW_OFLAG_COPIED     (1ULL << 63)
     76/* indicate that the cluster is compressed (they never have the copied flag) */
     77#define QCOW_OFLAG_COMPRESSED (1ULL << 62)
     78/* The cluster reads as all zeros */
     79#define QCOW_OFLAG_ZERO (1ULL << 0)
     80
     81#define QCOW_EXTL2_SUBCLUSTERS_PER_CLUSTER 32
     82
     83/* The subcluster X [0..31] is allocated */
     84#define QCOW_OFLAG_SUB_ALLOC(X)   (1ULL << (X))
     85/* The subcluster X [0..31] reads as zeroes */
     86#define QCOW_OFLAG_SUB_ZERO(X)    (QCOW_OFLAG_SUB_ALLOC(X) << 32)
     87/* Subclusters [X, Y) (0 <= X <= Y <= 32) are allocated */
     88#define QCOW_OFLAG_SUB_ALLOC_RANGE(X, Y) \
     89    (QCOW_OFLAG_SUB_ALLOC(Y) - QCOW_OFLAG_SUB_ALLOC(X))
     90/* Subclusters [X, Y) (0 <= X <= Y <= 32) read as zeroes */
     91#define QCOW_OFLAG_SUB_ZERO_RANGE(X, Y) \
     92    (QCOW_OFLAG_SUB_ALLOC_RANGE(X, Y) << 32)
     93/* L2 entry bitmap with all allocation bits set */
     94#define QCOW_L2_BITMAP_ALL_ALLOC  (QCOW_OFLAG_SUB_ALLOC_RANGE(0, 32))
     95/* L2 entry bitmap with all "read as zeroes" bits set */
     96#define QCOW_L2_BITMAP_ALL_ZEROES (QCOW_OFLAG_SUB_ZERO_RANGE(0, 32))
     97
     98/* Size of normal and extended L2 entries */
     99#define L2E_SIZE_NORMAL   (sizeof(uint64_t))
    100#define L2E_SIZE_EXTENDED (sizeof(uint64_t) * 2)
    101
    102/* Size of L1 table entries */
    103#define L1E_SIZE (sizeof(uint64_t))
    104
    105/* Size of reftable entries */
    106#define REFTABLE_ENTRY_SIZE (sizeof(uint64_t))
    107
    108#define MIN_CLUSTER_BITS 9
    109#define MAX_CLUSTER_BITS 21
    110
    111/* Defined in the qcow2 spec (compressed cluster descriptor) */
    112#define QCOW2_COMPRESSED_SECTOR_SIZE 512U
    113
    114/* Must be at least 2 to cover COW */
    115#define MIN_L2_CACHE_SIZE 2 /* cache entries */
    116
    117/* Must be at least 4 to cover all cases of refcount table growth */
    118#define MIN_REFCOUNT_CACHE_SIZE 4 /* clusters */
    119
    120#ifdef CONFIG_LINUX
    121#define DEFAULT_L2_CACHE_MAX_SIZE (32 * MiB)
    122#define DEFAULT_CACHE_CLEAN_INTERVAL 600  /* seconds */
    123#else
    124#define DEFAULT_L2_CACHE_MAX_SIZE (8 * MiB)
    125/* Cache clean interval is currently available only on Linux, so must be 0 */
    126#define DEFAULT_CACHE_CLEAN_INTERVAL 0
    127#endif
    128
    129#define DEFAULT_CLUSTER_SIZE 65536
    130
    131#define QCOW2_OPT_DATA_FILE "data-file"
    132#define QCOW2_OPT_LAZY_REFCOUNTS "lazy-refcounts"
    133#define QCOW2_OPT_DISCARD_REQUEST "pass-discard-request"
    134#define QCOW2_OPT_DISCARD_SNAPSHOT "pass-discard-snapshot"
    135#define QCOW2_OPT_DISCARD_OTHER "pass-discard-other"
    136#define QCOW2_OPT_OVERLAP "overlap-check"
    137#define QCOW2_OPT_OVERLAP_TEMPLATE "overlap-check.template"
    138#define QCOW2_OPT_OVERLAP_MAIN_HEADER "overlap-check.main-header"
    139#define QCOW2_OPT_OVERLAP_ACTIVE_L1 "overlap-check.active-l1"
    140#define QCOW2_OPT_OVERLAP_ACTIVE_L2 "overlap-check.active-l2"
    141#define QCOW2_OPT_OVERLAP_REFCOUNT_TABLE "overlap-check.refcount-table"
    142#define QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK "overlap-check.refcount-block"
    143#define QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE "overlap-check.snapshot-table"
    144#define QCOW2_OPT_OVERLAP_INACTIVE_L1 "overlap-check.inactive-l1"
    145#define QCOW2_OPT_OVERLAP_INACTIVE_L2 "overlap-check.inactive-l2"
    146#define QCOW2_OPT_OVERLAP_BITMAP_DIRECTORY "overlap-check.bitmap-directory"
    147#define QCOW2_OPT_CACHE_SIZE "cache-size"
    148#define QCOW2_OPT_L2_CACHE_SIZE "l2-cache-size"
    149#define QCOW2_OPT_L2_CACHE_ENTRY_SIZE "l2-cache-entry-size"
    150#define QCOW2_OPT_REFCOUNT_CACHE_SIZE "refcount-cache-size"
    151#define QCOW2_OPT_CACHE_CLEAN_INTERVAL "cache-clean-interval"
    152
    153typedef struct QCowHeader {
    154    uint32_t magic;
    155    uint32_t version;
    156    uint64_t backing_file_offset;
    157    uint32_t backing_file_size;
    158    uint32_t cluster_bits;
    159    uint64_t size; /* in bytes */
    160    uint32_t crypt_method;
    161    uint32_t l1_size; /* XXX: save number of clusters instead ? */
    162    uint64_t l1_table_offset;
    163    uint64_t refcount_table_offset;
    164    uint32_t refcount_table_clusters;
    165    uint32_t nb_snapshots;
    166    uint64_t snapshots_offset;
    167
    168    /* The following fields are only valid for version >= 3 */
    169    uint64_t incompatible_features;
    170    uint64_t compatible_features;
    171    uint64_t autoclear_features;
    172
    173    uint32_t refcount_order;
    174    uint32_t header_length;
    175
    176    /* Additional fields */
    177    uint8_t compression_type;
    178
    179    /* header must be a multiple of 8 */
    180    uint8_t padding[7];
    181} QEMU_PACKED QCowHeader;
    182
    183QEMU_BUILD_BUG_ON(!QEMU_IS_ALIGNED(sizeof(QCowHeader), 8));
    184
    185typedef struct QEMU_PACKED QCowSnapshotHeader {
    186    /* header is 8 byte aligned */
    187    uint64_t l1_table_offset;
    188
    189    uint32_t l1_size;
    190    uint16_t id_str_size;
    191    uint16_t name_size;
    192
    193    uint32_t date_sec;
    194    uint32_t date_nsec;
    195
    196    uint64_t vm_clock_nsec;
    197
    198    uint32_t vm_state_size;
    199    uint32_t extra_data_size; /* for extension */
    200    /* extra data follows */
    201    /* id_str follows */
    202    /* name follows  */
    203} QCowSnapshotHeader;
    204
    205typedef struct QEMU_PACKED QCowSnapshotExtraData {
    206    uint64_t vm_state_size_large;
    207    uint64_t disk_size;
    208    uint64_t icount;
    209} QCowSnapshotExtraData;
    210
    211
    212typedef struct QCowSnapshot {
    213    uint64_t l1_table_offset;
    214    uint32_t l1_size;
    215    char *id_str;
    216    char *name;
    217    uint64_t disk_size;
    218    uint64_t vm_state_size;
    219    uint32_t date_sec;
    220    uint32_t date_nsec;
    221    uint64_t vm_clock_nsec;
    222    /* icount value for the moment when snapshot was taken */
    223    uint64_t icount;
    224    /* Size of all extra data, including QCowSnapshotExtraData if available */
    225    uint32_t extra_data_size;
    226    /* Data beyond QCowSnapshotExtraData, if any */
    227    void *unknown_extra_data;
    228} QCowSnapshot;
    229
    230struct Qcow2Cache;
    231typedef struct Qcow2Cache Qcow2Cache;
    232
    233typedef struct Qcow2CryptoHeaderExtension {
    234    uint64_t offset;
    235    uint64_t length;
    236} QEMU_PACKED Qcow2CryptoHeaderExtension;
    237
    238typedef struct Qcow2UnknownHeaderExtension {
    239    uint32_t magic;
    240    uint32_t len;
    241    QLIST_ENTRY(Qcow2UnknownHeaderExtension) next;
    242    uint8_t data[];
    243} Qcow2UnknownHeaderExtension;
    244
    245enum {
    246    QCOW2_FEAT_TYPE_INCOMPATIBLE    = 0,
    247    QCOW2_FEAT_TYPE_COMPATIBLE      = 1,
    248    QCOW2_FEAT_TYPE_AUTOCLEAR       = 2,
    249};
    250
    251/* Incompatible feature bits */
    252enum {
    253    QCOW2_INCOMPAT_DIRTY_BITNR      = 0,
    254    QCOW2_INCOMPAT_CORRUPT_BITNR    = 1,
    255    QCOW2_INCOMPAT_DATA_FILE_BITNR  = 2,
    256    QCOW2_INCOMPAT_COMPRESSION_BITNR = 3,
    257    QCOW2_INCOMPAT_EXTL2_BITNR      = 4,
    258    QCOW2_INCOMPAT_DIRTY            = 1 << QCOW2_INCOMPAT_DIRTY_BITNR,
    259    QCOW2_INCOMPAT_CORRUPT          = 1 << QCOW2_INCOMPAT_CORRUPT_BITNR,
    260    QCOW2_INCOMPAT_DATA_FILE        = 1 << QCOW2_INCOMPAT_DATA_FILE_BITNR,
    261    QCOW2_INCOMPAT_COMPRESSION      = 1 << QCOW2_INCOMPAT_COMPRESSION_BITNR,
    262    QCOW2_INCOMPAT_EXTL2            = 1 << QCOW2_INCOMPAT_EXTL2_BITNR,
    263
    264    QCOW2_INCOMPAT_MASK             = QCOW2_INCOMPAT_DIRTY
    265                                    | QCOW2_INCOMPAT_CORRUPT
    266                                    | QCOW2_INCOMPAT_DATA_FILE
    267                                    | QCOW2_INCOMPAT_COMPRESSION
    268                                    | QCOW2_INCOMPAT_EXTL2,
    269};
    270
    271/* Compatible feature bits */
    272enum {
    273    QCOW2_COMPAT_LAZY_REFCOUNTS_BITNR = 0,
    274    QCOW2_COMPAT_LAZY_REFCOUNTS       = 1 << QCOW2_COMPAT_LAZY_REFCOUNTS_BITNR,
    275
    276    QCOW2_COMPAT_FEAT_MASK            = QCOW2_COMPAT_LAZY_REFCOUNTS,
    277};
    278
    279/* Autoclear feature bits */
    280enum {
    281    QCOW2_AUTOCLEAR_BITMAPS_BITNR       = 0,
    282    QCOW2_AUTOCLEAR_DATA_FILE_RAW_BITNR = 1,
    283    QCOW2_AUTOCLEAR_BITMAPS             = 1 << QCOW2_AUTOCLEAR_BITMAPS_BITNR,
    284    QCOW2_AUTOCLEAR_DATA_FILE_RAW       = 1 << QCOW2_AUTOCLEAR_DATA_FILE_RAW_BITNR,
    285
    286    QCOW2_AUTOCLEAR_MASK                = QCOW2_AUTOCLEAR_BITMAPS
    287                                        | QCOW2_AUTOCLEAR_DATA_FILE_RAW,
    288};
    289
    290enum qcow2_discard_type {
    291    QCOW2_DISCARD_NEVER = 0,
    292    QCOW2_DISCARD_ALWAYS,
    293    QCOW2_DISCARD_REQUEST,
    294    QCOW2_DISCARD_SNAPSHOT,
    295    QCOW2_DISCARD_OTHER,
    296    QCOW2_DISCARD_MAX
    297};
    298
    299typedef struct Qcow2Feature {
    300    uint8_t type;
    301    uint8_t bit;
    302    char    name[46];
    303} QEMU_PACKED Qcow2Feature;
    304
    305typedef struct Qcow2DiscardRegion {
    306    BlockDriverState *bs;
    307    uint64_t offset;
    308    uint64_t bytes;
    309    QTAILQ_ENTRY(Qcow2DiscardRegion) next;
    310} Qcow2DiscardRegion;
    311
    312typedef uint64_t Qcow2GetRefcountFunc(const void *refcount_array,
    313                                      uint64_t index);
    314typedef void Qcow2SetRefcountFunc(void *refcount_array,
    315                                  uint64_t index, uint64_t value);
    316
    317typedef struct Qcow2BitmapHeaderExt {
    318    uint32_t nb_bitmaps;
    319    uint32_t reserved32;
    320    uint64_t bitmap_directory_size;
    321    uint64_t bitmap_directory_offset;
    322} QEMU_PACKED Qcow2BitmapHeaderExt;
    323
    324#define QCOW2_MAX_THREADS 4
    325
    326typedef struct BDRVQcow2State {
    327    int cluster_bits;
    328    int cluster_size;
    329    int l2_slice_size;
    330    int subcluster_bits;
    331    int subcluster_size;
    332    int subclusters_per_cluster;
    333    int l2_bits;
    334    int l2_size;
    335    int l1_size;
    336    int l1_vm_state_index;
    337    int refcount_block_bits;
    338    int refcount_block_size;
    339    int csize_shift;
    340    int csize_mask;
    341    uint64_t cluster_offset_mask;
    342    uint64_t l1_table_offset;
    343    uint64_t *l1_table;
    344
    345    Qcow2Cache *l2_table_cache;
    346    Qcow2Cache *refcount_block_cache;
    347    QEMUTimer *cache_clean_timer;
    348    unsigned cache_clean_interval;
    349
    350    QLIST_HEAD(, QCowL2Meta) cluster_allocs;
    351
    352    uint64_t *refcount_table;
    353    uint64_t refcount_table_offset;
    354    uint32_t refcount_table_size;
    355    uint32_t max_refcount_table_index; /* Last used entry in refcount_table */
    356    uint64_t free_cluster_index;
    357    uint64_t free_byte_offset;
    358
    359    CoMutex lock;
    360
    361    Qcow2CryptoHeaderExtension crypto_header; /* QCow2 header extension */
    362    QCryptoBlockOpenOptions *crypto_opts; /* Disk encryption runtime options */
    363    QCryptoBlock *crypto; /* Disk encryption format driver */
    364    bool crypt_physical_offset; /* Whether to use virtual or physical offset
    365                                   for encryption initialization vector tweak */
    366    uint32_t crypt_method_header;
    367    uint64_t snapshots_offset;
    368    int snapshots_size;
    369    unsigned int nb_snapshots;
    370    QCowSnapshot *snapshots;
    371
    372    uint32_t nb_bitmaps;
    373    uint64_t bitmap_directory_size;
    374    uint64_t bitmap_directory_offset;
    375
    376    int flags;
    377    int qcow_version;
    378    bool use_lazy_refcounts;
    379    int refcount_order;
    380    int refcount_bits;
    381    uint64_t refcount_max;
    382
    383    Qcow2GetRefcountFunc *get_refcount;
    384    Qcow2SetRefcountFunc *set_refcount;
    385
    386    bool discard_passthrough[QCOW2_DISCARD_MAX];
    387
    388    int overlap_check; /* bitmask of Qcow2MetadataOverlap values */
    389    bool signaled_corruption;
    390
    391    uint64_t incompatible_features;
    392    uint64_t compatible_features;
    393    uint64_t autoclear_features;
    394
    395    size_t unknown_header_fields_size;
    396    void *unknown_header_fields;
    397    QLIST_HEAD(, Qcow2UnknownHeaderExtension) unknown_header_ext;
    398    QTAILQ_HEAD (, Qcow2DiscardRegion) discards;
    399    bool cache_discards;
    400
    401    /* Backing file path and format as stored in the image (this is not the
    402     * effective path/format, which may be the result of a runtime option
    403     * override) */
    404    char *image_backing_file;
    405    char *image_backing_format;
    406    char *image_data_file;
    407
    408    CoQueue thread_task_queue;
    409    int nb_threads;
    410
    411    BdrvChild *data_file;
    412
    413    bool metadata_preallocation_checked;
    414    bool metadata_preallocation;
    415    /*
    416     * Compression type used for the image. Default: 0 - ZLIB
    417     * The image compression type is set on image creation.
    418     * For now, the only way to change the compression type
    419     * is to convert the image with the desired compression type set.
    420     */
    421    Qcow2CompressionType compression_type;
    422} BDRVQcow2State;
    423
    424typedef struct Qcow2COWRegion {
    425    /**
    426     * Offset of the COW region in bytes from the start of the first cluster
    427     * touched by the request.
    428     */
    429    unsigned    offset;
    430
    431    /** Number of bytes to copy */
    432    unsigned    nb_bytes;
    433} Qcow2COWRegion;
    434
    435/**
    436 * Describes an in-flight (part of a) write request that writes to clusters
    437 * that need to have their L2 table entries updated (because they are
    438 * newly allocated or need changes in their L2 bitmaps)
    439 */
    440typedef struct QCowL2Meta
    441{
    442    /** Guest offset of the first updated cluster */
    443    uint64_t offset;
    444
    445    /** Host offset of the first updated cluster */
    446    uint64_t alloc_offset;
    447
    448    /** Number of updated clusters */
    449    int nb_clusters;
    450
    451    /** Do not free the old clusters */
    452    bool keep_old_clusters;
    453
    454    /**
    455     * Requests that overlap with this allocation and wait to be restarted
    456     * when the allocating request has completed.
    457     */
    458    CoQueue dependent_requests;
    459
    460    /**
    461     * The COW Region immediately before the area the guest actually
    462     * writes to. This (part of the) write request starts at
    463     * cow_start.offset + cow_start.nb_bytes.
    464     */
    465    Qcow2COWRegion cow_start;
    466
    467    /**
    468     * The COW Region immediately after the area the guest actually
    469     * writes to. This (part of the) write request ends at cow_end.offset
    470     * (which must always be set even when cow_end.nb_bytes is 0).
    471     */
    472    Qcow2COWRegion cow_end;
    473
    474    /*
    475     * Indicates that COW regions are already handled and do not require
    476     * any more processing.
    477     */
    478    bool skip_cow;
    479
    480    /**
    481     * Indicates that this is not a normal write request but a preallocation.
    482     * If the image has extended L2 entries this means that no new individual
    483     * subclusters will be marked as allocated in the L2 bitmap (but any
    484     * existing contents of that bitmap will be kept).
    485     */
    486    bool prealloc;
    487
    488    /**
    489     * The I/O vector with the data from the actual guest write request.
    490     * If non-NULL, this is meant to be merged together with the data
    491     * from @cow_start and @cow_end into one single write operation.
    492     */
    493    QEMUIOVector *data_qiov;
    494    size_t data_qiov_offset;
    495
    496    /** Pointer to next L2Meta of the same write request */
    497    struct QCowL2Meta *next;
    498
    499    QLIST_ENTRY(QCowL2Meta) next_in_flight;
    500} QCowL2Meta;
    501
    502/*
    503 * In images with standard L2 entries all clusters are treated as if
    504 * they had one subcluster so QCow2ClusterType and QCow2SubclusterType
    505 * can be mapped to each other and have the exact same meaning
    506 * (QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC cannot happen in these images).
    507 *
    508 * In images with extended L2 entries QCow2ClusterType refers to the
    509 * complete cluster and QCow2SubclusterType to each of the individual
    510 * subclusters, so there are several possible combinations:
    511 *
    512 *     |--------------+---------------------------|
    513 *     | Cluster type | Possible subcluster types |
    514 *     |--------------+---------------------------|
    515 *     | UNALLOCATED  |         UNALLOCATED_PLAIN |
    516 *     |              |                ZERO_PLAIN |
    517 *     |--------------+---------------------------|
    518 *     | NORMAL       |         UNALLOCATED_ALLOC |
    519 *     |              |                ZERO_ALLOC |
    520 *     |              |                    NORMAL |
    521 *     |--------------+---------------------------|
    522 *     | COMPRESSED   |                COMPRESSED |
    523 *     |--------------+---------------------------|
    524 *
    525 * QCOW2_SUBCLUSTER_INVALID means that the L2 entry is incorrect and
    526 * the image should be marked corrupt.
    527 */
    528
    529typedef enum QCow2ClusterType {
    530    QCOW2_CLUSTER_UNALLOCATED,
    531    QCOW2_CLUSTER_ZERO_PLAIN,
    532    QCOW2_CLUSTER_ZERO_ALLOC,
    533    QCOW2_CLUSTER_NORMAL,
    534    QCOW2_CLUSTER_COMPRESSED,
    535} QCow2ClusterType;
    536
    537typedef enum QCow2SubclusterType {
    538    QCOW2_SUBCLUSTER_UNALLOCATED_PLAIN,
    539    QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC,
    540    QCOW2_SUBCLUSTER_ZERO_PLAIN,
    541    QCOW2_SUBCLUSTER_ZERO_ALLOC,
    542    QCOW2_SUBCLUSTER_NORMAL,
    543    QCOW2_SUBCLUSTER_COMPRESSED,
    544    QCOW2_SUBCLUSTER_INVALID,
    545} QCow2SubclusterType;
    546
    547typedef enum QCow2MetadataOverlap {
    548    QCOW2_OL_MAIN_HEADER_BITNR      = 0,
    549    QCOW2_OL_ACTIVE_L1_BITNR        = 1,
    550    QCOW2_OL_ACTIVE_L2_BITNR        = 2,
    551    QCOW2_OL_REFCOUNT_TABLE_BITNR   = 3,
    552    QCOW2_OL_REFCOUNT_BLOCK_BITNR   = 4,
    553    QCOW2_OL_SNAPSHOT_TABLE_BITNR   = 5,
    554    QCOW2_OL_INACTIVE_L1_BITNR      = 6,
    555    QCOW2_OL_INACTIVE_L2_BITNR      = 7,
    556    QCOW2_OL_BITMAP_DIRECTORY_BITNR = 8,
    557
    558    QCOW2_OL_MAX_BITNR              = 9,
    559
    560    QCOW2_OL_NONE             = 0,
    561    QCOW2_OL_MAIN_HEADER      = (1 << QCOW2_OL_MAIN_HEADER_BITNR),
    562    QCOW2_OL_ACTIVE_L1        = (1 << QCOW2_OL_ACTIVE_L1_BITNR),
    563    QCOW2_OL_ACTIVE_L2        = (1 << QCOW2_OL_ACTIVE_L2_BITNR),
    564    QCOW2_OL_REFCOUNT_TABLE   = (1 << QCOW2_OL_REFCOUNT_TABLE_BITNR),
    565    QCOW2_OL_REFCOUNT_BLOCK   = (1 << QCOW2_OL_REFCOUNT_BLOCK_BITNR),
    566    QCOW2_OL_SNAPSHOT_TABLE   = (1 << QCOW2_OL_SNAPSHOT_TABLE_BITNR),
    567    QCOW2_OL_INACTIVE_L1      = (1 << QCOW2_OL_INACTIVE_L1_BITNR),
    568    /* NOTE: Checking overlaps with inactive L2 tables will result in bdrv
    569     * reads. */
    570    QCOW2_OL_INACTIVE_L2      = (1 << QCOW2_OL_INACTIVE_L2_BITNR),
    571    QCOW2_OL_BITMAP_DIRECTORY = (1 << QCOW2_OL_BITMAP_DIRECTORY_BITNR),
    572} QCow2MetadataOverlap;
    573
    574/* Perform all overlap checks which can be done in constant time */
    575#define QCOW2_OL_CONSTANT \
    576    (QCOW2_OL_MAIN_HEADER | QCOW2_OL_ACTIVE_L1 | QCOW2_OL_REFCOUNT_TABLE | \
    577     QCOW2_OL_SNAPSHOT_TABLE | QCOW2_OL_BITMAP_DIRECTORY)
    578
    579/* Perform all overlap checks which don't require disk access */
    580#define QCOW2_OL_CACHED \
    581    (QCOW2_OL_CONSTANT | QCOW2_OL_ACTIVE_L2 | QCOW2_OL_REFCOUNT_BLOCK | \
    582     QCOW2_OL_INACTIVE_L1)
    583
    584/* Perform all overlap checks */
    585#define QCOW2_OL_ALL \
    586    (QCOW2_OL_CACHED | QCOW2_OL_INACTIVE_L2)
    587
    588#define L1E_OFFSET_MASK 0x00fffffffffffe00ULL
    589#define L1E_RESERVED_MASK 0x7f000000000001ffULL
    590#define L2E_OFFSET_MASK 0x00fffffffffffe00ULL
    591#define L2E_STD_RESERVED_MASK 0x3f000000000001feULL
    592
    593#define REFT_OFFSET_MASK 0xfffffffffffffe00ULL
    594#define REFT_RESERVED_MASK 0x1ffULL
    595
    596#define INV_OFFSET (-1ULL)
    597
    598static inline bool has_subclusters(BDRVQcow2State *s)
    599{
    600    return s->incompatible_features & QCOW2_INCOMPAT_EXTL2;
    601}
    602
    603static inline size_t l2_entry_size(BDRVQcow2State *s)
    604{
    605    return has_subclusters(s) ? L2E_SIZE_EXTENDED : L2E_SIZE_NORMAL;
    606}
    607
    608static inline uint64_t get_l2_entry(BDRVQcow2State *s, uint64_t *l2_slice,
    609                                    int idx)
    610{
    611    idx *= l2_entry_size(s) / sizeof(uint64_t);
    612    return be64_to_cpu(l2_slice[idx]);
    613}
    614
    615static inline uint64_t get_l2_bitmap(BDRVQcow2State *s, uint64_t *l2_slice,
    616                                     int idx)
    617{
    618    if (has_subclusters(s)) {
    619        idx *= l2_entry_size(s) / sizeof(uint64_t);
    620        return be64_to_cpu(l2_slice[idx + 1]);
    621    } else {
    622        return 0; /* For convenience only; this value has no meaning. */
    623    }
    624}
    625
    626static inline void set_l2_entry(BDRVQcow2State *s, uint64_t *l2_slice,
    627                                int idx, uint64_t entry)
    628{
    629    idx *= l2_entry_size(s) / sizeof(uint64_t);
    630    l2_slice[idx] = cpu_to_be64(entry);
    631}
    632
    633static inline void set_l2_bitmap(BDRVQcow2State *s, uint64_t *l2_slice,
    634                                 int idx, uint64_t bitmap)
    635{
    636    assert(has_subclusters(s));
    637    idx *= l2_entry_size(s) / sizeof(uint64_t);
    638    l2_slice[idx + 1] = cpu_to_be64(bitmap);
    639}
    640
    641static inline bool has_data_file(BlockDriverState *bs)
    642{
    643    BDRVQcow2State *s = bs->opaque;
    644    return (s->data_file != bs->file);
    645}
    646
    647static inline bool data_file_is_raw(BlockDriverState *bs)
    648{
    649    BDRVQcow2State *s = bs->opaque;
    650    return !!(s->autoclear_features & QCOW2_AUTOCLEAR_DATA_FILE_RAW);
    651}
    652
    653static inline int64_t start_of_cluster(BDRVQcow2State *s, int64_t offset)
    654{
    655    return offset & ~(s->cluster_size - 1);
    656}
    657
    658static inline int64_t offset_into_cluster(BDRVQcow2State *s, int64_t offset)
    659{
    660    return offset & (s->cluster_size - 1);
    661}
    662
    663static inline int64_t offset_into_subcluster(BDRVQcow2State *s, int64_t offset)
    664{
    665    return offset & (s->subcluster_size - 1);
    666}
    667
    668static inline uint64_t size_to_clusters(BDRVQcow2State *s, uint64_t size)
    669{
    670    return (size + (s->cluster_size - 1)) >> s->cluster_bits;
    671}
    672
    673static inline uint64_t size_to_subclusters(BDRVQcow2State *s, uint64_t size)
    674{
    675    return (size + (s->subcluster_size - 1)) >> s->subcluster_bits;
    676}
    677
    678static inline int64_t size_to_l1(BDRVQcow2State *s, int64_t size)
    679{
    680    int shift = s->cluster_bits + s->l2_bits;
    681    return (size + (1ULL << shift) - 1) >> shift;
    682}
    683
    684static inline int offset_to_l1_index(BDRVQcow2State *s, uint64_t offset)
    685{
    686    return offset >> (s->l2_bits + s->cluster_bits);
    687}
    688
    689static inline int offset_to_l2_index(BDRVQcow2State *s, int64_t offset)
    690{
    691    return (offset >> s->cluster_bits) & (s->l2_size - 1);
    692}
    693
    694static inline int offset_to_l2_slice_index(BDRVQcow2State *s, int64_t offset)
    695{
    696    return (offset >> s->cluster_bits) & (s->l2_slice_size - 1);
    697}
    698
    699static inline int offset_to_sc_index(BDRVQcow2State *s, int64_t offset)
    700{
    701    return (offset >> s->subcluster_bits) & (s->subclusters_per_cluster - 1);
    702}
    703
    704static inline int64_t qcow2_vm_state_offset(BDRVQcow2State *s)
    705{
    706    return (int64_t)s->l1_vm_state_index << (s->cluster_bits + s->l2_bits);
    707}
    708
    709static inline QCow2ClusterType qcow2_get_cluster_type(BlockDriverState *bs,
    710                                                      uint64_t l2_entry)
    711{
    712    BDRVQcow2State *s = bs->opaque;
    713
    714    if (l2_entry & QCOW_OFLAG_COMPRESSED) {
    715        return QCOW2_CLUSTER_COMPRESSED;
    716    } else if ((l2_entry & QCOW_OFLAG_ZERO) && !has_subclusters(s)) {
    717        if (l2_entry & L2E_OFFSET_MASK) {
    718            return QCOW2_CLUSTER_ZERO_ALLOC;
    719        }
    720        return QCOW2_CLUSTER_ZERO_PLAIN;
    721    } else if (!(l2_entry & L2E_OFFSET_MASK)) {
    722        /* Offset 0 generally means unallocated, but it is ambiguous with
    723         * external data files because 0 is a valid offset there. However, all
    724         * clusters in external data files always have refcount 1, so we can
    725         * rely on QCOW_OFLAG_COPIED to disambiguate. */
    726        if (has_data_file(bs) && (l2_entry & QCOW_OFLAG_COPIED)) {
    727            return QCOW2_CLUSTER_NORMAL;
    728        } else {
    729            return QCOW2_CLUSTER_UNALLOCATED;
    730        }
    731    } else {
    732        return QCOW2_CLUSTER_NORMAL;
    733    }
    734}
    735
    736/*
    737 * In an image without subsclusters @l2_bitmap is ignored and
    738 * @sc_index must be 0.
    739 * Return QCOW2_SUBCLUSTER_INVALID if an invalid l2 entry is detected
    740 * (this checks the whole entry and bitmap, not only the bits related
    741 * to subcluster @sc_index).
    742 */
    743static inline
    744QCow2SubclusterType qcow2_get_subcluster_type(BlockDriverState *bs,
    745                                              uint64_t l2_entry,
    746                                              uint64_t l2_bitmap,
    747                                              unsigned sc_index)
    748{
    749    BDRVQcow2State *s = bs->opaque;
    750    QCow2ClusterType type = qcow2_get_cluster_type(bs, l2_entry);
    751    assert(sc_index < s->subclusters_per_cluster);
    752
    753    if (has_subclusters(s)) {
    754        switch (type) {
    755        case QCOW2_CLUSTER_COMPRESSED:
    756            return QCOW2_SUBCLUSTER_COMPRESSED;
    757        case QCOW2_CLUSTER_NORMAL:
    758            if ((l2_bitmap >> 32) & l2_bitmap) {
    759                return QCOW2_SUBCLUSTER_INVALID;
    760            } else if (l2_bitmap & QCOW_OFLAG_SUB_ZERO(sc_index)) {
    761                return QCOW2_SUBCLUSTER_ZERO_ALLOC;
    762            } else if (l2_bitmap & QCOW_OFLAG_SUB_ALLOC(sc_index)) {
    763                return QCOW2_SUBCLUSTER_NORMAL;
    764            } else {
    765                return QCOW2_SUBCLUSTER_UNALLOCATED_ALLOC;
    766            }
    767        case QCOW2_CLUSTER_UNALLOCATED:
    768            if (l2_bitmap & QCOW_L2_BITMAP_ALL_ALLOC) {
    769                return QCOW2_SUBCLUSTER_INVALID;
    770            } else if (l2_bitmap & QCOW_OFLAG_SUB_ZERO(sc_index)) {
    771                return QCOW2_SUBCLUSTER_ZERO_PLAIN;
    772            } else {
    773                return QCOW2_SUBCLUSTER_UNALLOCATED_PLAIN;
    774            }
    775        default:
    776            g_assert_not_reached();
    777        }
    778    } else {
    779        switch (type) {
    780        case QCOW2_CLUSTER_COMPRESSED:
    781            return QCOW2_SUBCLUSTER_COMPRESSED;
    782        case QCOW2_CLUSTER_ZERO_PLAIN:
    783            return QCOW2_SUBCLUSTER_ZERO_PLAIN;
    784        case QCOW2_CLUSTER_ZERO_ALLOC:
    785            return QCOW2_SUBCLUSTER_ZERO_ALLOC;
    786        case QCOW2_CLUSTER_NORMAL:
    787            return QCOW2_SUBCLUSTER_NORMAL;
    788        case QCOW2_CLUSTER_UNALLOCATED:
    789            return QCOW2_SUBCLUSTER_UNALLOCATED_PLAIN;
    790        default:
    791            g_assert_not_reached();
    792        }
    793    }
    794}
    795
    796static inline bool qcow2_cluster_is_allocated(QCow2ClusterType type)
    797{
    798    return (type == QCOW2_CLUSTER_COMPRESSED || type == QCOW2_CLUSTER_NORMAL ||
    799            type == QCOW2_CLUSTER_ZERO_ALLOC);
    800}
    801
    802/* Check whether refcounts are eager or lazy */
    803static inline bool qcow2_need_accurate_refcounts(BDRVQcow2State *s)
    804{
    805    return !(s->incompatible_features & QCOW2_INCOMPAT_DIRTY);
    806}
    807
    808static inline uint64_t l2meta_cow_start(QCowL2Meta *m)
    809{
    810    return m->offset + m->cow_start.offset;
    811}
    812
    813static inline uint64_t l2meta_cow_end(QCowL2Meta *m)
    814{
    815    return m->offset + m->cow_end.offset + m->cow_end.nb_bytes;
    816}
    817
    818static inline uint64_t refcount_diff(uint64_t r1, uint64_t r2)
    819{
    820    return r1 > r2 ? r1 - r2 : r2 - r1;
    821}
    822
    823static inline
    824uint32_t offset_to_reftable_index(BDRVQcow2State *s, uint64_t offset)
    825{
    826    return offset >> (s->refcount_block_bits + s->cluster_bits);
    827}
    828
    829/* qcow2.c functions */
    830int64_t qcow2_refcount_metadata_size(int64_t clusters, size_t cluster_size,
    831                                     int refcount_order, bool generous_increase,
    832                                     uint64_t *refblock_count);
    833
    834int qcow2_mark_dirty(BlockDriverState *bs);
    835int qcow2_mark_corrupt(BlockDriverState *bs);
    836int qcow2_mark_consistent(BlockDriverState *bs);
    837int qcow2_update_header(BlockDriverState *bs);
    838
    839void qcow2_signal_corruption(BlockDriverState *bs, bool fatal, int64_t offset,
    840                             int64_t size, const char *message_format, ...)
    841                             GCC_FMT_ATTR(5, 6);
    842
    843int qcow2_validate_table(BlockDriverState *bs, uint64_t offset,
    844                         uint64_t entries, size_t entry_len,
    845                         int64_t max_size_bytes, const char *table_name,
    846                         Error **errp);
    847
    848/* qcow2-refcount.c functions */
    849int qcow2_refcount_init(BlockDriverState *bs);
    850void qcow2_refcount_close(BlockDriverState *bs);
    851
    852int qcow2_get_refcount(BlockDriverState *bs, int64_t cluster_index,
    853                       uint64_t *refcount);
    854
    855int qcow2_update_cluster_refcount(BlockDriverState *bs, int64_t cluster_index,
    856                                  uint64_t addend, bool decrease,
    857                                  enum qcow2_discard_type type);
    858
    859int64_t qcow2_refcount_area(BlockDriverState *bs, uint64_t offset,
    860                            uint64_t additional_clusters, bool exact_size,
    861                            int new_refblock_index,
    862                            uint64_t new_refblock_offset);
    863
    864int64_t qcow2_alloc_clusters(BlockDriverState *bs, uint64_t size);
    865int64_t qcow2_alloc_clusters_at(BlockDriverState *bs, uint64_t offset,
    866                                int64_t nb_clusters);
    867int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size);
    868void qcow2_free_clusters(BlockDriverState *bs,
    869                          int64_t offset, int64_t size,
    870                          enum qcow2_discard_type type);
    871void qcow2_free_any_cluster(BlockDriverState *bs, uint64_t l2_entry,
    872                            enum qcow2_discard_type type);
    873
    874int qcow2_update_snapshot_refcount(BlockDriverState *bs,
    875    int64_t l1_table_offset, int l1_size, int addend);
    876
    877int coroutine_fn qcow2_flush_caches(BlockDriverState *bs);
    878int coroutine_fn qcow2_write_caches(BlockDriverState *bs);
    879int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
    880                          BdrvCheckMode fix);
    881
    882void qcow2_process_discards(BlockDriverState *bs, int ret);
    883
    884int qcow2_check_metadata_overlap(BlockDriverState *bs, int ign, int64_t offset,
    885                                 int64_t size);
    886int qcow2_pre_write_overlap_check(BlockDriverState *bs, int ign, int64_t offset,
    887                                  int64_t size, bool data_file);
    888int qcow2_inc_refcounts_imrt(BlockDriverState *bs, BdrvCheckResult *res,
    889                             void **refcount_table,
    890                             int64_t *refcount_table_size,
    891                             int64_t offset, int64_t size);
    892
    893int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,
    894                                BlockDriverAmendStatusCB *status_cb,
    895                                void *cb_opaque, Error **errp);
    896int qcow2_shrink_reftable(BlockDriverState *bs);
    897int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size);
    898int qcow2_detect_metadata_preallocation(BlockDriverState *bs);
    899
    900/* qcow2-cluster.c functions */
    901int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
    902                        bool exact_size);
    903int qcow2_shrink_l1_table(BlockDriverState *bs, uint64_t max_size);
    904int qcow2_write_l1_entry(BlockDriverState *bs, int l1_index);
    905int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t sector_num,
    906                          uint8_t *buf, int nb_sectors, bool enc, Error **errp);
    907
    908int qcow2_get_host_offset(BlockDriverState *bs, uint64_t offset,
    909                          unsigned int *bytes, uint64_t *host_offset,
    910                          QCow2SubclusterType *subcluster_type);
    911int qcow2_alloc_host_offset(BlockDriverState *bs, uint64_t offset,
    912                            unsigned int *bytes, uint64_t *host_offset,
    913                            QCowL2Meta **m);
    914int qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
    915                                          uint64_t offset,
    916                                          int compressed_size,
    917                                          uint64_t *host_offset);
    918void qcow2_parse_compressed_l2_entry(BlockDriverState *bs, uint64_t l2_entry,
    919                                     uint64_t *coffset, int *csize);
    920
    921int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m);
    922void qcow2_alloc_cluster_abort(BlockDriverState *bs, QCowL2Meta *m);
    923int qcow2_cluster_discard(BlockDriverState *bs, uint64_t offset,
    924                          uint64_t bytes, enum qcow2_discard_type type,
    925                          bool full_discard);
    926int qcow2_subcluster_zeroize(BlockDriverState *bs, uint64_t offset,
    927                             uint64_t bytes, int flags);
    928
    929int qcow2_expand_zero_clusters(BlockDriverState *bs,
    930                               BlockDriverAmendStatusCB *status_cb,
    931                               void *cb_opaque);
    932
    933/* qcow2-snapshot.c functions */
    934int qcow2_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info);
    935int qcow2_snapshot_goto(BlockDriverState *bs, const char *snapshot_id);
    936int qcow2_snapshot_delete(BlockDriverState *bs,
    937                          const char *snapshot_id,
    938                          const char *name,
    939                          Error **errp);
    940int qcow2_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab);
    941int qcow2_snapshot_load_tmp(BlockDriverState *bs,
    942                            const char *snapshot_id,
    943                            const char *name,
    944                            Error **errp);
    945
    946void qcow2_free_snapshots(BlockDriverState *bs);
    947int qcow2_read_snapshots(BlockDriverState *bs, Error **errp);
    948int qcow2_write_snapshots(BlockDriverState *bs);
    949
    950int coroutine_fn qcow2_check_read_snapshot_table(BlockDriverState *bs,
    951                                                 BdrvCheckResult *result,
    952                                                 BdrvCheckMode fix);
    953int coroutine_fn qcow2_check_fix_snapshot_table(BlockDriverState *bs,
    954                                                BdrvCheckResult *result,
    955                                                BdrvCheckMode fix);
    956
    957/* qcow2-cache.c functions */
    958Qcow2Cache *qcow2_cache_create(BlockDriverState *bs, int num_tables,
    959                               unsigned table_size);
    960int qcow2_cache_destroy(Qcow2Cache *c);
    961
    962void qcow2_cache_entry_mark_dirty(Qcow2Cache *c, void *table);
    963int qcow2_cache_flush(BlockDriverState *bs, Qcow2Cache *c);
    964int qcow2_cache_write(BlockDriverState *bs, Qcow2Cache *c);
    965int qcow2_cache_set_dependency(BlockDriverState *bs, Qcow2Cache *c,
    966    Qcow2Cache *dependency);
    967void qcow2_cache_depends_on_flush(Qcow2Cache *c);
    968
    969void qcow2_cache_clean_unused(Qcow2Cache *c);
    970int qcow2_cache_empty(BlockDriverState *bs, Qcow2Cache *c);
    971
    972int qcow2_cache_get(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
    973    void **table);
    974int qcow2_cache_get_empty(BlockDriverState *bs, Qcow2Cache *c, uint64_t offset,
    975    void **table);
    976void qcow2_cache_put(Qcow2Cache *c, void **table);
    977void *qcow2_cache_is_table_offset(Qcow2Cache *c, uint64_t offset);
    978void qcow2_cache_discard(Qcow2Cache *c, void *table);
    979
    980/* qcow2-bitmap.c functions */
    981int qcow2_check_bitmaps_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
    982                                  void **refcount_table,
    983                                  int64_t *refcount_table_size);
    984bool qcow2_load_dirty_bitmaps(BlockDriverState *bs, bool *header_updated,
    985                              Error **errp);
    986bool qcow2_get_bitmap_info_list(BlockDriverState *bs,
    987                                Qcow2BitmapInfoList **info_list, Error **errp);
    988int qcow2_reopen_bitmaps_rw(BlockDriverState *bs, Error **errp);
    989int qcow2_truncate_bitmaps_check(BlockDriverState *bs, Error **errp);
    990bool qcow2_store_persistent_dirty_bitmaps(BlockDriverState *bs,
    991                                          bool release_stored, Error **errp);
    992int qcow2_reopen_bitmaps_ro(BlockDriverState *bs, Error **errp);
    993bool qcow2_co_can_store_new_dirty_bitmap(BlockDriverState *bs,
    994                                         const char *name,
    995                                         uint32_t granularity,
    996                                         Error **errp);
    997int qcow2_co_remove_persistent_dirty_bitmap(BlockDriverState *bs,
    998                                            const char *name,
    999                                            Error **errp);
   1000bool qcow2_supports_persistent_dirty_bitmap(BlockDriverState *bs);
   1001uint64_t qcow2_get_persistent_dirty_bitmap_size(BlockDriverState *bs,
   1002                                                uint32_t cluster_size);
   1003
   1004ssize_t coroutine_fn
   1005qcow2_co_compress(BlockDriverState *bs, void *dest, size_t dest_size,
   1006                  const void *src, size_t src_size);
   1007ssize_t coroutine_fn
   1008qcow2_co_decompress(BlockDriverState *bs, void *dest, size_t dest_size,
   1009                    const void *src, size_t src_size);
   1010int coroutine_fn
   1011qcow2_co_encrypt(BlockDriverState *bs, uint64_t host_offset,
   1012                 uint64_t guest_offset, void *buf, size_t len);
   1013int coroutine_fn
   1014qcow2_co_decrypt(BlockDriverState *bs, uint64_t host_offset,
   1015                 uint64_t guest_offset, void *buf, size_t len);
   1016
   1017#endif