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