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