xref: /openbmc/qemu/block/qcow2.c (revision 6b034aa1)
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 "module.h"
27 #include <zlib.h>
28 #include "aes.h"
29 #include "block/qcow2.h"
30 #include "qemu-error.h"
31 #include "qerror.h"
32 #include "trace.h"
33 
34 /*
35   Differences with QCOW:
36 
37   - Support for multiple incremental snapshots.
38   - Memory management by reference counts.
39   - Clusters which have a reference count of one have the bit
40     QCOW_OFLAG_COPIED to optimize write performance.
41   - Size of compressed clusters is stored in sectors to reduce bit usage
42     in the cluster offsets.
43   - Support for storing additional data (such as the VM state) in the
44     snapshots.
45   - If a backing store is used, the cluster size is not constrained
46     (could be backported to QCOW).
47   - L2 tables have always a size of one cluster.
48 */
49 
50 
51 typedef struct {
52     uint32_t magic;
53     uint32_t len;
54 } QCowExtension;
55 #define  QCOW2_EXT_MAGIC_END 0
56 #define  QCOW2_EXT_MAGIC_BACKING_FORMAT 0xE2792ACA
57 
58 static int qcow2_probe(const uint8_t *buf, int buf_size, const char *filename)
59 {
60     const QCowHeader *cow_header = (const void *)buf;
61 
62     if (buf_size >= sizeof(QCowHeader) &&
63         be32_to_cpu(cow_header->magic) == QCOW_MAGIC &&
64         be32_to_cpu(cow_header->version) >= QCOW_VERSION)
65         return 100;
66     else
67         return 0;
68 }
69 
70 
71 /*
72  * read qcow2 extension and fill bs
73  * start reading from start_offset
74  * finish reading upon magic of value 0 or when end_offset reached
75  * unknown magic is skipped (future extension this version knows nothing about)
76  * return 0 upon success, non-0 otherwise
77  */
78 static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset,
79                                  uint64_t end_offset)
80 {
81     BDRVQcowState *s = bs->opaque;
82     QCowExtension ext;
83     uint64_t offset;
84     int ret;
85 
86 #ifdef DEBUG_EXT
87     printf("qcow2_read_extensions: start=%ld end=%ld\n", start_offset, end_offset);
88 #endif
89     offset = start_offset;
90     while (offset < end_offset) {
91 
92 #ifdef DEBUG_EXT
93         /* Sanity check */
94         if (offset > s->cluster_size)
95             printf("qcow2_read_extension: suspicious offset %lu\n", offset);
96 
97         printf("attempting to read extended header in offset %lu\n", offset);
98 #endif
99 
100         if (bdrv_pread(bs->file, offset, &ext, sizeof(ext)) != sizeof(ext)) {
101             fprintf(stderr, "qcow2_read_extension: ERROR: "
102                     "pread fail from offset %" PRIu64 "\n",
103                     offset);
104             return 1;
105         }
106         be32_to_cpus(&ext.magic);
107         be32_to_cpus(&ext.len);
108         offset += sizeof(ext);
109 #ifdef DEBUG_EXT
110         printf("ext.magic = 0x%x\n", ext.magic);
111 #endif
112         if (ext.len > end_offset - offset) {
113             error_report("Header extension too large");
114             return -EINVAL;
115         }
116 
117         switch (ext.magic) {
118         case QCOW2_EXT_MAGIC_END:
119             return 0;
120 
121         case QCOW2_EXT_MAGIC_BACKING_FORMAT:
122             if (ext.len >= sizeof(bs->backing_format)) {
123                 fprintf(stderr, "ERROR: ext_backing_format: len=%u too large"
124                         " (>=%zu)\n",
125                         ext.len, sizeof(bs->backing_format));
126                 return 2;
127             }
128             if (bdrv_pread(bs->file, offset , bs->backing_format,
129                            ext.len) != ext.len)
130                 return 3;
131             bs->backing_format[ext.len] = '\0';
132 #ifdef DEBUG_EXT
133             printf("Qcow2: Got format extension %s\n", bs->backing_format);
134 #endif
135             break;
136 
137         default:
138             /* unknown magic - save it in case we need to rewrite the header */
139             {
140                 Qcow2UnknownHeaderExtension *uext;
141 
142                 uext = g_malloc0(sizeof(*uext)  + ext.len);
143                 uext->magic = ext.magic;
144                 uext->len = ext.len;
145                 QLIST_INSERT_HEAD(&s->unknown_header_ext, uext, next);
146 
147                 ret = bdrv_pread(bs->file, offset , uext->data, uext->len);
148                 if (ret < 0) {
149                     return ret;
150                 }
151             }
152             break;
153         }
154 
155         offset += ((ext.len + 7) & ~7);
156     }
157 
158     return 0;
159 }
160 
161 static void cleanup_unknown_header_ext(BlockDriverState *bs)
162 {
163     BDRVQcowState *s = bs->opaque;
164     Qcow2UnknownHeaderExtension *uext, *next;
165 
166     QLIST_FOREACH_SAFE(uext, &s->unknown_header_ext, next, next) {
167         QLIST_REMOVE(uext, next);
168         g_free(uext);
169     }
170 }
171 
172 static int qcow2_open(BlockDriverState *bs, int flags)
173 {
174     BDRVQcowState *s = bs->opaque;
175     int len, i, ret = 0;
176     QCowHeader header;
177     uint64_t ext_end;
178     bool writethrough;
179 
180     ret = bdrv_pread(bs->file, 0, &header, sizeof(header));
181     if (ret < 0) {
182         goto fail;
183     }
184     be32_to_cpus(&header.magic);
185     be32_to_cpus(&header.version);
186     be64_to_cpus(&header.backing_file_offset);
187     be32_to_cpus(&header.backing_file_size);
188     be64_to_cpus(&header.size);
189     be32_to_cpus(&header.cluster_bits);
190     be32_to_cpus(&header.crypt_method);
191     be64_to_cpus(&header.l1_table_offset);
192     be32_to_cpus(&header.l1_size);
193     be64_to_cpus(&header.refcount_table_offset);
194     be32_to_cpus(&header.refcount_table_clusters);
195     be64_to_cpus(&header.snapshots_offset);
196     be32_to_cpus(&header.nb_snapshots);
197 
198     if (header.magic != QCOW_MAGIC) {
199         ret = -EINVAL;
200         goto fail;
201     }
202     if (header.version != QCOW_VERSION) {
203         char version[64];
204         snprintf(version, sizeof(version), "QCOW version %d", header.version);
205         qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
206             bs->device_name, "qcow2", version);
207         ret = -ENOTSUP;
208         goto fail;
209     }
210     if (header.cluster_bits < MIN_CLUSTER_BITS ||
211         header.cluster_bits > MAX_CLUSTER_BITS) {
212         ret = -EINVAL;
213         goto fail;
214     }
215     if (header.crypt_method > QCOW_CRYPT_AES) {
216         ret = -EINVAL;
217         goto fail;
218     }
219     s->crypt_method_header = header.crypt_method;
220     if (s->crypt_method_header) {
221         bs->encrypted = 1;
222     }
223     s->cluster_bits = header.cluster_bits;
224     s->cluster_size = 1 << s->cluster_bits;
225     s->cluster_sectors = 1 << (s->cluster_bits - 9);
226     s->l2_bits = s->cluster_bits - 3; /* L2 is always one cluster */
227     s->l2_size = 1 << s->l2_bits;
228     bs->total_sectors = header.size / 512;
229     s->csize_shift = (62 - (s->cluster_bits - 8));
230     s->csize_mask = (1 << (s->cluster_bits - 8)) - 1;
231     s->cluster_offset_mask = (1LL << s->csize_shift) - 1;
232     s->refcount_table_offset = header.refcount_table_offset;
233     s->refcount_table_size =
234         header.refcount_table_clusters << (s->cluster_bits - 3);
235 
236     s->snapshots_offset = header.snapshots_offset;
237     s->nb_snapshots = header.nb_snapshots;
238 
239     /* read the level 1 table */
240     s->l1_size = header.l1_size;
241     s->l1_vm_state_index = size_to_l1(s, header.size);
242     /* the L1 table must contain at least enough entries to put
243        header.size bytes */
244     if (s->l1_size < s->l1_vm_state_index) {
245         ret = -EINVAL;
246         goto fail;
247     }
248     s->l1_table_offset = header.l1_table_offset;
249     if (s->l1_size > 0) {
250         s->l1_table = g_malloc0(
251             align_offset(s->l1_size * sizeof(uint64_t), 512));
252         ret = bdrv_pread(bs->file, s->l1_table_offset, s->l1_table,
253                          s->l1_size * sizeof(uint64_t));
254         if (ret < 0) {
255             goto fail;
256         }
257         for(i = 0;i < s->l1_size; i++) {
258             be64_to_cpus(&s->l1_table[i]);
259         }
260     }
261 
262     /* alloc L2 table/refcount block cache */
263     writethrough = ((flags & BDRV_O_CACHE_WB) == 0);
264     s->l2_table_cache = qcow2_cache_create(bs, L2_CACHE_SIZE, writethrough);
265     s->refcount_block_cache = qcow2_cache_create(bs, REFCOUNT_CACHE_SIZE,
266         writethrough);
267 
268     s->cluster_cache = g_malloc(s->cluster_size);
269     /* one more sector for decompressed data alignment */
270     s->cluster_data = qemu_blockalign(bs, QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size
271                                   + 512);
272     s->cluster_cache_offset = -1;
273     s->flags = flags;
274 
275     ret = qcow2_refcount_init(bs);
276     if (ret != 0) {
277         goto fail;
278     }
279 
280     QLIST_INIT(&s->cluster_allocs);
281 
282     /* read qcow2 extensions */
283     if (header.backing_file_offset) {
284         ext_end = header.backing_file_offset;
285     } else {
286         ext_end = s->cluster_size;
287     }
288     if (qcow2_read_extensions(bs, sizeof(header), ext_end)) {
289         ret = -EINVAL;
290         goto fail;
291     }
292 
293     /* read the backing file name */
294     if (header.backing_file_offset != 0) {
295         len = header.backing_file_size;
296         if (len > 1023) {
297             len = 1023;
298         }
299         ret = bdrv_pread(bs->file, header.backing_file_offset,
300                          bs->backing_file, len);
301         if (ret < 0) {
302             goto fail;
303         }
304         bs->backing_file[len] = '\0';
305     }
306 
307     ret = qcow2_read_snapshots(bs);
308     if (ret < 0) {
309         goto fail;
310     }
311 
312     /* Initialise locks */
313     qemu_co_mutex_init(&s->lock);
314 
315 #ifdef DEBUG_ALLOC
316     {
317         BdrvCheckResult result = {0};
318         qcow2_check_refcounts(bs, &result);
319     }
320 #endif
321     return ret;
322 
323  fail:
324     cleanup_unknown_header_ext(bs);
325     qcow2_free_snapshots(bs);
326     qcow2_refcount_close(bs);
327     g_free(s->l1_table);
328     if (s->l2_table_cache) {
329         qcow2_cache_destroy(bs, s->l2_table_cache);
330     }
331     g_free(s->cluster_cache);
332     qemu_vfree(s->cluster_data);
333     return ret;
334 }
335 
336 static int qcow2_set_key(BlockDriverState *bs, const char *key)
337 {
338     BDRVQcowState *s = bs->opaque;
339     uint8_t keybuf[16];
340     int len, i;
341 
342     memset(keybuf, 0, 16);
343     len = strlen(key);
344     if (len > 16)
345         len = 16;
346     /* XXX: we could compress the chars to 7 bits to increase
347        entropy */
348     for(i = 0;i < len;i++) {
349         keybuf[i] = key[i];
350     }
351     s->crypt_method = s->crypt_method_header;
352 
353     if (AES_set_encrypt_key(keybuf, 128, &s->aes_encrypt_key) != 0)
354         return -1;
355     if (AES_set_decrypt_key(keybuf, 128, &s->aes_decrypt_key) != 0)
356         return -1;
357 #if 0
358     /* test */
359     {
360         uint8_t in[16];
361         uint8_t out[16];
362         uint8_t tmp[16];
363         for(i=0;i<16;i++)
364             in[i] = i;
365         AES_encrypt(in, tmp, &s->aes_encrypt_key);
366         AES_decrypt(tmp, out, &s->aes_decrypt_key);
367         for(i = 0; i < 16; i++)
368             printf(" %02x", tmp[i]);
369         printf("\n");
370         for(i = 0; i < 16; i++)
371             printf(" %02x", out[i]);
372         printf("\n");
373     }
374 #endif
375     return 0;
376 }
377 
378 static int coroutine_fn qcow2_co_is_allocated(BlockDriverState *bs,
379         int64_t sector_num, int nb_sectors, int *pnum)
380 {
381     BDRVQcowState *s = bs->opaque;
382     uint64_t cluster_offset;
383     int ret;
384 
385     *pnum = nb_sectors;
386     /* FIXME We can get errors here, but the bdrv_co_is_allocated interface
387      * can't pass them on today */
388     qemu_co_mutex_lock(&s->lock);
389     ret = qcow2_get_cluster_offset(bs, sector_num << 9, pnum, &cluster_offset);
390     qemu_co_mutex_unlock(&s->lock);
391     if (ret < 0) {
392         *pnum = 0;
393     }
394 
395     return (cluster_offset != 0);
396 }
397 
398 /* handle reading after the end of the backing file */
399 int qcow2_backing_read1(BlockDriverState *bs, QEMUIOVector *qiov,
400                   int64_t sector_num, int nb_sectors)
401 {
402     int n1;
403     if ((sector_num + nb_sectors) <= bs->total_sectors)
404         return nb_sectors;
405     if (sector_num >= bs->total_sectors)
406         n1 = 0;
407     else
408         n1 = bs->total_sectors - sector_num;
409 
410     qemu_iovec_memset_skip(qiov, 0, 512 * (nb_sectors - n1), 512 * n1);
411 
412     return n1;
413 }
414 
415 static coroutine_fn int qcow2_co_readv(BlockDriverState *bs, int64_t sector_num,
416                           int remaining_sectors, QEMUIOVector *qiov)
417 {
418     BDRVQcowState *s = bs->opaque;
419     int index_in_cluster, n1;
420     int ret;
421     int cur_nr_sectors; /* number of sectors in current iteration */
422     uint64_t cluster_offset = 0;
423     uint64_t bytes_done = 0;
424     QEMUIOVector hd_qiov;
425     uint8_t *cluster_data = NULL;
426 
427     qemu_iovec_init(&hd_qiov, qiov->niov);
428 
429     qemu_co_mutex_lock(&s->lock);
430 
431     while (remaining_sectors != 0) {
432 
433         /* prepare next request */
434         cur_nr_sectors = remaining_sectors;
435         if (s->crypt_method) {
436             cur_nr_sectors = MIN(cur_nr_sectors,
437                 QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors);
438         }
439 
440         ret = qcow2_get_cluster_offset(bs, sector_num << 9,
441             &cur_nr_sectors, &cluster_offset);
442         if (ret < 0) {
443             goto fail;
444         }
445 
446         index_in_cluster = sector_num & (s->cluster_sectors - 1);
447 
448         qemu_iovec_reset(&hd_qiov);
449         qemu_iovec_copy(&hd_qiov, qiov, bytes_done,
450             cur_nr_sectors * 512);
451 
452         if (!cluster_offset) {
453 
454             if (bs->backing_hd) {
455                 /* read from the base image */
456                 n1 = qcow2_backing_read1(bs->backing_hd, &hd_qiov,
457                     sector_num, cur_nr_sectors);
458                 if (n1 > 0) {
459                     BLKDBG_EVENT(bs->file, BLKDBG_READ_BACKING_AIO);
460                     qemu_co_mutex_unlock(&s->lock);
461                     ret = bdrv_co_readv(bs->backing_hd, sector_num,
462                                         n1, &hd_qiov);
463                     qemu_co_mutex_lock(&s->lock);
464                     if (ret < 0) {
465                         goto fail;
466                     }
467                 }
468             } else {
469                 /* Note: in this case, no need to wait */
470                 qemu_iovec_memset(&hd_qiov, 0, 512 * cur_nr_sectors);
471             }
472         } else if (cluster_offset & QCOW_OFLAG_COMPRESSED) {
473             /* add AIO support for compressed blocks ? */
474             ret = qcow2_decompress_cluster(bs, cluster_offset);
475             if (ret < 0) {
476                 goto fail;
477             }
478 
479             qemu_iovec_from_buffer(&hd_qiov,
480                 s->cluster_cache + index_in_cluster * 512,
481                 512 * cur_nr_sectors);
482         } else {
483             if ((cluster_offset & 511) != 0) {
484                 ret = -EIO;
485                 goto fail;
486             }
487 
488             if (s->crypt_method) {
489                 /*
490                  * For encrypted images, read everything into a temporary
491                  * contiguous buffer on which the AES functions can work.
492                  */
493                 if (!cluster_data) {
494                     cluster_data =
495                         qemu_blockalign(bs, QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size);
496                 }
497 
498                 assert(cur_nr_sectors <=
499                     QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors);
500                 qemu_iovec_reset(&hd_qiov);
501                 qemu_iovec_add(&hd_qiov, cluster_data,
502                     512 * cur_nr_sectors);
503             }
504 
505             BLKDBG_EVENT(bs->file, BLKDBG_READ_AIO);
506             qemu_co_mutex_unlock(&s->lock);
507             ret = bdrv_co_readv(bs->file,
508                                 (cluster_offset >> 9) + index_in_cluster,
509                                 cur_nr_sectors, &hd_qiov);
510             qemu_co_mutex_lock(&s->lock);
511             if (ret < 0) {
512                 goto fail;
513             }
514             if (s->crypt_method) {
515                 qcow2_encrypt_sectors(s, sector_num,  cluster_data,
516                     cluster_data, cur_nr_sectors, 0, &s->aes_decrypt_key);
517                 qemu_iovec_reset(&hd_qiov);
518                 qemu_iovec_copy(&hd_qiov, qiov, bytes_done,
519                     cur_nr_sectors * 512);
520                 qemu_iovec_from_buffer(&hd_qiov, cluster_data,
521                     512 * cur_nr_sectors);
522             }
523         }
524 
525         remaining_sectors -= cur_nr_sectors;
526         sector_num += cur_nr_sectors;
527         bytes_done += cur_nr_sectors * 512;
528     }
529     ret = 0;
530 
531 fail:
532     qemu_co_mutex_unlock(&s->lock);
533 
534     qemu_iovec_destroy(&hd_qiov);
535     qemu_vfree(cluster_data);
536 
537     return ret;
538 }
539 
540 static void run_dependent_requests(BDRVQcowState *s, QCowL2Meta *m)
541 {
542     /* Take the request off the list of running requests */
543     if (m->nb_clusters != 0) {
544         QLIST_REMOVE(m, next_in_flight);
545     }
546 
547     /* Restart all dependent requests */
548     if (!qemu_co_queue_empty(&m->dependent_requests)) {
549         qemu_co_mutex_unlock(&s->lock);
550         qemu_co_queue_restart_all(&m->dependent_requests);
551         qemu_co_mutex_lock(&s->lock);
552     }
553 }
554 
555 static coroutine_fn int qcow2_co_writev(BlockDriverState *bs,
556                            int64_t sector_num,
557                            int remaining_sectors,
558                            QEMUIOVector *qiov)
559 {
560     BDRVQcowState *s = bs->opaque;
561     int index_in_cluster;
562     int n_end;
563     int ret;
564     int cur_nr_sectors; /* number of sectors in current iteration */
565     uint64_t cluster_offset;
566     QEMUIOVector hd_qiov;
567     uint64_t bytes_done = 0;
568     uint8_t *cluster_data = NULL;
569     QCowL2Meta l2meta = {
570         .nb_clusters = 0,
571     };
572 
573     trace_qcow2_writev_start_req(qemu_coroutine_self(), sector_num,
574                                  remaining_sectors);
575 
576     qemu_co_queue_init(&l2meta.dependent_requests);
577 
578     qemu_iovec_init(&hd_qiov, qiov->niov);
579 
580     s->cluster_cache_offset = -1; /* disable compressed cache */
581 
582     qemu_co_mutex_lock(&s->lock);
583 
584     while (remaining_sectors != 0) {
585 
586         trace_qcow2_writev_start_part(qemu_coroutine_self());
587         index_in_cluster = sector_num & (s->cluster_sectors - 1);
588         n_end = index_in_cluster + remaining_sectors;
589         if (s->crypt_method &&
590             n_end > QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors) {
591             n_end = QCOW_MAX_CRYPT_CLUSTERS * s->cluster_sectors;
592         }
593 
594         ret = qcow2_alloc_cluster_offset(bs, sector_num << 9,
595             index_in_cluster, n_end, &cur_nr_sectors, &l2meta);
596         if (ret < 0) {
597             goto fail;
598         }
599 
600         cluster_offset = l2meta.cluster_offset;
601         assert((cluster_offset & 511) == 0);
602 
603         qemu_iovec_reset(&hd_qiov);
604         qemu_iovec_copy(&hd_qiov, qiov, bytes_done,
605             cur_nr_sectors * 512);
606 
607         if (s->crypt_method) {
608             if (!cluster_data) {
609                 cluster_data = qemu_blockalign(bs, QCOW_MAX_CRYPT_CLUSTERS *
610                                                  s->cluster_size);
611             }
612 
613             assert(hd_qiov.size <=
614                    QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size);
615             qemu_iovec_to_buffer(&hd_qiov, cluster_data);
616 
617             qcow2_encrypt_sectors(s, sector_num, cluster_data,
618                 cluster_data, cur_nr_sectors, 1, &s->aes_encrypt_key);
619 
620             qemu_iovec_reset(&hd_qiov);
621             qemu_iovec_add(&hd_qiov, cluster_data,
622                 cur_nr_sectors * 512);
623         }
624 
625         BLKDBG_EVENT(bs->file, BLKDBG_WRITE_AIO);
626         qemu_co_mutex_unlock(&s->lock);
627         trace_qcow2_writev_data(qemu_coroutine_self(),
628                                 (cluster_offset >> 9) + index_in_cluster);
629         ret = bdrv_co_writev(bs->file,
630                              (cluster_offset >> 9) + index_in_cluster,
631                              cur_nr_sectors, &hd_qiov);
632         qemu_co_mutex_lock(&s->lock);
633         if (ret < 0) {
634             goto fail;
635         }
636 
637         ret = qcow2_alloc_cluster_link_l2(bs, &l2meta);
638         if (ret < 0) {
639             goto fail;
640         }
641 
642         run_dependent_requests(s, &l2meta);
643 
644         remaining_sectors -= cur_nr_sectors;
645         sector_num += cur_nr_sectors;
646         bytes_done += cur_nr_sectors * 512;
647         trace_qcow2_writev_done_part(qemu_coroutine_self(), cur_nr_sectors);
648     }
649     ret = 0;
650 
651 fail:
652     run_dependent_requests(s, &l2meta);
653 
654     qemu_co_mutex_unlock(&s->lock);
655 
656     qemu_iovec_destroy(&hd_qiov);
657     qemu_vfree(cluster_data);
658     trace_qcow2_writev_done_req(qemu_coroutine_self(), ret);
659 
660     return ret;
661 }
662 
663 static void qcow2_close(BlockDriverState *bs)
664 {
665     BDRVQcowState *s = bs->opaque;
666     g_free(s->l1_table);
667 
668     qcow2_cache_flush(bs, s->l2_table_cache);
669     qcow2_cache_flush(bs, s->refcount_block_cache);
670 
671     qcow2_cache_destroy(bs, s->l2_table_cache);
672     qcow2_cache_destroy(bs, s->refcount_block_cache);
673 
674     cleanup_unknown_header_ext(bs);
675     g_free(s->cluster_cache);
676     qemu_vfree(s->cluster_data);
677     qcow2_refcount_close(bs);
678     qcow2_free_snapshots(bs);
679 }
680 
681 static void qcow2_invalidate_cache(BlockDriverState *bs)
682 {
683     BDRVQcowState *s = bs->opaque;
684     int flags = s->flags;
685     AES_KEY aes_encrypt_key;
686     AES_KEY aes_decrypt_key;
687     uint32_t crypt_method = 0;
688 
689     /*
690      * Backing files are read-only which makes all of their metadata immutable,
691      * that means we don't have to worry about reopening them here.
692      */
693 
694     if (s->crypt_method) {
695         crypt_method = s->crypt_method;
696         memcpy(&aes_encrypt_key, &s->aes_encrypt_key, sizeof(aes_encrypt_key));
697         memcpy(&aes_decrypt_key, &s->aes_decrypt_key, sizeof(aes_decrypt_key));
698     }
699 
700     qcow2_close(bs);
701 
702     memset(s, 0, sizeof(BDRVQcowState));
703     qcow2_open(bs, flags);
704 
705     if (crypt_method) {
706         s->crypt_method = crypt_method;
707         memcpy(&s->aes_encrypt_key, &aes_encrypt_key, sizeof(aes_encrypt_key));
708         memcpy(&s->aes_decrypt_key, &aes_decrypt_key, sizeof(aes_decrypt_key));
709     }
710 }
711 
712 static size_t header_ext_add(char *buf, uint32_t magic, const void *s,
713     size_t len, size_t buflen)
714 {
715     QCowExtension *ext_backing_fmt = (QCowExtension*) buf;
716     size_t ext_len = sizeof(QCowExtension) + ((len + 7) & ~7);
717 
718     if (buflen < ext_len) {
719         return -ENOSPC;
720     }
721 
722     *ext_backing_fmt = (QCowExtension) {
723         .magic  = cpu_to_be32(magic),
724         .len    = cpu_to_be32(len),
725     };
726     memcpy(buf + sizeof(QCowExtension), s, len);
727 
728     return ext_len;
729 }
730 
731 /*
732  * Updates the qcow2 header, including the variable length parts of it, i.e.
733  * the backing file name and all extensions. qcow2 was not designed to allow
734  * such changes, so if we run out of space (we can only use the first cluster)
735  * this function may fail.
736  *
737  * Returns 0 on success, -errno in error cases.
738  */
739 int qcow2_update_header(BlockDriverState *bs)
740 {
741     BDRVQcowState *s = bs->opaque;
742     QCowHeader *header;
743     char *buf;
744     size_t buflen = s->cluster_size;
745     int ret;
746     uint64_t total_size;
747     uint32_t refcount_table_clusters;
748     Qcow2UnknownHeaderExtension *uext;
749 
750     buf = qemu_blockalign(bs, buflen);
751     memset(buf, 0, s->cluster_size);
752 
753     /* Header structure */
754     header = (QCowHeader*) buf;
755 
756     if (buflen < sizeof(*header)) {
757         ret = -ENOSPC;
758         goto fail;
759     }
760 
761     total_size = bs->total_sectors * BDRV_SECTOR_SIZE;
762     refcount_table_clusters = s->refcount_table_size >> (s->cluster_bits - 3);
763 
764     *header = (QCowHeader) {
765         .magic                  = cpu_to_be32(QCOW_MAGIC),
766         .version                = cpu_to_be32(QCOW_VERSION),
767         .backing_file_offset    = 0,
768         .backing_file_size      = 0,
769         .cluster_bits           = cpu_to_be32(s->cluster_bits),
770         .size                   = cpu_to_be64(total_size),
771         .crypt_method           = cpu_to_be32(s->crypt_method_header),
772         .l1_size                = cpu_to_be32(s->l1_size),
773         .l1_table_offset        = cpu_to_be64(s->l1_table_offset),
774         .refcount_table_offset  = cpu_to_be64(s->refcount_table_offset),
775         .refcount_table_clusters = cpu_to_be32(refcount_table_clusters),
776         .nb_snapshots           = cpu_to_be32(s->nb_snapshots),
777         .snapshots_offset       = cpu_to_be64(s->snapshots_offset),
778     };
779 
780     buf += sizeof(*header);
781     buflen -= sizeof(*header);
782 
783     /* Backing file format header extension */
784     if (*bs->backing_format) {
785         ret = header_ext_add(buf, QCOW2_EXT_MAGIC_BACKING_FORMAT,
786                              bs->backing_format, strlen(bs->backing_format),
787                              buflen);
788         if (ret < 0) {
789             goto fail;
790         }
791 
792         buf += ret;
793         buflen -= ret;
794     }
795 
796     /* Keep unknown header extensions */
797     QLIST_FOREACH(uext, &s->unknown_header_ext, next) {
798         ret = header_ext_add(buf, uext->magic, uext->data, uext->len, buflen);
799         if (ret < 0) {
800             goto fail;
801         }
802 
803         buf += ret;
804         buflen -= ret;
805     }
806 
807     /* End of header extensions */
808     ret = header_ext_add(buf, QCOW2_EXT_MAGIC_END, NULL, 0, buflen);
809     if (ret < 0) {
810         goto fail;
811     }
812 
813     buf += ret;
814     buflen -= ret;
815 
816     /* Backing file name */
817     if (*bs->backing_file) {
818         size_t backing_file_len = strlen(bs->backing_file);
819 
820         if (buflen < backing_file_len) {
821             ret = -ENOSPC;
822             goto fail;
823         }
824 
825         strncpy(buf, bs->backing_file, buflen);
826 
827         header->backing_file_offset = cpu_to_be64(buf - ((char*) header));
828         header->backing_file_size   = cpu_to_be32(backing_file_len);
829     }
830 
831     /* Write the new header */
832     ret = bdrv_pwrite(bs->file, 0, header, s->cluster_size);
833     if (ret < 0) {
834         goto fail;
835     }
836 
837     ret = 0;
838 fail:
839     qemu_vfree(header);
840     return ret;
841 }
842 
843 static int qcow2_change_backing_file(BlockDriverState *bs,
844     const char *backing_file, const char *backing_fmt)
845 {
846     /* Backing file format doesn't make sense without a backing file */
847     if (backing_fmt && !backing_file) {
848         return -EINVAL;
849     }
850 
851     pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
852     pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
853 
854     return qcow2_update_header(bs);
855 }
856 
857 static int preallocate(BlockDriverState *bs)
858 {
859     uint64_t nb_sectors;
860     uint64_t offset;
861     int num;
862     int ret;
863     QCowL2Meta meta;
864 
865     nb_sectors = bdrv_getlength(bs) >> 9;
866     offset = 0;
867     qemu_co_queue_init(&meta.dependent_requests);
868     meta.cluster_offset = 0;
869 
870     while (nb_sectors) {
871         num = MIN(nb_sectors, INT_MAX >> 9);
872         ret = qcow2_alloc_cluster_offset(bs, offset, 0, num, &num, &meta);
873         if (ret < 0) {
874             return ret;
875         }
876 
877         ret = qcow2_alloc_cluster_link_l2(bs, &meta);
878         if (ret < 0) {
879             qcow2_free_any_clusters(bs, meta.cluster_offset, meta.nb_clusters);
880             return ret;
881         }
882 
883         /* There are no dependent requests, but we need to remove our request
884          * from the list of in-flight requests */
885         run_dependent_requests(bs->opaque, &meta);
886 
887         /* TODO Preallocate data if requested */
888 
889         nb_sectors -= num;
890         offset += num << 9;
891     }
892 
893     /*
894      * It is expected that the image file is large enough to actually contain
895      * all of the allocated clusters (otherwise we get failing reads after
896      * EOF). Extend the image to the last allocated sector.
897      */
898     if (meta.cluster_offset != 0) {
899         uint8_t buf[512];
900         memset(buf, 0, 512);
901         ret = bdrv_write(bs->file, (meta.cluster_offset >> 9) + num - 1, buf, 1);
902         if (ret < 0) {
903             return ret;
904         }
905     }
906 
907     return 0;
908 }
909 
910 static int qcow2_create2(const char *filename, int64_t total_size,
911                          const char *backing_file, const char *backing_format,
912                          int flags, size_t cluster_size, int prealloc,
913                          QEMUOptionParameter *options)
914 {
915     /* Calculate cluster_bits */
916     int cluster_bits;
917     cluster_bits = ffs(cluster_size) - 1;
918     if (cluster_bits < MIN_CLUSTER_BITS || cluster_bits > MAX_CLUSTER_BITS ||
919         (1 << cluster_bits) != cluster_size)
920     {
921         error_report(
922             "Cluster size must be a power of two between %d and %dk",
923             1 << MIN_CLUSTER_BITS, 1 << (MAX_CLUSTER_BITS - 10));
924         return -EINVAL;
925     }
926 
927     /*
928      * Open the image file and write a minimal qcow2 header.
929      *
930      * We keep things simple and start with a zero-sized image. We also
931      * do without refcount blocks or a L1 table for now. We'll fix the
932      * inconsistency later.
933      *
934      * We do need a refcount table because growing the refcount table means
935      * allocating two new refcount blocks - the seconds of which would be at
936      * 2 GB for 64k clusters, and we don't want to have a 2 GB initial file
937      * size for any qcow2 image.
938      */
939     BlockDriverState* bs;
940     QCowHeader header;
941     uint8_t* refcount_table;
942     int ret;
943 
944     ret = bdrv_create_file(filename, options);
945     if (ret < 0) {
946         return ret;
947     }
948 
949     ret = bdrv_file_open(&bs, filename, BDRV_O_RDWR);
950     if (ret < 0) {
951         return ret;
952     }
953 
954     /* Write the header */
955     memset(&header, 0, sizeof(header));
956     header.magic = cpu_to_be32(QCOW_MAGIC);
957     header.version = cpu_to_be32(QCOW_VERSION);
958     header.cluster_bits = cpu_to_be32(cluster_bits);
959     header.size = cpu_to_be64(0);
960     header.l1_table_offset = cpu_to_be64(0);
961     header.l1_size = cpu_to_be32(0);
962     header.refcount_table_offset = cpu_to_be64(cluster_size);
963     header.refcount_table_clusters = cpu_to_be32(1);
964 
965     if (flags & BLOCK_FLAG_ENCRYPT) {
966         header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES);
967     } else {
968         header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE);
969     }
970 
971     ret = bdrv_pwrite(bs, 0, &header, sizeof(header));
972     if (ret < 0) {
973         goto out;
974     }
975 
976     /* Write an empty refcount table */
977     refcount_table = g_malloc0(cluster_size);
978     ret = bdrv_pwrite(bs, cluster_size, refcount_table, cluster_size);
979     g_free(refcount_table);
980 
981     if (ret < 0) {
982         goto out;
983     }
984 
985     bdrv_close(bs);
986 
987     /*
988      * And now open the image and make it consistent first (i.e. increase the
989      * refcount of the cluster that is occupied by the header and the refcount
990      * table)
991      */
992     BlockDriver* drv = bdrv_find_format("qcow2");
993     assert(drv != NULL);
994     ret = bdrv_open(bs, filename,
995         BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH, drv);
996     if (ret < 0) {
997         goto out;
998     }
999 
1000     ret = qcow2_alloc_clusters(bs, 2 * cluster_size);
1001     if (ret < 0) {
1002         goto out;
1003 
1004     } else if (ret != 0) {
1005         error_report("Huh, first cluster in empty image is already in use?");
1006         abort();
1007     }
1008 
1009     /* Okay, now that we have a valid image, let's give it the right size */
1010     ret = bdrv_truncate(bs, total_size * BDRV_SECTOR_SIZE);
1011     if (ret < 0) {
1012         goto out;
1013     }
1014 
1015     /* Want a backing file? There you go.*/
1016     if (backing_file) {
1017         ret = bdrv_change_backing_file(bs, backing_file, backing_format);
1018         if (ret < 0) {
1019             goto out;
1020         }
1021     }
1022 
1023     /* And if we're supposed to preallocate metadata, do that now */
1024     if (prealloc) {
1025         ret = preallocate(bs);
1026         if (ret < 0) {
1027             goto out;
1028         }
1029     }
1030 
1031     ret = 0;
1032 out:
1033     bdrv_delete(bs);
1034     return ret;
1035 }
1036 
1037 static int qcow2_create(const char *filename, QEMUOptionParameter *options)
1038 {
1039     const char *backing_file = NULL;
1040     const char *backing_fmt = NULL;
1041     uint64_t sectors = 0;
1042     int flags = 0;
1043     size_t cluster_size = DEFAULT_CLUSTER_SIZE;
1044     int prealloc = 0;
1045 
1046     /* Read out options */
1047     while (options && options->name) {
1048         if (!strcmp(options->name, BLOCK_OPT_SIZE)) {
1049             sectors = options->value.n / 512;
1050         } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) {
1051             backing_file = options->value.s;
1052         } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FMT)) {
1053             backing_fmt = options->value.s;
1054         } else if (!strcmp(options->name, BLOCK_OPT_ENCRYPT)) {
1055             flags |= options->value.n ? BLOCK_FLAG_ENCRYPT : 0;
1056         } else if (!strcmp(options->name, BLOCK_OPT_CLUSTER_SIZE)) {
1057             if (options->value.n) {
1058                 cluster_size = options->value.n;
1059             }
1060         } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) {
1061             if (!options->value.s || !strcmp(options->value.s, "off")) {
1062                 prealloc = 0;
1063             } else if (!strcmp(options->value.s, "metadata")) {
1064                 prealloc = 1;
1065             } else {
1066                 fprintf(stderr, "Invalid preallocation mode: '%s'\n",
1067                     options->value.s);
1068                 return -EINVAL;
1069             }
1070         }
1071         options++;
1072     }
1073 
1074     if (backing_file && prealloc) {
1075         fprintf(stderr, "Backing file and preallocation cannot be used at "
1076             "the same time\n");
1077         return -EINVAL;
1078     }
1079 
1080     return qcow2_create2(filename, sectors, backing_file, backing_fmt, flags,
1081                          cluster_size, prealloc, options);
1082 }
1083 
1084 static int qcow2_make_empty(BlockDriverState *bs)
1085 {
1086 #if 0
1087     /* XXX: not correct */
1088     BDRVQcowState *s = bs->opaque;
1089     uint32_t l1_length = s->l1_size * sizeof(uint64_t);
1090     int ret;
1091 
1092     memset(s->l1_table, 0, l1_length);
1093     if (bdrv_pwrite(bs->file, s->l1_table_offset, s->l1_table, l1_length) < 0)
1094         return -1;
1095     ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length);
1096     if (ret < 0)
1097         return ret;
1098 
1099     l2_cache_reset(bs);
1100 #endif
1101     return 0;
1102 }
1103 
1104 static coroutine_fn int qcow2_co_discard(BlockDriverState *bs,
1105     int64_t sector_num, int nb_sectors)
1106 {
1107     int ret;
1108     BDRVQcowState *s = bs->opaque;
1109 
1110     qemu_co_mutex_lock(&s->lock);
1111     ret = qcow2_discard_clusters(bs, sector_num << BDRV_SECTOR_BITS,
1112         nb_sectors);
1113     qemu_co_mutex_unlock(&s->lock);
1114     return ret;
1115 }
1116 
1117 static int qcow2_truncate(BlockDriverState *bs, int64_t offset)
1118 {
1119     BDRVQcowState *s = bs->opaque;
1120     int ret, new_l1_size;
1121 
1122     if (offset & 511) {
1123         error_report("The new size must be a multiple of 512");
1124         return -EINVAL;
1125     }
1126 
1127     /* cannot proceed if image has snapshots */
1128     if (s->nb_snapshots) {
1129         error_report("Can't resize an image which has snapshots");
1130         return -ENOTSUP;
1131     }
1132 
1133     /* shrinking is currently not supported */
1134     if (offset < bs->total_sectors * 512) {
1135         error_report("qcow2 doesn't support shrinking images yet");
1136         return -ENOTSUP;
1137     }
1138 
1139     new_l1_size = size_to_l1(s, offset);
1140     ret = qcow2_grow_l1_table(bs, new_l1_size, true);
1141     if (ret < 0) {
1142         return ret;
1143     }
1144 
1145     /* write updated header.size */
1146     offset = cpu_to_be64(offset);
1147     ret = bdrv_pwrite_sync(bs->file, offsetof(QCowHeader, size),
1148                            &offset, sizeof(uint64_t));
1149     if (ret < 0) {
1150         return ret;
1151     }
1152 
1153     s->l1_vm_state_index = new_l1_size;
1154     return 0;
1155 }
1156 
1157 /* XXX: put compressed sectors first, then all the cluster aligned
1158    tables to avoid losing bytes in alignment */
1159 static int qcow2_write_compressed(BlockDriverState *bs, int64_t sector_num,
1160                                   const uint8_t *buf, int nb_sectors)
1161 {
1162     BDRVQcowState *s = bs->opaque;
1163     z_stream strm;
1164     int ret, out_len;
1165     uint8_t *out_buf;
1166     uint64_t cluster_offset;
1167 
1168     if (nb_sectors == 0) {
1169         /* align end of file to a sector boundary to ease reading with
1170            sector based I/Os */
1171         cluster_offset = bdrv_getlength(bs->file);
1172         cluster_offset = (cluster_offset + 511) & ~511;
1173         bdrv_truncate(bs->file, cluster_offset);
1174         return 0;
1175     }
1176 
1177     if (nb_sectors != s->cluster_sectors)
1178         return -EINVAL;
1179 
1180     out_buf = g_malloc(s->cluster_size + (s->cluster_size / 1000) + 128);
1181 
1182     /* best compression, small window, no zlib header */
1183     memset(&strm, 0, sizeof(strm));
1184     ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION,
1185                        Z_DEFLATED, -12,
1186                        9, Z_DEFAULT_STRATEGY);
1187     if (ret != 0) {
1188         ret = -EINVAL;
1189         goto fail;
1190     }
1191 
1192     strm.avail_in = s->cluster_size;
1193     strm.next_in = (uint8_t *)buf;
1194     strm.avail_out = s->cluster_size;
1195     strm.next_out = out_buf;
1196 
1197     ret = deflate(&strm, Z_FINISH);
1198     if (ret != Z_STREAM_END && ret != Z_OK) {
1199         deflateEnd(&strm);
1200         ret = -EINVAL;
1201         goto fail;
1202     }
1203     out_len = strm.next_out - out_buf;
1204 
1205     deflateEnd(&strm);
1206 
1207     if (ret != Z_STREAM_END || out_len >= s->cluster_size) {
1208         /* could not compress: write normal cluster */
1209         ret = bdrv_write(bs, sector_num, buf, s->cluster_sectors);
1210         if (ret < 0) {
1211             goto fail;
1212         }
1213     } else {
1214         cluster_offset = qcow2_alloc_compressed_cluster_offset(bs,
1215             sector_num << 9, out_len);
1216         if (!cluster_offset) {
1217             ret = -EIO;
1218             goto fail;
1219         }
1220         cluster_offset &= s->cluster_offset_mask;
1221         BLKDBG_EVENT(bs->file, BLKDBG_WRITE_COMPRESSED);
1222         ret = bdrv_pwrite(bs->file, cluster_offset, out_buf, out_len);
1223         if (ret < 0) {
1224             goto fail;
1225         }
1226     }
1227 
1228     ret = 0;
1229 fail:
1230     g_free(out_buf);
1231     return ret;
1232 }
1233 
1234 static coroutine_fn int qcow2_co_flush_to_os(BlockDriverState *bs)
1235 {
1236     BDRVQcowState *s = bs->opaque;
1237     int ret;
1238 
1239     qemu_co_mutex_lock(&s->lock);
1240     ret = qcow2_cache_flush(bs, s->l2_table_cache);
1241     if (ret < 0) {
1242         qemu_co_mutex_unlock(&s->lock);
1243         return ret;
1244     }
1245 
1246     ret = qcow2_cache_flush(bs, s->refcount_block_cache);
1247     if (ret < 0) {
1248         qemu_co_mutex_unlock(&s->lock);
1249         return ret;
1250     }
1251     qemu_co_mutex_unlock(&s->lock);
1252 
1253     return 0;
1254 }
1255 
1256 static int64_t qcow2_vm_state_offset(BDRVQcowState *s)
1257 {
1258 	return (int64_t)s->l1_vm_state_index << (s->cluster_bits + s->l2_bits);
1259 }
1260 
1261 static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
1262 {
1263     BDRVQcowState *s = bs->opaque;
1264     bdi->cluster_size = s->cluster_size;
1265     bdi->vm_state_offset = qcow2_vm_state_offset(s);
1266     return 0;
1267 }
1268 
1269 
1270 static int qcow2_check(BlockDriverState *bs, BdrvCheckResult *result)
1271 {
1272     return qcow2_check_refcounts(bs, result);
1273 }
1274 
1275 #if 0
1276 static void dump_refcounts(BlockDriverState *bs)
1277 {
1278     BDRVQcowState *s = bs->opaque;
1279     int64_t nb_clusters, k, k1, size;
1280     int refcount;
1281 
1282     size = bdrv_getlength(bs->file);
1283     nb_clusters = size_to_clusters(s, size);
1284     for(k = 0; k < nb_clusters;) {
1285         k1 = k;
1286         refcount = get_refcount(bs, k);
1287         k++;
1288         while (k < nb_clusters && get_refcount(bs, k) == refcount)
1289             k++;
1290         printf("%" PRId64 ": refcount=%d nb=%" PRId64 "\n", k, refcount,
1291                k - k1);
1292     }
1293 }
1294 #endif
1295 
1296 static int qcow2_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
1297                               int64_t pos, int size)
1298 {
1299     BDRVQcowState *s = bs->opaque;
1300     int growable = bs->growable;
1301     int ret;
1302 
1303     BLKDBG_EVENT(bs->file, BLKDBG_VMSTATE_SAVE);
1304     bs->growable = 1;
1305     ret = bdrv_pwrite(bs, qcow2_vm_state_offset(s) + pos, buf, size);
1306     bs->growable = growable;
1307 
1308     return ret;
1309 }
1310 
1311 static int qcow2_load_vmstate(BlockDriverState *bs, uint8_t *buf,
1312                               int64_t pos, int size)
1313 {
1314     BDRVQcowState *s = bs->opaque;
1315     int growable = bs->growable;
1316     int ret;
1317 
1318     BLKDBG_EVENT(bs->file, BLKDBG_VMSTATE_LOAD);
1319     bs->growable = 1;
1320     ret = bdrv_pread(bs, qcow2_vm_state_offset(s) + pos, buf, size);
1321     bs->growable = growable;
1322 
1323     return ret;
1324 }
1325 
1326 static QEMUOptionParameter qcow2_create_options[] = {
1327     {
1328         .name = BLOCK_OPT_SIZE,
1329         .type = OPT_SIZE,
1330         .help = "Virtual disk size"
1331     },
1332     {
1333         .name = BLOCK_OPT_BACKING_FILE,
1334         .type = OPT_STRING,
1335         .help = "File name of a base image"
1336     },
1337     {
1338         .name = BLOCK_OPT_BACKING_FMT,
1339         .type = OPT_STRING,
1340         .help = "Image format of the base image"
1341     },
1342     {
1343         .name = BLOCK_OPT_ENCRYPT,
1344         .type = OPT_FLAG,
1345         .help = "Encrypt the image"
1346     },
1347     {
1348         .name = BLOCK_OPT_CLUSTER_SIZE,
1349         .type = OPT_SIZE,
1350         .help = "qcow2 cluster size",
1351         .value = { .n = DEFAULT_CLUSTER_SIZE },
1352     },
1353     {
1354         .name = BLOCK_OPT_PREALLOC,
1355         .type = OPT_STRING,
1356         .help = "Preallocation mode (allowed values: off, metadata)"
1357     },
1358     { NULL }
1359 };
1360 
1361 static BlockDriver bdrv_qcow2 = {
1362     .format_name        = "qcow2",
1363     .instance_size      = sizeof(BDRVQcowState),
1364     .bdrv_probe         = qcow2_probe,
1365     .bdrv_open          = qcow2_open,
1366     .bdrv_close         = qcow2_close,
1367     .bdrv_create        = qcow2_create,
1368     .bdrv_co_is_allocated = qcow2_co_is_allocated,
1369     .bdrv_set_key       = qcow2_set_key,
1370     .bdrv_make_empty    = qcow2_make_empty,
1371 
1372     .bdrv_co_readv          = qcow2_co_readv,
1373     .bdrv_co_writev         = qcow2_co_writev,
1374     .bdrv_co_flush_to_os    = qcow2_co_flush_to_os,
1375 
1376     .bdrv_co_discard        = qcow2_co_discard,
1377     .bdrv_truncate          = qcow2_truncate,
1378     .bdrv_write_compressed  = qcow2_write_compressed,
1379 
1380     .bdrv_snapshot_create   = qcow2_snapshot_create,
1381     .bdrv_snapshot_goto     = qcow2_snapshot_goto,
1382     .bdrv_snapshot_delete   = qcow2_snapshot_delete,
1383     .bdrv_snapshot_list     = qcow2_snapshot_list,
1384     .bdrv_snapshot_load_tmp     = qcow2_snapshot_load_tmp,
1385     .bdrv_get_info      = qcow2_get_info,
1386 
1387     .bdrv_save_vmstate    = qcow2_save_vmstate,
1388     .bdrv_load_vmstate    = qcow2_load_vmstate,
1389 
1390     .bdrv_change_backing_file   = qcow2_change_backing_file,
1391 
1392     .bdrv_invalidate_cache      = qcow2_invalidate_cache,
1393 
1394     .create_options = qcow2_create_options,
1395     .bdrv_check = qcow2_check,
1396 };
1397 
1398 static void bdrv_qcow2_init(void)
1399 {
1400     bdrv_register(&bdrv_qcow2);
1401 }
1402 
1403 block_init(bdrv_qcow2_init);
1404