symbian-qemu-0.9.1-12/qemu-symbian-svp/block-qcow2.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 #include "qemu-common.h"
       
    25 #include "block_int.h"
       
    26 #include <zlib.h>
       
    27 #include "aes.h"
       
    28 #include <assert.h>
       
    29 
       
    30 /*
       
    31   Differences with QCOW:
       
    32 
       
    33   - Support for multiple incremental snapshots.
       
    34   - Memory management by reference counts.
       
    35   - Clusters which have a reference count of one have the bit
       
    36     QCOW_OFLAG_COPIED to optimize write performance.
       
    37   - Size of compressed clusters is stored in sectors to reduce bit usage
       
    38     in the cluster offsets.
       
    39   - Support for storing additional data (such as the VM state) in the
       
    40     snapshots.
       
    41   - If a backing store is used, the cluster size is not constrained
       
    42     (could be backported to QCOW).
       
    43   - L2 tables have always a size of one cluster.
       
    44 */
       
    45 
       
    46 //#define DEBUG_ALLOC
       
    47 //#define DEBUG_ALLOC2
       
    48 
       
    49 #define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb)
       
    50 #define QCOW_VERSION 2
       
    51 
       
    52 #define QCOW_CRYPT_NONE 0
       
    53 #define QCOW_CRYPT_AES  1
       
    54 
       
    55 #define QCOW_MAX_CRYPT_CLUSTERS 32
       
    56 
       
    57 /* indicate that the refcount of the referenced cluster is exactly one. */
       
    58 #define QCOW_OFLAG_COPIED     (1LL << 63)
       
    59 /* indicate that the cluster is compressed (they never have the copied flag) */
       
    60 #define QCOW_OFLAG_COMPRESSED (1LL << 62)
       
    61 
       
    62 #define REFCOUNT_SHIFT 1 /* refcount size is 2 bytes */
       
    63 
       
    64 typedef struct QCowHeader {
       
    65     uint32_t magic;
       
    66     uint32_t version;
       
    67     uint64_t backing_file_offset;
       
    68     uint32_t backing_file_size;
       
    69     uint32_t cluster_bits;
       
    70     uint64_t size; /* in bytes */
       
    71     uint32_t crypt_method;
       
    72     uint32_t l1_size; /* XXX: save number of clusters instead ? */
       
    73     uint64_t l1_table_offset;
       
    74     uint64_t refcount_table_offset;
       
    75     uint32_t refcount_table_clusters;
       
    76     uint32_t nb_snapshots;
       
    77     uint64_t snapshots_offset;
       
    78 } QCowHeader;
       
    79 
       
    80 typedef struct __attribute__((packed)) QCowSnapshotHeader {
       
    81     /* header is 8 byte aligned */
       
    82     uint64_t l1_table_offset;
       
    83 
       
    84     uint32_t l1_size;
       
    85     uint16_t id_str_size;
       
    86     uint16_t name_size;
       
    87 
       
    88     uint32_t date_sec;
       
    89     uint32_t date_nsec;
       
    90 
       
    91     uint64_t vm_clock_nsec;
       
    92 
       
    93     uint32_t vm_state_size;
       
    94     uint32_t extra_data_size; /* for extension */
       
    95     /* extra data follows */
       
    96     /* id_str follows */
       
    97     /* name follows  */
       
    98 } QCowSnapshotHeader;
       
    99 
       
   100 #define L2_CACHE_SIZE 16
       
   101 
       
   102 typedef struct QCowSnapshot {
       
   103     uint64_t l1_table_offset;
       
   104     uint32_t l1_size;
       
   105     char *id_str;
       
   106     char *name;
       
   107     uint32_t vm_state_size;
       
   108     uint32_t date_sec;
       
   109     uint32_t date_nsec;
       
   110     uint64_t vm_clock_nsec;
       
   111 } QCowSnapshot;
       
   112 
       
   113 typedef struct BDRVQcowState {
       
   114     BlockDriverState *hd;
       
   115     int cluster_bits;
       
   116     int cluster_size;
       
   117     int cluster_sectors;
       
   118     int l2_bits;
       
   119     int l2_size;
       
   120     int l1_size;
       
   121     int l1_vm_state_index;
       
   122     int csize_shift;
       
   123     int csize_mask;
       
   124     uint64_t cluster_offset_mask;
       
   125     uint64_t l1_table_offset;
       
   126     uint64_t *l1_table;
       
   127     uint64_t *l2_cache;
       
   128     uint64_t l2_cache_offsets[L2_CACHE_SIZE];
       
   129     uint32_t l2_cache_counts[L2_CACHE_SIZE];
       
   130     uint8_t *cluster_cache;
       
   131     uint8_t *cluster_data;
       
   132     uint64_t cluster_cache_offset;
       
   133 
       
   134     uint64_t *refcount_table;
       
   135     uint64_t refcount_table_offset;
       
   136     uint32_t refcount_table_size;
       
   137     uint64_t refcount_block_cache_offset;
       
   138     uint16_t *refcount_block_cache;
       
   139     int64_t free_cluster_index;
       
   140     int64_t free_byte_offset;
       
   141 
       
   142     uint32_t crypt_method; /* current crypt method, 0 if no key yet */
       
   143     uint32_t crypt_method_header;
       
   144     AES_KEY aes_encrypt_key;
       
   145     AES_KEY aes_decrypt_key;
       
   146     uint64_t snapshots_offset;
       
   147     int snapshots_size;
       
   148     int nb_snapshots;
       
   149     QCowSnapshot *snapshots;
       
   150 } BDRVQcowState;
       
   151 
       
   152 static int decompress_cluster(BDRVQcowState *s, uint64_t cluster_offset);
       
   153 static int qcow_read(BlockDriverState *bs, int64_t sector_num,
       
   154                      uint8_t *buf, int nb_sectors);
       
   155 static int qcow_read_snapshots(BlockDriverState *bs);
       
   156 static void qcow_free_snapshots(BlockDriverState *bs);
       
   157 static int refcount_init(BlockDriverState *bs);
       
   158 static void refcount_close(BlockDriverState *bs);
       
   159 static int get_refcount(BlockDriverState *bs, int64_t cluster_index);
       
   160 static int update_cluster_refcount(BlockDriverState *bs,
       
   161                                    int64_t cluster_index,
       
   162                                    int addend);
       
   163 static void update_refcount(BlockDriverState *bs,
       
   164                             int64_t offset, int64_t length,
       
   165                             int addend);
       
   166 static int64_t alloc_clusters(BlockDriverState *bs, int64_t size);
       
   167 static int64_t alloc_bytes(BlockDriverState *bs, int size);
       
   168 static void free_clusters(BlockDriverState *bs,
       
   169                           int64_t offset, int64_t size);
       
   170 #ifdef DEBUG_ALLOC
       
   171 static void check_refcounts(BlockDriverState *bs);
       
   172 #endif
       
   173 
       
   174 static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename)
       
   175 {
       
   176     const QCowHeader *cow_header = (const void *)buf;
       
   177 
       
   178     if (buf_size >= sizeof(QCowHeader) &&
       
   179         be32_to_cpu(cow_header->magic) == QCOW_MAGIC &&
       
   180         be32_to_cpu(cow_header->version) == QCOW_VERSION)
       
   181         return 100;
       
   182     else
       
   183         return 0;
       
   184 }
       
   185 
       
   186 static int qcow_open(BlockDriverState *bs, const char *filename, int flags)
       
   187 {
       
   188     BDRVQcowState *s = bs->opaque;
       
   189     int len, i, shift, ret;
       
   190     QCowHeader header;
       
   191 
       
   192     /* Performance is terrible right now with cache=writethrough due mainly
       
   193      * to reference count updates.  If the user does not explicitly specify
       
   194      * a caching type, force to writeback caching.
       
   195      */
       
   196     if ((flags & BDRV_O_CACHE_DEF)) {
       
   197         flags |= BDRV_O_CACHE_WB;
       
   198         flags &= ~BDRV_O_CACHE_DEF;
       
   199     }
       
   200     ret = bdrv_file_open(&s->hd, filename, flags);
       
   201     if (ret < 0)
       
   202         return ret;
       
   203     if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header))
       
   204         goto fail;
       
   205     be32_to_cpus(&header.magic);
       
   206     be32_to_cpus(&header.version);
       
   207     be64_to_cpus(&header.backing_file_offset);
       
   208     be32_to_cpus(&header.backing_file_size);
       
   209     be64_to_cpus(&header.size);
       
   210     be32_to_cpus(&header.cluster_bits);
       
   211     be32_to_cpus(&header.crypt_method);
       
   212     be64_to_cpus(&header.l1_table_offset);
       
   213     be32_to_cpus(&header.l1_size);
       
   214     be64_to_cpus(&header.refcount_table_offset);
       
   215     be32_to_cpus(&header.refcount_table_clusters);
       
   216     be64_to_cpus(&header.snapshots_offset);
       
   217     be32_to_cpus(&header.nb_snapshots);
       
   218 
       
   219     if (header.magic != QCOW_MAGIC || header.version != QCOW_VERSION)
       
   220         goto fail;
       
   221     if (header.size <= 1 ||
       
   222         header.cluster_bits < 9 ||
       
   223         header.cluster_bits > 16)
       
   224         goto fail;
       
   225     if (header.crypt_method > QCOW_CRYPT_AES)
       
   226         goto fail;
       
   227     s->crypt_method_header = header.crypt_method;
       
   228     if (s->crypt_method_header)
       
   229         bs->encrypted = 1;
       
   230     s->cluster_bits = header.cluster_bits;
       
   231     s->cluster_size = 1 << s->cluster_bits;
       
   232     s->cluster_sectors = 1 << (s->cluster_bits - 9);
       
   233     s->l2_bits = s->cluster_bits - 3; /* L2 is always one cluster */
       
   234     s->l2_size = 1 << s->l2_bits;
       
   235     bs->total_sectors = header.size / 512;
       
   236     s->csize_shift = (62 - (s->cluster_bits - 8));
       
   237     s->csize_mask = (1 << (s->cluster_bits - 8)) - 1;
       
   238     s->cluster_offset_mask = (1LL << s->csize_shift) - 1;
       
   239     s->refcount_table_offset = header.refcount_table_offset;
       
   240     s->refcount_table_size =
       
   241         header.refcount_table_clusters << (s->cluster_bits - 3);
       
   242 
       
   243     s->snapshots_offset = header.snapshots_offset;
       
   244     s->nb_snapshots = header.nb_snapshots;
       
   245 
       
   246     /* read the level 1 table */
       
   247     s->l1_size = header.l1_size;
       
   248     shift = s->cluster_bits + s->l2_bits;
       
   249     s->l1_vm_state_index = (header.size + (1LL << shift) - 1) >> shift;
       
   250     /* the L1 table must contain at least enough entries to put
       
   251        header.size bytes */
       
   252     if (s->l1_size < s->l1_vm_state_index)
       
   253         goto fail;
       
   254     s->l1_table_offset = header.l1_table_offset;
       
   255     s->l1_table = qemu_malloc(s->l1_size * sizeof(uint64_t));
       
   256     if (!s->l1_table)
       
   257         goto fail;
       
   258     if (bdrv_pread(s->hd, s->l1_table_offset, s->l1_table, s->l1_size * sizeof(uint64_t)) !=
       
   259         s->l1_size * sizeof(uint64_t))
       
   260         goto fail;
       
   261     for(i = 0;i < s->l1_size; i++) {
       
   262         be64_to_cpus(&s->l1_table[i]);
       
   263     }
       
   264     /* alloc L2 cache */
       
   265     s->l2_cache = qemu_malloc(s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
       
   266     if (!s->l2_cache)
       
   267         goto fail;
       
   268     s->cluster_cache = qemu_malloc(s->cluster_size);
       
   269     if (!s->cluster_cache)
       
   270         goto fail;
       
   271     /* one more sector for decompressed data alignment */
       
   272     s->cluster_data = qemu_malloc(QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size
       
   273                                   + 512);
       
   274     if (!s->cluster_data)
       
   275         goto fail;
       
   276     s->cluster_cache_offset = -1;
       
   277 
       
   278     if (refcount_init(bs) < 0)
       
   279         goto fail;
       
   280 
       
   281     /* read the backing file name */
       
   282     if (header.backing_file_offset != 0) {
       
   283         len = header.backing_file_size;
       
   284         if (len > 1023)
       
   285             len = 1023;
       
   286         if (bdrv_pread(s->hd, header.backing_file_offset, bs->backing_file, len) != len)
       
   287             goto fail;
       
   288         bs->backing_file[len] = '\0';
       
   289     }
       
   290     if (qcow_read_snapshots(bs) < 0)
       
   291         goto fail;
       
   292 
       
   293 #ifdef DEBUG_ALLOC
       
   294     check_refcounts(bs);
       
   295 #endif
       
   296     return 0;
       
   297 
       
   298  fail:
       
   299     qcow_free_snapshots(bs);
       
   300     refcount_close(bs);
       
   301     qemu_free(s->l1_table);
       
   302     qemu_free(s->l2_cache);
       
   303     qemu_free(s->cluster_cache);
       
   304     qemu_free(s->cluster_data);
       
   305     bdrv_delete(s->hd);
       
   306     return -1;
       
   307 }
       
   308 
       
   309 static int qcow_set_key(BlockDriverState *bs, const char *key)
       
   310 {
       
   311     BDRVQcowState *s = bs->opaque;
       
   312     uint8_t keybuf[16];
       
   313     int len, i;
       
   314 
       
   315     memset(keybuf, 0, 16);
       
   316     len = strlen(key);
       
   317     if (len > 16)
       
   318         len = 16;
       
   319     /* XXX: we could compress the chars to 7 bits to increase
       
   320        entropy */
       
   321     for(i = 0;i < len;i++) {
       
   322         keybuf[i] = key[i];
       
   323     }
       
   324     s->crypt_method = s->crypt_method_header;
       
   325 
       
   326     if (AES_set_encrypt_key(keybuf, 128, &s->aes_encrypt_key) != 0)
       
   327         return -1;
       
   328     if (AES_set_decrypt_key(keybuf, 128, &s->aes_decrypt_key) != 0)
       
   329         return -1;
       
   330 #if 0
       
   331     /* test */
       
   332     {
       
   333         uint8_t in[16];
       
   334         uint8_t out[16];
       
   335         uint8_t tmp[16];
       
   336         for(i=0;i<16;i++)
       
   337             in[i] = i;
       
   338         AES_encrypt(in, tmp, &s->aes_encrypt_key);
       
   339         AES_decrypt(tmp, out, &s->aes_decrypt_key);
       
   340         for(i = 0; i < 16; i++)
       
   341             printf(" %02x", tmp[i]);
       
   342         printf("\n");
       
   343         for(i = 0; i < 16; i++)
       
   344             printf(" %02x", out[i]);
       
   345         printf("\n");
       
   346     }
       
   347 #endif
       
   348     return 0;
       
   349 }
       
   350 
       
   351 /* The crypt function is compatible with the linux cryptoloop
       
   352    algorithm for < 4 GB images. NOTE: out_buf == in_buf is
       
   353    supported */
       
   354 static void encrypt_sectors(BDRVQcowState *s, int64_t sector_num,
       
   355                             uint8_t *out_buf, const uint8_t *in_buf,
       
   356                             int nb_sectors, int enc,
       
   357                             const AES_KEY *key)
       
   358 {
       
   359     union {
       
   360         uint64_t ll[2];
       
   361         uint8_t b[16];
       
   362     } ivec;
       
   363     int i;
       
   364 
       
   365     for(i = 0; i < nb_sectors; i++) {
       
   366         ivec.ll[0] = cpu_to_le64(sector_num);
       
   367         ivec.ll[1] = 0;
       
   368         AES_cbc_encrypt(in_buf, out_buf, 512, key,
       
   369                         ivec.b, enc);
       
   370         sector_num++;
       
   371         in_buf += 512;
       
   372         out_buf += 512;
       
   373     }
       
   374 }
       
   375 
       
   376 static int copy_sectors(BlockDriverState *bs, uint64_t start_sect,
       
   377                         uint64_t cluster_offset, int n_start, int n_end)
       
   378 {
       
   379     BDRVQcowState *s = bs->opaque;
       
   380     int n, ret;
       
   381 
       
   382     n = n_end - n_start;
       
   383     if (n <= 0)
       
   384         return 0;
       
   385     ret = qcow_read(bs, start_sect + n_start, s->cluster_data, n);
       
   386     if (ret < 0)
       
   387         return ret;
       
   388     if (s->crypt_method) {
       
   389         encrypt_sectors(s, start_sect + n_start,
       
   390                         s->cluster_data,
       
   391                         s->cluster_data, n, 1,
       
   392                         &s->aes_encrypt_key);
       
   393     }
       
   394     ret = bdrv_write(s->hd, (cluster_offset >> 9) + n_start,
       
   395                      s->cluster_data, n);
       
   396     if (ret < 0)
       
   397         return ret;
       
   398     return 0;
       
   399 }
       
   400 
       
   401 static void l2_cache_reset(BlockDriverState *bs)
       
   402 {
       
   403     BDRVQcowState *s = bs->opaque;
       
   404 
       
   405     memset(s->l2_cache, 0, s->l2_size * L2_CACHE_SIZE * sizeof(uint64_t));
       
   406     memset(s->l2_cache_offsets, 0, L2_CACHE_SIZE * sizeof(uint64_t));
       
   407     memset(s->l2_cache_counts, 0, L2_CACHE_SIZE * sizeof(uint32_t));
       
   408 }
       
   409 
       
   410 static inline int l2_cache_new_entry(BlockDriverState *bs)
       
   411 {
       
   412     BDRVQcowState *s = bs->opaque;
       
   413     uint32_t min_count;
       
   414     int min_index, i;
       
   415 
       
   416     /* find a new entry in the least used one */
       
   417     min_index = 0;
       
   418     min_count = 0xffffffff;
       
   419     for(i = 0; i < L2_CACHE_SIZE; i++) {
       
   420         if (s->l2_cache_counts[i] < min_count) {
       
   421             min_count = s->l2_cache_counts[i];
       
   422             min_index = i;
       
   423         }
       
   424     }
       
   425     return min_index;
       
   426 }
       
   427 
       
   428 static int64_t align_offset(int64_t offset, int n)
       
   429 {
       
   430     offset = (offset + n - 1) & ~(n - 1);
       
   431     return offset;
       
   432 }
       
   433 
       
   434 static int grow_l1_table(BlockDriverState *bs, int min_size)
       
   435 {
       
   436     BDRVQcowState *s = bs->opaque;
       
   437     int new_l1_size, new_l1_size2, ret, i;
       
   438     uint64_t *new_l1_table;
       
   439     uint64_t new_l1_table_offset;
       
   440     uint8_t data[12];
       
   441 
       
   442     new_l1_size = s->l1_size;
       
   443     if (min_size <= new_l1_size)
       
   444         return 0;
       
   445     while (min_size > new_l1_size) {
       
   446         new_l1_size = (new_l1_size * 3 + 1) / 2;
       
   447     }
       
   448 #ifdef DEBUG_ALLOC2
       
   449     printf("grow l1_table from %d to %d\n", s->l1_size, new_l1_size);
       
   450 #endif
       
   451 
       
   452     new_l1_size2 = sizeof(uint64_t) * new_l1_size;
       
   453     new_l1_table = qemu_mallocz(new_l1_size2);
       
   454     if (!new_l1_table)
       
   455         return -ENOMEM;
       
   456     memcpy(new_l1_table, s->l1_table, s->l1_size * sizeof(uint64_t));
       
   457 
       
   458     /* write new table (align to cluster) */
       
   459     new_l1_table_offset = alloc_clusters(bs, new_l1_size2);
       
   460 
       
   461     for(i = 0; i < s->l1_size; i++)
       
   462         new_l1_table[i] = cpu_to_be64(new_l1_table[i]);
       
   463     ret = bdrv_pwrite(s->hd, new_l1_table_offset, new_l1_table, new_l1_size2);
       
   464     if (ret != new_l1_size2)
       
   465         goto fail;
       
   466     for(i = 0; i < s->l1_size; i++)
       
   467         new_l1_table[i] = be64_to_cpu(new_l1_table[i]);
       
   468 
       
   469     /* set new table */
       
   470     cpu_to_be32w((uint32_t*)data, new_l1_size);
       
   471     cpu_to_be64w((uint64_t*)(data + 4), new_l1_table_offset);
       
   472     if (bdrv_pwrite(s->hd, offsetof(QCowHeader, l1_size), data,
       
   473                 sizeof(data)) != sizeof(data))
       
   474         goto fail;
       
   475     qemu_free(s->l1_table);
       
   476     free_clusters(bs, s->l1_table_offset, s->l1_size * sizeof(uint64_t));
       
   477     s->l1_table_offset = new_l1_table_offset;
       
   478     s->l1_table = new_l1_table;
       
   479     s->l1_size = new_l1_size;
       
   480     return 0;
       
   481  fail:
       
   482     qemu_free(s->l1_table);
       
   483     return -EIO;
       
   484 }
       
   485 
       
   486 /*
       
   487  * seek_l2_table
       
   488  *
       
   489  * seek l2_offset in the l2_cache table
       
   490  * if not found, return NULL,
       
   491  * if found,
       
   492  *   increments the l2 cache hit count of the entry,
       
   493  *   if counter overflow, divide by two all counters
       
   494  *   return the pointer to the l2 cache entry
       
   495  *
       
   496  */
       
   497 
       
   498 static uint64_t *seek_l2_table(BDRVQcowState *s, uint64_t l2_offset)
       
   499 {
       
   500     int i, j;
       
   501 
       
   502     for(i = 0; i < L2_CACHE_SIZE; i++) {
       
   503         if (l2_offset == s->l2_cache_offsets[i]) {
       
   504             /* increment the hit count */
       
   505             if (++s->l2_cache_counts[i] == 0xffffffff) {
       
   506                 for(j = 0; j < L2_CACHE_SIZE; j++) {
       
   507                     s->l2_cache_counts[j] >>= 1;
       
   508                 }
       
   509             }
       
   510             return s->l2_cache + (i << s->l2_bits);
       
   511         }
       
   512     }
       
   513     return NULL;
       
   514 }
       
   515 
       
   516 /*
       
   517  * l2_load
       
   518  *
       
   519  * Loads a L2 table into memory. If the table is in the cache, the cache
       
   520  * is used; otherwise the L2 table is loaded from the image file.
       
   521  *
       
   522  * Returns a pointer to the L2 table on success, or NULL if the read from
       
   523  * the image file failed.
       
   524  */
       
   525 
       
   526 static uint64_t *l2_load(BlockDriverState *bs, uint64_t l2_offset)
       
   527 {
       
   528     BDRVQcowState *s = bs->opaque;
       
   529     int min_index;
       
   530     uint64_t *l2_table;
       
   531 
       
   532     /* seek if the table for the given offset is in the cache */
       
   533 
       
   534     l2_table = seek_l2_table(s, l2_offset);
       
   535     if (l2_table != NULL)
       
   536         return l2_table;
       
   537 
       
   538     /* not found: load a new entry in the least used one */
       
   539 
       
   540     min_index = l2_cache_new_entry(bs);
       
   541     l2_table = s->l2_cache + (min_index << s->l2_bits);
       
   542     if (bdrv_pread(s->hd, l2_offset, l2_table, s->l2_size * sizeof(uint64_t)) !=
       
   543         s->l2_size * sizeof(uint64_t))
       
   544         return NULL;
       
   545     s->l2_cache_offsets[min_index] = l2_offset;
       
   546     s->l2_cache_counts[min_index] = 1;
       
   547 
       
   548     return l2_table;
       
   549 }
       
   550 
       
   551 /*
       
   552  * l2_allocate
       
   553  *
       
   554  * Allocate a new l2 entry in the file. If l1_index points to an already
       
   555  * used entry in the L2 table (i.e. we are doing a copy on write for the L2
       
   556  * table) copy the contents of the old L2 table into the newly allocated one.
       
   557  * Otherwise the new table is initialized with zeros.
       
   558  *
       
   559  */
       
   560 
       
   561 static uint64_t *l2_allocate(BlockDriverState *bs, int l1_index)
       
   562 {
       
   563     BDRVQcowState *s = bs->opaque;
       
   564     int min_index;
       
   565     uint64_t old_l2_offset, tmp;
       
   566     uint64_t *l2_table, l2_offset;
       
   567 
       
   568     old_l2_offset = s->l1_table[l1_index];
       
   569 
       
   570     /* allocate a new l2 entry */
       
   571 
       
   572     l2_offset = alloc_clusters(bs, s->l2_size * sizeof(uint64_t));
       
   573 
       
   574     /* update the L1 entry */
       
   575 
       
   576     s->l1_table[l1_index] = l2_offset | QCOW_OFLAG_COPIED;
       
   577 
       
   578     tmp = cpu_to_be64(l2_offset | QCOW_OFLAG_COPIED);
       
   579     if (bdrv_pwrite(s->hd, s->l1_table_offset + l1_index * sizeof(tmp),
       
   580                     &tmp, sizeof(tmp)) != sizeof(tmp))
       
   581         return NULL;
       
   582 
       
   583     /* allocate a new entry in the l2 cache */
       
   584 
       
   585     min_index = l2_cache_new_entry(bs);
       
   586     l2_table = s->l2_cache + (min_index << s->l2_bits);
       
   587 
       
   588     if (old_l2_offset == 0) {
       
   589         /* if there was no old l2 table, clear the new table */
       
   590         memset(l2_table, 0, s->l2_size * sizeof(uint64_t));
       
   591     } else {
       
   592         /* if there was an old l2 table, read it from the disk */
       
   593         if (bdrv_pread(s->hd, old_l2_offset,
       
   594                        l2_table, s->l2_size * sizeof(uint64_t)) !=
       
   595             s->l2_size * sizeof(uint64_t))
       
   596             return NULL;
       
   597     }
       
   598     /* write the l2 table to the file */
       
   599     if (bdrv_pwrite(s->hd, l2_offset,
       
   600                     l2_table, s->l2_size * sizeof(uint64_t)) !=
       
   601         s->l2_size * sizeof(uint64_t))
       
   602         return NULL;
       
   603 
       
   604     /* update the l2 cache entry */
       
   605 
       
   606     s->l2_cache_offsets[min_index] = l2_offset;
       
   607     s->l2_cache_counts[min_index] = 1;
       
   608 
       
   609     return l2_table;
       
   610 }
       
   611 
       
   612 static int size_to_clusters(BDRVQcowState *s, int64_t size)
       
   613 {
       
   614     return (size + (s->cluster_size - 1)) >> s->cluster_bits;
       
   615 }
       
   616 
       
   617 static int count_contiguous_clusters(uint64_t nb_clusters, int cluster_size,
       
   618         uint64_t *l2_table, uint64_t mask)
       
   619 {
       
   620     int i;
       
   621     uint64_t offset = be64_to_cpu(l2_table[0]) & ~mask;
       
   622 
       
   623     for (i = 0; i < nb_clusters; i++)
       
   624         if (offset + i * cluster_size != (be64_to_cpu(l2_table[i]) & ~mask))
       
   625             break;
       
   626 
       
   627 	return i;
       
   628 }
       
   629 
       
   630 static int count_contiguous_free_clusters(uint64_t nb_clusters, uint64_t *l2_table)
       
   631 {
       
   632     int i = 0;
       
   633 
       
   634     while(nb_clusters-- && l2_table[i] == 0)
       
   635         i++;
       
   636 
       
   637     return i;
       
   638 }
       
   639 
       
   640 /*
       
   641  * get_cluster_offset
       
   642  *
       
   643  * For a given offset of the disk image, return cluster offset in
       
   644  * qcow2 file.
       
   645  *
       
   646  * on entry, *num is the number of contiguous clusters we'd like to
       
   647  * access following offset.
       
   648  *
       
   649  * on exit, *num is the number of contiguous clusters we can read.
       
   650  *
       
   651  * Return 1, if the offset is found
       
   652  * Return 0, otherwise.
       
   653  *
       
   654  */
       
   655 
       
   656 static uint64_t get_cluster_offset(BlockDriverState *bs,
       
   657                                    uint64_t offset, int *num)
       
   658 {
       
   659     BDRVQcowState *s = bs->opaque;
       
   660     int l1_index, l2_index;
       
   661     uint64_t l2_offset, *l2_table, cluster_offset;
       
   662     int l1_bits, c;
       
   663     int index_in_cluster, nb_available, nb_needed, nb_clusters;
       
   664 
       
   665     index_in_cluster = (offset >> 9) & (s->cluster_sectors - 1);
       
   666     nb_needed = *num + index_in_cluster;
       
   667 
       
   668     l1_bits = s->l2_bits + s->cluster_bits;
       
   669 
       
   670     /* compute how many bytes there are between the offset and
       
   671      * the end of the l1 entry
       
   672      */
       
   673 
       
   674     nb_available = (1 << l1_bits) - (offset & ((1 << l1_bits) - 1));
       
   675 
       
   676     /* compute the number of available sectors */
       
   677 
       
   678     nb_available = (nb_available >> 9) + index_in_cluster;
       
   679 
       
   680     cluster_offset = 0;
       
   681 
       
   682     /* seek the the l2 offset in the l1 table */
       
   683 
       
   684     l1_index = offset >> l1_bits;
       
   685     if (l1_index >= s->l1_size)
       
   686         goto out;
       
   687 
       
   688     l2_offset = s->l1_table[l1_index];
       
   689 
       
   690     /* seek the l2 table of the given l2 offset */
       
   691 
       
   692     if (!l2_offset)
       
   693         goto out;
       
   694 
       
   695     /* load the l2 table in memory */
       
   696 
       
   697     l2_offset &= ~QCOW_OFLAG_COPIED;
       
   698     l2_table = l2_load(bs, l2_offset);
       
   699     if (l2_table == NULL)
       
   700         return 0;
       
   701 
       
   702     /* find the cluster offset for the given disk offset */
       
   703 
       
   704     l2_index = (offset >> s->cluster_bits) & (s->l2_size - 1);
       
   705     cluster_offset = be64_to_cpu(l2_table[l2_index]);
       
   706     nb_clusters = size_to_clusters(s, nb_needed << 9);
       
   707 
       
   708     if (!cluster_offset) {
       
   709         /* how many empty clusters ? */
       
   710         c = count_contiguous_free_clusters(nb_clusters, &l2_table[l2_index]);
       
   711     } else {
       
   712         /* how many allocated clusters ? */
       
   713         c = count_contiguous_clusters(nb_clusters, s->cluster_size,
       
   714                 &l2_table[l2_index], QCOW_OFLAG_COPIED);
       
   715     }
       
   716 
       
   717    nb_available = (c * s->cluster_sectors);
       
   718 out:
       
   719     if (nb_available > nb_needed)
       
   720         nb_available = nb_needed;
       
   721 
       
   722     *num = nb_available - index_in_cluster;
       
   723 
       
   724     return cluster_offset & ~QCOW_OFLAG_COPIED;
       
   725 }
       
   726 
       
   727 /*
       
   728  * free_any_clusters
       
   729  *
       
   730  * free clusters according to its type: compressed or not
       
   731  *
       
   732  */
       
   733 
       
   734 static void free_any_clusters(BlockDriverState *bs,
       
   735                               uint64_t cluster_offset, int nb_clusters)
       
   736 {
       
   737     BDRVQcowState *s = bs->opaque;
       
   738 
       
   739     /* free the cluster */
       
   740 
       
   741     if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
       
   742         int nb_csectors;
       
   743         nb_csectors = ((cluster_offset >> s->csize_shift) &
       
   744                        s->csize_mask) + 1;
       
   745         free_clusters(bs, (cluster_offset & s->cluster_offset_mask) & ~511,
       
   746                       nb_csectors * 512);
       
   747         return;
       
   748     }
       
   749 
       
   750     free_clusters(bs, cluster_offset, nb_clusters << s->cluster_bits);
       
   751 
       
   752     return;
       
   753 }
       
   754 
       
   755 /*
       
   756  * get_cluster_table
       
   757  *
       
   758  * for a given disk offset, load (and allocate if needed)
       
   759  * the l2 table.
       
   760  *
       
   761  * the l2 table offset in the qcow2 file and the cluster index
       
   762  * in the l2 table are given to the caller.
       
   763  *
       
   764  */
       
   765 
       
   766 static int get_cluster_table(BlockDriverState *bs, uint64_t offset,
       
   767                              uint64_t **new_l2_table,
       
   768                              uint64_t *new_l2_offset,
       
   769                              int *new_l2_index)
       
   770 {
       
   771     BDRVQcowState *s = bs->opaque;
       
   772     int l1_index, l2_index, ret;
       
   773     uint64_t l2_offset, *l2_table;
       
   774 
       
   775     /* seek the the l2 offset in the l1 table */
       
   776 
       
   777     l1_index = offset >> (s->l2_bits + s->cluster_bits);
       
   778     if (l1_index >= s->l1_size) {
       
   779         ret = grow_l1_table(bs, l1_index + 1);
       
   780         if (ret < 0)
       
   781             return 0;
       
   782     }
       
   783     l2_offset = s->l1_table[l1_index];
       
   784 
       
   785     /* seek the l2 table of the given l2 offset */
       
   786 
       
   787     if (l2_offset & QCOW_OFLAG_COPIED) {
       
   788         /* load the l2 table in memory */
       
   789         l2_offset &= ~QCOW_OFLAG_COPIED;
       
   790         l2_table = l2_load(bs, l2_offset);
       
   791         if (l2_table == NULL)
       
   792             return 0;
       
   793     } else {
       
   794         if (l2_offset)
       
   795             free_clusters(bs, l2_offset, s->l2_size * sizeof(uint64_t));
       
   796         l2_table = l2_allocate(bs, l1_index);
       
   797         if (l2_table == NULL)
       
   798             return 0;
       
   799         l2_offset = s->l1_table[l1_index] & ~QCOW_OFLAG_COPIED;
       
   800     }
       
   801 
       
   802     /* find the cluster offset for the given disk offset */
       
   803 
       
   804     l2_index = (offset >> s->cluster_bits) & (s->l2_size - 1);
       
   805 
       
   806     *new_l2_table = l2_table;
       
   807     *new_l2_offset = l2_offset;
       
   808     *new_l2_index = l2_index;
       
   809 
       
   810     return 1;
       
   811 }
       
   812 
       
   813 /*
       
   814  * alloc_compressed_cluster_offset
       
   815  *
       
   816  * For a given offset of the disk image, return cluster offset in
       
   817  * qcow2 file.
       
   818  *
       
   819  * If the offset is not found, allocate a new compressed cluster.
       
   820  *
       
   821  * Return the cluster offset if successful,
       
   822  * Return 0, otherwise.
       
   823  *
       
   824  */
       
   825 
       
   826 static uint64_t alloc_compressed_cluster_offset(BlockDriverState *bs,
       
   827                                                 uint64_t offset,
       
   828                                                 int compressed_size)
       
   829 {
       
   830     BDRVQcowState *s = bs->opaque;
       
   831     int l2_index, ret;
       
   832     uint64_t l2_offset, *l2_table, cluster_offset;
       
   833     int nb_csectors;
       
   834 
       
   835     ret = get_cluster_table(bs, offset, &l2_table, &l2_offset, &l2_index);
       
   836     if (ret == 0)
       
   837         return 0;
       
   838 
       
   839     cluster_offset = be64_to_cpu(l2_table[l2_index]);
       
   840     if (cluster_offset & QCOW_OFLAG_COPIED)
       
   841         return cluster_offset & ~QCOW_OFLAG_COPIED;
       
   842 
       
   843     if (cluster_offset)
       
   844         free_any_clusters(bs, cluster_offset, 1);
       
   845 
       
   846     cluster_offset = alloc_bytes(bs, compressed_size);
       
   847     nb_csectors = ((cluster_offset + compressed_size - 1) >> 9) -
       
   848                   (cluster_offset >> 9);
       
   849 
       
   850     cluster_offset |= QCOW_OFLAG_COMPRESSED |
       
   851                       ((uint64_t)nb_csectors << s->csize_shift);
       
   852 
       
   853     /* update L2 table */
       
   854 
       
   855     /* compressed clusters never have the copied flag */
       
   856 
       
   857     l2_table[l2_index] = cpu_to_be64(cluster_offset);
       
   858     if (bdrv_pwrite(s->hd,
       
   859                     l2_offset + l2_index * sizeof(uint64_t),
       
   860                     l2_table + l2_index,
       
   861                     sizeof(uint64_t)) != sizeof(uint64_t))
       
   862         return 0;
       
   863 
       
   864     return cluster_offset;
       
   865 }
       
   866 
       
   867 typedef struct QCowL2Meta
       
   868 {
       
   869     uint64_t offset;
       
   870     int n_start;
       
   871     int nb_available;
       
   872     int nb_clusters;
       
   873 } QCowL2Meta;
       
   874 
       
   875 static int alloc_cluster_link_l2(BlockDriverState *bs, uint64_t cluster_offset,
       
   876         QCowL2Meta *m)
       
   877 {
       
   878     BDRVQcowState *s = bs->opaque;
       
   879     int i, j = 0, l2_index, ret;
       
   880     uint64_t *old_cluster, start_sect, l2_offset, *l2_table;
       
   881 
       
   882     if (m->nb_clusters == 0)
       
   883         return 0;
       
   884 
       
   885     if (!(old_cluster = qemu_malloc(m->nb_clusters * sizeof(uint64_t))))
       
   886         return -ENOMEM;
       
   887 
       
   888     /* copy content of unmodified sectors */
       
   889     start_sect = (m->offset & ~(s->cluster_size - 1)) >> 9;
       
   890     if (m->n_start) {
       
   891         ret = copy_sectors(bs, start_sect, cluster_offset, 0, m->n_start);
       
   892         if (ret < 0)
       
   893             goto err;
       
   894     }
       
   895 
       
   896     if (m->nb_available & (s->cluster_sectors - 1)) {
       
   897         uint64_t end = m->nb_available & ~(uint64_t)(s->cluster_sectors - 1);
       
   898         ret = copy_sectors(bs, start_sect + end, cluster_offset + (end << 9),
       
   899                 m->nb_available - end, s->cluster_sectors);
       
   900         if (ret < 0)
       
   901             goto err;
       
   902     }
       
   903 
       
   904     ret = -EIO;
       
   905     /* update L2 table */
       
   906     if (!get_cluster_table(bs, m->offset, &l2_table, &l2_offset, &l2_index))
       
   907         goto err;
       
   908 
       
   909     for (i = 0; i < m->nb_clusters; i++) {
       
   910         if(l2_table[l2_index + i] != 0)
       
   911             old_cluster[j++] = l2_table[l2_index + i];
       
   912 
       
   913         l2_table[l2_index + i] = cpu_to_be64((cluster_offset +
       
   914                     (i << s->cluster_bits)) | QCOW_OFLAG_COPIED);
       
   915      }
       
   916 
       
   917     if (bdrv_pwrite(s->hd, l2_offset + l2_index * sizeof(uint64_t),
       
   918                 l2_table + l2_index, m->nb_clusters * sizeof(uint64_t)) !=
       
   919             m->nb_clusters * sizeof(uint64_t))
       
   920         goto err;
       
   921 
       
   922     for (i = 0; i < j; i++)
       
   923         free_any_clusters(bs, old_cluster[i], 1);
       
   924 
       
   925     ret = 0;
       
   926 err:
       
   927     qemu_free(old_cluster);
       
   928     return ret;
       
   929  }
       
   930 
       
   931 /*
       
   932  * alloc_cluster_offset
       
   933  *
       
   934  * For a given offset of the disk image, return cluster offset in
       
   935  * qcow2 file.
       
   936  *
       
   937  * If the offset is not found, allocate a new cluster.
       
   938  *
       
   939  * Return the cluster offset if successful,
       
   940  * Return 0, otherwise.
       
   941  *
       
   942  */
       
   943 
       
   944 static uint64_t alloc_cluster_offset(BlockDriverState *bs,
       
   945                                      uint64_t offset,
       
   946                                      int n_start, int n_end,
       
   947                                      int *num, QCowL2Meta *m)
       
   948 {
       
   949     BDRVQcowState *s = bs->opaque;
       
   950     int l2_index, ret;
       
   951     uint64_t l2_offset, *l2_table, cluster_offset;
       
   952     int nb_clusters, i = 0;
       
   953 
       
   954     ret = get_cluster_table(bs, offset, &l2_table, &l2_offset, &l2_index);
       
   955     if (ret == 0)
       
   956         return 0;
       
   957 
       
   958     nb_clusters = size_to_clusters(s, n_end << 9);
       
   959 
       
   960     nb_clusters = MIN(nb_clusters, s->l2_size - l2_index);
       
   961 
       
   962     cluster_offset = be64_to_cpu(l2_table[l2_index]);
       
   963 
       
   964     /* We keep all QCOW_OFLAG_COPIED clusters */
       
   965 
       
   966     if (cluster_offset & QCOW_OFLAG_COPIED) {
       
   967         nb_clusters = count_contiguous_clusters(nb_clusters, s->cluster_size,
       
   968                 &l2_table[l2_index], 0);
       
   969 
       
   970         cluster_offset &= ~QCOW_OFLAG_COPIED;
       
   971         m->nb_clusters = 0;
       
   972 
       
   973         goto out;
       
   974     }
       
   975 
       
   976     /* for the moment, multiple compressed clusters are not managed */
       
   977 
       
   978     if (cluster_offset & QCOW_OFLAG_COMPRESSED)
       
   979         nb_clusters = 1;
       
   980 
       
   981     /* how many available clusters ? */
       
   982 
       
   983     while (i < nb_clusters) {
       
   984         i += count_contiguous_free_clusters(nb_clusters - i,
       
   985                 &l2_table[l2_index + i]);
       
   986 
       
   987         cluster_offset = be64_to_cpu(l2_table[l2_index + i]);
       
   988 
       
   989         if ((cluster_offset & QCOW_OFLAG_COPIED) ||
       
   990                 (cluster_offset & QCOW_OFLAG_COMPRESSED))
       
   991             break;
       
   992 
       
   993         i += count_contiguous_clusters(nb_clusters - i, s->cluster_size,
       
   994                 &l2_table[l2_index + i], 0);
       
   995 
       
   996         if(be64_to_cpu(l2_table[l2_index + i]))
       
   997             break;
       
   998     }
       
   999     nb_clusters = i;
       
  1000 
       
  1001     /* allocate a new cluster */
       
  1002 
       
  1003     cluster_offset = alloc_clusters(bs, nb_clusters * s->cluster_size);
       
  1004 
       
  1005     /* save info needed for meta data update */
       
  1006     m->offset = offset;
       
  1007     m->n_start = n_start;
       
  1008     m->nb_clusters = nb_clusters;
       
  1009 
       
  1010 out:
       
  1011     m->nb_available = MIN(nb_clusters << (s->cluster_bits - 9), n_end);
       
  1012 
       
  1013     *num = m->nb_available - n_start;
       
  1014 
       
  1015     return cluster_offset;
       
  1016 }
       
  1017 
       
  1018 static int qcow_is_allocated(BlockDriverState *bs, int64_t sector_num,
       
  1019                              int nb_sectors, int *pnum)
       
  1020 {
       
  1021     uint64_t cluster_offset;
       
  1022 
       
  1023     *pnum = nb_sectors;
       
  1024     cluster_offset = get_cluster_offset(bs, sector_num << 9, pnum);
       
  1025 
       
  1026     return (cluster_offset != 0);
       
  1027 }
       
  1028 
       
  1029 static int decompress_buffer(uint8_t *out_buf, int out_buf_size,
       
  1030                              const uint8_t *buf, int buf_size)
       
  1031 {
       
  1032     z_stream strm1, *strm = &strm1;
       
  1033     int ret, out_len;
       
  1034 
       
  1035     memset(strm, 0, sizeof(*strm));
       
  1036 
       
  1037     strm->next_in = (uint8_t *)buf;
       
  1038     strm->avail_in = buf_size;
       
  1039     strm->next_out = out_buf;
       
  1040     strm->avail_out = out_buf_size;
       
  1041 
       
  1042     ret = inflateInit2(strm, -12);
       
  1043     if (ret != Z_OK)
       
  1044         return -1;
       
  1045     ret = inflate(strm, Z_FINISH);
       
  1046     out_len = strm->next_out - out_buf;
       
  1047     if ((ret != Z_STREAM_END && ret != Z_BUF_ERROR) ||
       
  1048         out_len != out_buf_size) {
       
  1049         inflateEnd(strm);
       
  1050         return -1;
       
  1051     }
       
  1052     inflateEnd(strm);
       
  1053     return 0;
       
  1054 }
       
  1055 
       
  1056 static int decompress_cluster(BDRVQcowState *s, uint64_t cluster_offset)
       
  1057 {
       
  1058     int ret, csize, nb_csectors, sector_offset;
       
  1059     uint64_t coffset;
       
  1060 
       
  1061     coffset = cluster_offset & s->cluster_offset_mask;
       
  1062     if (s->cluster_cache_offset != coffset) {
       
  1063         nb_csectors = ((cluster_offset >> s->csize_shift) & s->csize_mask) + 1;
       
  1064         sector_offset = coffset & 511;
       
  1065         csize = nb_csectors * 512 - sector_offset;
       
  1066         ret = bdrv_read(s->hd, coffset >> 9, s->cluster_data, nb_csectors);
       
  1067         if (ret < 0) {
       
  1068             return -1;
       
  1069         }
       
  1070         if (decompress_buffer(s->cluster_cache, s->cluster_size,
       
  1071                               s->cluster_data + sector_offset, csize) < 0) {
       
  1072             return -1;
       
  1073         }
       
  1074         s->cluster_cache_offset = coffset;
       
  1075     }
       
  1076     return 0;
       
  1077 }
       
  1078 
       
  1079 /* handle reading after the end of the backing file */
       
  1080 static int backing_read1(BlockDriverState *bs,
       
  1081                          int64_t sector_num, uint8_t *buf, int nb_sectors)
       
  1082 {
       
  1083     int n1;
       
  1084     if ((sector_num + nb_sectors) <= bs->total_sectors)
       
  1085         return nb_sectors;
       
  1086     if (sector_num >= bs->total_sectors)
       
  1087         n1 = 0;
       
  1088     else
       
  1089         n1 = bs->total_sectors - sector_num;
       
  1090     memset(buf + n1 * 512, 0, 512 * (nb_sectors - n1));
       
  1091     return n1;
       
  1092 }
       
  1093 
       
  1094 static int qcow_read(BlockDriverState *bs, int64_t sector_num,
       
  1095                      uint8_t *buf, int nb_sectors)
       
  1096 {
       
  1097     BDRVQcowState *s = bs->opaque;
       
  1098     int ret, index_in_cluster, n, n1;
       
  1099     uint64_t cluster_offset;
       
  1100 
       
  1101     while (nb_sectors > 0) {
       
  1102         n = nb_sectors;
       
  1103         cluster_offset = get_cluster_offset(bs, sector_num << 9, &n);
       
  1104         index_in_cluster = sector_num & (s->cluster_sectors - 1);
       
  1105         if (!cluster_offset) {
       
  1106             if (bs->backing_hd) {
       
  1107                 /* read from the base image */
       
  1108                 n1 = backing_read1(bs->backing_hd, sector_num, buf, n);
       
  1109                 if (n1 > 0) {
       
  1110                     ret = bdrv_read(bs->backing_hd, sector_num, buf, n1);
       
  1111                     if (ret < 0)
       
  1112                         return -1;
       
  1113                 }
       
  1114             } else {
       
  1115                 memset(buf, 0, 512 * n);
       
  1116             }
       
  1117         } else if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
       
  1118             if (decompress_cluster(s, cluster_offset) < 0)
       
  1119                 return -1;
       
  1120             memcpy(buf, s->cluster_cache + index_in_cluster * 512, 512 * n);
       
  1121         } else {
       
  1122             ret = bdrv_pread(s->hd, cluster_offset + index_in_cluster * 512, buf, n * 512);
       
  1123             if (ret != n * 512)
       
  1124                 return -1;
       
  1125             if (s->crypt_method) {
       
  1126                 encrypt_sectors(s, sector_num, buf, buf, n, 0,
       
  1127                                 &s->aes_decrypt_key);
       
  1128             }
       
  1129         }
       
  1130         nb_sectors -= n;
       
  1131         sector_num += n;
       
  1132         buf += n * 512;
       
  1133     }
       
  1134     return 0;
       
  1135 }
       
  1136 
       
  1137 static int qcow_write(BlockDriverState *bs, int64_t sector_num,
       
  1138                      const uint8_t *buf, int nb_sectors)
       
  1139 {
       
  1140     BDRVQcowState *s = bs->opaque;
       
  1141     int ret, index_in_cluster, n;
       
  1142     uint64_t cluster_offset;
       
  1143     int n_end;
       
  1144     QCowL2Meta l2meta;
       
  1145 
       
  1146     while (nb_sectors > 0) {
       
  1147         index_in_cluster = sector_num & (s->cluster_sectors - 1);
       
  1148         n_end = index_in_cluster + nb_sectors;
       
  1149         if (s->crypt_method &&
       
  1150             n_end > QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors)
       
  1151             n_end = QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors;
       
  1152         cluster_offset = alloc_cluster_offset(bs, sector_num << 9,
       
  1153                                               index_in_cluster,
       
  1154                                               n_end, &n, &l2meta);
       
  1155         if (!cluster_offset)
       
  1156             return -1;
       
  1157         if (s->crypt_method) {
       
  1158             encrypt_sectors(s, sector_num, s->cluster_data, buf, n, 1,
       
  1159                             &s->aes_encrypt_key);
       
  1160             ret = bdrv_pwrite(s->hd, cluster_offset + index_in_cluster * 512,
       
  1161                               s->cluster_data, n * 512);
       
  1162         } else {
       
  1163             ret = bdrv_pwrite(s->hd, cluster_offset + index_in_cluster * 512, buf, n * 512);
       
  1164         }
       
  1165         if (ret != n * 512 || alloc_cluster_link_l2(bs, cluster_offset, &l2meta) < 0) {
       
  1166             free_any_clusters(bs, cluster_offset, l2meta.nb_clusters);
       
  1167             return -1;
       
  1168         }
       
  1169         nb_sectors -= n;
       
  1170         sector_num += n;
       
  1171         buf += n * 512;
       
  1172     }
       
  1173     s->cluster_cache_offset = -1; /* disable compressed cache */
       
  1174     return 0;
       
  1175 }
       
  1176 
       
  1177 typedef struct QCowAIOCB {
       
  1178     BlockDriverAIOCB common;
       
  1179     int64_t sector_num;
       
  1180     uint8_t *buf;
       
  1181     int nb_sectors;
       
  1182     int n;
       
  1183     uint64_t cluster_offset;
       
  1184     uint8_t *cluster_data;
       
  1185     BlockDriverAIOCB *hd_aiocb;
       
  1186     QEMUBH *bh;
       
  1187     QCowL2Meta l2meta;
       
  1188 } QCowAIOCB;
       
  1189 
       
  1190 static void qcow_aio_read_cb(void *opaque, int ret);
       
  1191 static void qcow_aio_read_bh(void *opaque)
       
  1192 {
       
  1193     QCowAIOCB *acb = opaque;
       
  1194     qemu_bh_delete(acb->bh);
       
  1195     acb->bh = NULL;
       
  1196     qcow_aio_read_cb(opaque, 0);
       
  1197 }
       
  1198 
       
  1199 static int qcow_schedule_bh(QEMUBHFunc *cb, QCowAIOCB *acb)
       
  1200 {
       
  1201     if (acb->bh)
       
  1202         return -EIO;
       
  1203 
       
  1204     acb->bh = qemu_bh_new(cb, acb);
       
  1205     if (!acb->bh)
       
  1206         return -EIO;
       
  1207 
       
  1208     qemu_bh_schedule(acb->bh);
       
  1209 
       
  1210     return 0;
       
  1211 }
       
  1212 
       
  1213 static void qcow_aio_read_cb(void *opaque, int ret)
       
  1214 {
       
  1215     QCowAIOCB *acb = opaque;
       
  1216     BlockDriverState *bs = acb->common.bs;
       
  1217     BDRVQcowState *s = bs->opaque;
       
  1218     int index_in_cluster, n1;
       
  1219 
       
  1220     acb->hd_aiocb = NULL;
       
  1221     if (ret < 0) {
       
  1222 fail:
       
  1223         acb->common.cb(acb->common.opaque, ret);
       
  1224         qemu_aio_release(acb);
       
  1225         return;
       
  1226     }
       
  1227 
       
  1228     /* post process the read buffer */
       
  1229     if (!acb->cluster_offset) {
       
  1230         /* nothing to do */
       
  1231     } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) {
       
  1232         /* nothing to do */
       
  1233     } else {
       
  1234         if (s->crypt_method) {
       
  1235             encrypt_sectors(s, acb->sector_num, acb->buf, acb->buf,
       
  1236                             acb->n, 0,
       
  1237                             &s->aes_decrypt_key);
       
  1238         }
       
  1239     }
       
  1240 
       
  1241     acb->nb_sectors -= acb->n;
       
  1242     acb->sector_num += acb->n;
       
  1243     acb->buf += acb->n * 512;
       
  1244 
       
  1245     if (acb->nb_sectors == 0) {
       
  1246         /* request completed */
       
  1247         acb->common.cb(acb->common.opaque, 0);
       
  1248         qemu_aio_release(acb);
       
  1249         return;
       
  1250     }
       
  1251 
       
  1252     /* prepare next AIO request */
       
  1253     acb->n = acb->nb_sectors;
       
  1254     acb->cluster_offset = get_cluster_offset(bs, acb->sector_num << 9, &acb->n);
       
  1255     index_in_cluster = acb->sector_num & (s->cluster_sectors - 1);
       
  1256 
       
  1257     if (!acb->cluster_offset) {
       
  1258         if (bs->backing_hd) {
       
  1259             /* read from the base image */
       
  1260             n1 = backing_read1(bs->backing_hd, acb->sector_num,
       
  1261                                acb->buf, acb->n);
       
  1262             if (n1 > 0) {
       
  1263                 acb->hd_aiocb = bdrv_aio_read(bs->backing_hd, acb->sector_num,
       
  1264                                     acb->buf, acb->n, qcow_aio_read_cb, acb);
       
  1265                 if (acb->hd_aiocb == NULL)
       
  1266                     goto fail;
       
  1267             } else {
       
  1268                 ret = qcow_schedule_bh(qcow_aio_read_bh, acb);
       
  1269                 if (ret < 0)
       
  1270                     goto fail;
       
  1271             }
       
  1272         } else {
       
  1273             /* Note: in this case, no need to wait */
       
  1274             memset(acb->buf, 0, 512 * acb->n);
       
  1275             ret = qcow_schedule_bh(qcow_aio_read_bh, acb);
       
  1276             if (ret < 0)
       
  1277                 goto fail;
       
  1278         }
       
  1279     } else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) {
       
  1280         /* add AIO support for compressed blocks ? */
       
  1281         if (decompress_cluster(s, acb->cluster_offset) < 0)
       
  1282             goto fail;
       
  1283         memcpy(acb->buf,
       
  1284                s->cluster_cache + index_in_cluster * 512, 512 * acb->n);
       
  1285         ret = qcow_schedule_bh(qcow_aio_read_bh, acb);
       
  1286         if (ret < 0)
       
  1287             goto fail;
       
  1288     } else {
       
  1289         if ((acb->cluster_offset & 511) != 0) {
       
  1290             ret = -EIO;
       
  1291             goto fail;
       
  1292         }
       
  1293         acb->hd_aiocb = bdrv_aio_read(s->hd,
       
  1294                             (acb->cluster_offset >> 9) + index_in_cluster,
       
  1295                             acb->buf, acb->n, qcow_aio_read_cb, acb);
       
  1296         if (acb->hd_aiocb == NULL)
       
  1297             goto fail;
       
  1298     }
       
  1299 }
       
  1300 
       
  1301 static QCowAIOCB *qcow_aio_setup(BlockDriverState *bs,
       
  1302         int64_t sector_num, uint8_t *buf, int nb_sectors,
       
  1303         BlockDriverCompletionFunc *cb, void *opaque)
       
  1304 {
       
  1305     QCowAIOCB *acb;
       
  1306 
       
  1307     acb = qemu_aio_get(bs, cb, opaque);
       
  1308     if (!acb)
       
  1309         return NULL;
       
  1310     acb->hd_aiocb = NULL;
       
  1311     acb->sector_num = sector_num;
       
  1312     acb->buf = buf;
       
  1313     acb->nb_sectors = nb_sectors;
       
  1314     acb->n = 0;
       
  1315     acb->cluster_offset = 0;
       
  1316     acb->l2meta.nb_clusters = 0;
       
  1317     return acb;
       
  1318 }
       
  1319 
       
  1320 static BlockDriverAIOCB *qcow_aio_read(BlockDriverState *bs,
       
  1321         int64_t sector_num, uint8_t *buf, int nb_sectors,
       
  1322         BlockDriverCompletionFunc *cb, void *opaque)
       
  1323 {
       
  1324     QCowAIOCB *acb;
       
  1325 
       
  1326     acb = qcow_aio_setup(bs, sector_num, buf, nb_sectors, cb, opaque);
       
  1327     if (!acb)
       
  1328         return NULL;
       
  1329 
       
  1330     qcow_aio_read_cb(acb, 0);
       
  1331     return &acb->common;
       
  1332 }
       
  1333 
       
  1334 static void qcow_aio_write_cb(void *opaque, int ret)
       
  1335 {
       
  1336     QCowAIOCB *acb = opaque;
       
  1337     BlockDriverState *bs = acb->common.bs;
       
  1338     BDRVQcowState *s = bs->opaque;
       
  1339     int index_in_cluster;
       
  1340     const uint8_t *src_buf;
       
  1341     int n_end;
       
  1342 
       
  1343     acb->hd_aiocb = NULL;
       
  1344 
       
  1345     if (ret < 0) {
       
  1346     fail:
       
  1347         acb->common.cb(acb->common.opaque, ret);
       
  1348         qemu_aio_release(acb);
       
  1349         return;
       
  1350     }
       
  1351 
       
  1352     if (alloc_cluster_link_l2(bs, acb->cluster_offset, &acb->l2meta) < 0) {
       
  1353         free_any_clusters(bs, acb->cluster_offset, acb->l2meta.nb_clusters);
       
  1354         goto fail;
       
  1355     }
       
  1356 
       
  1357     acb->nb_sectors -= acb->n;
       
  1358     acb->sector_num += acb->n;
       
  1359     acb->buf += acb->n * 512;
       
  1360 
       
  1361     if (acb->nb_sectors == 0) {
       
  1362         /* request completed */
       
  1363         acb->common.cb(acb->common.opaque, 0);
       
  1364         qemu_aio_release(acb);
       
  1365         return;
       
  1366     }
       
  1367 
       
  1368     index_in_cluster = acb->sector_num & (s->cluster_sectors - 1);
       
  1369     n_end = index_in_cluster + acb->nb_sectors;
       
  1370     if (s->crypt_method &&
       
  1371         n_end > QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors)
       
  1372         n_end = QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors;
       
  1373 
       
  1374     acb->cluster_offset = alloc_cluster_offset(bs, acb->sector_num << 9,
       
  1375                                           index_in_cluster,
       
  1376                                           n_end, &acb->n, &acb->l2meta);
       
  1377     if (!acb->cluster_offset || (acb->cluster_offset & 511) != 0) {
       
  1378         ret = -EIO;
       
  1379         goto fail;
       
  1380     }
       
  1381     if (s->crypt_method) {
       
  1382         if (!acb->cluster_data) {
       
  1383             acb->cluster_data = qemu_mallocz(QCOW_MAX_CRYPT_CLUSTERS *
       
  1384                                              s->cluster_size);
       
  1385             if (!acb->cluster_data) {
       
  1386                 ret = -ENOMEM;
       
  1387                 goto fail;
       
  1388             }
       
  1389         }
       
  1390         encrypt_sectors(s, acb->sector_num, acb->cluster_data, acb->buf,
       
  1391                         acb->n, 1, &s->aes_encrypt_key);
       
  1392         src_buf = acb->cluster_data;
       
  1393     } else {
       
  1394         src_buf = acb->buf;
       
  1395     }
       
  1396     acb->hd_aiocb = bdrv_aio_write(s->hd,
       
  1397                                    (acb->cluster_offset >> 9) + index_in_cluster,
       
  1398                                    src_buf, acb->n,
       
  1399                                    qcow_aio_write_cb, acb);
       
  1400     if (acb->hd_aiocb == NULL)
       
  1401         goto fail;
       
  1402 }
       
  1403 
       
  1404 static BlockDriverAIOCB *qcow_aio_write(BlockDriverState *bs,
       
  1405         int64_t sector_num, const uint8_t *buf, int nb_sectors,
       
  1406         BlockDriverCompletionFunc *cb, void *opaque)
       
  1407 {
       
  1408     BDRVQcowState *s = bs->opaque;
       
  1409     QCowAIOCB *acb;
       
  1410 
       
  1411     s->cluster_cache_offset = -1; /* disable compressed cache */
       
  1412 
       
  1413     acb = qcow_aio_setup(bs, sector_num, (uint8_t*)buf, nb_sectors, cb, opaque);
       
  1414     if (!acb)
       
  1415         return NULL;
       
  1416 
       
  1417     qcow_aio_write_cb(acb, 0);
       
  1418     return &acb->common;
       
  1419 }
       
  1420 
       
  1421 static void qcow_aio_cancel(BlockDriverAIOCB *blockacb)
       
  1422 {
       
  1423     QCowAIOCB *acb = (QCowAIOCB *)blockacb;
       
  1424     if (acb->hd_aiocb)
       
  1425         bdrv_aio_cancel(acb->hd_aiocb);
       
  1426     qemu_aio_release(acb);
       
  1427 }
       
  1428 
       
  1429 static void qcow_close(BlockDriverState *bs)
       
  1430 {
       
  1431     BDRVQcowState *s = bs->opaque;
       
  1432     qemu_free(s->l1_table);
       
  1433     qemu_free(s->l2_cache);
       
  1434     qemu_free(s->cluster_cache);
       
  1435     qemu_free(s->cluster_data);
       
  1436     refcount_close(bs);
       
  1437     bdrv_delete(s->hd);
       
  1438 }
       
  1439 
       
  1440 /* XXX: use std qcow open function ? */
       
  1441 typedef struct QCowCreateState {
       
  1442     int cluster_size;
       
  1443     int cluster_bits;
       
  1444     uint16_t *refcount_block;
       
  1445     uint64_t *refcount_table;
       
  1446     int64_t l1_table_offset;
       
  1447     int64_t refcount_table_offset;
       
  1448     int64_t refcount_block_offset;
       
  1449 } QCowCreateState;
       
  1450 
       
  1451 static void create_refcount_update(QCowCreateState *s,
       
  1452                                    int64_t offset, int64_t size)
       
  1453 {
       
  1454     int refcount;
       
  1455     int64_t start, last, cluster_offset;
       
  1456     uint16_t *p;
       
  1457 
       
  1458     start = offset & ~(s->cluster_size - 1);
       
  1459     last = (offset + size - 1)  & ~(s->cluster_size - 1);
       
  1460     for(cluster_offset = start; cluster_offset <= last;
       
  1461         cluster_offset += s->cluster_size) {
       
  1462         p = &s->refcount_block[cluster_offset >> s->cluster_bits];
       
  1463         refcount = be16_to_cpu(*p);
       
  1464         refcount++;
       
  1465         *p = cpu_to_be16(refcount);
       
  1466     }
       
  1467 }
       
  1468 
       
  1469 static int qcow_create(const char *filename, int64_t total_size,
       
  1470                       const char *backing_file, int flags)
       
  1471 {
       
  1472     int fd, header_size, backing_filename_len, l1_size, i, shift, l2_bits;
       
  1473     QCowHeader header;
       
  1474     uint64_t tmp, offset;
       
  1475     QCowCreateState s1, *s = &s1;
       
  1476 
       
  1477     memset(s, 0, sizeof(*s));
       
  1478 
       
  1479     fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644);
       
  1480     if (fd < 0)
       
  1481         return -1;
       
  1482     memset(&header, 0, sizeof(header));
       
  1483     header.magic = cpu_to_be32(QCOW_MAGIC);
       
  1484     header.version = cpu_to_be32(QCOW_VERSION);
       
  1485     header.size = cpu_to_be64(total_size * 512);
       
  1486     header_size = sizeof(header);
       
  1487     backing_filename_len = 0;
       
  1488     if (backing_file) {
       
  1489         header.backing_file_offset = cpu_to_be64(header_size);
       
  1490         backing_filename_len = strlen(backing_file);
       
  1491         header.backing_file_size = cpu_to_be32(backing_filename_len);
       
  1492         header_size += backing_filename_len;
       
  1493     }
       
  1494     s->cluster_bits = 12;  /* 4 KB clusters */
       
  1495     s->cluster_size = 1 << s->cluster_bits;
       
  1496     header.cluster_bits = cpu_to_be32(s->cluster_bits);
       
  1497     header_size = (header_size + 7) & ~7;
       
  1498     if (flags & BLOCK_FLAG_ENCRYPT) {
       
  1499         header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES);
       
  1500     } else {
       
  1501         header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE);
       
  1502     }
       
  1503     l2_bits = s->cluster_bits - 3;
       
  1504     shift = s->cluster_bits + l2_bits;
       
  1505     l1_size = (((total_size * 512) + (1LL << shift) - 1) >> shift);
       
  1506     offset = align_offset(header_size, s->cluster_size);
       
  1507     s->l1_table_offset = offset;
       
  1508     header.l1_table_offset = cpu_to_be64(s->l1_table_offset);
       
  1509     header.l1_size = cpu_to_be32(l1_size);
       
  1510     offset += align_offset(l1_size * sizeof(uint64_t), s->cluster_size);
       
  1511 
       
  1512     s->refcount_table = qemu_mallocz(s->cluster_size);
       
  1513     if (!s->refcount_table)
       
  1514         goto fail;
       
  1515     s->refcount_block = qemu_mallocz(s->cluster_size);
       
  1516     if (!s->refcount_block)
       
  1517         goto fail;
       
  1518 
       
  1519     s->refcount_table_offset = offset;
       
  1520     header.refcount_table_offset = cpu_to_be64(offset);
       
  1521     header.refcount_table_clusters = cpu_to_be32(1);
       
  1522     offset += s->cluster_size;
       
  1523 
       
  1524     s->refcount_table[0] = cpu_to_be64(offset);
       
  1525     s->refcount_block_offset = offset;
       
  1526     offset += s->cluster_size;
       
  1527 
       
  1528     /* update refcounts */
       
  1529     create_refcount_update(s, 0, header_size);
       
  1530     create_refcount_update(s, s->l1_table_offset, l1_size * sizeof(uint64_t));
       
  1531     create_refcount_update(s, s->refcount_table_offset, s->cluster_size);
       
  1532     create_refcount_update(s, s->refcount_block_offset, s->cluster_size);
       
  1533 
       
  1534     /* write all the data */
       
  1535     write(fd, &header, sizeof(header));
       
  1536     if (backing_file) {
       
  1537         write(fd, backing_file, backing_filename_len);
       
  1538     }
       
  1539     lseek(fd, s->l1_table_offset, SEEK_SET);
       
  1540     tmp = 0;
       
  1541     for(i = 0;i < l1_size; i++) {
       
  1542         write(fd, &tmp, sizeof(tmp));
       
  1543     }
       
  1544     lseek(fd, s->refcount_table_offset, SEEK_SET);
       
  1545     write(fd, s->refcount_table, s->cluster_size);
       
  1546 
       
  1547     lseek(fd, s->refcount_block_offset, SEEK_SET);
       
  1548     write(fd, s->refcount_block, s->cluster_size);
       
  1549 
       
  1550     qemu_free(s->refcount_table);
       
  1551     qemu_free(s->refcount_block);
       
  1552     close(fd);
       
  1553     return 0;
       
  1554  fail:
       
  1555     qemu_free(s->refcount_table);
       
  1556     qemu_free(s->refcount_block);
       
  1557     close(fd);
       
  1558     return -ENOMEM;
       
  1559 }
       
  1560 
       
  1561 static int qcow_make_empty(BlockDriverState *bs)
       
  1562 {
       
  1563 #if 0
       
  1564     /* XXX: not correct */
       
  1565     BDRVQcowState *s = bs->opaque;
       
  1566     uint32_t l1_length = s->l1_size * sizeof(uint64_t);
       
  1567     int ret;
       
  1568 
       
  1569     memset(s->l1_table, 0, l1_length);
       
  1570     if (bdrv_pwrite(s->hd, s->l1_table_offset, s->l1_table, l1_length) < 0)
       
  1571         return -1;
       
  1572     ret = bdrv_truncate(s->hd, s->l1_table_offset + l1_length);
       
  1573     if (ret < 0)
       
  1574         return ret;
       
  1575 
       
  1576     l2_cache_reset(bs);
       
  1577 #endif
       
  1578     return 0;
       
  1579 }
       
  1580 
       
  1581 /* XXX: put compressed sectors first, then all the cluster aligned
       
  1582    tables to avoid losing bytes in alignment */
       
  1583 static int qcow_write_compressed(BlockDriverState *bs, int64_t sector_num,
       
  1584                                  const uint8_t *buf, int nb_sectors)
       
  1585 {
       
  1586     BDRVQcowState *s = bs->opaque;
       
  1587     z_stream strm;
       
  1588     int ret, out_len;
       
  1589     uint8_t *out_buf;
       
  1590     uint64_t cluster_offset;
       
  1591 
       
  1592     if (nb_sectors == 0) {
       
  1593         /* align end of file to a sector boundary to ease reading with
       
  1594            sector based I/Os */
       
  1595         cluster_offset = bdrv_getlength(s->hd);
       
  1596         cluster_offset = (cluster_offset + 511) & ~511;
       
  1597         bdrv_truncate(s->hd, cluster_offset);
       
  1598         return 0;
       
  1599     }
       
  1600 
       
  1601     if (nb_sectors != s->cluster_sectors)
       
  1602         return -EINVAL;
       
  1603 
       
  1604     out_buf = qemu_malloc(s->cluster_size + (s->cluster_size / 1000) + 128);
       
  1605     if (!out_buf)
       
  1606         return -ENOMEM;
       
  1607 
       
  1608     /* best compression, small window, no zlib header */
       
  1609     memset(&strm, 0, sizeof(strm));
       
  1610     ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION,
       
  1611                        Z_DEFLATED, -12,
       
  1612                        9, Z_DEFAULT_STRATEGY);
       
  1613     if (ret != 0) {
       
  1614         qemu_free(out_buf);
       
  1615         return -1;
       
  1616     }
       
  1617 
       
  1618     strm.avail_in = s->cluster_size;
       
  1619     strm.next_in = (uint8_t *)buf;
       
  1620     strm.avail_out = s->cluster_size;
       
  1621     strm.next_out = out_buf;
       
  1622 
       
  1623     ret = deflate(&strm, Z_FINISH);
       
  1624     if (ret != Z_STREAM_END && ret != Z_OK) {
       
  1625         qemu_free(out_buf);
       
  1626         deflateEnd(&strm);
       
  1627         return -1;
       
  1628     }
       
  1629     out_len = strm.next_out - out_buf;
       
  1630 
       
  1631     deflateEnd(&strm);
       
  1632 
       
  1633     if (ret != Z_STREAM_END || out_len >= s->cluster_size) {
       
  1634         /* could not compress: write normal cluster */
       
  1635         qcow_write(bs, sector_num, buf, s->cluster_sectors);
       
  1636     } else {
       
  1637         cluster_offset = alloc_compressed_cluster_offset(bs, sector_num << 9,
       
  1638                                               out_len);
       
  1639         if (!cluster_offset)
       
  1640             return -1;
       
  1641         cluster_offset &= s->cluster_offset_mask;
       
  1642         if (bdrv_pwrite(s->hd, cluster_offset, out_buf, out_len) != out_len) {
       
  1643             qemu_free(out_buf);
       
  1644             return -1;
       
  1645         }
       
  1646     }
       
  1647 
       
  1648     qemu_free(out_buf);
       
  1649     return 0;
       
  1650 }
       
  1651 
       
  1652 static void qcow_flush(BlockDriverState *bs)
       
  1653 {
       
  1654     BDRVQcowState *s = bs->opaque;
       
  1655     bdrv_flush(s->hd);
       
  1656 }
       
  1657 
       
  1658 static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
       
  1659 {
       
  1660     BDRVQcowState *s = bs->opaque;
       
  1661     bdi->cluster_size = s->cluster_size;
       
  1662     bdi->vm_state_offset = (int64_t)s->l1_vm_state_index <<
       
  1663         (s->cluster_bits + s->l2_bits);
       
  1664     return 0;
       
  1665 }
       
  1666 
       
  1667 /*********************************************************/
       
  1668 /* snapshot support */
       
  1669 
       
  1670 /* update the refcounts of snapshots and the copied flag */
       
  1671 static int update_snapshot_refcount(BlockDriverState *bs,
       
  1672                                     int64_t l1_table_offset,
       
  1673                                     int l1_size,
       
  1674                                     int addend)
       
  1675 {
       
  1676     BDRVQcowState *s = bs->opaque;
       
  1677     uint64_t *l1_table, *l2_table, l2_offset, offset, l1_size2, l1_allocated;
       
  1678     int64_t old_offset, old_l2_offset;
       
  1679     int l2_size, i, j, l1_modified, l2_modified, nb_csectors, refcount;
       
  1680 
       
  1681     l2_cache_reset(bs);
       
  1682 
       
  1683     l2_table = NULL;
       
  1684     l1_table = NULL;
       
  1685     l1_size2 = l1_size * sizeof(uint64_t);
       
  1686     l1_allocated = 0;
       
  1687     if (l1_table_offset != s->l1_table_offset) {
       
  1688         l1_table = qemu_malloc(l1_size2);
       
  1689         if (!l1_table)
       
  1690             goto fail;
       
  1691         l1_allocated = 1;
       
  1692         if (bdrv_pread(s->hd, l1_table_offset,
       
  1693                        l1_table, l1_size2) != l1_size2)
       
  1694             goto fail;
       
  1695         for(i = 0;i < l1_size; i++)
       
  1696             be64_to_cpus(&l1_table[i]);
       
  1697     } else {
       
  1698         assert(l1_size == s->l1_size);
       
  1699         l1_table = s->l1_table;
       
  1700         l1_allocated = 0;
       
  1701     }
       
  1702 
       
  1703     l2_size = s->l2_size * sizeof(uint64_t);
       
  1704     l2_table = qemu_malloc(l2_size);
       
  1705     if (!l2_table)
       
  1706         goto fail;
       
  1707     l1_modified = 0;
       
  1708     for(i = 0; i < l1_size; i++) {
       
  1709         l2_offset = l1_table[i];
       
  1710         if (l2_offset) {
       
  1711             old_l2_offset = l2_offset;
       
  1712             l2_offset &= ~QCOW_OFLAG_COPIED;
       
  1713             l2_modified = 0;
       
  1714             if (bdrv_pread(s->hd, l2_offset, l2_table, l2_size) != l2_size)
       
  1715                 goto fail;
       
  1716             for(j = 0; j < s->l2_size; j++) {
       
  1717                 offset = be64_to_cpu(l2_table[j]);
       
  1718                 if (offset != 0) {
       
  1719                     old_offset = offset;
       
  1720                     offset &= ~QCOW_OFLAG_COPIED;
       
  1721                     if (offset & QCOW_OFLAG_COMPRESSED) {
       
  1722                         nb_csectors = ((offset >> s->csize_shift) &
       
  1723                                        s->csize_mask) + 1;
       
  1724                         if (addend != 0)
       
  1725                             update_refcount(bs, (offset & s->cluster_offset_mask) & ~511,
       
  1726                                             nb_csectors * 512, addend);
       
  1727                         /* compressed clusters are never modified */
       
  1728                         refcount = 2;
       
  1729                     } else {
       
  1730                         if (addend != 0) {
       
  1731                             refcount = update_cluster_refcount(bs, offset >> s->cluster_bits, addend);
       
  1732                         } else {
       
  1733                             refcount = get_refcount(bs, offset >> s->cluster_bits);
       
  1734                         }
       
  1735                     }
       
  1736 
       
  1737                     if (refcount == 1) {
       
  1738                         offset |= QCOW_OFLAG_COPIED;
       
  1739                     }
       
  1740                     if (offset != old_offset) {
       
  1741                         l2_table[j] = cpu_to_be64(offset);
       
  1742                         l2_modified = 1;
       
  1743                     }
       
  1744                 }
       
  1745             }
       
  1746             if (l2_modified) {
       
  1747                 if (bdrv_pwrite(s->hd,
       
  1748                                 l2_offset, l2_table, l2_size) != l2_size)
       
  1749                     goto fail;
       
  1750             }
       
  1751 
       
  1752             if (addend != 0) {
       
  1753                 refcount = update_cluster_refcount(bs, l2_offset >> s->cluster_bits, addend);
       
  1754             } else {
       
  1755                 refcount = get_refcount(bs, l2_offset >> s->cluster_bits);
       
  1756             }
       
  1757             if (refcount == 1) {
       
  1758                 l2_offset |= QCOW_OFLAG_COPIED;
       
  1759             }
       
  1760             if (l2_offset != old_l2_offset) {
       
  1761                 l1_table[i] = l2_offset;
       
  1762                 l1_modified = 1;
       
  1763             }
       
  1764         }
       
  1765     }
       
  1766     if (l1_modified) {
       
  1767         for(i = 0; i < l1_size; i++)
       
  1768             cpu_to_be64s(&l1_table[i]);
       
  1769         if (bdrv_pwrite(s->hd, l1_table_offset, l1_table,
       
  1770                         l1_size2) != l1_size2)
       
  1771             goto fail;
       
  1772         for(i = 0; i < l1_size; i++)
       
  1773             be64_to_cpus(&l1_table[i]);
       
  1774     }
       
  1775     if (l1_allocated)
       
  1776         qemu_free(l1_table);
       
  1777     qemu_free(l2_table);
       
  1778     return 0;
       
  1779  fail:
       
  1780     if (l1_allocated)
       
  1781         qemu_free(l1_table);
       
  1782     qemu_free(l2_table);
       
  1783     return -EIO;
       
  1784 }
       
  1785 
       
  1786 static void qcow_free_snapshots(BlockDriverState *bs)
       
  1787 {
       
  1788     BDRVQcowState *s = bs->opaque;
       
  1789     int i;
       
  1790 
       
  1791     for(i = 0; i < s->nb_snapshots; i++) {
       
  1792         qemu_free(s->snapshots[i].name);
       
  1793         qemu_free(s->snapshots[i].id_str);
       
  1794     }
       
  1795     qemu_free(s->snapshots);
       
  1796     s->snapshots = NULL;
       
  1797     s->nb_snapshots = 0;
       
  1798 }
       
  1799 
       
  1800 static int qcow_read_snapshots(BlockDriverState *bs)
       
  1801 {
       
  1802     BDRVQcowState *s = bs->opaque;
       
  1803     QCowSnapshotHeader h;
       
  1804     QCowSnapshot *sn;
       
  1805     int i, id_str_size, name_size;
       
  1806     int64_t offset;
       
  1807     uint32_t extra_data_size;
       
  1808 
       
  1809     offset = s->snapshots_offset;
       
  1810     s->snapshots = qemu_mallocz(s->nb_snapshots * sizeof(QCowSnapshot));
       
  1811     if (!s->snapshots)
       
  1812         goto fail;
       
  1813     for(i = 0; i < s->nb_snapshots; i++) {
       
  1814         offset = align_offset(offset, 8);
       
  1815         if (bdrv_pread(s->hd, offset, &h, sizeof(h)) != sizeof(h))
       
  1816             goto fail;
       
  1817         offset += sizeof(h);
       
  1818         sn = s->snapshots + i;
       
  1819         sn->l1_table_offset = be64_to_cpu(h.l1_table_offset);
       
  1820         sn->l1_size = be32_to_cpu(h.l1_size);
       
  1821         sn->vm_state_size = be32_to_cpu(h.vm_state_size);
       
  1822         sn->date_sec = be32_to_cpu(h.date_sec);
       
  1823         sn->date_nsec = be32_to_cpu(h.date_nsec);
       
  1824         sn->vm_clock_nsec = be64_to_cpu(h.vm_clock_nsec);
       
  1825         extra_data_size = be32_to_cpu(h.extra_data_size);
       
  1826 
       
  1827         id_str_size = be16_to_cpu(h.id_str_size);
       
  1828         name_size = be16_to_cpu(h.name_size);
       
  1829 
       
  1830         offset += extra_data_size;
       
  1831 
       
  1832         sn->id_str = qemu_malloc(id_str_size + 1);
       
  1833         if (!sn->id_str)
       
  1834             goto fail;
       
  1835         if (bdrv_pread(s->hd, offset, sn->id_str, id_str_size) != id_str_size)
       
  1836             goto fail;
       
  1837         offset += id_str_size;
       
  1838         sn->id_str[id_str_size] = '\0';
       
  1839 
       
  1840         sn->name = qemu_malloc(name_size + 1);
       
  1841         if (!sn->name)
       
  1842             goto fail;
       
  1843         if (bdrv_pread(s->hd, offset, sn->name, name_size) != name_size)
       
  1844             goto fail;
       
  1845         offset += name_size;
       
  1846         sn->name[name_size] = '\0';
       
  1847     }
       
  1848     s->snapshots_size = offset - s->snapshots_offset;
       
  1849     return 0;
       
  1850  fail:
       
  1851     qcow_free_snapshots(bs);
       
  1852     return -1;
       
  1853 }
       
  1854 
       
  1855 /* add at the end of the file a new list of snapshots */
       
  1856 static int qcow_write_snapshots(BlockDriverState *bs)
       
  1857 {
       
  1858     BDRVQcowState *s = bs->opaque;
       
  1859     QCowSnapshot *sn;
       
  1860     QCowSnapshotHeader h;
       
  1861     int i, name_size, id_str_size, snapshots_size;
       
  1862     uint64_t data64;
       
  1863     uint32_t data32;
       
  1864     int64_t offset, snapshots_offset;
       
  1865 
       
  1866     /* compute the size of the snapshots */
       
  1867     offset = 0;
       
  1868     for(i = 0; i < s->nb_snapshots; i++) {
       
  1869         sn = s->snapshots + i;
       
  1870         offset = align_offset(offset, 8);
       
  1871         offset += sizeof(h);
       
  1872         offset += strlen(sn->id_str);
       
  1873         offset += strlen(sn->name);
       
  1874     }
       
  1875     snapshots_size = offset;
       
  1876 
       
  1877     snapshots_offset = alloc_clusters(bs, snapshots_size);
       
  1878     offset = snapshots_offset;
       
  1879 
       
  1880     for(i = 0; i < s->nb_snapshots; i++) {
       
  1881         sn = s->snapshots + i;
       
  1882         memset(&h, 0, sizeof(h));
       
  1883         h.l1_table_offset = cpu_to_be64(sn->l1_table_offset);
       
  1884         h.l1_size = cpu_to_be32(sn->l1_size);
       
  1885         h.vm_state_size = cpu_to_be32(sn->vm_state_size);
       
  1886         h.date_sec = cpu_to_be32(sn->date_sec);
       
  1887         h.date_nsec = cpu_to_be32(sn->date_nsec);
       
  1888         h.vm_clock_nsec = cpu_to_be64(sn->vm_clock_nsec);
       
  1889 
       
  1890         id_str_size = strlen(sn->id_str);
       
  1891         name_size = strlen(sn->name);
       
  1892         h.id_str_size = cpu_to_be16(id_str_size);
       
  1893         h.name_size = cpu_to_be16(name_size);
       
  1894         offset = align_offset(offset, 8);
       
  1895         if (bdrv_pwrite(s->hd, offset, &h, sizeof(h)) != sizeof(h))
       
  1896             goto fail;
       
  1897         offset += sizeof(h);
       
  1898         if (bdrv_pwrite(s->hd, offset, sn->id_str, id_str_size) != id_str_size)
       
  1899             goto fail;
       
  1900         offset += id_str_size;
       
  1901         if (bdrv_pwrite(s->hd, offset, sn->name, name_size) != name_size)
       
  1902             goto fail;
       
  1903         offset += name_size;
       
  1904     }
       
  1905 
       
  1906     /* update the various header fields */
       
  1907     data64 = cpu_to_be64(snapshots_offset);
       
  1908     if (bdrv_pwrite(s->hd, offsetof(QCowHeader, snapshots_offset),
       
  1909                     &data64, sizeof(data64)) != sizeof(data64))
       
  1910         goto fail;
       
  1911     data32 = cpu_to_be32(s->nb_snapshots);
       
  1912     if (bdrv_pwrite(s->hd, offsetof(QCowHeader, nb_snapshots),
       
  1913                     &data32, sizeof(data32)) != sizeof(data32))
       
  1914         goto fail;
       
  1915 
       
  1916     /* free the old snapshot table */
       
  1917     free_clusters(bs, s->snapshots_offset, s->snapshots_size);
       
  1918     s->snapshots_offset = snapshots_offset;
       
  1919     s->snapshots_size = snapshots_size;
       
  1920     return 0;
       
  1921  fail:
       
  1922     return -1;
       
  1923 }
       
  1924 
       
  1925 static void find_new_snapshot_id(BlockDriverState *bs,
       
  1926                                  char *id_str, int id_str_size)
       
  1927 {
       
  1928     BDRVQcowState *s = bs->opaque;
       
  1929     QCowSnapshot *sn;
       
  1930     int i, id, id_max = 0;
       
  1931 
       
  1932     for(i = 0; i < s->nb_snapshots; i++) {
       
  1933         sn = s->snapshots + i;
       
  1934         id = strtoul(sn->id_str, NULL, 10);
       
  1935         if (id > id_max)
       
  1936             id_max = id;
       
  1937     }
       
  1938     snprintf(id_str, id_str_size, "%d", id_max + 1);
       
  1939 }
       
  1940 
       
  1941 static int find_snapshot_by_id(BlockDriverState *bs, const char *id_str)
       
  1942 {
       
  1943     BDRVQcowState *s = bs->opaque;
       
  1944     int i;
       
  1945 
       
  1946     for(i = 0; i < s->nb_snapshots; i++) {
       
  1947         if (!strcmp(s->snapshots[i].id_str, id_str))
       
  1948             return i;
       
  1949     }
       
  1950     return -1;
       
  1951 }
       
  1952 
       
  1953 static int find_snapshot_by_id_or_name(BlockDriverState *bs, const char *name)
       
  1954 {
       
  1955     BDRVQcowState *s = bs->opaque;
       
  1956     int i, ret;
       
  1957 
       
  1958     ret = find_snapshot_by_id(bs, name);
       
  1959     if (ret >= 0)
       
  1960         return ret;
       
  1961     for(i = 0; i < s->nb_snapshots; i++) {
       
  1962         if (!strcmp(s->snapshots[i].name, name))
       
  1963             return i;
       
  1964     }
       
  1965     return -1;
       
  1966 }
       
  1967 
       
  1968 /* if no id is provided, a new one is constructed */
       
  1969 static int qcow_snapshot_create(BlockDriverState *bs,
       
  1970                                 QEMUSnapshotInfo *sn_info)
       
  1971 {
       
  1972     BDRVQcowState *s = bs->opaque;
       
  1973     QCowSnapshot *snapshots1, sn1, *sn = &sn1;
       
  1974     int i, ret;
       
  1975     uint64_t *l1_table = NULL;
       
  1976 
       
  1977     memset(sn, 0, sizeof(*sn));
       
  1978 
       
  1979     if (sn_info->id_str[0] == '\0') {
       
  1980         /* compute a new id */
       
  1981         find_new_snapshot_id(bs, sn_info->id_str, sizeof(sn_info->id_str));
       
  1982     }
       
  1983 
       
  1984     /* check that the ID is unique */
       
  1985     if (find_snapshot_by_id(bs, sn_info->id_str) >= 0)
       
  1986         return -ENOENT;
       
  1987 
       
  1988     sn->id_str = qemu_strdup(sn_info->id_str);
       
  1989     if (!sn->id_str)
       
  1990         goto fail;
       
  1991     sn->name = qemu_strdup(sn_info->name);
       
  1992     if (!sn->name)
       
  1993         goto fail;
       
  1994     sn->vm_state_size = sn_info->vm_state_size;
       
  1995     sn->date_sec = sn_info->date_sec;
       
  1996     sn->date_nsec = sn_info->date_nsec;
       
  1997     sn->vm_clock_nsec = sn_info->vm_clock_nsec;
       
  1998 
       
  1999     ret = update_snapshot_refcount(bs, s->l1_table_offset, s->l1_size, 1);
       
  2000     if (ret < 0)
       
  2001         goto fail;
       
  2002 
       
  2003     /* create the L1 table of the snapshot */
       
  2004     sn->l1_table_offset = alloc_clusters(bs, s->l1_size * sizeof(uint64_t));
       
  2005     sn->l1_size = s->l1_size;
       
  2006 
       
  2007     l1_table = qemu_malloc(s->l1_size * sizeof(uint64_t));
       
  2008     if (!l1_table)
       
  2009         goto fail;
       
  2010     for(i = 0; i < s->l1_size; i++) {
       
  2011         l1_table[i] = cpu_to_be64(s->l1_table[i]);
       
  2012     }
       
  2013     if (bdrv_pwrite(s->hd, sn->l1_table_offset,
       
  2014                     l1_table, s->l1_size * sizeof(uint64_t)) !=
       
  2015         (s->l1_size * sizeof(uint64_t)))
       
  2016         goto fail;
       
  2017     qemu_free(l1_table);
       
  2018     l1_table = NULL;
       
  2019 
       
  2020     snapshots1 = qemu_malloc((s->nb_snapshots + 1) * sizeof(QCowSnapshot));
       
  2021     if (!snapshots1)
       
  2022         goto fail;
       
  2023     memcpy(snapshots1, s->snapshots, s->nb_snapshots * sizeof(QCowSnapshot));
       
  2024     s->snapshots = snapshots1;
       
  2025     s->snapshots[s->nb_snapshots++] = *sn;
       
  2026 
       
  2027     if (qcow_write_snapshots(bs) < 0)
       
  2028         goto fail;
       
  2029 #ifdef DEBUG_ALLOC
       
  2030     check_refcounts(bs);
       
  2031 #endif
       
  2032     return 0;
       
  2033  fail:
       
  2034     qemu_free(sn->name);
       
  2035     qemu_free(l1_table);
       
  2036     return -1;
       
  2037 }
       
  2038 
       
  2039 /* copy the snapshot 'snapshot_name' into the current disk image */
       
  2040 static int qcow_snapshot_goto(BlockDriverState *bs,
       
  2041                               const char *snapshot_id)
       
  2042 {
       
  2043     BDRVQcowState *s = bs->opaque;
       
  2044     QCowSnapshot *sn;
       
  2045     int i, snapshot_index, l1_size2;
       
  2046 
       
  2047     snapshot_index = find_snapshot_by_id_or_name(bs, snapshot_id);
       
  2048     if (snapshot_index < 0)
       
  2049         return -ENOENT;
       
  2050     sn = &s->snapshots[snapshot_index];
       
  2051 
       
  2052     if (update_snapshot_refcount(bs, s->l1_table_offset, s->l1_size, -1) < 0)
       
  2053         goto fail;
       
  2054 
       
  2055     if (grow_l1_table(bs, sn->l1_size) < 0)
       
  2056         goto fail;
       
  2057 
       
  2058     s->l1_size = sn->l1_size;
       
  2059     l1_size2 = s->l1_size * sizeof(uint64_t);
       
  2060     /* copy the snapshot l1 table to the current l1 table */
       
  2061     if (bdrv_pread(s->hd, sn->l1_table_offset,
       
  2062                    s->l1_table, l1_size2) != l1_size2)
       
  2063         goto fail;
       
  2064     if (bdrv_pwrite(s->hd, s->l1_table_offset,
       
  2065                     s->l1_table, l1_size2) != l1_size2)
       
  2066         goto fail;
       
  2067     for(i = 0;i < s->l1_size; i++) {
       
  2068         be64_to_cpus(&s->l1_table[i]);
       
  2069     }
       
  2070 
       
  2071     if (update_snapshot_refcount(bs, s->l1_table_offset, s->l1_size, 1) < 0)
       
  2072         goto fail;
       
  2073 
       
  2074 #ifdef DEBUG_ALLOC
       
  2075     check_refcounts(bs);
       
  2076 #endif
       
  2077     return 0;
       
  2078  fail:
       
  2079     return -EIO;
       
  2080 }
       
  2081 
       
  2082 static int qcow_snapshot_delete(BlockDriverState *bs, const char *snapshot_id)
       
  2083 {
       
  2084     BDRVQcowState *s = bs->opaque;
       
  2085     QCowSnapshot *sn;
       
  2086     int snapshot_index, ret;
       
  2087 
       
  2088     snapshot_index = find_snapshot_by_id_or_name(bs, snapshot_id);
       
  2089     if (snapshot_index < 0)
       
  2090         return -ENOENT;
       
  2091     sn = &s->snapshots[snapshot_index];
       
  2092 
       
  2093     ret = update_snapshot_refcount(bs, sn->l1_table_offset, sn->l1_size, -1);
       
  2094     if (ret < 0)
       
  2095         return ret;
       
  2096     /* must update the copied flag on the current cluster offsets */
       
  2097     ret = update_snapshot_refcount(bs, s->l1_table_offset, s->l1_size, 0);
       
  2098     if (ret < 0)
       
  2099         return ret;
       
  2100     free_clusters(bs, sn->l1_table_offset, sn->l1_size * sizeof(uint64_t));
       
  2101 
       
  2102     qemu_free(sn->id_str);
       
  2103     qemu_free(sn->name);
       
  2104     memmove(sn, sn + 1, (s->nb_snapshots - snapshot_index - 1) * sizeof(*sn));
       
  2105     s->nb_snapshots--;
       
  2106     ret = qcow_write_snapshots(bs);
       
  2107     if (ret < 0) {
       
  2108         /* XXX: restore snapshot if error ? */
       
  2109         return ret;
       
  2110     }
       
  2111 #ifdef DEBUG_ALLOC
       
  2112     check_refcounts(bs);
       
  2113 #endif
       
  2114     return 0;
       
  2115 }
       
  2116 
       
  2117 static int qcow_snapshot_list(BlockDriverState *bs,
       
  2118                               QEMUSnapshotInfo **psn_tab)
       
  2119 {
       
  2120     BDRVQcowState *s = bs->opaque;
       
  2121     QEMUSnapshotInfo *sn_tab, *sn_info;
       
  2122     QCowSnapshot *sn;
       
  2123     int i;
       
  2124 
       
  2125     sn_tab = qemu_mallocz(s->nb_snapshots * sizeof(QEMUSnapshotInfo));
       
  2126     if (!sn_tab)
       
  2127         goto fail;
       
  2128     for(i = 0; i < s->nb_snapshots; i++) {
       
  2129         sn_info = sn_tab + i;
       
  2130         sn = s->snapshots + i;
       
  2131         pstrcpy(sn_info->id_str, sizeof(sn_info->id_str),
       
  2132                 sn->id_str);
       
  2133         pstrcpy(sn_info->name, sizeof(sn_info->name),
       
  2134                 sn->name);
       
  2135         sn_info->vm_state_size = sn->vm_state_size;
       
  2136         sn_info->date_sec = sn->date_sec;
       
  2137         sn_info->date_nsec = sn->date_nsec;
       
  2138         sn_info->vm_clock_nsec = sn->vm_clock_nsec;
       
  2139     }
       
  2140     *psn_tab = sn_tab;
       
  2141     return s->nb_snapshots;
       
  2142  fail:
       
  2143     qemu_free(sn_tab);
       
  2144     *psn_tab = NULL;
       
  2145     return -ENOMEM;
       
  2146 }
       
  2147 
       
  2148 /*********************************************************/
       
  2149 /* refcount handling */
       
  2150 
       
  2151 static int refcount_init(BlockDriverState *bs)
       
  2152 {
       
  2153     BDRVQcowState *s = bs->opaque;
       
  2154     int ret, refcount_table_size2, i;
       
  2155 
       
  2156     s->refcount_block_cache = qemu_malloc(s->cluster_size);
       
  2157     if (!s->refcount_block_cache)
       
  2158         goto fail;
       
  2159     refcount_table_size2 = s->refcount_table_size * sizeof(uint64_t);
       
  2160     s->refcount_table = qemu_malloc(refcount_table_size2);
       
  2161     if (!s->refcount_table)
       
  2162         goto fail;
       
  2163     if (s->refcount_table_size > 0) {
       
  2164         ret = bdrv_pread(s->hd, s->refcount_table_offset,
       
  2165                          s->refcount_table, refcount_table_size2);
       
  2166         if (ret != refcount_table_size2)
       
  2167             goto fail;
       
  2168         for(i = 0; i < s->refcount_table_size; i++)
       
  2169             be64_to_cpus(&s->refcount_table[i]);
       
  2170     }
       
  2171     return 0;
       
  2172  fail:
       
  2173     return -ENOMEM;
       
  2174 }
       
  2175 
       
  2176 static void refcount_close(BlockDriverState *bs)
       
  2177 {
       
  2178     BDRVQcowState *s = bs->opaque;
       
  2179     qemu_free(s->refcount_block_cache);
       
  2180     qemu_free(s->refcount_table);
       
  2181 }
       
  2182 
       
  2183 
       
  2184 static int load_refcount_block(BlockDriverState *bs,
       
  2185                                int64_t refcount_block_offset)
       
  2186 {
       
  2187     BDRVQcowState *s = bs->opaque;
       
  2188     int ret;
       
  2189     ret = bdrv_pread(s->hd, refcount_block_offset, s->refcount_block_cache,
       
  2190                      s->cluster_size);
       
  2191     if (ret != s->cluster_size)
       
  2192         return -EIO;
       
  2193     s->refcount_block_cache_offset = refcount_block_offset;
       
  2194     return 0;
       
  2195 }
       
  2196 
       
  2197 static int get_refcount(BlockDriverState *bs, int64_t cluster_index)
       
  2198 {
       
  2199     BDRVQcowState *s = bs->opaque;
       
  2200     int refcount_table_index, block_index;
       
  2201     int64_t refcount_block_offset;
       
  2202 
       
  2203     refcount_table_index = cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT);
       
  2204     if (refcount_table_index >= s->refcount_table_size)
       
  2205         return 0;
       
  2206     refcount_block_offset = s->refcount_table[refcount_table_index];
       
  2207     if (!refcount_block_offset)
       
  2208         return 0;
       
  2209     if (refcount_block_offset != s->refcount_block_cache_offset) {
       
  2210         /* better than nothing: return allocated if read error */
       
  2211         if (load_refcount_block(bs, refcount_block_offset) < 0)
       
  2212             return 1;
       
  2213     }
       
  2214     block_index = cluster_index &
       
  2215         ((1 << (s->cluster_bits - REFCOUNT_SHIFT)) - 1);
       
  2216     return be16_to_cpu(s->refcount_block_cache[block_index]);
       
  2217 }
       
  2218 
       
  2219 /* return < 0 if error */
       
  2220 static int64_t alloc_clusters_noref(BlockDriverState *bs, int64_t size)
       
  2221 {
       
  2222     BDRVQcowState *s = bs->opaque;
       
  2223     int i, nb_clusters;
       
  2224 
       
  2225     nb_clusters = size_to_clusters(s, size);
       
  2226 retry:
       
  2227     for(i = 0; i < nb_clusters; i++) {
       
  2228         int64_t i = s->free_cluster_index++;
       
  2229         if (get_refcount(bs, i) != 0)
       
  2230             goto retry;
       
  2231     }
       
  2232 #ifdef DEBUG_ALLOC2
       
  2233     printf("alloc_clusters: size=%lld -> %lld\n",
       
  2234             size,
       
  2235             (s->free_cluster_index - nb_clusters) << s->cluster_bits);
       
  2236 #endif
       
  2237     return (s->free_cluster_index - nb_clusters) << s->cluster_bits;
       
  2238 }
       
  2239 
       
  2240 static int64_t alloc_clusters(BlockDriverState *bs, int64_t size)
       
  2241 {
       
  2242     int64_t offset;
       
  2243 
       
  2244     offset = alloc_clusters_noref(bs, size);
       
  2245     update_refcount(bs, offset, size, 1);
       
  2246     return offset;
       
  2247 }
       
  2248 
       
  2249 /* only used to allocate compressed sectors. We try to allocate
       
  2250    contiguous sectors. size must be <= cluster_size */
       
  2251 static int64_t alloc_bytes(BlockDriverState *bs, int size)
       
  2252 {
       
  2253     BDRVQcowState *s = bs->opaque;
       
  2254     int64_t offset, cluster_offset;
       
  2255     int free_in_cluster;
       
  2256 
       
  2257     assert(size > 0 && size <= s->cluster_size);
       
  2258     if (s->free_byte_offset == 0) {
       
  2259         s->free_byte_offset = alloc_clusters(bs, s->cluster_size);
       
  2260     }
       
  2261  redo:
       
  2262     free_in_cluster = s->cluster_size -
       
  2263         (s->free_byte_offset & (s->cluster_size - 1));
       
  2264     if (size <= free_in_cluster) {
       
  2265         /* enough space in current cluster */
       
  2266         offset = s->free_byte_offset;
       
  2267         s->free_byte_offset += size;
       
  2268         free_in_cluster -= size;
       
  2269         if (free_in_cluster == 0)
       
  2270             s->free_byte_offset = 0;
       
  2271         if ((offset & (s->cluster_size - 1)) != 0)
       
  2272             update_cluster_refcount(bs, offset >> s->cluster_bits, 1);
       
  2273     } else {
       
  2274         offset = alloc_clusters(bs, s->cluster_size);
       
  2275         cluster_offset = s->free_byte_offset & ~(s->cluster_size - 1);
       
  2276         if ((cluster_offset + s->cluster_size) == offset) {
       
  2277             /* we are lucky: contiguous data */
       
  2278             offset = s->free_byte_offset;
       
  2279             update_cluster_refcount(bs, offset >> s->cluster_bits, 1);
       
  2280             s->free_byte_offset += size;
       
  2281         } else {
       
  2282             s->free_byte_offset = offset;
       
  2283             goto redo;
       
  2284         }
       
  2285     }
       
  2286     return offset;
       
  2287 }
       
  2288 
       
  2289 static void free_clusters(BlockDriverState *bs,
       
  2290                           int64_t offset, int64_t size)
       
  2291 {
       
  2292     update_refcount(bs, offset, size, -1);
       
  2293 }
       
  2294 
       
  2295 static int grow_refcount_table(BlockDriverState *bs, int min_size)
       
  2296 {
       
  2297     BDRVQcowState *s = bs->opaque;
       
  2298     int new_table_size, new_table_size2, refcount_table_clusters, i, ret;
       
  2299     uint64_t *new_table;
       
  2300     int64_t table_offset;
       
  2301     uint8_t data[12];
       
  2302     int old_table_size;
       
  2303     int64_t old_table_offset;
       
  2304 
       
  2305     if (min_size <= s->refcount_table_size)
       
  2306         return 0;
       
  2307     /* compute new table size */
       
  2308     refcount_table_clusters = s->refcount_table_size >> (s->cluster_bits - 3);
       
  2309     for(;;) {
       
  2310         if (refcount_table_clusters == 0) {
       
  2311             refcount_table_clusters = 1;
       
  2312         } else {
       
  2313             refcount_table_clusters = (refcount_table_clusters * 3 + 1) / 2;
       
  2314         }
       
  2315         new_table_size = refcount_table_clusters << (s->cluster_bits - 3);
       
  2316         if (min_size <= new_table_size)
       
  2317             break;
       
  2318     }
       
  2319 #ifdef DEBUG_ALLOC2
       
  2320     printf("grow_refcount_table from %d to %d\n",
       
  2321            s->refcount_table_size,
       
  2322            new_table_size);
       
  2323 #endif
       
  2324     new_table_size2 = new_table_size * sizeof(uint64_t);
       
  2325     new_table = qemu_mallocz(new_table_size2);
       
  2326     if (!new_table)
       
  2327         return -ENOMEM;
       
  2328     memcpy(new_table, s->refcount_table,
       
  2329            s->refcount_table_size * sizeof(uint64_t));
       
  2330     for(i = 0; i < s->refcount_table_size; i++)
       
  2331         cpu_to_be64s(&new_table[i]);
       
  2332     /* Note: we cannot update the refcount now to avoid recursion */
       
  2333     table_offset = alloc_clusters_noref(bs, new_table_size2);
       
  2334     ret = bdrv_pwrite(s->hd, table_offset, new_table, new_table_size2);
       
  2335     if (ret != new_table_size2)
       
  2336         goto fail;
       
  2337     for(i = 0; i < s->refcount_table_size; i++)
       
  2338         be64_to_cpus(&new_table[i]);
       
  2339 
       
  2340     cpu_to_be64w((uint64_t*)data, table_offset);
       
  2341     cpu_to_be32w((uint32_t*)(data + 8), refcount_table_clusters);
       
  2342     if (bdrv_pwrite(s->hd, offsetof(QCowHeader, refcount_table_offset),
       
  2343                     data, sizeof(data)) != sizeof(data))
       
  2344         goto fail;
       
  2345     qemu_free(s->refcount_table);
       
  2346     old_table_offset = s->refcount_table_offset;
       
  2347     old_table_size = s->refcount_table_size;
       
  2348     s->refcount_table = new_table;
       
  2349     s->refcount_table_size = new_table_size;
       
  2350     s->refcount_table_offset = table_offset;
       
  2351 
       
  2352     update_refcount(bs, table_offset, new_table_size2, 1);
       
  2353     free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t));
       
  2354     return 0;
       
  2355  fail:
       
  2356     free_clusters(bs, table_offset, new_table_size2);
       
  2357     qemu_free(new_table);
       
  2358     return -EIO;
       
  2359 }
       
  2360 
       
  2361 /* addend must be 1 or -1 */
       
  2362 /* XXX: cache several refcount block clusters ? */
       
  2363 static int update_cluster_refcount(BlockDriverState *bs,
       
  2364                                    int64_t cluster_index,
       
  2365                                    int addend)
       
  2366 {
       
  2367     BDRVQcowState *s = bs->opaque;
       
  2368     int64_t offset, refcount_block_offset;
       
  2369     int ret, refcount_table_index, block_index, refcount;
       
  2370     uint64_t data64;
       
  2371 
       
  2372     refcount_table_index = cluster_index >> (s->cluster_bits - REFCOUNT_SHIFT);
       
  2373     if (refcount_table_index >= s->refcount_table_size) {
       
  2374         if (addend < 0)
       
  2375             return -EINVAL;
       
  2376         ret = grow_refcount_table(bs, refcount_table_index + 1);
       
  2377         if (ret < 0)
       
  2378             return ret;
       
  2379     }
       
  2380     refcount_block_offset = s->refcount_table[refcount_table_index];
       
  2381     if (!refcount_block_offset) {
       
  2382         if (addend < 0)
       
  2383             return -EINVAL;
       
  2384         /* create a new refcount block */
       
  2385         /* Note: we cannot update the refcount now to avoid recursion */
       
  2386         offset = alloc_clusters_noref(bs, s->cluster_size);
       
  2387         memset(s->refcount_block_cache, 0, s->cluster_size);
       
  2388         ret = bdrv_pwrite(s->hd, offset, s->refcount_block_cache, s->cluster_size);
       
  2389         if (ret != s->cluster_size)
       
  2390             return -EINVAL;
       
  2391         s->refcount_table[refcount_table_index] = offset;
       
  2392         data64 = cpu_to_be64(offset);
       
  2393         ret = bdrv_pwrite(s->hd, s->refcount_table_offset +
       
  2394                           refcount_table_index * sizeof(uint64_t),
       
  2395                           &data64, sizeof(data64));
       
  2396         if (ret != sizeof(data64))
       
  2397             return -EINVAL;
       
  2398 
       
  2399         refcount_block_offset = offset;
       
  2400         s->refcount_block_cache_offset = offset;
       
  2401         update_refcount(bs, offset, s->cluster_size, 1);
       
  2402     } else {
       
  2403         if (refcount_block_offset != s->refcount_block_cache_offset) {
       
  2404             if (load_refcount_block(bs, refcount_block_offset) < 0)
       
  2405                 return -EIO;
       
  2406         }
       
  2407     }
       
  2408     /* we can update the count and save it */
       
  2409     block_index = cluster_index &
       
  2410         ((1 << (s->cluster_bits - REFCOUNT_SHIFT)) - 1);
       
  2411     refcount = be16_to_cpu(s->refcount_block_cache[block_index]);
       
  2412     refcount += addend;
       
  2413     if (refcount < 0 || refcount > 0xffff)
       
  2414         return -EINVAL;
       
  2415     if (refcount == 0 && cluster_index < s->free_cluster_index) {
       
  2416         s->free_cluster_index = cluster_index;
       
  2417     }
       
  2418     s->refcount_block_cache[block_index] = cpu_to_be16(refcount);
       
  2419     if (bdrv_pwrite(s->hd,
       
  2420                     refcount_block_offset + (block_index << REFCOUNT_SHIFT),
       
  2421                     &s->refcount_block_cache[block_index], 2) != 2)
       
  2422         return -EIO;
       
  2423     return refcount;
       
  2424 }
       
  2425 
       
  2426 static void update_refcount(BlockDriverState *bs,
       
  2427                             int64_t offset, int64_t length,
       
  2428                             int addend)
       
  2429 {
       
  2430     BDRVQcowState *s = bs->opaque;
       
  2431     int64_t start, last, cluster_offset;
       
  2432 
       
  2433 #ifdef DEBUG_ALLOC2
       
  2434     printf("update_refcount: offset=%lld size=%lld addend=%d\n",
       
  2435            offset, length, addend);
       
  2436 #endif
       
  2437     if (length <= 0)
       
  2438         return;
       
  2439     start = offset & ~(s->cluster_size - 1);
       
  2440     last = (offset + length - 1) & ~(s->cluster_size - 1);
       
  2441     for(cluster_offset = start; cluster_offset <= last;
       
  2442         cluster_offset += s->cluster_size) {
       
  2443         update_cluster_refcount(bs, cluster_offset >> s->cluster_bits, addend);
       
  2444     }
       
  2445 }
       
  2446 
       
  2447 #ifdef DEBUG_ALLOC
       
  2448 static void inc_refcounts(BlockDriverState *bs,
       
  2449                           uint16_t *refcount_table,
       
  2450                           int refcount_table_size,
       
  2451                           int64_t offset, int64_t size)
       
  2452 {
       
  2453     BDRVQcowState *s = bs->opaque;
       
  2454     int64_t start, last, cluster_offset;
       
  2455     int k;
       
  2456 
       
  2457     if (size <= 0)
       
  2458         return;
       
  2459 
       
  2460     start = offset & ~(s->cluster_size - 1);
       
  2461     last = (offset + size - 1) & ~(s->cluster_size - 1);
       
  2462     for(cluster_offset = start; cluster_offset <= last;
       
  2463         cluster_offset += s->cluster_size) {
       
  2464         k = cluster_offset >> s->cluster_bits;
       
  2465         if (k < 0 || k >= refcount_table_size) {
       
  2466             printf("ERROR: invalid cluster offset=0x%llx\n", cluster_offset);
       
  2467         } else {
       
  2468             if (++refcount_table[k] == 0) {
       
  2469                 printf("ERROR: overflow cluster offset=0x%llx\n", cluster_offset);
       
  2470             }
       
  2471         }
       
  2472     }
       
  2473 }
       
  2474 
       
  2475 static int check_refcounts_l1(BlockDriverState *bs,
       
  2476                               uint16_t *refcount_table,
       
  2477                               int refcount_table_size,
       
  2478                               int64_t l1_table_offset, int l1_size,
       
  2479                               int check_copied)
       
  2480 {
       
  2481     BDRVQcowState *s = bs->opaque;
       
  2482     uint64_t *l1_table, *l2_table, l2_offset, offset, l1_size2;
       
  2483     int l2_size, i, j, nb_csectors, refcount;
       
  2484 
       
  2485     l2_table = NULL;
       
  2486     l1_size2 = l1_size * sizeof(uint64_t);
       
  2487 
       
  2488     inc_refcounts(bs, refcount_table, refcount_table_size,
       
  2489                   l1_table_offset, l1_size2);
       
  2490 
       
  2491     l1_table = qemu_malloc(l1_size2);
       
  2492     if (!l1_table)
       
  2493         goto fail;
       
  2494     if (bdrv_pread(s->hd, l1_table_offset,
       
  2495                    l1_table, l1_size2) != l1_size2)
       
  2496         goto fail;
       
  2497     for(i = 0;i < l1_size; i++)
       
  2498         be64_to_cpus(&l1_table[i]);
       
  2499 
       
  2500     l2_size = s->l2_size * sizeof(uint64_t);
       
  2501     l2_table = qemu_malloc(l2_size);
       
  2502     if (!l2_table)
       
  2503         goto fail;
       
  2504     for(i = 0; i < l1_size; i++) {
       
  2505         l2_offset = l1_table[i];
       
  2506         if (l2_offset) {
       
  2507             if (check_copied) {
       
  2508                 refcount = get_refcount(bs, (l2_offset & ~QCOW_OFLAG_COPIED) >> s->cluster_bits);
       
  2509                 if ((refcount == 1) != ((l2_offset & QCOW_OFLAG_COPIED) != 0)) {
       
  2510                     printf("ERROR OFLAG_COPIED: l2_offset=%llx refcount=%d\n",
       
  2511                            l2_offset, refcount);
       
  2512                 }
       
  2513             }
       
  2514             l2_offset &= ~QCOW_OFLAG_COPIED;
       
  2515             if (bdrv_pread(s->hd, l2_offset, l2_table, l2_size) != l2_size)
       
  2516                 goto fail;
       
  2517             for(j = 0; j < s->l2_size; j++) {
       
  2518                 offset = be64_to_cpu(l2_table[j]);
       
  2519                 if (offset != 0) {
       
  2520                     if (offset & QCOW_OFLAG_COMPRESSED) {
       
  2521                         if (offset & QCOW_OFLAG_COPIED) {
       
  2522                             printf("ERROR: cluster %lld: copied flag must never be set for compressed clusters\n",
       
  2523                                    offset >> s->cluster_bits);
       
  2524                             offset &= ~QCOW_OFLAG_COPIED;
       
  2525                         }
       
  2526                         nb_csectors = ((offset >> s->csize_shift) &
       
  2527                                        s->csize_mask) + 1;
       
  2528                         offset &= s->cluster_offset_mask;
       
  2529                         inc_refcounts(bs, refcount_table,
       
  2530                                       refcount_table_size,
       
  2531                                       offset & ~511, nb_csectors * 512);
       
  2532                     } else {
       
  2533                         if (check_copied) {
       
  2534                             refcount = get_refcount(bs, (offset & ~QCOW_OFLAG_COPIED) >> s->cluster_bits);
       
  2535                             if ((refcount == 1) != ((offset & QCOW_OFLAG_COPIED) != 0)) {
       
  2536                                 printf("ERROR OFLAG_COPIED: offset=%llx refcount=%d\n",
       
  2537                                        offset, refcount);
       
  2538                             }
       
  2539                         }
       
  2540                         offset &= ~QCOW_OFLAG_COPIED;
       
  2541                         inc_refcounts(bs, refcount_table,
       
  2542                                       refcount_table_size,
       
  2543                                       offset, s->cluster_size);
       
  2544                     }
       
  2545                 }
       
  2546             }
       
  2547             inc_refcounts(bs, refcount_table,
       
  2548                           refcount_table_size,
       
  2549                           l2_offset,
       
  2550                           s->cluster_size);
       
  2551         }
       
  2552     }
       
  2553     qemu_free(l1_table);
       
  2554     qemu_free(l2_table);
       
  2555     return 0;
       
  2556  fail:
       
  2557     printf("ERROR: I/O error in check_refcounts_l1\n");
       
  2558     qemu_free(l1_table);
       
  2559     qemu_free(l2_table);
       
  2560     return -EIO;
       
  2561 }
       
  2562 
       
  2563 static void check_refcounts(BlockDriverState *bs)
       
  2564 {
       
  2565     BDRVQcowState *s = bs->opaque;
       
  2566     int64_t size;
       
  2567     int nb_clusters, refcount1, refcount2, i;
       
  2568     QCowSnapshot *sn;
       
  2569     uint16_t *refcount_table;
       
  2570 
       
  2571     size = bdrv_getlength(s->hd);
       
  2572     nb_clusters = size_to_clusters(s, size);
       
  2573     refcount_table = qemu_mallocz(nb_clusters * sizeof(uint16_t));
       
  2574 
       
  2575     /* header */
       
  2576     inc_refcounts(bs, refcount_table, nb_clusters,
       
  2577                   0, s->cluster_size);
       
  2578 
       
  2579     check_refcounts_l1(bs, refcount_table, nb_clusters,
       
  2580                        s->l1_table_offset, s->l1_size, 1);
       
  2581 
       
  2582     /* snapshots */
       
  2583     for(i = 0; i < s->nb_snapshots; i++) {
       
  2584         sn = s->snapshots + i;
       
  2585         check_refcounts_l1(bs, refcount_table, nb_clusters,
       
  2586                            sn->l1_table_offset, sn->l1_size, 0);
       
  2587     }
       
  2588     inc_refcounts(bs, refcount_table, nb_clusters,
       
  2589                   s->snapshots_offset, s->snapshots_size);
       
  2590 
       
  2591     /* refcount data */
       
  2592     inc_refcounts(bs, refcount_table, nb_clusters,
       
  2593                   s->refcount_table_offset,
       
  2594                   s->refcount_table_size * sizeof(uint64_t));
       
  2595     for(i = 0; i < s->refcount_table_size; i++) {
       
  2596         int64_t offset;
       
  2597         offset = s->refcount_table[i];
       
  2598         if (offset != 0) {
       
  2599             inc_refcounts(bs, refcount_table, nb_clusters,
       
  2600                           offset, s->cluster_size);
       
  2601         }
       
  2602     }
       
  2603 
       
  2604     /* compare ref counts */
       
  2605     for(i = 0; i < nb_clusters; i++) {
       
  2606         refcount1 = get_refcount(bs, i);
       
  2607         refcount2 = refcount_table[i];
       
  2608         if (refcount1 != refcount2)
       
  2609             printf("ERROR cluster %d refcount=%d reference=%d\n",
       
  2610                    i, refcount1, refcount2);
       
  2611     }
       
  2612 
       
  2613     qemu_free(refcount_table);
       
  2614 }
       
  2615 
       
  2616 #if 0
       
  2617 static void dump_refcounts(BlockDriverState *bs)
       
  2618 {
       
  2619     BDRVQcowState *s = bs->opaque;
       
  2620     int64_t nb_clusters, k, k1, size;
       
  2621     int refcount;
       
  2622 
       
  2623     size = bdrv_getlength(s->hd);
       
  2624     nb_clusters = size_to_clusters(s, size);
       
  2625     for(k = 0; k < nb_clusters;) {
       
  2626         k1 = k;
       
  2627         refcount = get_refcount(bs, k);
       
  2628         k++;
       
  2629         while (k < nb_clusters && get_refcount(bs, k) == refcount)
       
  2630             k++;
       
  2631         printf("%lld: refcount=%d nb=%lld\n", k, refcount, k - k1);
       
  2632     }
       
  2633 }
       
  2634 #endif
       
  2635 #endif
       
  2636 
       
  2637 BlockDriver bdrv_qcow2 = {
       
  2638     "qcow2",
       
  2639     sizeof(BDRVQcowState),
       
  2640     qcow_probe,
       
  2641     qcow_open,
       
  2642     NULL,
       
  2643     NULL,
       
  2644     qcow_close,
       
  2645     qcow_create,
       
  2646     qcow_flush,
       
  2647     qcow_is_allocated,
       
  2648     qcow_set_key,
       
  2649     qcow_make_empty,
       
  2650 
       
  2651     .bdrv_aio_read = qcow_aio_read,
       
  2652     .bdrv_aio_write = qcow_aio_write,
       
  2653     .bdrv_aio_cancel = qcow_aio_cancel,
       
  2654     .aiocb_size = sizeof(QCowAIOCB),
       
  2655     .bdrv_write_compressed = qcow_write_compressed,
       
  2656 
       
  2657     .bdrv_snapshot_create = qcow_snapshot_create,
       
  2658     .bdrv_snapshot_goto = qcow_snapshot_goto,
       
  2659     .bdrv_snapshot_delete = qcow_snapshot_delete,
       
  2660     .bdrv_snapshot_list = qcow_snapshot_list,
       
  2661     .bdrv_get_info = qcow_get_info,
       
  2662 };