1 /* 2 * QEMU System Emulator block driver 3 * 4 * Copyright (c) 2003 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 "config-host.h" 25 #include "qemu-common.h" 26 #include "trace.h" 27 #include "block/block_int.h" 28 #include "block/blockjob.h" 29 #include "qemu/error-report.h" 30 #include "qemu/module.h" 31 #include "qapi/qmp/qerror.h" 32 #include "qapi/qmp/qjson.h" 33 #include "sysemu/block-backend.h" 34 #include "sysemu/sysemu.h" 35 #include "qemu/notify.h" 36 #include "block/coroutine.h" 37 #include "block/qapi.h" 38 #include "qmp-commands.h" 39 #include "qemu/timer.h" 40 #include "qapi-event.h" 41 #include "block/throttle-groups.h" 42 43 #ifdef CONFIG_BSD 44 #include <sys/types.h> 45 #include <sys/stat.h> 46 #include <sys/ioctl.h> 47 #include <sys/queue.h> 48 #ifndef __DragonFly__ 49 #include <sys/disk.h> 50 #endif 51 #endif 52 53 #ifdef _WIN32 54 #include <windows.h> 55 #endif 56 57 /** 58 * A BdrvDirtyBitmap can be in three possible states: 59 * (1) successor is NULL and disabled is false: full r/w mode 60 * (2) successor is NULL and disabled is true: read only mode ("disabled") 61 * (3) successor is set: frozen mode. 62 * A frozen bitmap cannot be renamed, deleted, anonymized, cleared, set, 63 * or enabled. A frozen bitmap can only abdicate() or reclaim(). 64 */ 65 struct BdrvDirtyBitmap { 66 HBitmap *bitmap; /* Dirty sector bitmap implementation */ 67 BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */ 68 char *name; /* Optional non-empty unique ID */ 69 int64_t size; /* Size of the bitmap (Number of sectors) */ 70 bool disabled; /* Bitmap is read-only */ 71 QLIST_ENTRY(BdrvDirtyBitmap) list; 72 }; 73 74 #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */ 75 76 static QTAILQ_HEAD(, BlockDriverState) bdrv_states = 77 QTAILQ_HEAD_INITIALIZER(bdrv_states); 78 79 static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states = 80 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states); 81 82 static QLIST_HEAD(, BlockDriver) bdrv_drivers = 83 QLIST_HEAD_INITIALIZER(bdrv_drivers); 84 85 static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename, 86 const char *reference, QDict *options, int flags, 87 BlockDriverState *parent, 88 const BdrvChildRole *child_role, Error **errp); 89 90 static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs); 91 /* If non-zero, use only whitelisted block drivers */ 92 static int use_bdrv_whitelist; 93 94 #ifdef _WIN32 95 static int is_windows_drive_prefix(const char *filename) 96 { 97 return (((filename[0] >= 'a' && filename[0] <= 'z') || 98 (filename[0] >= 'A' && filename[0] <= 'Z')) && 99 filename[1] == ':'); 100 } 101 102 int is_windows_drive(const char *filename) 103 { 104 if (is_windows_drive_prefix(filename) && 105 filename[2] == '\0') 106 return 1; 107 if (strstart(filename, "\\\\.\\", NULL) || 108 strstart(filename, "//./", NULL)) 109 return 1; 110 return 0; 111 } 112 #endif 113 114 size_t bdrv_opt_mem_align(BlockDriverState *bs) 115 { 116 if (!bs || !bs->drv) { 117 /* page size or 4k (hdd sector size) should be on the safe side */ 118 return MAX(4096, getpagesize()); 119 } 120 121 return bs->bl.opt_mem_alignment; 122 } 123 124 size_t bdrv_min_mem_align(BlockDriverState *bs) 125 { 126 if (!bs || !bs->drv) { 127 /* page size or 4k (hdd sector size) should be on the safe side */ 128 return MAX(4096, getpagesize()); 129 } 130 131 return bs->bl.min_mem_alignment; 132 } 133 134 /* check if the path starts with "<protocol>:" */ 135 int path_has_protocol(const char *path) 136 { 137 const char *p; 138 139 #ifdef _WIN32 140 if (is_windows_drive(path) || 141 is_windows_drive_prefix(path)) { 142 return 0; 143 } 144 p = path + strcspn(path, ":/\\"); 145 #else 146 p = path + strcspn(path, ":/"); 147 #endif 148 149 return *p == ':'; 150 } 151 152 int path_is_absolute(const char *path) 153 { 154 #ifdef _WIN32 155 /* specific case for names like: "\\.\d:" */ 156 if (is_windows_drive(path) || is_windows_drive_prefix(path)) { 157 return 1; 158 } 159 return (*path == '/' || *path == '\\'); 160 #else 161 return (*path == '/'); 162 #endif 163 } 164 165 /* if filename is absolute, just copy it to dest. Otherwise, build a 166 path to it by considering it is relative to base_path. URL are 167 supported. */ 168 void path_combine(char *dest, int dest_size, 169 const char *base_path, 170 const char *filename) 171 { 172 const char *p, *p1; 173 int len; 174 175 if (dest_size <= 0) 176 return; 177 if (path_is_absolute(filename)) { 178 pstrcpy(dest, dest_size, filename); 179 } else { 180 p = strchr(base_path, ':'); 181 if (p) 182 p++; 183 else 184 p = base_path; 185 p1 = strrchr(base_path, '/'); 186 #ifdef _WIN32 187 { 188 const char *p2; 189 p2 = strrchr(base_path, '\\'); 190 if (!p1 || p2 > p1) 191 p1 = p2; 192 } 193 #endif 194 if (p1) 195 p1++; 196 else 197 p1 = base_path; 198 if (p1 > p) 199 p = p1; 200 len = p - base_path; 201 if (len > dest_size - 1) 202 len = dest_size - 1; 203 memcpy(dest, base_path, len); 204 dest[len] = '\0'; 205 pstrcat(dest, dest_size, filename); 206 } 207 } 208 209 void bdrv_get_full_backing_filename_from_filename(const char *backed, 210 const char *backing, 211 char *dest, size_t sz, 212 Error **errp) 213 { 214 if (backing[0] == '\0' || path_has_protocol(backing) || 215 path_is_absolute(backing)) 216 { 217 pstrcpy(dest, sz, backing); 218 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) { 219 error_setg(errp, "Cannot use relative backing file names for '%s'", 220 backed); 221 } else { 222 path_combine(dest, sz, backed, backing); 223 } 224 } 225 226 void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz, 227 Error **errp) 228 { 229 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename; 230 231 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file, 232 dest, sz, errp); 233 } 234 235 void bdrv_register(BlockDriver *bdrv) 236 { 237 bdrv_setup_io_funcs(bdrv); 238 239 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list); 240 } 241 242 BlockDriverState *bdrv_new_root(void) 243 { 244 BlockDriverState *bs = bdrv_new(); 245 246 QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list); 247 return bs; 248 } 249 250 BlockDriverState *bdrv_new(void) 251 { 252 BlockDriverState *bs; 253 int i; 254 255 bs = g_new0(BlockDriverState, 1); 256 QLIST_INIT(&bs->dirty_bitmaps); 257 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) { 258 QLIST_INIT(&bs->op_blockers[i]); 259 } 260 bdrv_iostatus_disable(bs); 261 notifier_list_init(&bs->close_notifiers); 262 notifier_with_return_list_init(&bs->before_write_notifiers); 263 qemu_co_queue_init(&bs->throttled_reqs[0]); 264 qemu_co_queue_init(&bs->throttled_reqs[1]); 265 bs->refcnt = 1; 266 bs->aio_context = qemu_get_aio_context(); 267 268 return bs; 269 } 270 271 void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify) 272 { 273 notifier_list_add(&bs->close_notifiers, notify); 274 } 275 276 BlockDriver *bdrv_find_format(const char *format_name) 277 { 278 BlockDriver *drv1; 279 QLIST_FOREACH(drv1, &bdrv_drivers, list) { 280 if (!strcmp(drv1->format_name, format_name)) { 281 return drv1; 282 } 283 } 284 return NULL; 285 } 286 287 static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only) 288 { 289 static const char *whitelist_rw[] = { 290 CONFIG_BDRV_RW_WHITELIST 291 }; 292 static const char *whitelist_ro[] = { 293 CONFIG_BDRV_RO_WHITELIST 294 }; 295 const char **p; 296 297 if (!whitelist_rw[0] && !whitelist_ro[0]) { 298 return 1; /* no whitelist, anything goes */ 299 } 300 301 for (p = whitelist_rw; *p; p++) { 302 if (!strcmp(drv->format_name, *p)) { 303 return 1; 304 } 305 } 306 if (read_only) { 307 for (p = whitelist_ro; *p; p++) { 308 if (!strcmp(drv->format_name, *p)) { 309 return 1; 310 } 311 } 312 } 313 return 0; 314 } 315 316 typedef struct CreateCo { 317 BlockDriver *drv; 318 char *filename; 319 QemuOpts *opts; 320 int ret; 321 Error *err; 322 } CreateCo; 323 324 static void coroutine_fn bdrv_create_co_entry(void *opaque) 325 { 326 Error *local_err = NULL; 327 int ret; 328 329 CreateCo *cco = opaque; 330 assert(cco->drv); 331 332 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err); 333 if (local_err) { 334 error_propagate(&cco->err, local_err); 335 } 336 cco->ret = ret; 337 } 338 339 int bdrv_create(BlockDriver *drv, const char* filename, 340 QemuOpts *opts, Error **errp) 341 { 342 int ret; 343 344 Coroutine *co; 345 CreateCo cco = { 346 .drv = drv, 347 .filename = g_strdup(filename), 348 .opts = opts, 349 .ret = NOT_DONE, 350 .err = NULL, 351 }; 352 353 if (!drv->bdrv_create) { 354 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name); 355 ret = -ENOTSUP; 356 goto out; 357 } 358 359 if (qemu_in_coroutine()) { 360 /* Fast-path if already in coroutine context */ 361 bdrv_create_co_entry(&cco); 362 } else { 363 co = qemu_coroutine_create(bdrv_create_co_entry); 364 qemu_coroutine_enter(co, &cco); 365 while (cco.ret == NOT_DONE) { 366 aio_poll(qemu_get_aio_context(), true); 367 } 368 } 369 370 ret = cco.ret; 371 if (ret < 0) { 372 if (cco.err) { 373 error_propagate(errp, cco.err); 374 } else { 375 error_setg_errno(errp, -ret, "Could not create image"); 376 } 377 } 378 379 out: 380 g_free(cco.filename); 381 return ret; 382 } 383 384 int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp) 385 { 386 BlockDriver *drv; 387 Error *local_err = NULL; 388 int ret; 389 390 drv = bdrv_find_protocol(filename, true, errp); 391 if (drv == NULL) { 392 return -ENOENT; 393 } 394 395 ret = bdrv_create(drv, filename, opts, &local_err); 396 if (local_err) { 397 error_propagate(errp, local_err); 398 } 399 return ret; 400 } 401 402 /** 403 * Try to get @bs's logical and physical block size. 404 * On success, store them in @bsz struct and return 0. 405 * On failure return -errno. 406 * @bs must not be empty. 407 */ 408 int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz) 409 { 410 BlockDriver *drv = bs->drv; 411 412 if (drv && drv->bdrv_probe_blocksizes) { 413 return drv->bdrv_probe_blocksizes(bs, bsz); 414 } 415 416 return -ENOTSUP; 417 } 418 419 /** 420 * Try to get @bs's geometry (cyls, heads, sectors). 421 * On success, store them in @geo struct and return 0. 422 * On failure return -errno. 423 * @bs must not be empty. 424 */ 425 int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo) 426 { 427 BlockDriver *drv = bs->drv; 428 429 if (drv && drv->bdrv_probe_geometry) { 430 return drv->bdrv_probe_geometry(bs, geo); 431 } 432 433 return -ENOTSUP; 434 } 435 436 /* 437 * Create a uniquely-named empty temporary file. 438 * Return 0 upon success, otherwise a negative errno value. 439 */ 440 int get_tmp_filename(char *filename, int size) 441 { 442 #ifdef _WIN32 443 char temp_dir[MAX_PATH]; 444 /* GetTempFileName requires that its output buffer (4th param) 445 have length MAX_PATH or greater. */ 446 assert(size >= MAX_PATH); 447 return (GetTempPath(MAX_PATH, temp_dir) 448 && GetTempFileName(temp_dir, "qem", 0, filename) 449 ? 0 : -GetLastError()); 450 #else 451 int fd; 452 const char *tmpdir; 453 tmpdir = getenv("TMPDIR"); 454 if (!tmpdir) { 455 tmpdir = "/var/tmp"; 456 } 457 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) { 458 return -EOVERFLOW; 459 } 460 fd = mkstemp(filename); 461 if (fd < 0) { 462 return -errno; 463 } 464 if (close(fd) != 0) { 465 unlink(filename); 466 return -errno; 467 } 468 return 0; 469 #endif 470 } 471 472 /* 473 * Detect host devices. By convention, /dev/cdrom[N] is always 474 * recognized as a host CDROM. 475 */ 476 static BlockDriver *find_hdev_driver(const char *filename) 477 { 478 int score_max = 0, score; 479 BlockDriver *drv = NULL, *d; 480 481 QLIST_FOREACH(d, &bdrv_drivers, list) { 482 if (d->bdrv_probe_device) { 483 score = d->bdrv_probe_device(filename); 484 if (score > score_max) { 485 score_max = score; 486 drv = d; 487 } 488 } 489 } 490 491 return drv; 492 } 493 494 BlockDriver *bdrv_find_protocol(const char *filename, 495 bool allow_protocol_prefix, 496 Error **errp) 497 { 498 BlockDriver *drv1; 499 char protocol[128]; 500 int len; 501 const char *p; 502 503 /* TODO Drivers without bdrv_file_open must be specified explicitly */ 504 505 /* 506 * XXX(hch): we really should not let host device detection 507 * override an explicit protocol specification, but moving this 508 * later breaks access to device names with colons in them. 509 * Thanks to the brain-dead persistent naming schemes on udev- 510 * based Linux systems those actually are quite common. 511 */ 512 drv1 = find_hdev_driver(filename); 513 if (drv1) { 514 return drv1; 515 } 516 517 if (!path_has_protocol(filename) || !allow_protocol_prefix) { 518 return &bdrv_file; 519 } 520 521 p = strchr(filename, ':'); 522 assert(p != NULL); 523 len = p - filename; 524 if (len > sizeof(protocol) - 1) 525 len = sizeof(protocol) - 1; 526 memcpy(protocol, filename, len); 527 protocol[len] = '\0'; 528 QLIST_FOREACH(drv1, &bdrv_drivers, list) { 529 if (drv1->protocol_name && 530 !strcmp(drv1->protocol_name, protocol)) { 531 return drv1; 532 } 533 } 534 535 error_setg(errp, "Unknown protocol '%s'", protocol); 536 return NULL; 537 } 538 539 /* 540 * Guess image format by probing its contents. 541 * This is not a good idea when your image is raw (CVE-2008-2004), but 542 * we do it anyway for backward compatibility. 543 * 544 * @buf contains the image's first @buf_size bytes. 545 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE, 546 * but can be smaller if the image file is smaller) 547 * @filename is its filename. 548 * 549 * For all block drivers, call the bdrv_probe() method to get its 550 * probing score. 551 * Return the first block driver with the highest probing score. 552 */ 553 BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size, 554 const char *filename) 555 { 556 int score_max = 0, score; 557 BlockDriver *drv = NULL, *d; 558 559 QLIST_FOREACH(d, &bdrv_drivers, list) { 560 if (d->bdrv_probe) { 561 score = d->bdrv_probe(buf, buf_size, filename); 562 if (score > score_max) { 563 score_max = score; 564 drv = d; 565 } 566 } 567 } 568 569 return drv; 570 } 571 572 static int find_image_format(BlockDriverState *bs, const char *filename, 573 BlockDriver **pdrv, Error **errp) 574 { 575 BlockDriver *drv; 576 uint8_t buf[BLOCK_PROBE_BUF_SIZE]; 577 int ret = 0; 578 579 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */ 580 if (bdrv_is_sg(bs) || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) { 581 *pdrv = &bdrv_raw; 582 return ret; 583 } 584 585 ret = bdrv_pread(bs, 0, buf, sizeof(buf)); 586 if (ret < 0) { 587 error_setg_errno(errp, -ret, "Could not read image for determining its " 588 "format"); 589 *pdrv = NULL; 590 return ret; 591 } 592 593 drv = bdrv_probe_all(buf, ret, filename); 594 if (!drv) { 595 error_setg(errp, "Could not determine image format: No compatible " 596 "driver found"); 597 ret = -ENOENT; 598 } 599 *pdrv = drv; 600 return ret; 601 } 602 603 /** 604 * Set the current 'total_sectors' value 605 * Return 0 on success, -errno on error. 606 */ 607 static int refresh_total_sectors(BlockDriverState *bs, int64_t hint) 608 { 609 BlockDriver *drv = bs->drv; 610 611 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */ 612 if (bdrv_is_sg(bs)) 613 return 0; 614 615 /* query actual device if possible, otherwise just trust the hint */ 616 if (drv->bdrv_getlength) { 617 int64_t length = drv->bdrv_getlength(bs); 618 if (length < 0) { 619 return length; 620 } 621 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE); 622 } 623 624 bs->total_sectors = hint; 625 return 0; 626 } 627 628 /** 629 * Set open flags for a given discard mode 630 * 631 * Return 0 on success, -1 if the discard mode was invalid. 632 */ 633 int bdrv_parse_discard_flags(const char *mode, int *flags) 634 { 635 *flags &= ~BDRV_O_UNMAP; 636 637 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) { 638 /* do nothing */ 639 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) { 640 *flags |= BDRV_O_UNMAP; 641 } else { 642 return -1; 643 } 644 645 return 0; 646 } 647 648 /** 649 * Set open flags for a given cache mode 650 * 651 * Return 0 on success, -1 if the cache mode was invalid. 652 */ 653 int bdrv_parse_cache_flags(const char *mode, int *flags) 654 { 655 *flags &= ~BDRV_O_CACHE_MASK; 656 657 if (!strcmp(mode, "off") || !strcmp(mode, "none")) { 658 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB; 659 } else if (!strcmp(mode, "directsync")) { 660 *flags |= BDRV_O_NOCACHE; 661 } else if (!strcmp(mode, "writeback")) { 662 *flags |= BDRV_O_CACHE_WB; 663 } else if (!strcmp(mode, "unsafe")) { 664 *flags |= BDRV_O_CACHE_WB; 665 *flags |= BDRV_O_NO_FLUSH; 666 } else if (!strcmp(mode, "writethrough")) { 667 /* this is the default */ 668 } else { 669 return -1; 670 } 671 672 return 0; 673 } 674 675 /* 676 * Returns the flags that a temporary snapshot should get, based on the 677 * originally requested flags (the originally requested image will have flags 678 * like a backing file) 679 */ 680 static int bdrv_temp_snapshot_flags(int flags) 681 { 682 return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY; 683 } 684 685 /* 686 * Returns the flags that bs->file should get if a protocol driver is expected, 687 * based on the given flags for the parent BDS 688 */ 689 static int bdrv_inherited_flags(int flags) 690 { 691 /* Enable protocol handling, disable format probing for bs->file */ 692 flags |= BDRV_O_PROTOCOL; 693 694 /* Our block drivers take care to send flushes and respect unmap policy, 695 * so we can enable both unconditionally on lower layers. */ 696 flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP; 697 698 /* Clear flags that only apply to the top layer */ 699 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ); 700 701 return flags; 702 } 703 704 const BdrvChildRole child_file = { 705 .inherit_flags = bdrv_inherited_flags, 706 }; 707 708 /* 709 * Returns the flags that bs->file should get if the use of formats (and not 710 * only protocols) is permitted for it, based on the given flags for the parent 711 * BDS 712 */ 713 static int bdrv_inherited_fmt_flags(int parent_flags) 714 { 715 int flags = child_file.inherit_flags(parent_flags); 716 return flags & ~BDRV_O_PROTOCOL; 717 } 718 719 const BdrvChildRole child_format = { 720 .inherit_flags = bdrv_inherited_fmt_flags, 721 }; 722 723 /* 724 * Returns the flags that bs->backing should get, based on the given flags 725 * for the parent BDS 726 */ 727 static int bdrv_backing_flags(int flags) 728 { 729 /* backing files always opened read-only */ 730 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ); 731 732 /* snapshot=on is handled on the top layer */ 733 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY); 734 735 return flags; 736 } 737 738 static const BdrvChildRole child_backing = { 739 .inherit_flags = bdrv_backing_flags, 740 }; 741 742 static int bdrv_open_flags(BlockDriverState *bs, int flags) 743 { 744 int open_flags = flags | BDRV_O_CACHE_WB; 745 746 /* 747 * Clear flags that are internal to the block layer before opening the 748 * image. 749 */ 750 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL); 751 752 /* 753 * Snapshots should be writable. 754 */ 755 if (flags & BDRV_O_TEMPORARY) { 756 open_flags |= BDRV_O_RDWR; 757 } 758 759 return open_flags; 760 } 761 762 static void bdrv_assign_node_name(BlockDriverState *bs, 763 const char *node_name, 764 Error **errp) 765 { 766 if (!node_name) { 767 return; 768 } 769 770 /* Check for empty string or invalid characters */ 771 if (!id_wellformed(node_name)) { 772 error_setg(errp, "Invalid node name"); 773 return; 774 } 775 776 /* takes care of avoiding namespaces collisions */ 777 if (blk_by_name(node_name)) { 778 error_setg(errp, "node-name=%s is conflicting with a device id", 779 node_name); 780 return; 781 } 782 783 /* takes care of avoiding duplicates node names */ 784 if (bdrv_find_node(node_name)) { 785 error_setg(errp, "Duplicate node name"); 786 return; 787 } 788 789 /* copy node name into the bs and insert it into the graph list */ 790 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name); 791 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list); 792 } 793 794 static QemuOptsList bdrv_runtime_opts = { 795 .name = "bdrv_common", 796 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head), 797 .desc = { 798 { 799 .name = "node-name", 800 .type = QEMU_OPT_STRING, 801 .help = "Node name of the block device node", 802 }, 803 { /* end of list */ } 804 }, 805 }; 806 807 /* 808 * Common part for opening disk images and files 809 * 810 * Removes all processed options from *options. 811 */ 812 static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file, 813 QDict *options, int flags, BlockDriver *drv, Error **errp) 814 { 815 int ret, open_flags; 816 const char *filename; 817 const char *node_name = NULL; 818 QemuOpts *opts; 819 Error *local_err = NULL; 820 821 assert(drv != NULL); 822 assert(bs->file == NULL); 823 assert(options != NULL && bs->options != options); 824 825 if (file != NULL) { 826 filename = file->bs->filename; 827 } else { 828 filename = qdict_get_try_str(options, "filename"); 829 } 830 831 if (drv->bdrv_needs_filename && !filename) { 832 error_setg(errp, "The '%s' block driver requires a file name", 833 drv->format_name); 834 return -EINVAL; 835 } 836 837 trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name); 838 839 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort); 840 qemu_opts_absorb_qdict(opts, options, &local_err); 841 if (local_err) { 842 error_propagate(errp, local_err); 843 ret = -EINVAL; 844 goto fail_opts; 845 } 846 847 node_name = qemu_opt_get(opts, "node-name"); 848 bdrv_assign_node_name(bs, node_name, &local_err); 849 if (local_err) { 850 error_propagate(errp, local_err); 851 ret = -EINVAL; 852 goto fail_opts; 853 } 854 855 bs->guest_block_size = 512; 856 bs->request_alignment = 512; 857 bs->zero_beyond_eof = true; 858 open_flags = bdrv_open_flags(bs, flags); 859 bs->read_only = !(open_flags & BDRV_O_RDWR); 860 861 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) { 862 error_setg(errp, 863 !bs->read_only && bdrv_is_whitelisted(drv, true) 864 ? "Driver '%s' can only be used for read-only devices" 865 : "Driver '%s' is not whitelisted", 866 drv->format_name); 867 ret = -ENOTSUP; 868 goto fail_opts; 869 } 870 871 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */ 872 if (flags & BDRV_O_COPY_ON_READ) { 873 if (!bs->read_only) { 874 bdrv_enable_copy_on_read(bs); 875 } else { 876 error_setg(errp, "Can't use copy-on-read on read-only device"); 877 ret = -EINVAL; 878 goto fail_opts; 879 } 880 } 881 882 if (filename != NULL) { 883 pstrcpy(bs->filename, sizeof(bs->filename), filename); 884 } else { 885 bs->filename[0] = '\0'; 886 } 887 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename); 888 889 bs->drv = drv; 890 bs->opaque = g_malloc0(drv->instance_size); 891 892 bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB); 893 894 /* Open the image, either directly or using a protocol */ 895 if (drv->bdrv_file_open) { 896 assert(file == NULL); 897 assert(!drv->bdrv_needs_filename || filename != NULL); 898 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err); 899 } else { 900 if (file == NULL) { 901 error_setg(errp, "Can't use '%s' as a block driver for the " 902 "protocol level", drv->format_name); 903 ret = -EINVAL; 904 goto free_and_fail; 905 } 906 bs->file = file; 907 ret = drv->bdrv_open(bs, options, open_flags, &local_err); 908 } 909 910 if (ret < 0) { 911 if (local_err) { 912 error_propagate(errp, local_err); 913 } else if (bs->filename[0]) { 914 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename); 915 } else { 916 error_setg_errno(errp, -ret, "Could not open image"); 917 } 918 goto free_and_fail; 919 } 920 921 if (bs->encrypted) { 922 error_report("Encrypted images are deprecated"); 923 error_printf("Support for them will be removed in a future release.\n" 924 "You can use 'qemu-img convert' to convert your image" 925 " to an unencrypted one.\n"); 926 } 927 928 ret = refresh_total_sectors(bs, bs->total_sectors); 929 if (ret < 0) { 930 error_setg_errno(errp, -ret, "Could not refresh total sector count"); 931 goto free_and_fail; 932 } 933 934 bdrv_refresh_limits(bs, &local_err); 935 if (local_err) { 936 error_propagate(errp, local_err); 937 ret = -EINVAL; 938 goto free_and_fail; 939 } 940 941 assert(bdrv_opt_mem_align(bs) != 0); 942 assert(bdrv_min_mem_align(bs) != 0); 943 assert((bs->request_alignment != 0) || bdrv_is_sg(bs)); 944 945 qemu_opts_del(opts); 946 return 0; 947 948 free_and_fail: 949 bs->file = NULL; 950 g_free(bs->opaque); 951 bs->opaque = NULL; 952 bs->drv = NULL; 953 fail_opts: 954 qemu_opts_del(opts); 955 return ret; 956 } 957 958 static QDict *parse_json_filename(const char *filename, Error **errp) 959 { 960 QObject *options_obj; 961 QDict *options; 962 int ret; 963 964 ret = strstart(filename, "json:", &filename); 965 assert(ret); 966 967 options_obj = qobject_from_json(filename); 968 if (!options_obj) { 969 error_setg(errp, "Could not parse the JSON options"); 970 return NULL; 971 } 972 973 if (qobject_type(options_obj) != QTYPE_QDICT) { 974 qobject_decref(options_obj); 975 error_setg(errp, "Invalid JSON object given"); 976 return NULL; 977 } 978 979 options = qobject_to_qdict(options_obj); 980 qdict_flatten(options); 981 982 return options; 983 } 984 985 /* 986 * Fills in default options for opening images and converts the legacy 987 * filename/flags pair to option QDict entries. 988 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a 989 * block driver has been specified explicitly. 990 */ 991 static int bdrv_fill_options(QDict **options, const char **pfilename, 992 int *flags, Error **errp) 993 { 994 const char *filename = *pfilename; 995 const char *drvname; 996 bool protocol = *flags & BDRV_O_PROTOCOL; 997 bool parse_filename = false; 998 BlockDriver *drv = NULL; 999 Error *local_err = NULL; 1000 1001 /* Parse json: pseudo-protocol */ 1002 if (filename && g_str_has_prefix(filename, "json:")) { 1003 QDict *json_options = parse_json_filename(filename, &local_err); 1004 if (local_err) { 1005 error_propagate(errp, local_err); 1006 return -EINVAL; 1007 } 1008 1009 /* Options given in the filename have lower priority than options 1010 * specified directly */ 1011 qdict_join(*options, json_options, false); 1012 QDECREF(json_options); 1013 *pfilename = filename = NULL; 1014 } 1015 1016 drvname = qdict_get_try_str(*options, "driver"); 1017 if (drvname) { 1018 drv = bdrv_find_format(drvname); 1019 if (!drv) { 1020 error_setg(errp, "Unknown driver '%s'", drvname); 1021 return -ENOENT; 1022 } 1023 /* If the user has explicitly specified the driver, this choice should 1024 * override the BDRV_O_PROTOCOL flag */ 1025 protocol = drv->bdrv_file_open; 1026 } 1027 1028 if (protocol) { 1029 *flags |= BDRV_O_PROTOCOL; 1030 } else { 1031 *flags &= ~BDRV_O_PROTOCOL; 1032 } 1033 1034 /* Fetch the file name from the options QDict if necessary */ 1035 if (protocol && filename) { 1036 if (!qdict_haskey(*options, "filename")) { 1037 qdict_put(*options, "filename", qstring_from_str(filename)); 1038 parse_filename = true; 1039 } else { 1040 error_setg(errp, "Can't specify 'file' and 'filename' options at " 1041 "the same time"); 1042 return -EINVAL; 1043 } 1044 } 1045 1046 /* Find the right block driver */ 1047 filename = qdict_get_try_str(*options, "filename"); 1048 1049 if (!drvname && protocol) { 1050 if (filename) { 1051 drv = bdrv_find_protocol(filename, parse_filename, errp); 1052 if (!drv) { 1053 return -EINVAL; 1054 } 1055 1056 drvname = drv->format_name; 1057 qdict_put(*options, "driver", qstring_from_str(drvname)); 1058 } else { 1059 error_setg(errp, "Must specify either driver or file"); 1060 return -EINVAL; 1061 } 1062 } 1063 1064 assert(drv || !protocol); 1065 1066 /* Driver-specific filename parsing */ 1067 if (drv && drv->bdrv_parse_filename && parse_filename) { 1068 drv->bdrv_parse_filename(filename, *options, &local_err); 1069 if (local_err) { 1070 error_propagate(errp, local_err); 1071 return -EINVAL; 1072 } 1073 1074 if (!drv->bdrv_needs_filename) { 1075 qdict_del(*options, "filename"); 1076 } 1077 } 1078 1079 return 0; 1080 } 1081 1082 static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs, 1083 BlockDriverState *child_bs, 1084 const BdrvChildRole *child_role) 1085 { 1086 BdrvChild *child = g_new(BdrvChild, 1); 1087 *child = (BdrvChild) { 1088 .bs = child_bs, 1089 .role = child_role, 1090 }; 1091 1092 QLIST_INSERT_HEAD(&parent_bs->children, child, next); 1093 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent); 1094 1095 return child; 1096 } 1097 1098 void bdrv_detach_child(BdrvChild *child) 1099 { 1100 QLIST_REMOVE(child, next); 1101 QLIST_REMOVE(child, next_parent); 1102 g_free(child); 1103 } 1104 1105 void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child) 1106 { 1107 BlockDriverState *child_bs = child->bs; 1108 1109 if (child->bs->inherits_from == parent) { 1110 child->bs->inherits_from = NULL; 1111 } 1112 1113 bdrv_detach_child(child); 1114 bdrv_unref(child_bs); 1115 } 1116 1117 /* 1118 * Sets the backing file link of a BDS. A new reference is created; callers 1119 * which don't need their own reference any more must call bdrv_unref(). 1120 */ 1121 void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd) 1122 { 1123 if (backing_hd) { 1124 bdrv_ref(backing_hd); 1125 } 1126 1127 if (bs->backing) { 1128 assert(bs->backing_blocker); 1129 bdrv_op_unblock_all(bs->backing->bs, bs->backing_blocker); 1130 bdrv_unref_child(bs, bs->backing); 1131 } else if (backing_hd) { 1132 error_setg(&bs->backing_blocker, 1133 "node is used as backing hd of '%s'", 1134 bdrv_get_device_or_node_name(bs)); 1135 } 1136 1137 if (!backing_hd) { 1138 error_free(bs->backing_blocker); 1139 bs->backing_blocker = NULL; 1140 bs->backing = NULL; 1141 goto out; 1142 } 1143 bs->backing = bdrv_attach_child(bs, backing_hd, &child_backing); 1144 bs->open_flags &= ~BDRV_O_NO_BACKING; 1145 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename); 1146 pstrcpy(bs->backing_format, sizeof(bs->backing_format), 1147 backing_hd->drv ? backing_hd->drv->format_name : ""); 1148 1149 bdrv_op_block_all(backing_hd, bs->backing_blocker); 1150 /* Otherwise we won't be able to commit due to check in bdrv_commit */ 1151 bdrv_op_unblock(backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, 1152 bs->backing_blocker); 1153 out: 1154 bdrv_refresh_limits(bs, NULL); 1155 } 1156 1157 /* 1158 * Opens the backing file for a BlockDriverState if not yet open 1159 * 1160 * options is a QDict of options to pass to the block drivers, or NULL for an 1161 * empty set of options. The reference to the QDict is transferred to this 1162 * function (even on failure), so if the caller intends to reuse the dictionary, 1163 * it needs to use QINCREF() before calling bdrv_file_open. 1164 */ 1165 int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) 1166 { 1167 char *backing_filename = g_malloc0(PATH_MAX); 1168 int ret = 0; 1169 BlockDriverState *backing_hd; 1170 Error *local_err = NULL; 1171 1172 if (bs->backing != NULL) { 1173 QDECREF(options); 1174 goto free_exit; 1175 } 1176 1177 /* NULL means an empty set of options */ 1178 if (options == NULL) { 1179 options = qdict_new(); 1180 } 1181 1182 bs->open_flags &= ~BDRV_O_NO_BACKING; 1183 if (qdict_haskey(options, "file.filename")) { 1184 backing_filename[0] = '\0'; 1185 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) { 1186 QDECREF(options); 1187 goto free_exit; 1188 } else { 1189 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX, 1190 &local_err); 1191 if (local_err) { 1192 ret = -EINVAL; 1193 error_propagate(errp, local_err); 1194 QDECREF(options); 1195 goto free_exit; 1196 } 1197 } 1198 1199 if (!bs->drv || !bs->drv->supports_backing) { 1200 ret = -EINVAL; 1201 error_setg(errp, "Driver doesn't support backing files"); 1202 QDECREF(options); 1203 goto free_exit; 1204 } 1205 1206 backing_hd = bdrv_new(); 1207 1208 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) { 1209 qdict_put(options, "driver", qstring_from_str(bs->backing_format)); 1210 } 1211 1212 assert(bs->backing == NULL); 1213 ret = bdrv_open_inherit(&backing_hd, 1214 *backing_filename ? backing_filename : NULL, 1215 NULL, options, 0, bs, &child_backing, &local_err); 1216 if (ret < 0) { 1217 bdrv_unref(backing_hd); 1218 backing_hd = NULL; 1219 bs->open_flags |= BDRV_O_NO_BACKING; 1220 error_setg(errp, "Could not open backing file: %s", 1221 error_get_pretty(local_err)); 1222 error_free(local_err); 1223 goto free_exit; 1224 } 1225 1226 /* Hook up the backing file link; drop our reference, bs owns the 1227 * backing_hd reference now */ 1228 bdrv_set_backing_hd(bs, backing_hd); 1229 bdrv_unref(backing_hd); 1230 1231 free_exit: 1232 g_free(backing_filename); 1233 return ret; 1234 } 1235 1236 /* 1237 * Opens a disk image whose options are given as BlockdevRef in another block 1238 * device's options. 1239 * 1240 * If allow_none is true, no image will be opened if filename is false and no 1241 * BlockdevRef is given. NULL will be returned, but errp remains unset. 1242 * 1243 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict. 1244 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict 1245 * itself, all options starting with "${bdref_key}." are considered part of the 1246 * BlockdevRef. 1247 * 1248 * The BlockdevRef will be removed from the options QDict. 1249 */ 1250 BdrvChild *bdrv_open_child(const char *filename, 1251 QDict *options, const char *bdref_key, 1252 BlockDriverState* parent, 1253 const BdrvChildRole *child_role, 1254 bool allow_none, Error **errp) 1255 { 1256 BdrvChild *c = NULL; 1257 BlockDriverState *bs; 1258 QDict *image_options; 1259 int ret; 1260 char *bdref_key_dot; 1261 const char *reference; 1262 1263 assert(child_role != NULL); 1264 1265 bdref_key_dot = g_strdup_printf("%s.", bdref_key); 1266 qdict_extract_subqdict(options, &image_options, bdref_key_dot); 1267 g_free(bdref_key_dot); 1268 1269 reference = qdict_get_try_str(options, bdref_key); 1270 if (!filename && !reference && !qdict_size(image_options)) { 1271 if (!allow_none) { 1272 error_setg(errp, "A block device must be specified for \"%s\"", 1273 bdref_key); 1274 } 1275 QDECREF(image_options); 1276 goto done; 1277 } 1278 1279 bs = NULL; 1280 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0, 1281 parent, child_role, errp); 1282 if (ret < 0) { 1283 goto done; 1284 } 1285 1286 c = bdrv_attach_child(parent, bs, child_role); 1287 1288 done: 1289 qdict_del(options, bdref_key); 1290 return c; 1291 } 1292 1293 int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp) 1294 { 1295 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */ 1296 char *tmp_filename = g_malloc0(PATH_MAX + 1); 1297 int64_t total_size; 1298 QemuOpts *opts = NULL; 1299 QDict *snapshot_options; 1300 BlockDriverState *bs_snapshot; 1301 Error *local_err = NULL; 1302 int ret; 1303 1304 /* if snapshot, we create a temporary backing file and open it 1305 instead of opening 'filename' directly */ 1306 1307 /* Get the required size from the image */ 1308 total_size = bdrv_getlength(bs); 1309 if (total_size < 0) { 1310 ret = total_size; 1311 error_setg_errno(errp, -total_size, "Could not get image size"); 1312 goto out; 1313 } 1314 1315 /* Create the temporary image */ 1316 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1); 1317 if (ret < 0) { 1318 error_setg_errno(errp, -ret, "Could not get temporary filename"); 1319 goto out; 1320 } 1321 1322 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0, 1323 &error_abort); 1324 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort); 1325 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err); 1326 qemu_opts_del(opts); 1327 if (ret < 0) { 1328 error_setg_errno(errp, -ret, "Could not create temporary overlay " 1329 "'%s': %s", tmp_filename, 1330 error_get_pretty(local_err)); 1331 error_free(local_err); 1332 goto out; 1333 } 1334 1335 /* Prepare a new options QDict for the temporary file */ 1336 snapshot_options = qdict_new(); 1337 qdict_put(snapshot_options, "file.driver", 1338 qstring_from_str("file")); 1339 qdict_put(snapshot_options, "file.filename", 1340 qstring_from_str(tmp_filename)); 1341 qdict_put(snapshot_options, "driver", 1342 qstring_from_str("qcow2")); 1343 1344 bs_snapshot = bdrv_new(); 1345 1346 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options, 1347 flags, &local_err); 1348 if (ret < 0) { 1349 error_propagate(errp, local_err); 1350 goto out; 1351 } 1352 1353 bdrv_append(bs_snapshot, bs); 1354 1355 out: 1356 g_free(tmp_filename); 1357 return ret; 1358 } 1359 1360 /* 1361 * Opens a disk image (raw, qcow2, vmdk, ...) 1362 * 1363 * options is a QDict of options to pass to the block drivers, or NULL for an 1364 * empty set of options. The reference to the QDict belongs to the block layer 1365 * after the call (even on failure), so if the caller intends to reuse the 1366 * dictionary, it needs to use QINCREF() before calling bdrv_open. 1367 * 1368 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there. 1369 * If it is not NULL, the referenced BDS will be reused. 1370 * 1371 * The reference parameter may be used to specify an existing block device which 1372 * should be opened. If specified, neither options nor a filename may be given, 1373 * nor can an existing BDS be reused (that is, *pbs has to be NULL). 1374 */ 1375 static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename, 1376 const char *reference, QDict *options, int flags, 1377 BlockDriverState *parent, 1378 const BdrvChildRole *child_role, Error **errp) 1379 { 1380 int ret; 1381 BdrvChild *file = NULL; 1382 BlockDriverState *bs; 1383 BlockDriver *drv = NULL; 1384 const char *drvname; 1385 Error *local_err = NULL; 1386 int snapshot_flags = 0; 1387 1388 assert(pbs); 1389 assert(!child_role || !flags); 1390 assert(!child_role == !parent); 1391 1392 if (reference) { 1393 bool options_non_empty = options ? qdict_size(options) : false; 1394 QDECREF(options); 1395 1396 if (*pbs) { 1397 error_setg(errp, "Cannot reuse an existing BDS when referencing " 1398 "another block device"); 1399 return -EINVAL; 1400 } 1401 1402 if (filename || options_non_empty) { 1403 error_setg(errp, "Cannot reference an existing block device with " 1404 "additional options or a new filename"); 1405 return -EINVAL; 1406 } 1407 1408 bs = bdrv_lookup_bs(reference, reference, errp); 1409 if (!bs) { 1410 return -ENODEV; 1411 } 1412 bdrv_ref(bs); 1413 *pbs = bs; 1414 return 0; 1415 } 1416 1417 if (*pbs) { 1418 bs = *pbs; 1419 } else { 1420 bs = bdrv_new(); 1421 } 1422 1423 /* NULL means an empty set of options */ 1424 if (options == NULL) { 1425 options = qdict_new(); 1426 } 1427 1428 if (child_role) { 1429 bs->inherits_from = parent; 1430 flags = child_role->inherit_flags(parent->open_flags); 1431 } 1432 1433 ret = bdrv_fill_options(&options, &filename, &flags, &local_err); 1434 if (local_err) { 1435 goto fail; 1436 } 1437 1438 /* Find the right image format driver */ 1439 drvname = qdict_get_try_str(options, "driver"); 1440 if (drvname) { 1441 drv = bdrv_find_format(drvname); 1442 qdict_del(options, "driver"); 1443 if (!drv) { 1444 error_setg(errp, "Unknown driver: '%s'", drvname); 1445 ret = -EINVAL; 1446 goto fail; 1447 } 1448 } 1449 1450 assert(drvname || !(flags & BDRV_O_PROTOCOL)); 1451 1452 bs->open_flags = flags; 1453 bs->options = options; 1454 options = qdict_clone_shallow(options); 1455 1456 /* Open image file without format layer */ 1457 if ((flags & BDRV_O_PROTOCOL) == 0) { 1458 if (flags & BDRV_O_RDWR) { 1459 flags |= BDRV_O_ALLOW_RDWR; 1460 } 1461 if (flags & BDRV_O_SNAPSHOT) { 1462 snapshot_flags = bdrv_temp_snapshot_flags(flags); 1463 flags = bdrv_backing_flags(flags); 1464 } 1465 1466 bs->open_flags = flags; 1467 1468 file = bdrv_open_child(filename, options, "file", bs, 1469 &child_file, true, &local_err); 1470 if (local_err) { 1471 ret = -EINVAL; 1472 goto fail; 1473 } 1474 } 1475 1476 /* Image format probing */ 1477 bs->probed = !drv; 1478 if (!drv && file) { 1479 ret = find_image_format(file->bs, filename, &drv, &local_err); 1480 if (ret < 0) { 1481 goto fail; 1482 } 1483 } else if (!drv) { 1484 error_setg(errp, "Must specify either driver or file"); 1485 ret = -EINVAL; 1486 goto fail; 1487 } 1488 1489 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */ 1490 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open); 1491 /* file must be NULL if a protocol BDS is about to be created 1492 * (the inverse results in an error message from bdrv_open_common()) */ 1493 assert(!(flags & BDRV_O_PROTOCOL) || !file); 1494 1495 /* Open the image */ 1496 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err); 1497 if (ret < 0) { 1498 goto fail; 1499 } 1500 1501 if (file && (bs->file != file)) { 1502 bdrv_unref_child(bs, file); 1503 file = NULL; 1504 } 1505 1506 /* If there is a backing file, use it */ 1507 if ((flags & BDRV_O_NO_BACKING) == 0) { 1508 QDict *backing_options; 1509 1510 qdict_extract_subqdict(options, &backing_options, "backing."); 1511 ret = bdrv_open_backing_file(bs, backing_options, &local_err); 1512 if (ret < 0) { 1513 goto close_and_fail; 1514 } 1515 } 1516 1517 bdrv_refresh_filename(bs); 1518 1519 /* Check if any unknown options were used */ 1520 if (options && (qdict_size(options) != 0)) { 1521 const QDictEntry *entry = qdict_first(options); 1522 if (flags & BDRV_O_PROTOCOL) { 1523 error_setg(errp, "Block protocol '%s' doesn't support the option " 1524 "'%s'", drv->format_name, entry->key); 1525 } else { 1526 error_setg(errp, "Block format '%s' used by device '%s' doesn't " 1527 "support the option '%s'", drv->format_name, 1528 bdrv_get_device_name(bs), entry->key); 1529 } 1530 1531 ret = -EINVAL; 1532 goto close_and_fail; 1533 } 1534 1535 if (!bdrv_key_required(bs)) { 1536 if (bs->blk) { 1537 blk_dev_change_media_cb(bs->blk, true); 1538 } 1539 } else if (!runstate_check(RUN_STATE_PRELAUNCH) 1540 && !runstate_check(RUN_STATE_INMIGRATE) 1541 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */ 1542 error_setg(errp, 1543 "Guest must be stopped for opening of encrypted image"); 1544 ret = -EBUSY; 1545 goto close_and_fail; 1546 } 1547 1548 QDECREF(options); 1549 *pbs = bs; 1550 1551 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the 1552 * temporary snapshot afterwards. */ 1553 if (snapshot_flags) { 1554 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err); 1555 if (local_err) { 1556 goto close_and_fail; 1557 } 1558 } 1559 1560 return 0; 1561 1562 fail: 1563 if (file != NULL) { 1564 bdrv_unref_child(bs, file); 1565 } 1566 QDECREF(bs->options); 1567 QDECREF(options); 1568 bs->options = NULL; 1569 if (!*pbs) { 1570 /* If *pbs is NULL, a new BDS has been created in this function and 1571 needs to be freed now. Otherwise, it does not need to be closed, 1572 since it has not really been opened yet. */ 1573 bdrv_unref(bs); 1574 } 1575 if (local_err) { 1576 error_propagate(errp, local_err); 1577 } 1578 return ret; 1579 1580 close_and_fail: 1581 /* See fail path, but now the BDS has to be always closed */ 1582 if (*pbs) { 1583 bdrv_close(bs); 1584 } else { 1585 bdrv_unref(bs); 1586 } 1587 QDECREF(options); 1588 if (local_err) { 1589 error_propagate(errp, local_err); 1590 } 1591 return ret; 1592 } 1593 1594 int bdrv_open(BlockDriverState **pbs, const char *filename, 1595 const char *reference, QDict *options, int flags, Error **errp) 1596 { 1597 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL, 1598 NULL, errp); 1599 } 1600 1601 typedef struct BlockReopenQueueEntry { 1602 bool prepared; 1603 BDRVReopenState state; 1604 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry; 1605 } BlockReopenQueueEntry; 1606 1607 /* 1608 * Adds a BlockDriverState to a simple queue for an atomic, transactional 1609 * reopen of multiple devices. 1610 * 1611 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT 1612 * already performed, or alternatively may be NULL a new BlockReopenQueue will 1613 * be created and initialized. This newly created BlockReopenQueue should be 1614 * passed back in for subsequent calls that are intended to be of the same 1615 * atomic 'set'. 1616 * 1617 * bs is the BlockDriverState to add to the reopen queue. 1618 * 1619 * options contains the changed options for the associated bs 1620 * (the BlockReopenQueue takes ownership) 1621 * 1622 * flags contains the open flags for the associated bs 1623 * 1624 * returns a pointer to bs_queue, which is either the newly allocated 1625 * bs_queue, or the existing bs_queue being used. 1626 * 1627 */ 1628 BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue, 1629 BlockDriverState *bs, 1630 QDict *options, int flags) 1631 { 1632 assert(bs != NULL); 1633 1634 BlockReopenQueueEntry *bs_entry; 1635 BdrvChild *child; 1636 QDict *old_options; 1637 1638 if (bs_queue == NULL) { 1639 bs_queue = g_new0(BlockReopenQueue, 1); 1640 QSIMPLEQ_INIT(bs_queue); 1641 } 1642 1643 if (!options) { 1644 options = qdict_new(); 1645 } 1646 1647 old_options = qdict_clone_shallow(bs->options); 1648 qdict_join(options, old_options, false); 1649 QDECREF(old_options); 1650 1651 /* bdrv_open() masks this flag out */ 1652 flags &= ~BDRV_O_PROTOCOL; 1653 1654 QLIST_FOREACH(child, &bs->children, next) { 1655 int child_flags; 1656 1657 if (child->bs->inherits_from != bs) { 1658 continue; 1659 } 1660 1661 child_flags = child->role->inherit_flags(flags); 1662 /* TODO Pass down child flags (backing.*, extents.*, ...) */ 1663 bdrv_reopen_queue(bs_queue, child->bs, NULL, child_flags); 1664 } 1665 1666 bs_entry = g_new0(BlockReopenQueueEntry, 1); 1667 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry); 1668 1669 bs_entry->state.bs = bs; 1670 bs_entry->state.options = options; 1671 bs_entry->state.flags = flags; 1672 1673 return bs_queue; 1674 } 1675 1676 /* 1677 * Reopen multiple BlockDriverStates atomically & transactionally. 1678 * 1679 * The queue passed in (bs_queue) must have been built up previous 1680 * via bdrv_reopen_queue(). 1681 * 1682 * Reopens all BDS specified in the queue, with the appropriate 1683 * flags. All devices are prepared for reopen, and failure of any 1684 * device will cause all device changes to be abandonded, and intermediate 1685 * data cleaned up. 1686 * 1687 * If all devices prepare successfully, then the changes are committed 1688 * to all devices. 1689 * 1690 */ 1691 int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp) 1692 { 1693 int ret = -1; 1694 BlockReopenQueueEntry *bs_entry, *next; 1695 Error *local_err = NULL; 1696 1697 assert(bs_queue != NULL); 1698 1699 bdrv_drain_all(); 1700 1701 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) { 1702 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) { 1703 error_propagate(errp, local_err); 1704 goto cleanup; 1705 } 1706 bs_entry->prepared = true; 1707 } 1708 1709 /* If we reach this point, we have success and just need to apply the 1710 * changes 1711 */ 1712 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) { 1713 bdrv_reopen_commit(&bs_entry->state); 1714 } 1715 1716 ret = 0; 1717 1718 cleanup: 1719 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) { 1720 if (ret && bs_entry->prepared) { 1721 bdrv_reopen_abort(&bs_entry->state); 1722 } 1723 QDECREF(bs_entry->state.options); 1724 g_free(bs_entry); 1725 } 1726 g_free(bs_queue); 1727 return ret; 1728 } 1729 1730 1731 /* Reopen a single BlockDriverState with the specified flags. */ 1732 int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp) 1733 { 1734 int ret = -1; 1735 Error *local_err = NULL; 1736 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags); 1737 1738 ret = bdrv_reopen_multiple(queue, &local_err); 1739 if (local_err != NULL) { 1740 error_propagate(errp, local_err); 1741 } 1742 return ret; 1743 } 1744 1745 1746 /* 1747 * Prepares a BlockDriverState for reopen. All changes are staged in the 1748 * 'opaque' field of the BDRVReopenState, which is used and allocated by 1749 * the block driver layer .bdrv_reopen_prepare() 1750 * 1751 * bs is the BlockDriverState to reopen 1752 * flags are the new open flags 1753 * queue is the reopen queue 1754 * 1755 * Returns 0 on success, non-zero on error. On error errp will be set 1756 * as well. 1757 * 1758 * On failure, bdrv_reopen_abort() will be called to clean up any data. 1759 * It is the responsibility of the caller to then call the abort() or 1760 * commit() for any other BDS that have been left in a prepare() state 1761 * 1762 */ 1763 int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue, 1764 Error **errp) 1765 { 1766 int ret = -1; 1767 Error *local_err = NULL; 1768 BlockDriver *drv; 1769 1770 assert(reopen_state != NULL); 1771 assert(reopen_state->bs->drv != NULL); 1772 drv = reopen_state->bs->drv; 1773 1774 /* if we are to stay read-only, do not allow permission change 1775 * to r/w */ 1776 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) && 1777 reopen_state->flags & BDRV_O_RDWR) { 1778 error_setg(errp, "Node '%s' is read only", 1779 bdrv_get_device_or_node_name(reopen_state->bs)); 1780 goto error; 1781 } 1782 1783 1784 ret = bdrv_flush(reopen_state->bs); 1785 if (ret) { 1786 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive", 1787 strerror(-ret)); 1788 goto error; 1789 } 1790 1791 if (drv->bdrv_reopen_prepare) { 1792 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err); 1793 if (ret) { 1794 if (local_err != NULL) { 1795 error_propagate(errp, local_err); 1796 } else { 1797 error_setg(errp, "failed while preparing to reopen image '%s'", 1798 reopen_state->bs->filename); 1799 } 1800 goto error; 1801 } 1802 } else { 1803 /* It is currently mandatory to have a bdrv_reopen_prepare() 1804 * handler for each supported drv. */ 1805 error_setg(errp, "Block format '%s' used by node '%s' " 1806 "does not support reopening files", drv->format_name, 1807 bdrv_get_device_or_node_name(reopen_state->bs)); 1808 ret = -1; 1809 goto error; 1810 } 1811 1812 /* Options that are not handled are only okay if they are unchanged 1813 * compared to the old state. It is expected that some options are only 1814 * used for the initial open, but not reopen (e.g. filename) */ 1815 if (qdict_size(reopen_state->options)) { 1816 const QDictEntry *entry = qdict_first(reopen_state->options); 1817 1818 do { 1819 QString *new_obj = qobject_to_qstring(entry->value); 1820 const char *new = qstring_get_str(new_obj); 1821 const char *old = qdict_get_try_str(reopen_state->bs->options, 1822 entry->key); 1823 1824 if (!old || strcmp(new, old)) { 1825 error_setg(errp, "Cannot change the option '%s'", entry->key); 1826 ret = -EINVAL; 1827 goto error; 1828 } 1829 } while ((entry = qdict_next(reopen_state->options, entry))); 1830 } 1831 1832 ret = 0; 1833 1834 error: 1835 return ret; 1836 } 1837 1838 /* 1839 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and 1840 * makes them final by swapping the staging BlockDriverState contents into 1841 * the active BlockDriverState contents. 1842 */ 1843 void bdrv_reopen_commit(BDRVReopenState *reopen_state) 1844 { 1845 BlockDriver *drv; 1846 1847 assert(reopen_state != NULL); 1848 drv = reopen_state->bs->drv; 1849 assert(drv != NULL); 1850 1851 /* If there are any driver level actions to take */ 1852 if (drv->bdrv_reopen_commit) { 1853 drv->bdrv_reopen_commit(reopen_state); 1854 } 1855 1856 /* set BDS specific flags now */ 1857 reopen_state->bs->open_flags = reopen_state->flags; 1858 reopen_state->bs->enable_write_cache = !!(reopen_state->flags & 1859 BDRV_O_CACHE_WB); 1860 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR); 1861 1862 bdrv_refresh_limits(reopen_state->bs, NULL); 1863 } 1864 1865 /* 1866 * Abort the reopen, and delete and free the staged changes in 1867 * reopen_state 1868 */ 1869 void bdrv_reopen_abort(BDRVReopenState *reopen_state) 1870 { 1871 BlockDriver *drv; 1872 1873 assert(reopen_state != NULL); 1874 drv = reopen_state->bs->drv; 1875 assert(drv != NULL); 1876 1877 if (drv->bdrv_reopen_abort) { 1878 drv->bdrv_reopen_abort(reopen_state); 1879 } 1880 } 1881 1882 1883 void bdrv_close(BlockDriverState *bs) 1884 { 1885 BdrvAioNotifier *ban, *ban_next; 1886 1887 if (bs->job) { 1888 block_job_cancel_sync(bs->job); 1889 } 1890 1891 /* Disable I/O limits and drain all pending throttled requests */ 1892 if (bs->io_limits_enabled) { 1893 bdrv_io_limits_disable(bs); 1894 } 1895 1896 bdrv_drain(bs); /* complete I/O */ 1897 bdrv_flush(bs); 1898 bdrv_drain(bs); /* in case flush left pending I/O */ 1899 notifier_list_notify(&bs->close_notifiers, bs); 1900 1901 if (bs->drv) { 1902 BdrvChild *child, *next; 1903 1904 bs->drv->bdrv_close(bs); 1905 bs->drv = NULL; 1906 1907 bdrv_set_backing_hd(bs, NULL); 1908 1909 if (bs->file != NULL) { 1910 bdrv_unref_child(bs, bs->file); 1911 bs->file = NULL; 1912 } 1913 1914 QLIST_FOREACH_SAFE(child, &bs->children, next, next) { 1915 /* TODO Remove bdrv_unref() from drivers' close function and use 1916 * bdrv_unref_child() here */ 1917 if (child->bs->inherits_from == bs) { 1918 child->bs->inherits_from = NULL; 1919 } 1920 bdrv_detach_child(child); 1921 } 1922 1923 g_free(bs->opaque); 1924 bs->opaque = NULL; 1925 bs->copy_on_read = 0; 1926 bs->backing_file[0] = '\0'; 1927 bs->backing_format[0] = '\0'; 1928 bs->total_sectors = 0; 1929 bs->encrypted = 0; 1930 bs->valid_key = 0; 1931 bs->sg = 0; 1932 bs->zero_beyond_eof = false; 1933 QDECREF(bs->options); 1934 bs->options = NULL; 1935 QDECREF(bs->full_open_options); 1936 bs->full_open_options = NULL; 1937 } 1938 1939 if (bs->blk) { 1940 blk_dev_change_media_cb(bs->blk, false); 1941 } 1942 1943 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) { 1944 g_free(ban); 1945 } 1946 QLIST_INIT(&bs->aio_notifiers); 1947 } 1948 1949 void bdrv_close_all(void) 1950 { 1951 BlockDriverState *bs; 1952 1953 QTAILQ_FOREACH(bs, &bdrv_states, device_list) { 1954 AioContext *aio_context = bdrv_get_aio_context(bs); 1955 1956 aio_context_acquire(aio_context); 1957 bdrv_close(bs); 1958 aio_context_release(aio_context); 1959 } 1960 } 1961 1962 /* make a BlockDriverState anonymous by removing from bdrv_state and 1963 * graph_bdrv_state list. 1964 Also, NULL terminate the device_name to prevent double remove */ 1965 void bdrv_make_anon(BlockDriverState *bs) 1966 { 1967 /* 1968 * Take care to remove bs from bdrv_states only when it's actually 1969 * in it. Note that bs->device_list.tqe_prev is initially null, 1970 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish 1971 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by 1972 * resetting it to null on remove. 1973 */ 1974 if (bs->device_list.tqe_prev) { 1975 QTAILQ_REMOVE(&bdrv_states, bs, device_list); 1976 bs->device_list.tqe_prev = NULL; 1977 } 1978 if (bs->node_name[0] != '\0') { 1979 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list); 1980 } 1981 bs->node_name[0] = '\0'; 1982 } 1983 1984 static void bdrv_rebind(BlockDriverState *bs) 1985 { 1986 if (bs->drv && bs->drv->bdrv_rebind) { 1987 bs->drv->bdrv_rebind(bs); 1988 } 1989 } 1990 1991 /* Fields that need to stay with the top-level BDS, no matter whether the 1992 * address of the top-level BDS stays the same or not. */ 1993 static void bdrv_move_feature_fields(BlockDriverState *bs_dest, 1994 BlockDriverState *bs_src) 1995 { 1996 /* move some fields that need to stay attached to the device */ 1997 1998 /* dev info */ 1999 bs_dest->guest_block_size = bs_src->guest_block_size; 2000 bs_dest->copy_on_read = bs_src->copy_on_read; 2001 2002 bs_dest->enable_write_cache = bs_src->enable_write_cache; 2003 2004 /* r/w error */ 2005 bs_dest->on_read_error = bs_src->on_read_error; 2006 bs_dest->on_write_error = bs_src->on_write_error; 2007 2008 /* i/o status */ 2009 bs_dest->iostatus_enabled = bs_src->iostatus_enabled; 2010 bs_dest->iostatus = bs_src->iostatus; 2011 2012 /* dirty bitmap */ 2013 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps; 2014 } 2015 2016 /* Fields that only need to be swapped if the contents of BDSes is swapped 2017 * rather than pointers being changed in the parents, and throttling fields 2018 * because only bdrv_swap() messes with internals of throttling. */ 2019 static void bdrv_move_reference_fields(BlockDriverState *bs_dest, 2020 BlockDriverState *bs_src) 2021 { 2022 /* i/o throttled req */ 2023 bs_dest->throttle_state = bs_src->throttle_state, 2024 bs_dest->io_limits_enabled = bs_src->io_limits_enabled; 2025 bs_dest->pending_reqs[0] = bs_src->pending_reqs[0]; 2026 bs_dest->pending_reqs[1] = bs_src->pending_reqs[1]; 2027 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0]; 2028 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1]; 2029 memcpy(&bs_dest->round_robin, 2030 &bs_src->round_robin, 2031 sizeof(bs_dest->round_robin)); 2032 memcpy(&bs_dest->throttle_timers, 2033 &bs_src->throttle_timers, 2034 sizeof(ThrottleTimers)); 2035 2036 /* reference count */ 2037 bs_dest->refcnt = bs_src->refcnt; 2038 2039 /* job */ 2040 bs_dest->job = bs_src->job; 2041 2042 /* keep the same entry in bdrv_states */ 2043 bs_dest->device_list = bs_src->device_list; 2044 bs_dest->blk = bs_src->blk; 2045 bs_dest->parents = bs_src->parents; 2046 2047 memcpy(bs_dest->op_blockers, bs_src->op_blockers, 2048 sizeof(bs_dest->op_blockers)); 2049 } 2050 2051 /* 2052 * Swap bs contents for two image chains while they are live, 2053 * while keeping required fields on the BlockDriverState that is 2054 * actually attached to a device. 2055 * 2056 * This will modify the BlockDriverState fields, and swap contents 2057 * between bs_new and bs_old. Both bs_new and bs_old are modified. 2058 * 2059 * bs_new must not be attached to a BlockBackend. 2060 * 2061 * This function does not create any image files. 2062 */ 2063 void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old) 2064 { 2065 BlockDriverState tmp; 2066 BdrvChild *child; 2067 2068 bdrv_drain(bs_new); 2069 bdrv_drain(bs_old); 2070 2071 /* The code needs to swap the node_name but simply swapping node_list won't 2072 * work so first remove the nodes from the graph list, do the swap then 2073 * insert them back if needed. 2074 */ 2075 if (bs_new->node_name[0] != '\0') { 2076 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list); 2077 } 2078 if (bs_old->node_name[0] != '\0') { 2079 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list); 2080 } 2081 2082 /* If the BlockDriverState is part of a throttling group acquire 2083 * its lock since we're going to mess with the protected fields. 2084 * Otherwise there's no need to worry since no one else can touch 2085 * them. */ 2086 if (bs_old->throttle_state) { 2087 throttle_group_lock(bs_old); 2088 } 2089 2090 /* bs_new must be unattached and shouldn't have anything fancy enabled */ 2091 assert(!bs_new->blk); 2092 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps)); 2093 assert(bs_new->job == NULL); 2094 assert(bs_new->io_limits_enabled == false); 2095 assert(bs_new->throttle_state == NULL); 2096 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers)); 2097 2098 tmp = *bs_new; 2099 *bs_new = *bs_old; 2100 *bs_old = tmp; 2101 2102 /* there are some fields that should not be swapped, move them back */ 2103 bdrv_move_feature_fields(&tmp, bs_old); 2104 bdrv_move_feature_fields(bs_old, bs_new); 2105 bdrv_move_feature_fields(bs_new, &tmp); 2106 2107 bdrv_move_reference_fields(&tmp, bs_old); 2108 bdrv_move_reference_fields(bs_old, bs_new); 2109 bdrv_move_reference_fields(bs_new, &tmp); 2110 2111 /* bs_new must remain unattached */ 2112 assert(!bs_new->blk); 2113 2114 /* Check a few fields that should remain attached to the device */ 2115 assert(bs_new->job == NULL); 2116 assert(bs_new->io_limits_enabled == false); 2117 assert(bs_new->throttle_state == NULL); 2118 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers)); 2119 2120 /* Release the ThrottleGroup lock */ 2121 if (bs_old->throttle_state) { 2122 throttle_group_unlock(bs_old); 2123 } 2124 2125 /* insert the nodes back into the graph node list if needed */ 2126 if (bs_new->node_name[0] != '\0') { 2127 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list); 2128 } 2129 if (bs_old->node_name[0] != '\0') { 2130 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list); 2131 } 2132 2133 /* 2134 * Update lh_first.le_prev for non-empty lists. 2135 * 2136 * The head of the op blocker list doesn't change because it is moved back 2137 * in bdrv_move_feature_fields(). 2138 */ 2139 assert(QLIST_EMPTY(&bs_old->tracked_requests)); 2140 assert(QLIST_EMPTY(&bs_new->tracked_requests)); 2141 2142 QLIST_FIX_HEAD_PTR(&bs_new->children, next); 2143 QLIST_FIX_HEAD_PTR(&bs_old->children, next); 2144 2145 /* Update references in bs->opaque and children */ 2146 QLIST_FOREACH(child, &bs_old->children, next) { 2147 if (child->bs->inherits_from == bs_new) { 2148 child->bs->inherits_from = bs_old; 2149 } 2150 } 2151 QLIST_FOREACH(child, &bs_new->children, next) { 2152 if (child->bs->inherits_from == bs_old) { 2153 child->bs->inherits_from = bs_new; 2154 } 2155 } 2156 2157 bdrv_rebind(bs_new); 2158 bdrv_rebind(bs_old); 2159 } 2160 2161 static void change_parent_backing_link(BlockDriverState *from, 2162 BlockDriverState *to) 2163 { 2164 BdrvChild *c, *next; 2165 2166 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) { 2167 assert(c->role != &child_backing); 2168 c->bs = to; 2169 QLIST_REMOVE(c, next_parent); 2170 QLIST_INSERT_HEAD(&to->parents, c, next_parent); 2171 bdrv_ref(to); 2172 bdrv_unref(from); 2173 } 2174 if (from->blk) { 2175 blk_set_bs(from->blk, to); 2176 if (!to->device_list.tqe_prev) { 2177 QTAILQ_INSERT_BEFORE(from, to, device_list); 2178 } 2179 QTAILQ_REMOVE(&bdrv_states, from, device_list); 2180 } 2181 } 2182 2183 static void swap_feature_fields(BlockDriverState *bs_top, 2184 BlockDriverState *bs_new) 2185 { 2186 BlockDriverState tmp; 2187 2188 bdrv_move_feature_fields(&tmp, bs_top); 2189 bdrv_move_feature_fields(bs_top, bs_new); 2190 bdrv_move_feature_fields(bs_new, &tmp); 2191 2192 assert(!bs_new->throttle_state); 2193 if (bs_top->throttle_state) { 2194 assert(bs_top->io_limits_enabled); 2195 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top)); 2196 bdrv_io_limits_disable(bs_top); 2197 } 2198 } 2199 2200 /* 2201 * Add new bs contents at the top of an image chain while the chain is 2202 * live, while keeping required fields on the top layer. 2203 * 2204 * This will modify the BlockDriverState fields, and swap contents 2205 * between bs_new and bs_top. Both bs_new and bs_top are modified. 2206 * 2207 * bs_new must not be attached to a BlockBackend. 2208 * 2209 * This function does not create any image files. 2210 * 2211 * bdrv_append() takes ownership of a bs_new reference and unrefs it because 2212 * that's what the callers commonly need. bs_new will be referenced by the old 2213 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a 2214 * reference of its own, it must call bdrv_ref(). 2215 */ 2216 void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top) 2217 { 2218 assert(!bdrv_requests_pending(bs_top)); 2219 assert(!bdrv_requests_pending(bs_new)); 2220 2221 bdrv_ref(bs_top); 2222 change_parent_backing_link(bs_top, bs_new); 2223 2224 /* Some fields always stay on top of the backing file chain */ 2225 swap_feature_fields(bs_top, bs_new); 2226 2227 bdrv_set_backing_hd(bs_new, bs_top); 2228 bdrv_unref(bs_top); 2229 2230 /* bs_new is now referenced by its new parents, we don't need the 2231 * additional reference any more. */ 2232 bdrv_unref(bs_new); 2233 } 2234 2235 static void bdrv_delete(BlockDriverState *bs) 2236 { 2237 assert(!bs->job); 2238 assert(bdrv_op_blocker_is_empty(bs)); 2239 assert(!bs->refcnt); 2240 assert(QLIST_EMPTY(&bs->dirty_bitmaps)); 2241 2242 bdrv_close(bs); 2243 2244 /* remove from list, if necessary */ 2245 bdrv_make_anon(bs); 2246 2247 g_free(bs); 2248 } 2249 2250 /* 2251 * Run consistency checks on an image 2252 * 2253 * Returns 0 if the check could be completed (it doesn't mean that the image is 2254 * free of errors) or -errno when an internal error occurred. The results of the 2255 * check are stored in res. 2256 */ 2257 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) 2258 { 2259 if (bs->drv == NULL) { 2260 return -ENOMEDIUM; 2261 } 2262 if (bs->drv->bdrv_check == NULL) { 2263 return -ENOTSUP; 2264 } 2265 2266 memset(res, 0, sizeof(*res)); 2267 return bs->drv->bdrv_check(bs, res, fix); 2268 } 2269 2270 #define COMMIT_BUF_SECTORS 2048 2271 2272 /* commit COW file into the raw image */ 2273 int bdrv_commit(BlockDriverState *bs) 2274 { 2275 BlockDriver *drv = bs->drv; 2276 int64_t sector, total_sectors, length, backing_length; 2277 int n, ro, open_flags; 2278 int ret = 0; 2279 uint8_t *buf = NULL; 2280 2281 if (!drv) 2282 return -ENOMEDIUM; 2283 2284 if (!bs->backing) { 2285 return -ENOTSUP; 2286 } 2287 2288 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) || 2289 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) { 2290 return -EBUSY; 2291 } 2292 2293 ro = bs->backing->bs->read_only; 2294 open_flags = bs->backing->bs->open_flags; 2295 2296 if (ro) { 2297 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) { 2298 return -EACCES; 2299 } 2300 } 2301 2302 length = bdrv_getlength(bs); 2303 if (length < 0) { 2304 ret = length; 2305 goto ro_cleanup; 2306 } 2307 2308 backing_length = bdrv_getlength(bs->backing->bs); 2309 if (backing_length < 0) { 2310 ret = backing_length; 2311 goto ro_cleanup; 2312 } 2313 2314 /* If our top snapshot is larger than the backing file image, 2315 * grow the backing file image if possible. If not possible, 2316 * we must return an error */ 2317 if (length > backing_length) { 2318 ret = bdrv_truncate(bs->backing->bs, length); 2319 if (ret < 0) { 2320 goto ro_cleanup; 2321 } 2322 } 2323 2324 total_sectors = length >> BDRV_SECTOR_BITS; 2325 2326 /* qemu_try_blockalign() for bs will choose an alignment that works for 2327 * bs->backing->bs as well, so no need to compare the alignment manually. */ 2328 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE); 2329 if (buf == NULL) { 2330 ret = -ENOMEM; 2331 goto ro_cleanup; 2332 } 2333 2334 for (sector = 0; sector < total_sectors; sector += n) { 2335 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n); 2336 if (ret < 0) { 2337 goto ro_cleanup; 2338 } 2339 if (ret) { 2340 ret = bdrv_read(bs, sector, buf, n); 2341 if (ret < 0) { 2342 goto ro_cleanup; 2343 } 2344 2345 ret = bdrv_write(bs->backing->bs, sector, buf, n); 2346 if (ret < 0) { 2347 goto ro_cleanup; 2348 } 2349 } 2350 } 2351 2352 if (drv->bdrv_make_empty) { 2353 ret = drv->bdrv_make_empty(bs); 2354 if (ret < 0) { 2355 goto ro_cleanup; 2356 } 2357 bdrv_flush(bs); 2358 } 2359 2360 /* 2361 * Make sure all data we wrote to the backing device is actually 2362 * stable on disk. 2363 */ 2364 if (bs->backing) { 2365 bdrv_flush(bs->backing->bs); 2366 } 2367 2368 ret = 0; 2369 ro_cleanup: 2370 qemu_vfree(buf); 2371 2372 if (ro) { 2373 /* ignoring error return here */ 2374 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL); 2375 } 2376 2377 return ret; 2378 } 2379 2380 int bdrv_commit_all(void) 2381 { 2382 BlockDriverState *bs; 2383 2384 QTAILQ_FOREACH(bs, &bdrv_states, device_list) { 2385 AioContext *aio_context = bdrv_get_aio_context(bs); 2386 2387 aio_context_acquire(aio_context); 2388 if (bs->drv && bs->backing) { 2389 int ret = bdrv_commit(bs); 2390 if (ret < 0) { 2391 aio_context_release(aio_context); 2392 return ret; 2393 } 2394 } 2395 aio_context_release(aio_context); 2396 } 2397 return 0; 2398 } 2399 2400 /* 2401 * Return values: 2402 * 0 - success 2403 * -EINVAL - backing format specified, but no file 2404 * -ENOSPC - can't update the backing file because no space is left in the 2405 * image file header 2406 * -ENOTSUP - format driver doesn't support changing the backing file 2407 */ 2408 int bdrv_change_backing_file(BlockDriverState *bs, 2409 const char *backing_file, const char *backing_fmt) 2410 { 2411 BlockDriver *drv = bs->drv; 2412 int ret; 2413 2414 /* Backing file format doesn't make sense without a backing file */ 2415 if (backing_fmt && !backing_file) { 2416 return -EINVAL; 2417 } 2418 2419 if (drv->bdrv_change_backing_file != NULL) { 2420 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt); 2421 } else { 2422 ret = -ENOTSUP; 2423 } 2424 2425 if (ret == 0) { 2426 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: ""); 2427 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: ""); 2428 } 2429 return ret; 2430 } 2431 2432 /* 2433 * Finds the image layer in the chain that has 'bs' as its backing file. 2434 * 2435 * active is the current topmost image. 2436 * 2437 * Returns NULL if bs is not found in active's image chain, 2438 * or if active == bs. 2439 * 2440 * Returns the bottommost base image if bs == NULL. 2441 */ 2442 BlockDriverState *bdrv_find_overlay(BlockDriverState *active, 2443 BlockDriverState *bs) 2444 { 2445 while (active && bs != backing_bs(active)) { 2446 active = backing_bs(active); 2447 } 2448 2449 return active; 2450 } 2451 2452 /* Given a BDS, searches for the base layer. */ 2453 BlockDriverState *bdrv_find_base(BlockDriverState *bs) 2454 { 2455 return bdrv_find_overlay(bs, NULL); 2456 } 2457 2458 /* 2459 * Drops images above 'base' up to and including 'top', and sets the image 2460 * above 'top' to have base as its backing file. 2461 * 2462 * Requires that the overlay to 'top' is opened r/w, so that the backing file 2463 * information in 'bs' can be properly updated. 2464 * 2465 * E.g., this will convert the following chain: 2466 * bottom <- base <- intermediate <- top <- active 2467 * 2468 * to 2469 * 2470 * bottom <- base <- active 2471 * 2472 * It is allowed for bottom==base, in which case it converts: 2473 * 2474 * base <- intermediate <- top <- active 2475 * 2476 * to 2477 * 2478 * base <- active 2479 * 2480 * If backing_file_str is non-NULL, it will be used when modifying top's 2481 * overlay image metadata. 2482 * 2483 * Error conditions: 2484 * if active == top, that is considered an error 2485 * 2486 */ 2487 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, 2488 BlockDriverState *base, const char *backing_file_str) 2489 { 2490 BlockDriverState *new_top_bs = NULL; 2491 int ret = -EIO; 2492 2493 if (!top->drv || !base->drv) { 2494 goto exit; 2495 } 2496 2497 new_top_bs = bdrv_find_overlay(active, top); 2498 2499 if (new_top_bs == NULL) { 2500 /* we could not find the image above 'top', this is an error */ 2501 goto exit; 2502 } 2503 2504 /* special case of new_top_bs->backing->bs already pointing to base - nothing 2505 * to do, no intermediate images */ 2506 if (backing_bs(new_top_bs) == base) { 2507 ret = 0; 2508 goto exit; 2509 } 2510 2511 /* Make sure that base is in the backing chain of top */ 2512 if (!bdrv_chain_contains(top, base)) { 2513 goto exit; 2514 } 2515 2516 /* success - we can delete the intermediate states, and link top->base */ 2517 backing_file_str = backing_file_str ? backing_file_str : base->filename; 2518 ret = bdrv_change_backing_file(new_top_bs, backing_file_str, 2519 base->drv ? base->drv->format_name : ""); 2520 if (ret) { 2521 goto exit; 2522 } 2523 bdrv_set_backing_hd(new_top_bs, base); 2524 2525 ret = 0; 2526 exit: 2527 return ret; 2528 } 2529 2530 /** 2531 * Truncate file to 'offset' bytes (needed only for file protocols) 2532 */ 2533 int bdrv_truncate(BlockDriverState *bs, int64_t offset) 2534 { 2535 BlockDriver *drv = bs->drv; 2536 int ret; 2537 if (!drv) 2538 return -ENOMEDIUM; 2539 if (!drv->bdrv_truncate) 2540 return -ENOTSUP; 2541 if (bs->read_only) 2542 return -EACCES; 2543 2544 ret = drv->bdrv_truncate(bs, offset); 2545 if (ret == 0) { 2546 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS); 2547 bdrv_dirty_bitmap_truncate(bs); 2548 if (bs->blk) { 2549 blk_dev_resize_cb(bs->blk); 2550 } 2551 } 2552 return ret; 2553 } 2554 2555 /** 2556 * Length of a allocated file in bytes. Sparse files are counted by actual 2557 * allocated space. Return < 0 if error or unknown. 2558 */ 2559 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs) 2560 { 2561 BlockDriver *drv = bs->drv; 2562 if (!drv) { 2563 return -ENOMEDIUM; 2564 } 2565 if (drv->bdrv_get_allocated_file_size) { 2566 return drv->bdrv_get_allocated_file_size(bs); 2567 } 2568 if (bs->file) { 2569 return bdrv_get_allocated_file_size(bs->file->bs); 2570 } 2571 return -ENOTSUP; 2572 } 2573 2574 /** 2575 * Return number of sectors on success, -errno on error. 2576 */ 2577 int64_t bdrv_nb_sectors(BlockDriverState *bs) 2578 { 2579 BlockDriver *drv = bs->drv; 2580 2581 if (!drv) 2582 return -ENOMEDIUM; 2583 2584 if (drv->has_variable_length) { 2585 int ret = refresh_total_sectors(bs, bs->total_sectors); 2586 if (ret < 0) { 2587 return ret; 2588 } 2589 } 2590 return bs->total_sectors; 2591 } 2592 2593 /** 2594 * Return length in bytes on success, -errno on error. 2595 * The length is always a multiple of BDRV_SECTOR_SIZE. 2596 */ 2597 int64_t bdrv_getlength(BlockDriverState *bs) 2598 { 2599 int64_t ret = bdrv_nb_sectors(bs); 2600 2601 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret; 2602 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE; 2603 } 2604 2605 /* return 0 as number of sectors if no device present or error */ 2606 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr) 2607 { 2608 int64_t nb_sectors = bdrv_nb_sectors(bs); 2609 2610 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors; 2611 } 2612 2613 void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error, 2614 BlockdevOnError on_write_error) 2615 { 2616 bs->on_read_error = on_read_error; 2617 bs->on_write_error = on_write_error; 2618 } 2619 2620 BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read) 2621 { 2622 return is_read ? bs->on_read_error : bs->on_write_error; 2623 } 2624 2625 BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error) 2626 { 2627 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error; 2628 2629 switch (on_err) { 2630 case BLOCKDEV_ON_ERROR_ENOSPC: 2631 return (error == ENOSPC) ? 2632 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT; 2633 case BLOCKDEV_ON_ERROR_STOP: 2634 return BLOCK_ERROR_ACTION_STOP; 2635 case BLOCKDEV_ON_ERROR_REPORT: 2636 return BLOCK_ERROR_ACTION_REPORT; 2637 case BLOCKDEV_ON_ERROR_IGNORE: 2638 return BLOCK_ERROR_ACTION_IGNORE; 2639 default: 2640 abort(); 2641 } 2642 } 2643 2644 static void send_qmp_error_event(BlockDriverState *bs, 2645 BlockErrorAction action, 2646 bool is_read, int error) 2647 { 2648 IoOperationType optype; 2649 2650 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE; 2651 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action, 2652 bdrv_iostatus_is_enabled(bs), 2653 error == ENOSPC, strerror(error), 2654 &error_abort); 2655 } 2656 2657 /* This is done by device models because, while the block layer knows 2658 * about the error, it does not know whether an operation comes from 2659 * the device or the block layer (from a job, for example). 2660 */ 2661 void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action, 2662 bool is_read, int error) 2663 { 2664 assert(error >= 0); 2665 2666 if (action == BLOCK_ERROR_ACTION_STOP) { 2667 /* First set the iostatus, so that "info block" returns an iostatus 2668 * that matches the events raised so far (an additional error iostatus 2669 * is fine, but not a lost one). 2670 */ 2671 bdrv_iostatus_set_err(bs, error); 2672 2673 /* Then raise the request to stop the VM and the event. 2674 * qemu_system_vmstop_request_prepare has two effects. First, 2675 * it ensures that the STOP event always comes after the 2676 * BLOCK_IO_ERROR event. Second, it ensures that even if management 2677 * can observe the STOP event and do a "cont" before the STOP 2678 * event is issued, the VM will not stop. In this case, vm_start() 2679 * also ensures that the STOP/RESUME pair of events is emitted. 2680 */ 2681 qemu_system_vmstop_request_prepare(); 2682 send_qmp_error_event(bs, action, is_read, error); 2683 qemu_system_vmstop_request(RUN_STATE_IO_ERROR); 2684 } else { 2685 send_qmp_error_event(bs, action, is_read, error); 2686 } 2687 } 2688 2689 int bdrv_is_read_only(BlockDriverState *bs) 2690 { 2691 return bs->read_only; 2692 } 2693 2694 int bdrv_is_sg(BlockDriverState *bs) 2695 { 2696 return bs->sg; 2697 } 2698 2699 int bdrv_enable_write_cache(BlockDriverState *bs) 2700 { 2701 return bs->enable_write_cache; 2702 } 2703 2704 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce) 2705 { 2706 bs->enable_write_cache = wce; 2707 2708 /* so a reopen() will preserve wce */ 2709 if (wce) { 2710 bs->open_flags |= BDRV_O_CACHE_WB; 2711 } else { 2712 bs->open_flags &= ~BDRV_O_CACHE_WB; 2713 } 2714 } 2715 2716 int bdrv_is_encrypted(BlockDriverState *bs) 2717 { 2718 if (bs->backing && bs->backing->bs->encrypted) { 2719 return 1; 2720 } 2721 return bs->encrypted; 2722 } 2723 2724 int bdrv_key_required(BlockDriverState *bs) 2725 { 2726 BdrvChild *backing = bs->backing; 2727 2728 if (backing && backing->bs->encrypted && !backing->bs->valid_key) { 2729 return 1; 2730 } 2731 return (bs->encrypted && !bs->valid_key); 2732 } 2733 2734 int bdrv_set_key(BlockDriverState *bs, const char *key) 2735 { 2736 int ret; 2737 if (bs->backing && bs->backing->bs->encrypted) { 2738 ret = bdrv_set_key(bs->backing->bs, key); 2739 if (ret < 0) 2740 return ret; 2741 if (!bs->encrypted) 2742 return 0; 2743 } 2744 if (!bs->encrypted) { 2745 return -EINVAL; 2746 } else if (!bs->drv || !bs->drv->bdrv_set_key) { 2747 return -ENOMEDIUM; 2748 } 2749 ret = bs->drv->bdrv_set_key(bs, key); 2750 if (ret < 0) { 2751 bs->valid_key = 0; 2752 } else if (!bs->valid_key) { 2753 bs->valid_key = 1; 2754 if (bs->blk) { 2755 /* call the change callback now, we skipped it on open */ 2756 blk_dev_change_media_cb(bs->blk, true); 2757 } 2758 } 2759 return ret; 2760 } 2761 2762 /* 2763 * Provide an encryption key for @bs. 2764 * If @key is non-null: 2765 * If @bs is not encrypted, fail. 2766 * Else if the key is invalid, fail. 2767 * Else set @bs's key to @key, replacing the existing key, if any. 2768 * If @key is null: 2769 * If @bs is encrypted and still lacks a key, fail. 2770 * Else do nothing. 2771 * On failure, store an error object through @errp if non-null. 2772 */ 2773 void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp) 2774 { 2775 if (key) { 2776 if (!bdrv_is_encrypted(bs)) { 2777 error_setg(errp, "Node '%s' is not encrypted", 2778 bdrv_get_device_or_node_name(bs)); 2779 } else if (bdrv_set_key(bs, key) < 0) { 2780 error_setg(errp, QERR_INVALID_PASSWORD); 2781 } 2782 } else { 2783 if (bdrv_key_required(bs)) { 2784 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED, 2785 "'%s' (%s) is encrypted", 2786 bdrv_get_device_or_node_name(bs), 2787 bdrv_get_encrypted_filename(bs)); 2788 } 2789 } 2790 } 2791 2792 const char *bdrv_get_format_name(BlockDriverState *bs) 2793 { 2794 return bs->drv ? bs->drv->format_name : NULL; 2795 } 2796 2797 static int qsort_strcmp(const void *a, const void *b) 2798 { 2799 return strcmp(a, b); 2800 } 2801 2802 void bdrv_iterate_format(void (*it)(void *opaque, const char *name), 2803 void *opaque) 2804 { 2805 BlockDriver *drv; 2806 int count = 0; 2807 int i; 2808 const char **formats = NULL; 2809 2810 QLIST_FOREACH(drv, &bdrv_drivers, list) { 2811 if (drv->format_name) { 2812 bool found = false; 2813 int i = count; 2814 while (formats && i && !found) { 2815 found = !strcmp(formats[--i], drv->format_name); 2816 } 2817 2818 if (!found) { 2819 formats = g_renew(const char *, formats, count + 1); 2820 formats[count++] = drv->format_name; 2821 } 2822 } 2823 } 2824 2825 qsort(formats, count, sizeof(formats[0]), qsort_strcmp); 2826 2827 for (i = 0; i < count; i++) { 2828 it(opaque, formats[i]); 2829 } 2830 2831 g_free(formats); 2832 } 2833 2834 /* This function is to find a node in the bs graph */ 2835 BlockDriverState *bdrv_find_node(const char *node_name) 2836 { 2837 BlockDriverState *bs; 2838 2839 assert(node_name); 2840 2841 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) { 2842 if (!strcmp(node_name, bs->node_name)) { 2843 return bs; 2844 } 2845 } 2846 return NULL; 2847 } 2848 2849 /* Put this QMP function here so it can access the static graph_bdrv_states. */ 2850 BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp) 2851 { 2852 BlockDeviceInfoList *list, *entry; 2853 BlockDriverState *bs; 2854 2855 list = NULL; 2856 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) { 2857 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp); 2858 if (!info) { 2859 qapi_free_BlockDeviceInfoList(list); 2860 return NULL; 2861 } 2862 entry = g_malloc0(sizeof(*entry)); 2863 entry->value = info; 2864 entry->next = list; 2865 list = entry; 2866 } 2867 2868 return list; 2869 } 2870 2871 BlockDriverState *bdrv_lookup_bs(const char *device, 2872 const char *node_name, 2873 Error **errp) 2874 { 2875 BlockBackend *blk; 2876 BlockDriverState *bs; 2877 2878 if (device) { 2879 blk = blk_by_name(device); 2880 2881 if (blk) { 2882 return blk_bs(blk); 2883 } 2884 } 2885 2886 if (node_name) { 2887 bs = bdrv_find_node(node_name); 2888 2889 if (bs) { 2890 return bs; 2891 } 2892 } 2893 2894 error_setg(errp, "Cannot find device=%s nor node_name=%s", 2895 device ? device : "", 2896 node_name ? node_name : ""); 2897 return NULL; 2898 } 2899 2900 /* If 'base' is in the same chain as 'top', return true. Otherwise, 2901 * return false. If either argument is NULL, return false. */ 2902 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base) 2903 { 2904 while (top && top != base) { 2905 top = backing_bs(top); 2906 } 2907 2908 return top != NULL; 2909 } 2910 2911 BlockDriverState *bdrv_next_node(BlockDriverState *bs) 2912 { 2913 if (!bs) { 2914 return QTAILQ_FIRST(&graph_bdrv_states); 2915 } 2916 return QTAILQ_NEXT(bs, node_list); 2917 } 2918 2919 BlockDriverState *bdrv_next(BlockDriverState *bs) 2920 { 2921 if (!bs) { 2922 return QTAILQ_FIRST(&bdrv_states); 2923 } 2924 return QTAILQ_NEXT(bs, device_list); 2925 } 2926 2927 const char *bdrv_get_node_name(const BlockDriverState *bs) 2928 { 2929 return bs->node_name; 2930 } 2931 2932 /* TODO check what callers really want: bs->node_name or blk_name() */ 2933 const char *bdrv_get_device_name(const BlockDriverState *bs) 2934 { 2935 return bs->blk ? blk_name(bs->blk) : ""; 2936 } 2937 2938 /* This can be used to identify nodes that might not have a device 2939 * name associated. Since node and device names live in the same 2940 * namespace, the result is unambiguous. The exception is if both are 2941 * absent, then this returns an empty (non-null) string. */ 2942 const char *bdrv_get_device_or_node_name(const BlockDriverState *bs) 2943 { 2944 return bs->blk ? blk_name(bs->blk) : bs->node_name; 2945 } 2946 2947 int bdrv_get_flags(BlockDriverState *bs) 2948 { 2949 return bs->open_flags; 2950 } 2951 2952 int bdrv_has_zero_init_1(BlockDriverState *bs) 2953 { 2954 return 1; 2955 } 2956 2957 int bdrv_has_zero_init(BlockDriverState *bs) 2958 { 2959 assert(bs->drv); 2960 2961 /* If BS is a copy on write image, it is initialized to 2962 the contents of the base image, which may not be zeroes. */ 2963 if (bs->backing) { 2964 return 0; 2965 } 2966 if (bs->drv->bdrv_has_zero_init) { 2967 return bs->drv->bdrv_has_zero_init(bs); 2968 } 2969 2970 /* safe default */ 2971 return 0; 2972 } 2973 2974 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs) 2975 { 2976 BlockDriverInfo bdi; 2977 2978 if (bs->backing) { 2979 return false; 2980 } 2981 2982 if (bdrv_get_info(bs, &bdi) == 0) { 2983 return bdi.unallocated_blocks_are_zero; 2984 } 2985 2986 return false; 2987 } 2988 2989 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs) 2990 { 2991 BlockDriverInfo bdi; 2992 2993 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) { 2994 return false; 2995 } 2996 2997 if (bdrv_get_info(bs, &bdi) == 0) { 2998 return bdi.can_write_zeroes_with_unmap; 2999 } 3000 3001 return false; 3002 } 3003 3004 const char *bdrv_get_encrypted_filename(BlockDriverState *bs) 3005 { 3006 if (bs->backing && bs->backing->bs->encrypted) 3007 return bs->backing_file; 3008 else if (bs->encrypted) 3009 return bs->filename; 3010 else 3011 return NULL; 3012 } 3013 3014 void bdrv_get_backing_filename(BlockDriverState *bs, 3015 char *filename, int filename_size) 3016 { 3017 pstrcpy(filename, filename_size, bs->backing_file); 3018 } 3019 3020 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) 3021 { 3022 BlockDriver *drv = bs->drv; 3023 if (!drv) 3024 return -ENOMEDIUM; 3025 if (!drv->bdrv_get_info) 3026 return -ENOTSUP; 3027 memset(bdi, 0, sizeof(*bdi)); 3028 return drv->bdrv_get_info(bs, bdi); 3029 } 3030 3031 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs) 3032 { 3033 BlockDriver *drv = bs->drv; 3034 if (drv && drv->bdrv_get_specific_info) { 3035 return drv->bdrv_get_specific_info(bs); 3036 } 3037 return NULL; 3038 } 3039 3040 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event) 3041 { 3042 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) { 3043 return; 3044 } 3045 3046 bs->drv->bdrv_debug_event(bs, event); 3047 } 3048 3049 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event, 3050 const char *tag) 3051 { 3052 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) { 3053 bs = bs->file ? bs->file->bs : NULL; 3054 } 3055 3056 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) { 3057 return bs->drv->bdrv_debug_breakpoint(bs, event, tag); 3058 } 3059 3060 return -ENOTSUP; 3061 } 3062 3063 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag) 3064 { 3065 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) { 3066 bs = bs->file ? bs->file->bs : NULL; 3067 } 3068 3069 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) { 3070 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag); 3071 } 3072 3073 return -ENOTSUP; 3074 } 3075 3076 int bdrv_debug_resume(BlockDriverState *bs, const char *tag) 3077 { 3078 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) { 3079 bs = bs->file ? bs->file->bs : NULL; 3080 } 3081 3082 if (bs && bs->drv && bs->drv->bdrv_debug_resume) { 3083 return bs->drv->bdrv_debug_resume(bs, tag); 3084 } 3085 3086 return -ENOTSUP; 3087 } 3088 3089 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag) 3090 { 3091 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) { 3092 bs = bs->file ? bs->file->bs : NULL; 3093 } 3094 3095 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) { 3096 return bs->drv->bdrv_debug_is_suspended(bs, tag); 3097 } 3098 3099 return false; 3100 } 3101 3102 int bdrv_is_snapshot(BlockDriverState *bs) 3103 { 3104 return !!(bs->open_flags & BDRV_O_SNAPSHOT); 3105 } 3106 3107 /* backing_file can either be relative, or absolute, or a protocol. If it is 3108 * relative, it must be relative to the chain. So, passing in bs->filename 3109 * from a BDS as backing_file should not be done, as that may be relative to 3110 * the CWD rather than the chain. */ 3111 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, 3112 const char *backing_file) 3113 { 3114 char *filename_full = NULL; 3115 char *backing_file_full = NULL; 3116 char *filename_tmp = NULL; 3117 int is_protocol = 0; 3118 BlockDriverState *curr_bs = NULL; 3119 BlockDriverState *retval = NULL; 3120 3121 if (!bs || !bs->drv || !backing_file) { 3122 return NULL; 3123 } 3124 3125 filename_full = g_malloc(PATH_MAX); 3126 backing_file_full = g_malloc(PATH_MAX); 3127 filename_tmp = g_malloc(PATH_MAX); 3128 3129 is_protocol = path_has_protocol(backing_file); 3130 3131 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) { 3132 3133 /* If either of the filename paths is actually a protocol, then 3134 * compare unmodified paths; otherwise make paths relative */ 3135 if (is_protocol || path_has_protocol(curr_bs->backing_file)) { 3136 if (strcmp(backing_file, curr_bs->backing_file) == 0) { 3137 retval = curr_bs->backing->bs; 3138 break; 3139 } 3140 } else { 3141 /* If not an absolute filename path, make it relative to the current 3142 * image's filename path */ 3143 path_combine(filename_tmp, PATH_MAX, curr_bs->filename, 3144 backing_file); 3145 3146 /* We are going to compare absolute pathnames */ 3147 if (!realpath(filename_tmp, filename_full)) { 3148 continue; 3149 } 3150 3151 /* We need to make sure the backing filename we are comparing against 3152 * is relative to the current image filename (or absolute) */ 3153 path_combine(filename_tmp, PATH_MAX, curr_bs->filename, 3154 curr_bs->backing_file); 3155 3156 if (!realpath(filename_tmp, backing_file_full)) { 3157 continue; 3158 } 3159 3160 if (strcmp(backing_file_full, filename_full) == 0) { 3161 retval = curr_bs->backing->bs; 3162 break; 3163 } 3164 } 3165 } 3166 3167 g_free(filename_full); 3168 g_free(backing_file_full); 3169 g_free(filename_tmp); 3170 return retval; 3171 } 3172 3173 int bdrv_get_backing_file_depth(BlockDriverState *bs) 3174 { 3175 if (!bs->drv) { 3176 return 0; 3177 } 3178 3179 if (!bs->backing) { 3180 return 0; 3181 } 3182 3183 return 1 + bdrv_get_backing_file_depth(bs->backing->bs); 3184 } 3185 3186 void bdrv_init(void) 3187 { 3188 module_call_init(MODULE_INIT_BLOCK); 3189 } 3190 3191 void bdrv_init_with_whitelist(void) 3192 { 3193 use_bdrv_whitelist = 1; 3194 bdrv_init(); 3195 } 3196 3197 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp) 3198 { 3199 Error *local_err = NULL; 3200 int ret; 3201 3202 if (!bs->drv) { 3203 return; 3204 } 3205 3206 if (!(bs->open_flags & BDRV_O_INCOMING)) { 3207 return; 3208 } 3209 bs->open_flags &= ~BDRV_O_INCOMING; 3210 3211 if (bs->drv->bdrv_invalidate_cache) { 3212 bs->drv->bdrv_invalidate_cache(bs, &local_err); 3213 } else if (bs->file) { 3214 bdrv_invalidate_cache(bs->file->bs, &local_err); 3215 } 3216 if (local_err) { 3217 error_propagate(errp, local_err); 3218 return; 3219 } 3220 3221 ret = refresh_total_sectors(bs, bs->total_sectors); 3222 if (ret < 0) { 3223 error_setg_errno(errp, -ret, "Could not refresh total sector count"); 3224 return; 3225 } 3226 } 3227 3228 void bdrv_invalidate_cache_all(Error **errp) 3229 { 3230 BlockDriverState *bs; 3231 Error *local_err = NULL; 3232 3233 QTAILQ_FOREACH(bs, &bdrv_states, device_list) { 3234 AioContext *aio_context = bdrv_get_aio_context(bs); 3235 3236 aio_context_acquire(aio_context); 3237 bdrv_invalidate_cache(bs, &local_err); 3238 aio_context_release(aio_context); 3239 if (local_err) { 3240 error_propagate(errp, local_err); 3241 return; 3242 } 3243 } 3244 } 3245 3246 /**************************************************************/ 3247 /* removable device support */ 3248 3249 /** 3250 * Return TRUE if the media is present 3251 */ 3252 int bdrv_is_inserted(BlockDriverState *bs) 3253 { 3254 BlockDriver *drv = bs->drv; 3255 3256 if (!drv) 3257 return 0; 3258 if (!drv->bdrv_is_inserted) 3259 return 1; 3260 return drv->bdrv_is_inserted(bs); 3261 } 3262 3263 /** 3264 * Return whether the media changed since the last call to this 3265 * function, or -ENOTSUP if we don't know. Most drivers don't know. 3266 */ 3267 int bdrv_media_changed(BlockDriverState *bs) 3268 { 3269 BlockDriver *drv = bs->drv; 3270 3271 if (drv && drv->bdrv_media_changed) { 3272 return drv->bdrv_media_changed(bs); 3273 } 3274 return -ENOTSUP; 3275 } 3276 3277 /** 3278 * If eject_flag is TRUE, eject the media. Otherwise, close the tray 3279 */ 3280 void bdrv_eject(BlockDriverState *bs, bool eject_flag) 3281 { 3282 BlockDriver *drv = bs->drv; 3283 const char *device_name; 3284 3285 if (drv && drv->bdrv_eject) { 3286 drv->bdrv_eject(bs, eject_flag); 3287 } 3288 3289 device_name = bdrv_get_device_name(bs); 3290 if (device_name[0] != '\0') { 3291 qapi_event_send_device_tray_moved(device_name, 3292 eject_flag, &error_abort); 3293 } 3294 } 3295 3296 /** 3297 * Lock or unlock the media (if it is locked, the user won't be able 3298 * to eject it manually). 3299 */ 3300 void bdrv_lock_medium(BlockDriverState *bs, bool locked) 3301 { 3302 BlockDriver *drv = bs->drv; 3303 3304 trace_bdrv_lock_medium(bs, locked); 3305 3306 if (drv && drv->bdrv_lock_medium) { 3307 drv->bdrv_lock_medium(bs, locked); 3308 } 3309 } 3310 3311 void bdrv_set_guest_block_size(BlockDriverState *bs, int align) 3312 { 3313 bs->guest_block_size = align; 3314 } 3315 3316 BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name) 3317 { 3318 BdrvDirtyBitmap *bm; 3319 3320 assert(name); 3321 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) { 3322 if (bm->name && !strcmp(name, bm->name)) { 3323 return bm; 3324 } 3325 } 3326 return NULL; 3327 } 3328 3329 void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap) 3330 { 3331 assert(!bdrv_dirty_bitmap_frozen(bitmap)); 3332 g_free(bitmap->name); 3333 bitmap->name = NULL; 3334 } 3335 3336 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, 3337 uint32_t granularity, 3338 const char *name, 3339 Error **errp) 3340 { 3341 int64_t bitmap_size; 3342 BdrvDirtyBitmap *bitmap; 3343 uint32_t sector_granularity; 3344 3345 assert((granularity & (granularity - 1)) == 0); 3346 3347 if (name && bdrv_find_dirty_bitmap(bs, name)) { 3348 error_setg(errp, "Bitmap already exists: %s", name); 3349 return NULL; 3350 } 3351 sector_granularity = granularity >> BDRV_SECTOR_BITS; 3352 assert(sector_granularity); 3353 bitmap_size = bdrv_nb_sectors(bs); 3354 if (bitmap_size < 0) { 3355 error_setg_errno(errp, -bitmap_size, "could not get length of device"); 3356 errno = -bitmap_size; 3357 return NULL; 3358 } 3359 bitmap = g_new0(BdrvDirtyBitmap, 1); 3360 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity)); 3361 bitmap->size = bitmap_size; 3362 bitmap->name = g_strdup(name); 3363 bitmap->disabled = false; 3364 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list); 3365 return bitmap; 3366 } 3367 3368 bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap) 3369 { 3370 return bitmap->successor; 3371 } 3372 3373 bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap) 3374 { 3375 return !(bitmap->disabled || bitmap->successor); 3376 } 3377 3378 DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap) 3379 { 3380 if (bdrv_dirty_bitmap_frozen(bitmap)) { 3381 return DIRTY_BITMAP_STATUS_FROZEN; 3382 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) { 3383 return DIRTY_BITMAP_STATUS_DISABLED; 3384 } else { 3385 return DIRTY_BITMAP_STATUS_ACTIVE; 3386 } 3387 } 3388 3389 /** 3390 * Create a successor bitmap destined to replace this bitmap after an operation. 3391 * Requires that the bitmap is not frozen and has no successor. 3392 */ 3393 int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs, 3394 BdrvDirtyBitmap *bitmap, Error **errp) 3395 { 3396 uint64_t granularity; 3397 BdrvDirtyBitmap *child; 3398 3399 if (bdrv_dirty_bitmap_frozen(bitmap)) { 3400 error_setg(errp, "Cannot create a successor for a bitmap that is " 3401 "currently frozen"); 3402 return -1; 3403 } 3404 assert(!bitmap->successor); 3405 3406 /* Create an anonymous successor */ 3407 granularity = bdrv_dirty_bitmap_granularity(bitmap); 3408 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp); 3409 if (!child) { 3410 return -1; 3411 } 3412 3413 /* Successor will be on or off based on our current state. */ 3414 child->disabled = bitmap->disabled; 3415 3416 /* Install the successor and freeze the parent */ 3417 bitmap->successor = child; 3418 return 0; 3419 } 3420 3421 /** 3422 * For a bitmap with a successor, yield our name to the successor, 3423 * delete the old bitmap, and return a handle to the new bitmap. 3424 */ 3425 BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs, 3426 BdrvDirtyBitmap *bitmap, 3427 Error **errp) 3428 { 3429 char *name; 3430 BdrvDirtyBitmap *successor = bitmap->successor; 3431 3432 if (successor == NULL) { 3433 error_setg(errp, "Cannot relinquish control if " 3434 "there's no successor present"); 3435 return NULL; 3436 } 3437 3438 name = bitmap->name; 3439 bitmap->name = NULL; 3440 successor->name = name; 3441 bitmap->successor = NULL; 3442 bdrv_release_dirty_bitmap(bs, bitmap); 3443 3444 return successor; 3445 } 3446 3447 /** 3448 * In cases of failure where we can no longer safely delete the parent, 3449 * we may wish to re-join the parent and child/successor. 3450 * The merged parent will be un-frozen, but not explicitly re-enabled. 3451 */ 3452 BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs, 3453 BdrvDirtyBitmap *parent, 3454 Error **errp) 3455 { 3456 BdrvDirtyBitmap *successor = parent->successor; 3457 3458 if (!successor) { 3459 error_setg(errp, "Cannot reclaim a successor when none is present"); 3460 return NULL; 3461 } 3462 3463 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) { 3464 error_setg(errp, "Merging of parent and successor bitmap failed"); 3465 return NULL; 3466 } 3467 bdrv_release_dirty_bitmap(bs, successor); 3468 parent->successor = NULL; 3469 3470 return parent; 3471 } 3472 3473 /** 3474 * Truncates _all_ bitmaps attached to a BDS. 3475 */ 3476 static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs) 3477 { 3478 BdrvDirtyBitmap *bitmap; 3479 uint64_t size = bdrv_nb_sectors(bs); 3480 3481 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) { 3482 assert(!bdrv_dirty_bitmap_frozen(bitmap)); 3483 hbitmap_truncate(bitmap->bitmap, size); 3484 bitmap->size = size; 3485 } 3486 } 3487 3488 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap) 3489 { 3490 BdrvDirtyBitmap *bm, *next; 3491 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) { 3492 if (bm == bitmap) { 3493 assert(!bdrv_dirty_bitmap_frozen(bm)); 3494 QLIST_REMOVE(bitmap, list); 3495 hbitmap_free(bitmap->bitmap); 3496 g_free(bitmap->name); 3497 g_free(bitmap); 3498 return; 3499 } 3500 } 3501 } 3502 3503 void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap) 3504 { 3505 assert(!bdrv_dirty_bitmap_frozen(bitmap)); 3506 bitmap->disabled = true; 3507 } 3508 3509 void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap) 3510 { 3511 assert(!bdrv_dirty_bitmap_frozen(bitmap)); 3512 bitmap->disabled = false; 3513 } 3514 3515 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs) 3516 { 3517 BdrvDirtyBitmap *bm; 3518 BlockDirtyInfoList *list = NULL; 3519 BlockDirtyInfoList **plist = &list; 3520 3521 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) { 3522 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1); 3523 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1); 3524 info->count = bdrv_get_dirty_count(bm); 3525 info->granularity = bdrv_dirty_bitmap_granularity(bm); 3526 info->has_name = !!bm->name; 3527 info->name = g_strdup(bm->name); 3528 info->status = bdrv_dirty_bitmap_status(bm); 3529 entry->value = info; 3530 *plist = entry; 3531 plist = &entry->next; 3532 } 3533 3534 return list; 3535 } 3536 3537 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector) 3538 { 3539 if (bitmap) { 3540 return hbitmap_get(bitmap->bitmap, sector); 3541 } else { 3542 return 0; 3543 } 3544 } 3545 3546 /** 3547 * Chooses a default granularity based on the existing cluster size, 3548 * but clamped between [4K, 64K]. Defaults to 64K in the case that there 3549 * is no cluster size information available. 3550 */ 3551 uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs) 3552 { 3553 BlockDriverInfo bdi; 3554 uint32_t granularity; 3555 3556 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) { 3557 granularity = MAX(4096, bdi.cluster_size); 3558 granularity = MIN(65536, granularity); 3559 } else { 3560 granularity = 65536; 3561 } 3562 3563 return granularity; 3564 } 3565 3566 uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap) 3567 { 3568 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap); 3569 } 3570 3571 void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi) 3572 { 3573 hbitmap_iter_init(hbi, bitmap->bitmap, 0); 3574 } 3575 3576 void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap, 3577 int64_t cur_sector, int nr_sectors) 3578 { 3579 assert(bdrv_dirty_bitmap_enabled(bitmap)); 3580 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors); 3581 } 3582 3583 void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap, 3584 int64_t cur_sector, int nr_sectors) 3585 { 3586 assert(bdrv_dirty_bitmap_enabled(bitmap)); 3587 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors); 3588 } 3589 3590 void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap) 3591 { 3592 assert(bdrv_dirty_bitmap_enabled(bitmap)); 3593 hbitmap_reset_all(bitmap->bitmap); 3594 } 3595 3596 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, 3597 int nr_sectors) 3598 { 3599 BdrvDirtyBitmap *bitmap; 3600 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) { 3601 if (!bdrv_dirty_bitmap_enabled(bitmap)) { 3602 continue; 3603 } 3604 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors); 3605 } 3606 } 3607 3608 /** 3609 * Advance an HBitmapIter to an arbitrary offset. 3610 */ 3611 void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset) 3612 { 3613 assert(hbi->hb); 3614 hbitmap_iter_init(hbi, hbi->hb, offset); 3615 } 3616 3617 int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap) 3618 { 3619 return hbitmap_count(bitmap->bitmap); 3620 } 3621 3622 /* Get a reference to bs */ 3623 void bdrv_ref(BlockDriverState *bs) 3624 { 3625 bs->refcnt++; 3626 } 3627 3628 /* Release a previously grabbed reference to bs. 3629 * If after releasing, reference count is zero, the BlockDriverState is 3630 * deleted. */ 3631 void bdrv_unref(BlockDriverState *bs) 3632 { 3633 if (!bs) { 3634 return; 3635 } 3636 assert(bs->refcnt > 0); 3637 if (--bs->refcnt == 0) { 3638 bdrv_delete(bs); 3639 } 3640 } 3641 3642 struct BdrvOpBlocker { 3643 Error *reason; 3644 QLIST_ENTRY(BdrvOpBlocker) list; 3645 }; 3646 3647 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp) 3648 { 3649 BdrvOpBlocker *blocker; 3650 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX); 3651 if (!QLIST_EMPTY(&bs->op_blockers[op])) { 3652 blocker = QLIST_FIRST(&bs->op_blockers[op]); 3653 if (errp) { 3654 error_setg(errp, "Node '%s' is busy: %s", 3655 bdrv_get_device_or_node_name(bs), 3656 error_get_pretty(blocker->reason)); 3657 } 3658 return true; 3659 } 3660 return false; 3661 } 3662 3663 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason) 3664 { 3665 BdrvOpBlocker *blocker; 3666 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX); 3667 3668 blocker = g_new0(BdrvOpBlocker, 1); 3669 blocker->reason = reason; 3670 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list); 3671 } 3672 3673 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason) 3674 { 3675 BdrvOpBlocker *blocker, *next; 3676 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX); 3677 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) { 3678 if (blocker->reason == reason) { 3679 QLIST_REMOVE(blocker, list); 3680 g_free(blocker); 3681 } 3682 } 3683 } 3684 3685 void bdrv_op_block_all(BlockDriverState *bs, Error *reason) 3686 { 3687 int i; 3688 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) { 3689 bdrv_op_block(bs, i, reason); 3690 } 3691 } 3692 3693 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason) 3694 { 3695 int i; 3696 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) { 3697 bdrv_op_unblock(bs, i, reason); 3698 } 3699 } 3700 3701 bool bdrv_op_blocker_is_empty(BlockDriverState *bs) 3702 { 3703 int i; 3704 3705 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) { 3706 if (!QLIST_EMPTY(&bs->op_blockers[i])) { 3707 return false; 3708 } 3709 } 3710 return true; 3711 } 3712 3713 void bdrv_iostatus_enable(BlockDriverState *bs) 3714 { 3715 bs->iostatus_enabled = true; 3716 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK; 3717 } 3718 3719 /* The I/O status is only enabled if the drive explicitly 3720 * enables it _and_ the VM is configured to stop on errors */ 3721 bool bdrv_iostatus_is_enabled(const BlockDriverState *bs) 3722 { 3723 return (bs->iostatus_enabled && 3724 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC || 3725 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP || 3726 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP)); 3727 } 3728 3729 void bdrv_iostatus_disable(BlockDriverState *bs) 3730 { 3731 bs->iostatus_enabled = false; 3732 } 3733 3734 void bdrv_iostatus_reset(BlockDriverState *bs) 3735 { 3736 if (bdrv_iostatus_is_enabled(bs)) { 3737 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK; 3738 if (bs->job) { 3739 block_job_iostatus_reset(bs->job); 3740 } 3741 } 3742 } 3743 3744 void bdrv_iostatus_set_err(BlockDriverState *bs, int error) 3745 { 3746 assert(bdrv_iostatus_is_enabled(bs)); 3747 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) { 3748 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE : 3749 BLOCK_DEVICE_IO_STATUS_FAILED; 3750 } 3751 } 3752 3753 void bdrv_img_create(const char *filename, const char *fmt, 3754 const char *base_filename, const char *base_fmt, 3755 char *options, uint64_t img_size, int flags, 3756 Error **errp, bool quiet) 3757 { 3758 QemuOptsList *create_opts = NULL; 3759 QemuOpts *opts = NULL; 3760 const char *backing_fmt, *backing_file; 3761 int64_t size; 3762 BlockDriver *drv, *proto_drv; 3763 Error *local_err = NULL; 3764 int ret = 0; 3765 3766 /* Find driver and parse its options */ 3767 drv = bdrv_find_format(fmt); 3768 if (!drv) { 3769 error_setg(errp, "Unknown file format '%s'", fmt); 3770 return; 3771 } 3772 3773 proto_drv = bdrv_find_protocol(filename, true, errp); 3774 if (!proto_drv) { 3775 return; 3776 } 3777 3778 if (!drv->create_opts) { 3779 error_setg(errp, "Format driver '%s' does not support image creation", 3780 drv->format_name); 3781 return; 3782 } 3783 3784 if (!proto_drv->create_opts) { 3785 error_setg(errp, "Protocol driver '%s' does not support image creation", 3786 proto_drv->format_name); 3787 return; 3788 } 3789 3790 create_opts = qemu_opts_append(create_opts, drv->create_opts); 3791 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts); 3792 3793 /* Create parameter list with default values */ 3794 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort); 3795 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort); 3796 3797 /* Parse -o options */ 3798 if (options) { 3799 qemu_opts_do_parse(opts, options, NULL, &local_err); 3800 if (local_err) { 3801 error_report_err(local_err); 3802 local_err = NULL; 3803 error_setg(errp, "Invalid options for file format '%s'", fmt); 3804 goto out; 3805 } 3806 } 3807 3808 if (base_filename) { 3809 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err); 3810 if (local_err) { 3811 error_setg(errp, "Backing file not supported for file format '%s'", 3812 fmt); 3813 goto out; 3814 } 3815 } 3816 3817 if (base_fmt) { 3818 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err); 3819 if (local_err) { 3820 error_setg(errp, "Backing file format not supported for file " 3821 "format '%s'", fmt); 3822 goto out; 3823 } 3824 } 3825 3826 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE); 3827 if (backing_file) { 3828 if (!strcmp(filename, backing_file)) { 3829 error_setg(errp, "Error: Trying to create an image with the " 3830 "same filename as the backing file"); 3831 goto out; 3832 } 3833 } 3834 3835 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT); 3836 3837 // The size for the image must always be specified, with one exception: 3838 // If we are using a backing file, we can obtain the size from there 3839 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0); 3840 if (size == -1) { 3841 if (backing_file) { 3842 BlockDriverState *bs; 3843 char *full_backing = g_new0(char, PATH_MAX); 3844 int64_t size; 3845 int back_flags; 3846 QDict *backing_options = NULL; 3847 3848 bdrv_get_full_backing_filename_from_filename(filename, backing_file, 3849 full_backing, PATH_MAX, 3850 &local_err); 3851 if (local_err) { 3852 g_free(full_backing); 3853 goto out; 3854 } 3855 3856 /* backing files always opened read-only */ 3857 back_flags = 3858 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); 3859 3860 if (backing_fmt) { 3861 backing_options = qdict_new(); 3862 qdict_put(backing_options, "driver", 3863 qstring_from_str(backing_fmt)); 3864 } 3865 3866 bs = NULL; 3867 ret = bdrv_open(&bs, full_backing, NULL, backing_options, 3868 back_flags, &local_err); 3869 g_free(full_backing); 3870 if (ret < 0) { 3871 goto out; 3872 } 3873 size = bdrv_getlength(bs); 3874 if (size < 0) { 3875 error_setg_errno(errp, -size, "Could not get size of '%s'", 3876 backing_file); 3877 bdrv_unref(bs); 3878 goto out; 3879 } 3880 3881 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort); 3882 3883 bdrv_unref(bs); 3884 } else { 3885 error_setg(errp, "Image creation needs a size parameter"); 3886 goto out; 3887 } 3888 } 3889 3890 if (!quiet) { 3891 printf("Formatting '%s', fmt=%s ", filename, fmt); 3892 qemu_opts_print(opts, " "); 3893 puts(""); 3894 } 3895 3896 ret = bdrv_create(drv, filename, opts, &local_err); 3897 3898 if (ret == -EFBIG) { 3899 /* This is generally a better message than whatever the driver would 3900 * deliver (especially because of the cluster_size_hint), since that 3901 * is most probably not much different from "image too large". */ 3902 const char *cluster_size_hint = ""; 3903 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) { 3904 cluster_size_hint = " (try using a larger cluster size)"; 3905 } 3906 error_setg(errp, "The image size is too large for file format '%s'" 3907 "%s", fmt, cluster_size_hint); 3908 error_free(local_err); 3909 local_err = NULL; 3910 } 3911 3912 out: 3913 qemu_opts_del(opts); 3914 qemu_opts_free(create_opts); 3915 if (local_err) { 3916 error_propagate(errp, local_err); 3917 } 3918 } 3919 3920 AioContext *bdrv_get_aio_context(BlockDriverState *bs) 3921 { 3922 return bs->aio_context; 3923 } 3924 3925 void bdrv_detach_aio_context(BlockDriverState *bs) 3926 { 3927 BdrvAioNotifier *baf; 3928 3929 if (!bs->drv) { 3930 return; 3931 } 3932 3933 QLIST_FOREACH(baf, &bs->aio_notifiers, list) { 3934 baf->detach_aio_context(baf->opaque); 3935 } 3936 3937 if (bs->io_limits_enabled) { 3938 throttle_timers_detach_aio_context(&bs->throttle_timers); 3939 } 3940 if (bs->drv->bdrv_detach_aio_context) { 3941 bs->drv->bdrv_detach_aio_context(bs); 3942 } 3943 if (bs->file) { 3944 bdrv_detach_aio_context(bs->file->bs); 3945 } 3946 if (bs->backing) { 3947 bdrv_detach_aio_context(bs->backing->bs); 3948 } 3949 3950 bs->aio_context = NULL; 3951 } 3952 3953 void bdrv_attach_aio_context(BlockDriverState *bs, 3954 AioContext *new_context) 3955 { 3956 BdrvAioNotifier *ban; 3957 3958 if (!bs->drv) { 3959 return; 3960 } 3961 3962 bs->aio_context = new_context; 3963 3964 if (bs->backing) { 3965 bdrv_attach_aio_context(bs->backing->bs, new_context); 3966 } 3967 if (bs->file) { 3968 bdrv_attach_aio_context(bs->file->bs, new_context); 3969 } 3970 if (bs->drv->bdrv_attach_aio_context) { 3971 bs->drv->bdrv_attach_aio_context(bs, new_context); 3972 } 3973 if (bs->io_limits_enabled) { 3974 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context); 3975 } 3976 3977 QLIST_FOREACH(ban, &bs->aio_notifiers, list) { 3978 ban->attached_aio_context(new_context, ban->opaque); 3979 } 3980 } 3981 3982 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context) 3983 { 3984 bdrv_drain(bs); /* ensure there are no in-flight requests */ 3985 3986 bdrv_detach_aio_context(bs); 3987 3988 /* This function executes in the old AioContext so acquire the new one in 3989 * case it runs in a different thread. 3990 */ 3991 aio_context_acquire(new_context); 3992 bdrv_attach_aio_context(bs, new_context); 3993 aio_context_release(new_context); 3994 } 3995 3996 void bdrv_add_aio_context_notifier(BlockDriverState *bs, 3997 void (*attached_aio_context)(AioContext *new_context, void *opaque), 3998 void (*detach_aio_context)(void *opaque), void *opaque) 3999 { 4000 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1); 4001 *ban = (BdrvAioNotifier){ 4002 .attached_aio_context = attached_aio_context, 4003 .detach_aio_context = detach_aio_context, 4004 .opaque = opaque 4005 }; 4006 4007 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list); 4008 } 4009 4010 void bdrv_remove_aio_context_notifier(BlockDriverState *bs, 4011 void (*attached_aio_context)(AioContext *, 4012 void *), 4013 void (*detach_aio_context)(void *), 4014 void *opaque) 4015 { 4016 BdrvAioNotifier *ban, *ban_next; 4017 4018 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) { 4019 if (ban->attached_aio_context == attached_aio_context && 4020 ban->detach_aio_context == detach_aio_context && 4021 ban->opaque == opaque) 4022 { 4023 QLIST_REMOVE(ban, list); 4024 g_free(ban); 4025 4026 return; 4027 } 4028 } 4029 4030 abort(); 4031 } 4032 4033 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts, 4034 BlockDriverAmendStatusCB *status_cb) 4035 { 4036 if (!bs->drv->bdrv_amend_options) { 4037 return -ENOTSUP; 4038 } 4039 return bs->drv->bdrv_amend_options(bs, opts, status_cb); 4040 } 4041 4042 /* This function will be called by the bdrv_recurse_is_first_non_filter method 4043 * of block filter and by bdrv_is_first_non_filter. 4044 * It is used to test if the given bs is the candidate or recurse more in the 4045 * node graph. 4046 */ 4047 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs, 4048 BlockDriverState *candidate) 4049 { 4050 /* return false if basic checks fails */ 4051 if (!bs || !bs->drv) { 4052 return false; 4053 } 4054 4055 /* the code reached a non block filter driver -> check if the bs is 4056 * the same as the candidate. It's the recursion termination condition. 4057 */ 4058 if (!bs->drv->is_filter) { 4059 return bs == candidate; 4060 } 4061 /* Down this path the driver is a block filter driver */ 4062 4063 /* If the block filter recursion method is defined use it to recurse down 4064 * the node graph. 4065 */ 4066 if (bs->drv->bdrv_recurse_is_first_non_filter) { 4067 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate); 4068 } 4069 4070 /* the driver is a block filter but don't allow to recurse -> return false 4071 */ 4072 return false; 4073 } 4074 4075 /* This function checks if the candidate is the first non filter bs down it's 4076 * bs chain. Since we don't have pointers to parents it explore all bs chains 4077 * from the top. Some filters can choose not to pass down the recursion. 4078 */ 4079 bool bdrv_is_first_non_filter(BlockDriverState *candidate) 4080 { 4081 BlockDriverState *bs; 4082 4083 /* walk down the bs forest recursively */ 4084 QTAILQ_FOREACH(bs, &bdrv_states, device_list) { 4085 bool perm; 4086 4087 /* try to recurse in this top level bs */ 4088 perm = bdrv_recurse_is_first_non_filter(bs, candidate); 4089 4090 /* candidate is the first non filter */ 4091 if (perm) { 4092 return true; 4093 } 4094 } 4095 4096 return false; 4097 } 4098 4099 BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs, 4100 const char *node_name, Error **errp) 4101 { 4102 BlockDriverState *to_replace_bs = bdrv_find_node(node_name); 4103 AioContext *aio_context; 4104 4105 if (!to_replace_bs) { 4106 error_setg(errp, "Node name '%s' not found", node_name); 4107 return NULL; 4108 } 4109 4110 aio_context = bdrv_get_aio_context(to_replace_bs); 4111 aio_context_acquire(aio_context); 4112 4113 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) { 4114 to_replace_bs = NULL; 4115 goto out; 4116 } 4117 4118 /* We don't want arbitrary node of the BDS chain to be replaced only the top 4119 * most non filter in order to prevent data corruption. 4120 * Another benefit is that this tests exclude backing files which are 4121 * blocked by the backing blockers. 4122 */ 4123 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) { 4124 error_setg(errp, "Only top most non filter can be replaced"); 4125 to_replace_bs = NULL; 4126 goto out; 4127 } 4128 4129 out: 4130 aio_context_release(aio_context); 4131 return to_replace_bs; 4132 } 4133 4134 static bool append_open_options(QDict *d, BlockDriverState *bs) 4135 { 4136 const QDictEntry *entry; 4137 bool found_any = false; 4138 4139 for (entry = qdict_first(bs->options); entry; 4140 entry = qdict_next(bs->options, entry)) 4141 { 4142 /* Only take options for this level and exclude all non-driver-specific 4143 * options */ 4144 if (!strchr(qdict_entry_key(entry), '.') && 4145 strcmp(qdict_entry_key(entry), "node-name")) 4146 { 4147 qobject_incref(qdict_entry_value(entry)); 4148 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry)); 4149 found_any = true; 4150 } 4151 } 4152 4153 return found_any; 4154 } 4155 4156 /* Updates the following BDS fields: 4157 * - exact_filename: A filename which may be used for opening a block device 4158 * which (mostly) equals the given BDS (even without any 4159 * other options; so reading and writing must return the same 4160 * results, but caching etc. may be different) 4161 * - full_open_options: Options which, when given when opening a block device 4162 * (without a filename), result in a BDS (mostly) 4163 * equalling the given one 4164 * - filename: If exact_filename is set, it is copied here. Otherwise, 4165 * full_open_options is converted to a JSON object, prefixed with 4166 * "json:" (for use through the JSON pseudo protocol) and put here. 4167 */ 4168 void bdrv_refresh_filename(BlockDriverState *bs) 4169 { 4170 BlockDriver *drv = bs->drv; 4171 QDict *opts; 4172 4173 if (!drv) { 4174 return; 4175 } 4176 4177 /* This BDS's file name will most probably depend on its file's name, so 4178 * refresh that first */ 4179 if (bs->file) { 4180 bdrv_refresh_filename(bs->file->bs); 4181 } 4182 4183 if (drv->bdrv_refresh_filename) { 4184 /* Obsolete information is of no use here, so drop the old file name 4185 * information before refreshing it */ 4186 bs->exact_filename[0] = '\0'; 4187 if (bs->full_open_options) { 4188 QDECREF(bs->full_open_options); 4189 bs->full_open_options = NULL; 4190 } 4191 4192 drv->bdrv_refresh_filename(bs); 4193 } else if (bs->file) { 4194 /* Try to reconstruct valid information from the underlying file */ 4195 bool has_open_options; 4196 4197 bs->exact_filename[0] = '\0'; 4198 if (bs->full_open_options) { 4199 QDECREF(bs->full_open_options); 4200 bs->full_open_options = NULL; 4201 } 4202 4203 opts = qdict_new(); 4204 has_open_options = append_open_options(opts, bs); 4205 4206 /* If no specific options have been given for this BDS, the filename of 4207 * the underlying file should suffice for this one as well */ 4208 if (bs->file->bs->exact_filename[0] && !has_open_options) { 4209 strcpy(bs->exact_filename, bs->file->bs->exact_filename); 4210 } 4211 /* Reconstructing the full options QDict is simple for most format block 4212 * drivers, as long as the full options are known for the underlying 4213 * file BDS. The full options QDict of that file BDS should somehow 4214 * contain a representation of the filename, therefore the following 4215 * suffices without querying the (exact_)filename of this BDS. */ 4216 if (bs->file->bs->full_open_options) { 4217 qdict_put_obj(opts, "driver", 4218 QOBJECT(qstring_from_str(drv->format_name))); 4219 QINCREF(bs->file->bs->full_open_options); 4220 qdict_put_obj(opts, "file", 4221 QOBJECT(bs->file->bs->full_open_options)); 4222 4223 bs->full_open_options = opts; 4224 } else { 4225 QDECREF(opts); 4226 } 4227 } else if (!bs->full_open_options && qdict_size(bs->options)) { 4228 /* There is no underlying file BDS (at least referenced by BDS.file), 4229 * so the full options QDict should be equal to the options given 4230 * specifically for this block device when it was opened (plus the 4231 * driver specification). 4232 * Because those options don't change, there is no need to update 4233 * full_open_options when it's already set. */ 4234 4235 opts = qdict_new(); 4236 append_open_options(opts, bs); 4237 qdict_put_obj(opts, "driver", 4238 QOBJECT(qstring_from_str(drv->format_name))); 4239 4240 if (bs->exact_filename[0]) { 4241 /* This may not work for all block protocol drivers (some may 4242 * require this filename to be parsed), but we have to find some 4243 * default solution here, so just include it. If some block driver 4244 * does not support pure options without any filename at all or 4245 * needs some special format of the options QDict, it needs to 4246 * implement the driver-specific bdrv_refresh_filename() function. 4247 */ 4248 qdict_put_obj(opts, "filename", 4249 QOBJECT(qstring_from_str(bs->exact_filename))); 4250 } 4251 4252 bs->full_open_options = opts; 4253 } 4254 4255 if (bs->exact_filename[0]) { 4256 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename); 4257 } else if (bs->full_open_options) { 4258 QString *json = qobject_to_json(QOBJECT(bs->full_open_options)); 4259 snprintf(bs->filename, sizeof(bs->filename), "json:%s", 4260 qstring_get_str(json)); 4261 QDECREF(json); 4262 } 4263 } 4264 4265 /* This accessor function purpose is to allow the device models to access the 4266 * BlockAcctStats structure embedded inside a BlockDriverState without being 4267 * aware of the BlockDriverState structure layout. 4268 * It will go away when the BlockAcctStats structure will be moved inside 4269 * the device models. 4270 */ 4271 BlockAcctStats *bdrv_get_stats(BlockDriverState *bs) 4272 { 4273 return &bs->stats; 4274 } 4275