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 "monitor.h" 28 #include "block_int.h" 29 #include "module.h" 30 #include "qemu-objects.h" 31 32 #ifdef CONFIG_BSD 33 #include <sys/types.h> 34 #include <sys/stat.h> 35 #include <sys/ioctl.h> 36 #include <sys/queue.h> 37 #ifndef __DragonFly__ 38 #include <sys/disk.h> 39 #endif 40 #endif 41 42 #ifdef _WIN32 43 #include <windows.h> 44 #endif 45 46 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs, 47 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 48 BlockDriverCompletionFunc *cb, void *opaque); 49 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs, 50 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 51 BlockDriverCompletionFunc *cb, void *opaque); 52 static BlockDriverAIOCB *bdrv_aio_flush_em(BlockDriverState *bs, 53 BlockDriverCompletionFunc *cb, void *opaque); 54 static BlockDriverAIOCB *bdrv_aio_noop_em(BlockDriverState *bs, 55 BlockDriverCompletionFunc *cb, void *opaque); 56 static int bdrv_read_em(BlockDriverState *bs, int64_t sector_num, 57 uint8_t *buf, int nb_sectors); 58 static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, 59 const uint8_t *buf, int nb_sectors); 60 61 static QTAILQ_HEAD(, BlockDriverState) bdrv_states = 62 QTAILQ_HEAD_INITIALIZER(bdrv_states); 63 64 static QLIST_HEAD(, BlockDriver) bdrv_drivers = 65 QLIST_HEAD_INITIALIZER(bdrv_drivers); 66 67 /* The device to use for VM snapshots */ 68 static BlockDriverState *bs_snapshots; 69 70 /* If non-zero, use only whitelisted block drivers */ 71 static int use_bdrv_whitelist; 72 73 #ifdef _WIN32 74 static int is_windows_drive_prefix(const char *filename) 75 { 76 return (((filename[0] >= 'a' && filename[0] <= 'z') || 77 (filename[0] >= 'A' && filename[0] <= 'Z')) && 78 filename[1] == ':'); 79 } 80 81 int is_windows_drive(const char *filename) 82 { 83 if (is_windows_drive_prefix(filename) && 84 filename[2] == '\0') 85 return 1; 86 if (strstart(filename, "\\\\.\\", NULL) || 87 strstart(filename, "//./", NULL)) 88 return 1; 89 return 0; 90 } 91 #endif 92 93 /* check if the path starts with "<protocol>:" */ 94 static int path_has_protocol(const char *path) 95 { 96 #ifdef _WIN32 97 if (is_windows_drive(path) || 98 is_windows_drive_prefix(path)) { 99 return 0; 100 } 101 #endif 102 103 return strchr(path, ':') != NULL; 104 } 105 106 int path_is_absolute(const char *path) 107 { 108 const char *p; 109 #ifdef _WIN32 110 /* specific case for names like: "\\.\d:" */ 111 if (*path == '/' || *path == '\\') 112 return 1; 113 #endif 114 p = strchr(path, ':'); 115 if (p) 116 p++; 117 else 118 p = path; 119 #ifdef _WIN32 120 return (*p == '/' || *p == '\\'); 121 #else 122 return (*p == '/'); 123 #endif 124 } 125 126 /* if filename is absolute, just copy it to dest. Otherwise, build a 127 path to it by considering it is relative to base_path. URL are 128 supported. */ 129 void path_combine(char *dest, int dest_size, 130 const char *base_path, 131 const char *filename) 132 { 133 const char *p, *p1; 134 int len; 135 136 if (dest_size <= 0) 137 return; 138 if (path_is_absolute(filename)) { 139 pstrcpy(dest, dest_size, filename); 140 } else { 141 p = strchr(base_path, ':'); 142 if (p) 143 p++; 144 else 145 p = base_path; 146 p1 = strrchr(base_path, '/'); 147 #ifdef _WIN32 148 { 149 const char *p2; 150 p2 = strrchr(base_path, '\\'); 151 if (!p1 || p2 > p1) 152 p1 = p2; 153 } 154 #endif 155 if (p1) 156 p1++; 157 else 158 p1 = base_path; 159 if (p1 > p) 160 p = p1; 161 len = p - base_path; 162 if (len > dest_size - 1) 163 len = dest_size - 1; 164 memcpy(dest, base_path, len); 165 dest[len] = '\0'; 166 pstrcat(dest, dest_size, filename); 167 } 168 } 169 170 void bdrv_register(BlockDriver *bdrv) 171 { 172 if (!bdrv->bdrv_aio_readv) { 173 /* add AIO emulation layer */ 174 bdrv->bdrv_aio_readv = bdrv_aio_readv_em; 175 bdrv->bdrv_aio_writev = bdrv_aio_writev_em; 176 } else if (!bdrv->bdrv_read) { 177 /* add synchronous IO emulation layer */ 178 bdrv->bdrv_read = bdrv_read_em; 179 bdrv->bdrv_write = bdrv_write_em; 180 } 181 182 if (!bdrv->bdrv_aio_flush) 183 bdrv->bdrv_aio_flush = bdrv_aio_flush_em; 184 185 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list); 186 } 187 188 /* create a new block device (by default it is empty) */ 189 BlockDriverState *bdrv_new(const char *device_name) 190 { 191 BlockDriverState *bs; 192 193 bs = qemu_mallocz(sizeof(BlockDriverState)); 194 pstrcpy(bs->device_name, sizeof(bs->device_name), device_name); 195 if (device_name[0] != '\0') { 196 QTAILQ_INSERT_TAIL(&bdrv_states, bs, list); 197 } 198 return bs; 199 } 200 201 BlockDriver *bdrv_find_format(const char *format_name) 202 { 203 BlockDriver *drv1; 204 QLIST_FOREACH(drv1, &bdrv_drivers, list) { 205 if (!strcmp(drv1->format_name, format_name)) { 206 return drv1; 207 } 208 } 209 return NULL; 210 } 211 212 static int bdrv_is_whitelisted(BlockDriver *drv) 213 { 214 static const char *whitelist[] = { 215 CONFIG_BDRV_WHITELIST 216 }; 217 const char **p; 218 219 if (!whitelist[0]) 220 return 1; /* no whitelist, anything goes */ 221 222 for (p = whitelist; *p; p++) { 223 if (!strcmp(drv->format_name, *p)) { 224 return 1; 225 } 226 } 227 return 0; 228 } 229 230 BlockDriver *bdrv_find_whitelisted_format(const char *format_name) 231 { 232 BlockDriver *drv = bdrv_find_format(format_name); 233 return drv && bdrv_is_whitelisted(drv) ? drv : NULL; 234 } 235 236 int bdrv_create(BlockDriver *drv, const char* filename, 237 QEMUOptionParameter *options) 238 { 239 if (!drv->bdrv_create) 240 return -ENOTSUP; 241 242 return drv->bdrv_create(filename, options); 243 } 244 245 int bdrv_create_file(const char* filename, QEMUOptionParameter *options) 246 { 247 BlockDriver *drv; 248 249 drv = bdrv_find_protocol(filename); 250 if (drv == NULL) { 251 return -ENOENT; 252 } 253 254 return bdrv_create(drv, filename, options); 255 } 256 257 #ifdef _WIN32 258 void get_tmp_filename(char *filename, int size) 259 { 260 char temp_dir[MAX_PATH]; 261 262 GetTempPath(MAX_PATH, temp_dir); 263 GetTempFileName(temp_dir, "qem", 0, filename); 264 } 265 #else 266 void get_tmp_filename(char *filename, int size) 267 { 268 int fd; 269 const char *tmpdir; 270 /* XXX: race condition possible */ 271 tmpdir = getenv("TMPDIR"); 272 if (!tmpdir) 273 tmpdir = "/tmp"; 274 snprintf(filename, size, "%s/vl.XXXXXX", tmpdir); 275 fd = mkstemp(filename); 276 close(fd); 277 } 278 #endif 279 280 /* 281 * Detect host devices. By convention, /dev/cdrom[N] is always 282 * recognized as a host CDROM. 283 */ 284 static BlockDriver *find_hdev_driver(const char *filename) 285 { 286 int score_max = 0, score; 287 BlockDriver *drv = NULL, *d; 288 289 QLIST_FOREACH(d, &bdrv_drivers, list) { 290 if (d->bdrv_probe_device) { 291 score = d->bdrv_probe_device(filename); 292 if (score > score_max) { 293 score_max = score; 294 drv = d; 295 } 296 } 297 } 298 299 return drv; 300 } 301 302 BlockDriver *bdrv_find_protocol(const char *filename) 303 { 304 BlockDriver *drv1; 305 char protocol[128]; 306 int len; 307 const char *p; 308 309 /* TODO Drivers without bdrv_file_open must be specified explicitly */ 310 311 /* 312 * XXX(hch): we really should not let host device detection 313 * override an explicit protocol specification, but moving this 314 * later breaks access to device names with colons in them. 315 * Thanks to the brain-dead persistent naming schemes on udev- 316 * based Linux systems those actually are quite common. 317 */ 318 drv1 = find_hdev_driver(filename); 319 if (drv1) { 320 return drv1; 321 } 322 323 if (!path_has_protocol(filename)) { 324 return bdrv_find_format("file"); 325 } 326 p = strchr(filename, ':'); 327 assert(p != NULL); 328 len = p - filename; 329 if (len > sizeof(protocol) - 1) 330 len = sizeof(protocol) - 1; 331 memcpy(protocol, filename, len); 332 protocol[len] = '\0'; 333 QLIST_FOREACH(drv1, &bdrv_drivers, list) { 334 if (drv1->protocol_name && 335 !strcmp(drv1->protocol_name, protocol)) { 336 return drv1; 337 } 338 } 339 return NULL; 340 } 341 342 static int find_image_format(const char *filename, BlockDriver **pdrv) 343 { 344 int ret, score, score_max; 345 BlockDriver *drv1, *drv; 346 uint8_t buf[2048]; 347 BlockDriverState *bs; 348 349 ret = bdrv_file_open(&bs, filename, 0); 350 if (ret < 0) { 351 *pdrv = NULL; 352 return ret; 353 } 354 355 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */ 356 if (bs->sg || !bdrv_is_inserted(bs)) { 357 bdrv_delete(bs); 358 drv = bdrv_find_format("raw"); 359 if (!drv) { 360 ret = -ENOENT; 361 } 362 *pdrv = drv; 363 return ret; 364 } 365 366 ret = bdrv_pread(bs, 0, buf, sizeof(buf)); 367 bdrv_delete(bs); 368 if (ret < 0) { 369 *pdrv = NULL; 370 return ret; 371 } 372 373 score_max = 0; 374 drv = NULL; 375 QLIST_FOREACH(drv1, &bdrv_drivers, list) { 376 if (drv1->bdrv_probe) { 377 score = drv1->bdrv_probe(buf, ret, filename); 378 if (score > score_max) { 379 score_max = score; 380 drv = drv1; 381 } 382 } 383 } 384 if (!drv) { 385 ret = -ENOENT; 386 } 387 *pdrv = drv; 388 return ret; 389 } 390 391 /** 392 * Set the current 'total_sectors' value 393 */ 394 static int refresh_total_sectors(BlockDriverState *bs, int64_t hint) 395 { 396 BlockDriver *drv = bs->drv; 397 398 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */ 399 if (bs->sg) 400 return 0; 401 402 /* query actual device if possible, otherwise just trust the hint */ 403 if (drv->bdrv_getlength) { 404 int64_t length = drv->bdrv_getlength(bs); 405 if (length < 0) { 406 return length; 407 } 408 hint = length >> BDRV_SECTOR_BITS; 409 } 410 411 bs->total_sectors = hint; 412 return 0; 413 } 414 415 /* 416 * Common part for opening disk images and files 417 */ 418 static int bdrv_open_common(BlockDriverState *bs, const char *filename, 419 int flags, BlockDriver *drv) 420 { 421 int ret, open_flags; 422 423 assert(drv != NULL); 424 425 bs->file = NULL; 426 bs->total_sectors = 0; 427 bs->encrypted = 0; 428 bs->valid_key = 0; 429 bs->open_flags = flags; 430 /* buffer_alignment defaulted to 512, drivers can change this value */ 431 bs->buffer_alignment = 512; 432 433 pstrcpy(bs->filename, sizeof(bs->filename), filename); 434 435 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) { 436 return -ENOTSUP; 437 } 438 439 bs->drv = drv; 440 bs->opaque = qemu_mallocz(drv->instance_size); 441 442 /* 443 * Yes, BDRV_O_NOCACHE aka O_DIRECT means we have to present a 444 * write cache to the guest. We do need the fdatasync to flush 445 * out transactions for block allocations, and we maybe have a 446 * volatile write cache in our backing device to deal with. 447 */ 448 if (flags & (BDRV_O_CACHE_WB|BDRV_O_NOCACHE)) 449 bs->enable_write_cache = 1; 450 451 /* 452 * Clear flags that are internal to the block layer before opening the 453 * image. 454 */ 455 open_flags = flags & ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); 456 457 /* 458 * Snapshots should be writeable. 459 */ 460 if (bs->is_temporary) { 461 open_flags |= BDRV_O_RDWR; 462 } 463 464 /* Open the image, either directly or using a protocol */ 465 if (drv->bdrv_file_open) { 466 ret = drv->bdrv_file_open(bs, filename, open_flags); 467 } else { 468 ret = bdrv_file_open(&bs->file, filename, open_flags); 469 if (ret >= 0) { 470 ret = drv->bdrv_open(bs, open_flags); 471 } 472 } 473 474 if (ret < 0) { 475 goto free_and_fail; 476 } 477 478 bs->keep_read_only = bs->read_only = !(open_flags & BDRV_O_RDWR); 479 480 ret = refresh_total_sectors(bs, bs->total_sectors); 481 if (ret < 0) { 482 goto free_and_fail; 483 } 484 485 #ifndef _WIN32 486 if (bs->is_temporary) { 487 unlink(filename); 488 } 489 #endif 490 return 0; 491 492 free_and_fail: 493 if (bs->file) { 494 bdrv_delete(bs->file); 495 bs->file = NULL; 496 } 497 qemu_free(bs->opaque); 498 bs->opaque = NULL; 499 bs->drv = NULL; 500 return ret; 501 } 502 503 /* 504 * Opens a file using a protocol (file, host_device, nbd, ...) 505 */ 506 int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags) 507 { 508 BlockDriverState *bs; 509 BlockDriver *drv; 510 int ret; 511 512 drv = bdrv_find_protocol(filename); 513 if (!drv) { 514 return -ENOENT; 515 } 516 517 bs = bdrv_new(""); 518 ret = bdrv_open_common(bs, filename, flags, drv); 519 if (ret < 0) { 520 bdrv_delete(bs); 521 return ret; 522 } 523 bs->growable = 1; 524 *pbs = bs; 525 return 0; 526 } 527 528 /* 529 * Opens a disk image (raw, qcow2, vmdk, ...) 530 */ 531 int bdrv_open(BlockDriverState *bs, const char *filename, int flags, 532 BlockDriver *drv) 533 { 534 int ret; 535 536 if (flags & BDRV_O_SNAPSHOT) { 537 BlockDriverState *bs1; 538 int64_t total_size; 539 int is_protocol = 0; 540 BlockDriver *bdrv_qcow2; 541 QEMUOptionParameter *options; 542 char tmp_filename[PATH_MAX]; 543 char backing_filename[PATH_MAX]; 544 545 /* if snapshot, we create a temporary backing file and open it 546 instead of opening 'filename' directly */ 547 548 /* if there is a backing file, use it */ 549 bs1 = bdrv_new(""); 550 ret = bdrv_open(bs1, filename, 0, drv); 551 if (ret < 0) { 552 bdrv_delete(bs1); 553 return ret; 554 } 555 total_size = bdrv_getlength(bs1) & BDRV_SECTOR_MASK; 556 557 if (bs1->drv && bs1->drv->protocol_name) 558 is_protocol = 1; 559 560 bdrv_delete(bs1); 561 562 get_tmp_filename(tmp_filename, sizeof(tmp_filename)); 563 564 /* Real path is meaningless for protocols */ 565 if (is_protocol) 566 snprintf(backing_filename, sizeof(backing_filename), 567 "%s", filename); 568 else if (!realpath(filename, backing_filename)) 569 return -errno; 570 571 bdrv_qcow2 = bdrv_find_format("qcow2"); 572 options = parse_option_parameters("", bdrv_qcow2->create_options, NULL); 573 574 set_option_parameter_int(options, BLOCK_OPT_SIZE, total_size); 575 set_option_parameter(options, BLOCK_OPT_BACKING_FILE, backing_filename); 576 if (drv) { 577 set_option_parameter(options, BLOCK_OPT_BACKING_FMT, 578 drv->format_name); 579 } 580 581 ret = bdrv_create(bdrv_qcow2, tmp_filename, options); 582 free_option_parameters(options); 583 if (ret < 0) { 584 return ret; 585 } 586 587 filename = tmp_filename; 588 drv = bdrv_qcow2; 589 bs->is_temporary = 1; 590 } 591 592 /* Find the right image format driver */ 593 if (!drv) { 594 ret = find_image_format(filename, &drv); 595 } 596 597 if (!drv) { 598 goto unlink_and_fail; 599 } 600 601 /* Open the image */ 602 ret = bdrv_open_common(bs, filename, flags, drv); 603 if (ret < 0) { 604 goto unlink_and_fail; 605 } 606 607 /* If there is a backing file, use it */ 608 if ((flags & BDRV_O_NO_BACKING) == 0 && bs->backing_file[0] != '\0') { 609 char backing_filename[PATH_MAX]; 610 int back_flags; 611 BlockDriver *back_drv = NULL; 612 613 bs->backing_hd = bdrv_new(""); 614 615 if (path_has_protocol(bs->backing_file)) { 616 pstrcpy(backing_filename, sizeof(backing_filename), 617 bs->backing_file); 618 } else { 619 path_combine(backing_filename, sizeof(backing_filename), 620 filename, bs->backing_file); 621 } 622 623 if (bs->backing_format[0] != '\0') { 624 back_drv = bdrv_find_format(bs->backing_format); 625 } 626 627 /* backing files always opened read-only */ 628 back_flags = 629 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING); 630 631 ret = bdrv_open(bs->backing_hd, backing_filename, back_flags, back_drv); 632 if (ret < 0) { 633 bdrv_close(bs); 634 return ret; 635 } 636 if (bs->is_temporary) { 637 bs->backing_hd->keep_read_only = !(flags & BDRV_O_RDWR); 638 } else { 639 /* base image inherits from "parent" */ 640 bs->backing_hd->keep_read_only = bs->keep_read_only; 641 } 642 } 643 644 if (!bdrv_key_required(bs)) { 645 /* call the change callback */ 646 bs->media_changed = 1; 647 if (bs->change_cb) 648 bs->change_cb(bs->change_opaque, CHANGE_MEDIA); 649 } 650 651 return 0; 652 653 unlink_and_fail: 654 if (bs->is_temporary) { 655 unlink(filename); 656 } 657 return ret; 658 } 659 660 void bdrv_close(BlockDriverState *bs) 661 { 662 if (bs->drv) { 663 if (bs == bs_snapshots) { 664 bs_snapshots = NULL; 665 } 666 if (bs->backing_hd) { 667 bdrv_delete(bs->backing_hd); 668 bs->backing_hd = NULL; 669 } 670 bs->drv->bdrv_close(bs); 671 qemu_free(bs->opaque); 672 #ifdef _WIN32 673 if (bs->is_temporary) { 674 unlink(bs->filename); 675 } 676 #endif 677 bs->opaque = NULL; 678 bs->drv = NULL; 679 680 if (bs->file != NULL) { 681 bdrv_close(bs->file); 682 } 683 684 /* call the change callback */ 685 bs->media_changed = 1; 686 if (bs->change_cb) 687 bs->change_cb(bs->change_opaque, CHANGE_MEDIA); 688 } 689 } 690 691 void bdrv_close_all(void) 692 { 693 BlockDriverState *bs; 694 695 QTAILQ_FOREACH(bs, &bdrv_states, list) { 696 bdrv_close(bs); 697 } 698 } 699 700 /* make a BlockDriverState anonymous by removing from bdrv_state list. 701 Also, NULL terminate the device_name to prevent double remove */ 702 void bdrv_make_anon(BlockDriverState *bs) 703 { 704 if (bs->device_name[0] != '\0') { 705 QTAILQ_REMOVE(&bdrv_states, bs, list); 706 } 707 bs->device_name[0] = '\0'; 708 } 709 710 void bdrv_delete(BlockDriverState *bs) 711 { 712 assert(!bs->peer); 713 714 /* remove from list, if necessary */ 715 bdrv_make_anon(bs); 716 717 bdrv_close(bs); 718 if (bs->file != NULL) { 719 bdrv_delete(bs->file); 720 } 721 722 assert(bs != bs_snapshots); 723 qemu_free(bs); 724 } 725 726 int bdrv_attach(BlockDriverState *bs, DeviceState *qdev) 727 { 728 if (bs->peer) { 729 return -EBUSY; 730 } 731 bs->peer = qdev; 732 return 0; 733 } 734 735 void bdrv_detach(BlockDriverState *bs, DeviceState *qdev) 736 { 737 assert(bs->peer == qdev); 738 bs->peer = NULL; 739 } 740 741 DeviceState *bdrv_get_attached(BlockDriverState *bs) 742 { 743 return bs->peer; 744 } 745 746 /* 747 * Run consistency checks on an image 748 * 749 * Returns 0 if the check could be completed (it doesn't mean that the image is 750 * free of errors) or -errno when an internal error occured. The results of the 751 * check are stored in res. 752 */ 753 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res) 754 { 755 if (bs->drv->bdrv_check == NULL) { 756 return -ENOTSUP; 757 } 758 759 memset(res, 0, sizeof(*res)); 760 return bs->drv->bdrv_check(bs, res); 761 } 762 763 #define COMMIT_BUF_SECTORS 2048 764 765 /* commit COW file into the raw image */ 766 int bdrv_commit(BlockDriverState *bs) 767 { 768 BlockDriver *drv = bs->drv; 769 BlockDriver *backing_drv; 770 int64_t sector, total_sectors; 771 int n, ro, open_flags; 772 int ret = 0, rw_ret = 0; 773 uint8_t *buf; 774 char filename[1024]; 775 BlockDriverState *bs_rw, *bs_ro; 776 777 if (!drv) 778 return -ENOMEDIUM; 779 780 if (!bs->backing_hd) { 781 return -ENOTSUP; 782 } 783 784 if (bs->backing_hd->keep_read_only) { 785 return -EACCES; 786 } 787 788 backing_drv = bs->backing_hd->drv; 789 ro = bs->backing_hd->read_only; 790 strncpy(filename, bs->backing_hd->filename, sizeof(filename)); 791 open_flags = bs->backing_hd->open_flags; 792 793 if (ro) { 794 /* re-open as RW */ 795 bdrv_delete(bs->backing_hd); 796 bs->backing_hd = NULL; 797 bs_rw = bdrv_new(""); 798 rw_ret = bdrv_open(bs_rw, filename, open_flags | BDRV_O_RDWR, 799 backing_drv); 800 if (rw_ret < 0) { 801 bdrv_delete(bs_rw); 802 /* try to re-open read-only */ 803 bs_ro = bdrv_new(""); 804 ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, 805 backing_drv); 806 if (ret < 0) { 807 bdrv_delete(bs_ro); 808 /* drive not functional anymore */ 809 bs->drv = NULL; 810 return ret; 811 } 812 bs->backing_hd = bs_ro; 813 return rw_ret; 814 } 815 bs->backing_hd = bs_rw; 816 } 817 818 total_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS; 819 buf = qemu_malloc(COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE); 820 821 for (sector = 0; sector < total_sectors; sector += n) { 822 if (drv->bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n)) { 823 824 if (bdrv_read(bs, sector, buf, n) != 0) { 825 ret = -EIO; 826 goto ro_cleanup; 827 } 828 829 if (bdrv_write(bs->backing_hd, sector, buf, n) != 0) { 830 ret = -EIO; 831 goto ro_cleanup; 832 } 833 } 834 } 835 836 if (drv->bdrv_make_empty) { 837 ret = drv->bdrv_make_empty(bs); 838 bdrv_flush(bs); 839 } 840 841 /* 842 * Make sure all data we wrote to the backing device is actually 843 * stable on disk. 844 */ 845 if (bs->backing_hd) 846 bdrv_flush(bs->backing_hd); 847 848 ro_cleanup: 849 qemu_free(buf); 850 851 if (ro) { 852 /* re-open as RO */ 853 bdrv_delete(bs->backing_hd); 854 bs->backing_hd = NULL; 855 bs_ro = bdrv_new(""); 856 ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, 857 backing_drv); 858 if (ret < 0) { 859 bdrv_delete(bs_ro); 860 /* drive not functional anymore */ 861 bs->drv = NULL; 862 return ret; 863 } 864 bs->backing_hd = bs_ro; 865 bs->backing_hd->keep_read_only = 0; 866 } 867 868 return ret; 869 } 870 871 void bdrv_commit_all(void) 872 { 873 BlockDriverState *bs; 874 875 QTAILQ_FOREACH(bs, &bdrv_states, list) { 876 bdrv_commit(bs); 877 } 878 } 879 880 /* 881 * Return values: 882 * 0 - success 883 * -EINVAL - backing format specified, but no file 884 * -ENOSPC - can't update the backing file because no space is left in the 885 * image file header 886 * -ENOTSUP - format driver doesn't support changing the backing file 887 */ 888 int bdrv_change_backing_file(BlockDriverState *bs, 889 const char *backing_file, const char *backing_fmt) 890 { 891 BlockDriver *drv = bs->drv; 892 893 if (drv->bdrv_change_backing_file != NULL) { 894 return drv->bdrv_change_backing_file(bs, backing_file, backing_fmt); 895 } else { 896 return -ENOTSUP; 897 } 898 } 899 900 static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset, 901 size_t size) 902 { 903 int64_t len; 904 905 if (!bdrv_is_inserted(bs)) 906 return -ENOMEDIUM; 907 908 if (bs->growable) 909 return 0; 910 911 len = bdrv_getlength(bs); 912 913 if (offset < 0) 914 return -EIO; 915 916 if ((offset > len) || (len - offset < size)) 917 return -EIO; 918 919 return 0; 920 } 921 922 static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num, 923 int nb_sectors) 924 { 925 return bdrv_check_byte_request(bs, sector_num * BDRV_SECTOR_SIZE, 926 nb_sectors * BDRV_SECTOR_SIZE); 927 } 928 929 /* return < 0 if error. See bdrv_write() for the return codes */ 930 int bdrv_read(BlockDriverState *bs, int64_t sector_num, 931 uint8_t *buf, int nb_sectors) 932 { 933 BlockDriver *drv = bs->drv; 934 935 if (!drv) 936 return -ENOMEDIUM; 937 if (bdrv_check_request(bs, sector_num, nb_sectors)) 938 return -EIO; 939 940 return drv->bdrv_read(bs, sector_num, buf, nb_sectors); 941 } 942 943 static void set_dirty_bitmap(BlockDriverState *bs, int64_t sector_num, 944 int nb_sectors, int dirty) 945 { 946 int64_t start, end; 947 unsigned long val, idx, bit; 948 949 start = sector_num / BDRV_SECTORS_PER_DIRTY_CHUNK; 950 end = (sector_num + nb_sectors - 1) / BDRV_SECTORS_PER_DIRTY_CHUNK; 951 952 for (; start <= end; start++) { 953 idx = start / (sizeof(unsigned long) * 8); 954 bit = start % (sizeof(unsigned long) * 8); 955 val = bs->dirty_bitmap[idx]; 956 if (dirty) { 957 if (!(val & (1UL << bit))) { 958 bs->dirty_count++; 959 val |= 1UL << bit; 960 } 961 } else { 962 if (val & (1UL << bit)) { 963 bs->dirty_count--; 964 val &= ~(1UL << bit); 965 } 966 } 967 bs->dirty_bitmap[idx] = val; 968 } 969 } 970 971 /* Return < 0 if error. Important errors are: 972 -EIO generic I/O error (may happen for all errors) 973 -ENOMEDIUM No media inserted. 974 -EINVAL Invalid sector number or nb_sectors 975 -EACCES Trying to write a read-only device 976 */ 977 int bdrv_write(BlockDriverState *bs, int64_t sector_num, 978 const uint8_t *buf, int nb_sectors) 979 { 980 BlockDriver *drv = bs->drv; 981 if (!bs->drv) 982 return -ENOMEDIUM; 983 if (bs->read_only) 984 return -EACCES; 985 if (bdrv_check_request(bs, sector_num, nb_sectors)) 986 return -EIO; 987 988 if (bs->dirty_bitmap) { 989 set_dirty_bitmap(bs, sector_num, nb_sectors, 1); 990 } 991 992 if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { 993 bs->wr_highest_sector = sector_num + nb_sectors - 1; 994 } 995 996 return drv->bdrv_write(bs, sector_num, buf, nb_sectors); 997 } 998 999 int bdrv_pread(BlockDriverState *bs, int64_t offset, 1000 void *buf, int count1) 1001 { 1002 uint8_t tmp_buf[BDRV_SECTOR_SIZE]; 1003 int len, nb_sectors, count; 1004 int64_t sector_num; 1005 int ret; 1006 1007 count = count1; 1008 /* first read to align to sector start */ 1009 len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1); 1010 if (len > count) 1011 len = count; 1012 sector_num = offset >> BDRV_SECTOR_BITS; 1013 if (len > 0) { 1014 if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) 1015 return ret; 1016 memcpy(buf, tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)), len); 1017 count -= len; 1018 if (count == 0) 1019 return count1; 1020 sector_num++; 1021 buf += len; 1022 } 1023 1024 /* read the sectors "in place" */ 1025 nb_sectors = count >> BDRV_SECTOR_BITS; 1026 if (nb_sectors > 0) { 1027 if ((ret = bdrv_read(bs, sector_num, buf, nb_sectors)) < 0) 1028 return ret; 1029 sector_num += nb_sectors; 1030 len = nb_sectors << BDRV_SECTOR_BITS; 1031 buf += len; 1032 count -= len; 1033 } 1034 1035 /* add data from the last sector */ 1036 if (count > 0) { 1037 if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) 1038 return ret; 1039 memcpy(buf, tmp_buf, count); 1040 } 1041 return count1; 1042 } 1043 1044 int bdrv_pwrite(BlockDriverState *bs, int64_t offset, 1045 const void *buf, int count1) 1046 { 1047 uint8_t tmp_buf[BDRV_SECTOR_SIZE]; 1048 int len, nb_sectors, count; 1049 int64_t sector_num; 1050 int ret; 1051 1052 count = count1; 1053 /* first write to align to sector start */ 1054 len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1); 1055 if (len > count) 1056 len = count; 1057 sector_num = offset >> BDRV_SECTOR_BITS; 1058 if (len > 0) { 1059 if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) 1060 return ret; 1061 memcpy(tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)), buf, len); 1062 if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0) 1063 return ret; 1064 count -= len; 1065 if (count == 0) 1066 return count1; 1067 sector_num++; 1068 buf += len; 1069 } 1070 1071 /* write the sectors "in place" */ 1072 nb_sectors = count >> BDRV_SECTOR_BITS; 1073 if (nb_sectors > 0) { 1074 if ((ret = bdrv_write(bs, sector_num, buf, nb_sectors)) < 0) 1075 return ret; 1076 sector_num += nb_sectors; 1077 len = nb_sectors << BDRV_SECTOR_BITS; 1078 buf += len; 1079 count -= len; 1080 } 1081 1082 /* add data from the last sector */ 1083 if (count > 0) { 1084 if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0) 1085 return ret; 1086 memcpy(tmp_buf, buf, count); 1087 if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0) 1088 return ret; 1089 } 1090 return count1; 1091 } 1092 1093 /* 1094 * Writes to the file and ensures that no writes are reordered across this 1095 * request (acts as a barrier) 1096 * 1097 * Returns 0 on success, -errno in error cases. 1098 */ 1099 int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset, 1100 const void *buf, int count) 1101 { 1102 int ret; 1103 1104 ret = bdrv_pwrite(bs, offset, buf, count); 1105 if (ret < 0) { 1106 return ret; 1107 } 1108 1109 /* No flush needed for cache=writethrough, it uses O_DSYNC */ 1110 if ((bs->open_flags & BDRV_O_CACHE_MASK) != 0) { 1111 bdrv_flush(bs); 1112 } 1113 1114 return 0; 1115 } 1116 1117 /* 1118 * Writes to the file and ensures that no writes are reordered across this 1119 * request (acts as a barrier) 1120 * 1121 * Returns 0 on success, -errno in error cases. 1122 */ 1123 int bdrv_write_sync(BlockDriverState *bs, int64_t sector_num, 1124 const uint8_t *buf, int nb_sectors) 1125 { 1126 return bdrv_pwrite_sync(bs, BDRV_SECTOR_SIZE * sector_num, 1127 buf, BDRV_SECTOR_SIZE * nb_sectors); 1128 } 1129 1130 /** 1131 * Truncate file to 'offset' bytes (needed only for file protocols) 1132 */ 1133 int bdrv_truncate(BlockDriverState *bs, int64_t offset) 1134 { 1135 BlockDriver *drv = bs->drv; 1136 int ret; 1137 if (!drv) 1138 return -ENOMEDIUM; 1139 if (!drv->bdrv_truncate) 1140 return -ENOTSUP; 1141 if (bs->read_only) 1142 return -EACCES; 1143 if (bdrv_in_use(bs)) 1144 return -EBUSY; 1145 ret = drv->bdrv_truncate(bs, offset); 1146 if (ret == 0) { 1147 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS); 1148 if (bs->change_cb) { 1149 bs->change_cb(bs->change_opaque, CHANGE_SIZE); 1150 } 1151 } 1152 return ret; 1153 } 1154 1155 /** 1156 * Length of a file in bytes. Return < 0 if error or unknown. 1157 */ 1158 int64_t bdrv_getlength(BlockDriverState *bs) 1159 { 1160 BlockDriver *drv = bs->drv; 1161 if (!drv) 1162 return -ENOMEDIUM; 1163 1164 if (bs->growable || bs->removable) { 1165 if (drv->bdrv_getlength) { 1166 return drv->bdrv_getlength(bs); 1167 } 1168 } 1169 return bs->total_sectors * BDRV_SECTOR_SIZE; 1170 } 1171 1172 /* return 0 as number of sectors if no device present or error */ 1173 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr) 1174 { 1175 int64_t length; 1176 length = bdrv_getlength(bs); 1177 if (length < 0) 1178 length = 0; 1179 else 1180 length = length >> BDRV_SECTOR_BITS; 1181 *nb_sectors_ptr = length; 1182 } 1183 1184 struct partition { 1185 uint8_t boot_ind; /* 0x80 - active */ 1186 uint8_t head; /* starting head */ 1187 uint8_t sector; /* starting sector */ 1188 uint8_t cyl; /* starting cylinder */ 1189 uint8_t sys_ind; /* What partition type */ 1190 uint8_t end_head; /* end head */ 1191 uint8_t end_sector; /* end sector */ 1192 uint8_t end_cyl; /* end cylinder */ 1193 uint32_t start_sect; /* starting sector counting from 0 */ 1194 uint32_t nr_sects; /* nr of sectors in partition */ 1195 } __attribute__((packed)); 1196 1197 /* try to guess the disk logical geometry from the MSDOS partition table. Return 0 if OK, -1 if could not guess */ 1198 static int guess_disk_lchs(BlockDriverState *bs, 1199 int *pcylinders, int *pheads, int *psectors) 1200 { 1201 uint8_t buf[BDRV_SECTOR_SIZE]; 1202 int ret, i, heads, sectors, cylinders; 1203 struct partition *p; 1204 uint32_t nr_sects; 1205 uint64_t nb_sectors; 1206 1207 bdrv_get_geometry(bs, &nb_sectors); 1208 1209 ret = bdrv_read(bs, 0, buf, 1); 1210 if (ret < 0) 1211 return -1; 1212 /* test msdos magic */ 1213 if (buf[510] != 0x55 || buf[511] != 0xaa) 1214 return -1; 1215 for(i = 0; i < 4; i++) { 1216 p = ((struct partition *)(buf + 0x1be)) + i; 1217 nr_sects = le32_to_cpu(p->nr_sects); 1218 if (nr_sects && p->end_head) { 1219 /* We make the assumption that the partition terminates on 1220 a cylinder boundary */ 1221 heads = p->end_head + 1; 1222 sectors = p->end_sector & 63; 1223 if (sectors == 0) 1224 continue; 1225 cylinders = nb_sectors / (heads * sectors); 1226 if (cylinders < 1 || cylinders > 16383) 1227 continue; 1228 *pheads = heads; 1229 *psectors = sectors; 1230 *pcylinders = cylinders; 1231 #if 0 1232 printf("guessed geometry: LCHS=%d %d %d\n", 1233 cylinders, heads, sectors); 1234 #endif 1235 return 0; 1236 } 1237 } 1238 return -1; 1239 } 1240 1241 void bdrv_guess_geometry(BlockDriverState *bs, int *pcyls, int *pheads, int *psecs) 1242 { 1243 int translation, lba_detected = 0; 1244 int cylinders, heads, secs; 1245 uint64_t nb_sectors; 1246 1247 /* if a geometry hint is available, use it */ 1248 bdrv_get_geometry(bs, &nb_sectors); 1249 bdrv_get_geometry_hint(bs, &cylinders, &heads, &secs); 1250 translation = bdrv_get_translation_hint(bs); 1251 if (cylinders != 0) { 1252 *pcyls = cylinders; 1253 *pheads = heads; 1254 *psecs = secs; 1255 } else { 1256 if (guess_disk_lchs(bs, &cylinders, &heads, &secs) == 0) { 1257 if (heads > 16) { 1258 /* if heads > 16, it means that a BIOS LBA 1259 translation was active, so the default 1260 hardware geometry is OK */ 1261 lba_detected = 1; 1262 goto default_geometry; 1263 } else { 1264 *pcyls = cylinders; 1265 *pheads = heads; 1266 *psecs = secs; 1267 /* disable any translation to be in sync with 1268 the logical geometry */ 1269 if (translation == BIOS_ATA_TRANSLATION_AUTO) { 1270 bdrv_set_translation_hint(bs, 1271 BIOS_ATA_TRANSLATION_NONE); 1272 } 1273 } 1274 } else { 1275 default_geometry: 1276 /* if no geometry, use a standard physical disk geometry */ 1277 cylinders = nb_sectors / (16 * 63); 1278 1279 if (cylinders > 16383) 1280 cylinders = 16383; 1281 else if (cylinders < 2) 1282 cylinders = 2; 1283 *pcyls = cylinders; 1284 *pheads = 16; 1285 *psecs = 63; 1286 if ((lba_detected == 1) && (translation == BIOS_ATA_TRANSLATION_AUTO)) { 1287 if ((*pcyls * *pheads) <= 131072) { 1288 bdrv_set_translation_hint(bs, 1289 BIOS_ATA_TRANSLATION_LARGE); 1290 } else { 1291 bdrv_set_translation_hint(bs, 1292 BIOS_ATA_TRANSLATION_LBA); 1293 } 1294 } 1295 } 1296 bdrv_set_geometry_hint(bs, *pcyls, *pheads, *psecs); 1297 } 1298 } 1299 1300 void bdrv_set_geometry_hint(BlockDriverState *bs, 1301 int cyls, int heads, int secs) 1302 { 1303 bs->cyls = cyls; 1304 bs->heads = heads; 1305 bs->secs = secs; 1306 } 1307 1308 void bdrv_set_type_hint(BlockDriverState *bs, int type) 1309 { 1310 bs->type = type; 1311 bs->removable = ((type == BDRV_TYPE_CDROM || 1312 type == BDRV_TYPE_FLOPPY)); 1313 } 1314 1315 void bdrv_set_translation_hint(BlockDriverState *bs, int translation) 1316 { 1317 bs->translation = translation; 1318 } 1319 1320 void bdrv_get_geometry_hint(BlockDriverState *bs, 1321 int *pcyls, int *pheads, int *psecs) 1322 { 1323 *pcyls = bs->cyls; 1324 *pheads = bs->heads; 1325 *psecs = bs->secs; 1326 } 1327 1328 /* Recognize floppy formats */ 1329 typedef struct FDFormat { 1330 FDriveType drive; 1331 uint8_t last_sect; 1332 uint8_t max_track; 1333 uint8_t max_head; 1334 } FDFormat; 1335 1336 static const FDFormat fd_formats[] = { 1337 /* First entry is default format */ 1338 /* 1.44 MB 3"1/2 floppy disks */ 1339 { FDRIVE_DRV_144, 18, 80, 1, }, 1340 { FDRIVE_DRV_144, 20, 80, 1, }, 1341 { FDRIVE_DRV_144, 21, 80, 1, }, 1342 { FDRIVE_DRV_144, 21, 82, 1, }, 1343 { FDRIVE_DRV_144, 21, 83, 1, }, 1344 { FDRIVE_DRV_144, 22, 80, 1, }, 1345 { FDRIVE_DRV_144, 23, 80, 1, }, 1346 { FDRIVE_DRV_144, 24, 80, 1, }, 1347 /* 2.88 MB 3"1/2 floppy disks */ 1348 { FDRIVE_DRV_288, 36, 80, 1, }, 1349 { FDRIVE_DRV_288, 39, 80, 1, }, 1350 { FDRIVE_DRV_288, 40, 80, 1, }, 1351 { FDRIVE_DRV_288, 44, 80, 1, }, 1352 { FDRIVE_DRV_288, 48, 80, 1, }, 1353 /* 720 kB 3"1/2 floppy disks */ 1354 { FDRIVE_DRV_144, 9, 80, 1, }, 1355 { FDRIVE_DRV_144, 10, 80, 1, }, 1356 { FDRIVE_DRV_144, 10, 82, 1, }, 1357 { FDRIVE_DRV_144, 10, 83, 1, }, 1358 { FDRIVE_DRV_144, 13, 80, 1, }, 1359 { FDRIVE_DRV_144, 14, 80, 1, }, 1360 /* 1.2 MB 5"1/4 floppy disks */ 1361 { FDRIVE_DRV_120, 15, 80, 1, }, 1362 { FDRIVE_DRV_120, 18, 80, 1, }, 1363 { FDRIVE_DRV_120, 18, 82, 1, }, 1364 { FDRIVE_DRV_120, 18, 83, 1, }, 1365 { FDRIVE_DRV_120, 20, 80, 1, }, 1366 /* 720 kB 5"1/4 floppy disks */ 1367 { FDRIVE_DRV_120, 9, 80, 1, }, 1368 { FDRIVE_DRV_120, 11, 80, 1, }, 1369 /* 360 kB 5"1/4 floppy disks */ 1370 { FDRIVE_DRV_120, 9, 40, 1, }, 1371 { FDRIVE_DRV_120, 9, 40, 0, }, 1372 { FDRIVE_DRV_120, 10, 41, 1, }, 1373 { FDRIVE_DRV_120, 10, 42, 1, }, 1374 /* 320 kB 5"1/4 floppy disks */ 1375 { FDRIVE_DRV_120, 8, 40, 1, }, 1376 { FDRIVE_DRV_120, 8, 40, 0, }, 1377 /* 360 kB must match 5"1/4 better than 3"1/2... */ 1378 { FDRIVE_DRV_144, 9, 80, 0, }, 1379 /* end */ 1380 { FDRIVE_DRV_NONE, -1, -1, 0, }, 1381 }; 1382 1383 void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads, 1384 int *max_track, int *last_sect, 1385 FDriveType drive_in, FDriveType *drive) 1386 { 1387 const FDFormat *parse; 1388 uint64_t nb_sectors, size; 1389 int i, first_match, match; 1390 1391 bdrv_get_geometry_hint(bs, nb_heads, max_track, last_sect); 1392 if (*nb_heads != 0 && *max_track != 0 && *last_sect != 0) { 1393 /* User defined disk */ 1394 } else { 1395 bdrv_get_geometry(bs, &nb_sectors); 1396 match = -1; 1397 first_match = -1; 1398 for (i = 0; ; i++) { 1399 parse = &fd_formats[i]; 1400 if (parse->drive == FDRIVE_DRV_NONE) { 1401 break; 1402 } 1403 if (drive_in == parse->drive || 1404 drive_in == FDRIVE_DRV_NONE) { 1405 size = (parse->max_head + 1) * parse->max_track * 1406 parse->last_sect; 1407 if (nb_sectors == size) { 1408 match = i; 1409 break; 1410 } 1411 if (first_match == -1) { 1412 first_match = i; 1413 } 1414 } 1415 } 1416 if (match == -1) { 1417 if (first_match == -1) { 1418 match = 1; 1419 } else { 1420 match = first_match; 1421 } 1422 parse = &fd_formats[match]; 1423 } 1424 *nb_heads = parse->max_head + 1; 1425 *max_track = parse->max_track; 1426 *last_sect = parse->last_sect; 1427 *drive = parse->drive; 1428 } 1429 } 1430 1431 int bdrv_get_type_hint(BlockDriverState *bs) 1432 { 1433 return bs->type; 1434 } 1435 1436 int bdrv_get_translation_hint(BlockDriverState *bs) 1437 { 1438 return bs->translation; 1439 } 1440 1441 void bdrv_set_on_error(BlockDriverState *bs, BlockErrorAction on_read_error, 1442 BlockErrorAction on_write_error) 1443 { 1444 bs->on_read_error = on_read_error; 1445 bs->on_write_error = on_write_error; 1446 } 1447 1448 BlockErrorAction bdrv_get_on_error(BlockDriverState *bs, int is_read) 1449 { 1450 return is_read ? bs->on_read_error : bs->on_write_error; 1451 } 1452 1453 void bdrv_set_removable(BlockDriverState *bs, int removable) 1454 { 1455 bs->removable = removable; 1456 if (removable && bs == bs_snapshots) { 1457 bs_snapshots = NULL; 1458 } 1459 } 1460 1461 int bdrv_is_removable(BlockDriverState *bs) 1462 { 1463 return bs->removable; 1464 } 1465 1466 int bdrv_is_read_only(BlockDriverState *bs) 1467 { 1468 return bs->read_only; 1469 } 1470 1471 int bdrv_is_sg(BlockDriverState *bs) 1472 { 1473 return bs->sg; 1474 } 1475 1476 int bdrv_enable_write_cache(BlockDriverState *bs) 1477 { 1478 return bs->enable_write_cache; 1479 } 1480 1481 /* XXX: no longer used */ 1482 void bdrv_set_change_cb(BlockDriverState *bs, 1483 void (*change_cb)(void *opaque, int reason), 1484 void *opaque) 1485 { 1486 bs->change_cb = change_cb; 1487 bs->change_opaque = opaque; 1488 } 1489 1490 int bdrv_is_encrypted(BlockDriverState *bs) 1491 { 1492 if (bs->backing_hd && bs->backing_hd->encrypted) 1493 return 1; 1494 return bs->encrypted; 1495 } 1496 1497 int bdrv_key_required(BlockDriverState *bs) 1498 { 1499 BlockDriverState *backing_hd = bs->backing_hd; 1500 1501 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key) 1502 return 1; 1503 return (bs->encrypted && !bs->valid_key); 1504 } 1505 1506 int bdrv_set_key(BlockDriverState *bs, const char *key) 1507 { 1508 int ret; 1509 if (bs->backing_hd && bs->backing_hd->encrypted) { 1510 ret = bdrv_set_key(bs->backing_hd, key); 1511 if (ret < 0) 1512 return ret; 1513 if (!bs->encrypted) 1514 return 0; 1515 } 1516 if (!bs->encrypted) { 1517 return -EINVAL; 1518 } else if (!bs->drv || !bs->drv->bdrv_set_key) { 1519 return -ENOMEDIUM; 1520 } 1521 ret = bs->drv->bdrv_set_key(bs, key); 1522 if (ret < 0) { 1523 bs->valid_key = 0; 1524 } else if (!bs->valid_key) { 1525 bs->valid_key = 1; 1526 /* call the change callback now, we skipped it on open */ 1527 bs->media_changed = 1; 1528 if (bs->change_cb) 1529 bs->change_cb(bs->change_opaque, CHANGE_MEDIA); 1530 } 1531 return ret; 1532 } 1533 1534 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size) 1535 { 1536 if (!bs->drv) { 1537 buf[0] = '\0'; 1538 } else { 1539 pstrcpy(buf, buf_size, bs->drv->format_name); 1540 } 1541 } 1542 1543 void bdrv_iterate_format(void (*it)(void *opaque, const char *name), 1544 void *opaque) 1545 { 1546 BlockDriver *drv; 1547 1548 QLIST_FOREACH(drv, &bdrv_drivers, list) { 1549 it(opaque, drv->format_name); 1550 } 1551 } 1552 1553 BlockDriverState *bdrv_find(const char *name) 1554 { 1555 BlockDriverState *bs; 1556 1557 QTAILQ_FOREACH(bs, &bdrv_states, list) { 1558 if (!strcmp(name, bs->device_name)) { 1559 return bs; 1560 } 1561 } 1562 return NULL; 1563 } 1564 1565 BlockDriverState *bdrv_next(BlockDriverState *bs) 1566 { 1567 if (!bs) { 1568 return QTAILQ_FIRST(&bdrv_states); 1569 } 1570 return QTAILQ_NEXT(bs, list); 1571 } 1572 1573 void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque) 1574 { 1575 BlockDriverState *bs; 1576 1577 QTAILQ_FOREACH(bs, &bdrv_states, list) { 1578 it(opaque, bs); 1579 } 1580 } 1581 1582 const char *bdrv_get_device_name(BlockDriverState *bs) 1583 { 1584 return bs->device_name; 1585 } 1586 1587 int bdrv_flush(BlockDriverState *bs) 1588 { 1589 if (bs->open_flags & BDRV_O_NO_FLUSH) { 1590 return 0; 1591 } 1592 1593 if (bs->drv && bs->drv->bdrv_flush) { 1594 return bs->drv->bdrv_flush(bs); 1595 } 1596 1597 /* 1598 * Some block drivers always operate in either writethrough or unsafe mode 1599 * and don't support bdrv_flush therefore. Usually qemu doesn't know how 1600 * the server works (because the behaviour is hardcoded or depends on 1601 * server-side configuration), so we can't ensure that everything is safe 1602 * on disk. Returning an error doesn't work because that would break guests 1603 * even if the server operates in writethrough mode. 1604 * 1605 * Let's hope the user knows what he's doing. 1606 */ 1607 return 0; 1608 } 1609 1610 void bdrv_flush_all(void) 1611 { 1612 BlockDriverState *bs; 1613 1614 QTAILQ_FOREACH(bs, &bdrv_states, list) { 1615 if (bs->drv && !bdrv_is_read_only(bs) && 1616 (!bdrv_is_removable(bs) || bdrv_is_inserted(bs))) { 1617 bdrv_flush(bs); 1618 } 1619 } 1620 } 1621 1622 int bdrv_has_zero_init(BlockDriverState *bs) 1623 { 1624 assert(bs->drv); 1625 1626 if (bs->drv->bdrv_has_zero_init) { 1627 return bs->drv->bdrv_has_zero_init(bs); 1628 } 1629 1630 return 1; 1631 } 1632 1633 int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors) 1634 { 1635 if (!bs->drv) { 1636 return -ENOMEDIUM; 1637 } 1638 if (!bs->drv->bdrv_discard) { 1639 return 0; 1640 } 1641 return bs->drv->bdrv_discard(bs, sector_num, nb_sectors); 1642 } 1643 1644 /* 1645 * Returns true iff the specified sector is present in the disk image. Drivers 1646 * not implementing the functionality are assumed to not support backing files, 1647 * hence all their sectors are reported as allocated. 1648 * 1649 * 'pnum' is set to the number of sectors (including and immediately following 1650 * the specified sector) that are known to be in the same 1651 * allocated/unallocated state. 1652 * 1653 * 'nb_sectors' is the max value 'pnum' should be set to. 1654 */ 1655 int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, 1656 int *pnum) 1657 { 1658 int64_t n; 1659 if (!bs->drv->bdrv_is_allocated) { 1660 if (sector_num >= bs->total_sectors) { 1661 *pnum = 0; 1662 return 0; 1663 } 1664 n = bs->total_sectors - sector_num; 1665 *pnum = (n < nb_sectors) ? (n) : (nb_sectors); 1666 return 1; 1667 } 1668 return bs->drv->bdrv_is_allocated(bs, sector_num, nb_sectors, pnum); 1669 } 1670 1671 void bdrv_mon_event(const BlockDriverState *bdrv, 1672 BlockMonEventAction action, int is_read) 1673 { 1674 QObject *data; 1675 const char *action_str; 1676 1677 switch (action) { 1678 case BDRV_ACTION_REPORT: 1679 action_str = "report"; 1680 break; 1681 case BDRV_ACTION_IGNORE: 1682 action_str = "ignore"; 1683 break; 1684 case BDRV_ACTION_STOP: 1685 action_str = "stop"; 1686 break; 1687 default: 1688 abort(); 1689 } 1690 1691 data = qobject_from_jsonf("{ 'device': %s, 'action': %s, 'operation': %s }", 1692 bdrv->device_name, 1693 action_str, 1694 is_read ? "read" : "write"); 1695 monitor_protocol_event(QEVENT_BLOCK_IO_ERROR, data); 1696 1697 qobject_decref(data); 1698 } 1699 1700 static void bdrv_print_dict(QObject *obj, void *opaque) 1701 { 1702 QDict *bs_dict; 1703 Monitor *mon = opaque; 1704 1705 bs_dict = qobject_to_qdict(obj); 1706 1707 monitor_printf(mon, "%s: type=%s removable=%d", 1708 qdict_get_str(bs_dict, "device"), 1709 qdict_get_str(bs_dict, "type"), 1710 qdict_get_bool(bs_dict, "removable")); 1711 1712 if (qdict_get_bool(bs_dict, "removable")) { 1713 monitor_printf(mon, " locked=%d", qdict_get_bool(bs_dict, "locked")); 1714 } 1715 1716 if (qdict_haskey(bs_dict, "inserted")) { 1717 QDict *qdict = qobject_to_qdict(qdict_get(bs_dict, "inserted")); 1718 1719 monitor_printf(mon, " file="); 1720 monitor_print_filename(mon, qdict_get_str(qdict, "file")); 1721 if (qdict_haskey(qdict, "backing_file")) { 1722 monitor_printf(mon, " backing_file="); 1723 monitor_print_filename(mon, qdict_get_str(qdict, "backing_file")); 1724 } 1725 monitor_printf(mon, " ro=%d drv=%s encrypted=%d", 1726 qdict_get_bool(qdict, "ro"), 1727 qdict_get_str(qdict, "drv"), 1728 qdict_get_bool(qdict, "encrypted")); 1729 } else { 1730 monitor_printf(mon, " [not inserted]"); 1731 } 1732 1733 monitor_printf(mon, "\n"); 1734 } 1735 1736 void bdrv_info_print(Monitor *mon, const QObject *data) 1737 { 1738 qlist_iter(qobject_to_qlist(data), bdrv_print_dict, mon); 1739 } 1740 1741 void bdrv_info(Monitor *mon, QObject **ret_data) 1742 { 1743 QList *bs_list; 1744 BlockDriverState *bs; 1745 1746 bs_list = qlist_new(); 1747 1748 QTAILQ_FOREACH(bs, &bdrv_states, list) { 1749 QObject *bs_obj; 1750 const char *type = "unknown"; 1751 1752 switch(bs->type) { 1753 case BDRV_TYPE_HD: 1754 type = "hd"; 1755 break; 1756 case BDRV_TYPE_CDROM: 1757 type = "cdrom"; 1758 break; 1759 case BDRV_TYPE_FLOPPY: 1760 type = "floppy"; 1761 break; 1762 } 1763 1764 bs_obj = qobject_from_jsonf("{ 'device': %s, 'type': %s, " 1765 "'removable': %i, 'locked': %i }", 1766 bs->device_name, type, bs->removable, 1767 bs->locked); 1768 1769 if (bs->drv) { 1770 QObject *obj; 1771 QDict *bs_dict = qobject_to_qdict(bs_obj); 1772 1773 obj = qobject_from_jsonf("{ 'file': %s, 'ro': %i, 'drv': %s, " 1774 "'encrypted': %i }", 1775 bs->filename, bs->read_only, 1776 bs->drv->format_name, 1777 bdrv_is_encrypted(bs)); 1778 if (bs->backing_file[0] != '\0') { 1779 QDict *qdict = qobject_to_qdict(obj); 1780 qdict_put(qdict, "backing_file", 1781 qstring_from_str(bs->backing_file)); 1782 } 1783 1784 qdict_put_obj(bs_dict, "inserted", obj); 1785 } 1786 qlist_append_obj(bs_list, bs_obj); 1787 } 1788 1789 *ret_data = QOBJECT(bs_list); 1790 } 1791 1792 static void bdrv_stats_iter(QObject *data, void *opaque) 1793 { 1794 QDict *qdict; 1795 Monitor *mon = opaque; 1796 1797 qdict = qobject_to_qdict(data); 1798 monitor_printf(mon, "%s:", qdict_get_str(qdict, "device")); 1799 1800 qdict = qobject_to_qdict(qdict_get(qdict, "stats")); 1801 monitor_printf(mon, " rd_bytes=%" PRId64 1802 " wr_bytes=%" PRId64 1803 " rd_operations=%" PRId64 1804 " wr_operations=%" PRId64 1805 "\n", 1806 qdict_get_int(qdict, "rd_bytes"), 1807 qdict_get_int(qdict, "wr_bytes"), 1808 qdict_get_int(qdict, "rd_operations"), 1809 qdict_get_int(qdict, "wr_operations")); 1810 } 1811 1812 void bdrv_stats_print(Monitor *mon, const QObject *data) 1813 { 1814 qlist_iter(qobject_to_qlist(data), bdrv_stats_iter, mon); 1815 } 1816 1817 static QObject* bdrv_info_stats_bs(BlockDriverState *bs) 1818 { 1819 QObject *res; 1820 QDict *dict; 1821 1822 res = qobject_from_jsonf("{ 'stats': {" 1823 "'rd_bytes': %" PRId64 "," 1824 "'wr_bytes': %" PRId64 "," 1825 "'rd_operations': %" PRId64 "," 1826 "'wr_operations': %" PRId64 "," 1827 "'wr_highest_offset': %" PRId64 1828 "} }", 1829 bs->rd_bytes, bs->wr_bytes, 1830 bs->rd_ops, bs->wr_ops, 1831 bs->wr_highest_sector * 1832 (uint64_t)BDRV_SECTOR_SIZE); 1833 dict = qobject_to_qdict(res); 1834 1835 if (*bs->device_name) { 1836 qdict_put(dict, "device", qstring_from_str(bs->device_name)); 1837 } 1838 1839 if (bs->file) { 1840 QObject *parent = bdrv_info_stats_bs(bs->file); 1841 qdict_put_obj(dict, "parent", parent); 1842 } 1843 1844 return res; 1845 } 1846 1847 void bdrv_info_stats(Monitor *mon, QObject **ret_data) 1848 { 1849 QObject *obj; 1850 QList *devices; 1851 BlockDriverState *bs; 1852 1853 devices = qlist_new(); 1854 1855 QTAILQ_FOREACH(bs, &bdrv_states, list) { 1856 obj = bdrv_info_stats_bs(bs); 1857 qlist_append_obj(devices, obj); 1858 } 1859 1860 *ret_data = QOBJECT(devices); 1861 } 1862 1863 const char *bdrv_get_encrypted_filename(BlockDriverState *bs) 1864 { 1865 if (bs->backing_hd && bs->backing_hd->encrypted) 1866 return bs->backing_file; 1867 else if (bs->encrypted) 1868 return bs->filename; 1869 else 1870 return NULL; 1871 } 1872 1873 void bdrv_get_backing_filename(BlockDriverState *bs, 1874 char *filename, int filename_size) 1875 { 1876 if (!bs->backing_file) { 1877 pstrcpy(filename, filename_size, ""); 1878 } else { 1879 pstrcpy(filename, filename_size, bs->backing_file); 1880 } 1881 } 1882 1883 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, 1884 const uint8_t *buf, int nb_sectors) 1885 { 1886 BlockDriver *drv = bs->drv; 1887 if (!drv) 1888 return -ENOMEDIUM; 1889 if (!drv->bdrv_write_compressed) 1890 return -ENOTSUP; 1891 if (bdrv_check_request(bs, sector_num, nb_sectors)) 1892 return -EIO; 1893 1894 if (bs->dirty_bitmap) { 1895 set_dirty_bitmap(bs, sector_num, nb_sectors, 1); 1896 } 1897 1898 return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors); 1899 } 1900 1901 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) 1902 { 1903 BlockDriver *drv = bs->drv; 1904 if (!drv) 1905 return -ENOMEDIUM; 1906 if (!drv->bdrv_get_info) 1907 return -ENOTSUP; 1908 memset(bdi, 0, sizeof(*bdi)); 1909 return drv->bdrv_get_info(bs, bdi); 1910 } 1911 1912 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf, 1913 int64_t pos, int size) 1914 { 1915 BlockDriver *drv = bs->drv; 1916 if (!drv) 1917 return -ENOMEDIUM; 1918 if (drv->bdrv_save_vmstate) 1919 return drv->bdrv_save_vmstate(bs, buf, pos, size); 1920 if (bs->file) 1921 return bdrv_save_vmstate(bs->file, buf, pos, size); 1922 return -ENOTSUP; 1923 } 1924 1925 int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf, 1926 int64_t pos, int size) 1927 { 1928 BlockDriver *drv = bs->drv; 1929 if (!drv) 1930 return -ENOMEDIUM; 1931 if (drv->bdrv_load_vmstate) 1932 return drv->bdrv_load_vmstate(bs, buf, pos, size); 1933 if (bs->file) 1934 return bdrv_load_vmstate(bs->file, buf, pos, size); 1935 return -ENOTSUP; 1936 } 1937 1938 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event) 1939 { 1940 BlockDriver *drv = bs->drv; 1941 1942 if (!drv || !drv->bdrv_debug_event) { 1943 return; 1944 } 1945 1946 return drv->bdrv_debug_event(bs, event); 1947 1948 } 1949 1950 /**************************************************************/ 1951 /* handling of snapshots */ 1952 1953 int bdrv_can_snapshot(BlockDriverState *bs) 1954 { 1955 BlockDriver *drv = bs->drv; 1956 if (!drv || bdrv_is_removable(bs) || bdrv_is_read_only(bs)) { 1957 return 0; 1958 } 1959 1960 if (!drv->bdrv_snapshot_create) { 1961 if (bs->file != NULL) { 1962 return bdrv_can_snapshot(bs->file); 1963 } 1964 return 0; 1965 } 1966 1967 return 1; 1968 } 1969 1970 int bdrv_is_snapshot(BlockDriverState *bs) 1971 { 1972 return !!(bs->open_flags & BDRV_O_SNAPSHOT); 1973 } 1974 1975 BlockDriverState *bdrv_snapshots(void) 1976 { 1977 BlockDriverState *bs; 1978 1979 if (bs_snapshots) { 1980 return bs_snapshots; 1981 } 1982 1983 bs = NULL; 1984 while ((bs = bdrv_next(bs))) { 1985 if (bdrv_can_snapshot(bs)) { 1986 bs_snapshots = bs; 1987 return bs; 1988 } 1989 } 1990 return NULL; 1991 } 1992 1993 int bdrv_snapshot_create(BlockDriverState *bs, 1994 QEMUSnapshotInfo *sn_info) 1995 { 1996 BlockDriver *drv = bs->drv; 1997 if (!drv) 1998 return -ENOMEDIUM; 1999 if (drv->bdrv_snapshot_create) 2000 return drv->bdrv_snapshot_create(bs, sn_info); 2001 if (bs->file) 2002 return bdrv_snapshot_create(bs->file, sn_info); 2003 return -ENOTSUP; 2004 } 2005 2006 int bdrv_snapshot_goto(BlockDriverState *bs, 2007 const char *snapshot_id) 2008 { 2009 BlockDriver *drv = bs->drv; 2010 int ret, open_ret; 2011 2012 if (!drv) 2013 return -ENOMEDIUM; 2014 if (drv->bdrv_snapshot_goto) 2015 return drv->bdrv_snapshot_goto(bs, snapshot_id); 2016 2017 if (bs->file) { 2018 drv->bdrv_close(bs); 2019 ret = bdrv_snapshot_goto(bs->file, snapshot_id); 2020 open_ret = drv->bdrv_open(bs, bs->open_flags); 2021 if (open_ret < 0) { 2022 bdrv_delete(bs->file); 2023 bs->drv = NULL; 2024 return open_ret; 2025 } 2026 return ret; 2027 } 2028 2029 return -ENOTSUP; 2030 } 2031 2032 int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id) 2033 { 2034 BlockDriver *drv = bs->drv; 2035 if (!drv) 2036 return -ENOMEDIUM; 2037 if (drv->bdrv_snapshot_delete) 2038 return drv->bdrv_snapshot_delete(bs, snapshot_id); 2039 if (bs->file) 2040 return bdrv_snapshot_delete(bs->file, snapshot_id); 2041 return -ENOTSUP; 2042 } 2043 2044 int bdrv_snapshot_list(BlockDriverState *bs, 2045 QEMUSnapshotInfo **psn_info) 2046 { 2047 BlockDriver *drv = bs->drv; 2048 if (!drv) 2049 return -ENOMEDIUM; 2050 if (drv->bdrv_snapshot_list) 2051 return drv->bdrv_snapshot_list(bs, psn_info); 2052 if (bs->file) 2053 return bdrv_snapshot_list(bs->file, psn_info); 2054 return -ENOTSUP; 2055 } 2056 2057 int bdrv_snapshot_load_tmp(BlockDriverState *bs, 2058 const char *snapshot_name) 2059 { 2060 BlockDriver *drv = bs->drv; 2061 if (!drv) { 2062 return -ENOMEDIUM; 2063 } 2064 if (!bs->read_only) { 2065 return -EINVAL; 2066 } 2067 if (drv->bdrv_snapshot_load_tmp) { 2068 return drv->bdrv_snapshot_load_tmp(bs, snapshot_name); 2069 } 2070 return -ENOTSUP; 2071 } 2072 2073 #define NB_SUFFIXES 4 2074 2075 char *get_human_readable_size(char *buf, int buf_size, int64_t size) 2076 { 2077 static const char suffixes[NB_SUFFIXES] = "KMGT"; 2078 int64_t base; 2079 int i; 2080 2081 if (size <= 999) { 2082 snprintf(buf, buf_size, "%" PRId64, size); 2083 } else { 2084 base = 1024; 2085 for(i = 0; i < NB_SUFFIXES; i++) { 2086 if (size < (10 * base)) { 2087 snprintf(buf, buf_size, "%0.1f%c", 2088 (double)size / base, 2089 suffixes[i]); 2090 break; 2091 } else if (size < (1000 * base) || i == (NB_SUFFIXES - 1)) { 2092 snprintf(buf, buf_size, "%" PRId64 "%c", 2093 ((size + (base >> 1)) / base), 2094 suffixes[i]); 2095 break; 2096 } 2097 base = base * 1024; 2098 } 2099 } 2100 return buf; 2101 } 2102 2103 char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn) 2104 { 2105 char buf1[128], date_buf[128], clock_buf[128]; 2106 #ifdef _WIN32 2107 struct tm *ptm; 2108 #else 2109 struct tm tm; 2110 #endif 2111 time_t ti; 2112 int64_t secs; 2113 2114 if (!sn) { 2115 snprintf(buf, buf_size, 2116 "%-10s%-20s%7s%20s%15s", 2117 "ID", "TAG", "VM SIZE", "DATE", "VM CLOCK"); 2118 } else { 2119 ti = sn->date_sec; 2120 #ifdef _WIN32 2121 ptm = localtime(&ti); 2122 strftime(date_buf, sizeof(date_buf), 2123 "%Y-%m-%d %H:%M:%S", ptm); 2124 #else 2125 localtime_r(&ti, &tm); 2126 strftime(date_buf, sizeof(date_buf), 2127 "%Y-%m-%d %H:%M:%S", &tm); 2128 #endif 2129 secs = sn->vm_clock_nsec / 1000000000; 2130 snprintf(clock_buf, sizeof(clock_buf), 2131 "%02d:%02d:%02d.%03d", 2132 (int)(secs / 3600), 2133 (int)((secs / 60) % 60), 2134 (int)(secs % 60), 2135 (int)((sn->vm_clock_nsec / 1000000) % 1000)); 2136 snprintf(buf, buf_size, 2137 "%-10s%-20s%7s%20s%15s", 2138 sn->id_str, sn->name, 2139 get_human_readable_size(buf1, sizeof(buf1), sn->vm_state_size), 2140 date_buf, 2141 clock_buf); 2142 } 2143 return buf; 2144 } 2145 2146 2147 /**************************************************************/ 2148 /* async I/Os */ 2149 2150 BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num, 2151 QEMUIOVector *qiov, int nb_sectors, 2152 BlockDriverCompletionFunc *cb, void *opaque) 2153 { 2154 BlockDriver *drv = bs->drv; 2155 BlockDriverAIOCB *ret; 2156 2157 trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque); 2158 2159 if (!drv) 2160 return NULL; 2161 if (bdrv_check_request(bs, sector_num, nb_sectors)) 2162 return NULL; 2163 2164 ret = drv->bdrv_aio_readv(bs, sector_num, qiov, nb_sectors, 2165 cb, opaque); 2166 2167 if (ret) { 2168 /* Update stats even though technically transfer has not happened. */ 2169 bs->rd_bytes += (unsigned) nb_sectors * BDRV_SECTOR_SIZE; 2170 bs->rd_ops ++; 2171 } 2172 2173 return ret; 2174 } 2175 2176 typedef struct BlockCompleteData { 2177 BlockDriverCompletionFunc *cb; 2178 void *opaque; 2179 BlockDriverState *bs; 2180 int64_t sector_num; 2181 int nb_sectors; 2182 } BlockCompleteData; 2183 2184 static void block_complete_cb(void *opaque, int ret) 2185 { 2186 BlockCompleteData *b = opaque; 2187 2188 if (b->bs->dirty_bitmap) { 2189 set_dirty_bitmap(b->bs, b->sector_num, b->nb_sectors, 1); 2190 } 2191 b->cb(b->opaque, ret); 2192 qemu_free(b); 2193 } 2194 2195 static BlockCompleteData *blk_dirty_cb_alloc(BlockDriverState *bs, 2196 int64_t sector_num, 2197 int nb_sectors, 2198 BlockDriverCompletionFunc *cb, 2199 void *opaque) 2200 { 2201 BlockCompleteData *blkdata = qemu_mallocz(sizeof(BlockCompleteData)); 2202 2203 blkdata->bs = bs; 2204 blkdata->cb = cb; 2205 blkdata->opaque = opaque; 2206 blkdata->sector_num = sector_num; 2207 blkdata->nb_sectors = nb_sectors; 2208 2209 return blkdata; 2210 } 2211 2212 BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num, 2213 QEMUIOVector *qiov, int nb_sectors, 2214 BlockDriverCompletionFunc *cb, void *opaque) 2215 { 2216 BlockDriver *drv = bs->drv; 2217 BlockDriverAIOCB *ret; 2218 BlockCompleteData *blk_cb_data; 2219 2220 trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque); 2221 2222 if (!drv) 2223 return NULL; 2224 if (bs->read_only) 2225 return NULL; 2226 if (bdrv_check_request(bs, sector_num, nb_sectors)) 2227 return NULL; 2228 2229 if (bs->dirty_bitmap) { 2230 blk_cb_data = blk_dirty_cb_alloc(bs, sector_num, nb_sectors, cb, 2231 opaque); 2232 cb = &block_complete_cb; 2233 opaque = blk_cb_data; 2234 } 2235 2236 ret = drv->bdrv_aio_writev(bs, sector_num, qiov, nb_sectors, 2237 cb, opaque); 2238 2239 if (ret) { 2240 /* Update stats even though technically transfer has not happened. */ 2241 bs->wr_bytes += (unsigned) nb_sectors * BDRV_SECTOR_SIZE; 2242 bs->wr_ops ++; 2243 if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { 2244 bs->wr_highest_sector = sector_num + nb_sectors - 1; 2245 } 2246 } 2247 2248 return ret; 2249 } 2250 2251 2252 typedef struct MultiwriteCB { 2253 int error; 2254 int num_requests; 2255 int num_callbacks; 2256 struct { 2257 BlockDriverCompletionFunc *cb; 2258 void *opaque; 2259 QEMUIOVector *free_qiov; 2260 void *free_buf; 2261 } callbacks[]; 2262 } MultiwriteCB; 2263 2264 static void multiwrite_user_cb(MultiwriteCB *mcb) 2265 { 2266 int i; 2267 2268 for (i = 0; i < mcb->num_callbacks; i++) { 2269 mcb->callbacks[i].cb(mcb->callbacks[i].opaque, mcb->error); 2270 if (mcb->callbacks[i].free_qiov) { 2271 qemu_iovec_destroy(mcb->callbacks[i].free_qiov); 2272 } 2273 qemu_free(mcb->callbacks[i].free_qiov); 2274 qemu_vfree(mcb->callbacks[i].free_buf); 2275 } 2276 } 2277 2278 static void multiwrite_cb(void *opaque, int ret) 2279 { 2280 MultiwriteCB *mcb = opaque; 2281 2282 trace_multiwrite_cb(mcb, ret); 2283 2284 if (ret < 0 && !mcb->error) { 2285 mcb->error = ret; 2286 } 2287 2288 mcb->num_requests--; 2289 if (mcb->num_requests == 0) { 2290 multiwrite_user_cb(mcb); 2291 qemu_free(mcb); 2292 } 2293 } 2294 2295 static int multiwrite_req_compare(const void *a, const void *b) 2296 { 2297 const BlockRequest *req1 = a, *req2 = b; 2298 2299 /* 2300 * Note that we can't simply subtract req2->sector from req1->sector 2301 * here as that could overflow the return value. 2302 */ 2303 if (req1->sector > req2->sector) { 2304 return 1; 2305 } else if (req1->sector < req2->sector) { 2306 return -1; 2307 } else { 2308 return 0; 2309 } 2310 } 2311 2312 /* 2313 * Takes a bunch of requests and tries to merge them. Returns the number of 2314 * requests that remain after merging. 2315 */ 2316 static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs, 2317 int num_reqs, MultiwriteCB *mcb) 2318 { 2319 int i, outidx; 2320 2321 // Sort requests by start sector 2322 qsort(reqs, num_reqs, sizeof(*reqs), &multiwrite_req_compare); 2323 2324 // Check if adjacent requests touch the same clusters. If so, combine them, 2325 // filling up gaps with zero sectors. 2326 outidx = 0; 2327 for (i = 1; i < num_reqs; i++) { 2328 int merge = 0; 2329 int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors; 2330 2331 // This handles the cases that are valid for all block drivers, namely 2332 // exactly sequential writes and overlapping writes. 2333 if (reqs[i].sector <= oldreq_last) { 2334 merge = 1; 2335 } 2336 2337 // The block driver may decide that it makes sense to combine requests 2338 // even if there is a gap of some sectors between them. In this case, 2339 // the gap is filled with zeros (therefore only applicable for yet 2340 // unused space in format like qcow2). 2341 if (!merge && bs->drv->bdrv_merge_requests) { 2342 merge = bs->drv->bdrv_merge_requests(bs, &reqs[outidx], &reqs[i]); 2343 } 2344 2345 if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) { 2346 merge = 0; 2347 } 2348 2349 if (merge) { 2350 size_t size; 2351 QEMUIOVector *qiov = qemu_mallocz(sizeof(*qiov)); 2352 qemu_iovec_init(qiov, 2353 reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1); 2354 2355 // Add the first request to the merged one. If the requests are 2356 // overlapping, drop the last sectors of the first request. 2357 size = (reqs[i].sector - reqs[outidx].sector) << 9; 2358 qemu_iovec_concat(qiov, reqs[outidx].qiov, size); 2359 2360 // We might need to add some zeros between the two requests 2361 if (reqs[i].sector > oldreq_last) { 2362 size_t zero_bytes = (reqs[i].sector - oldreq_last) << 9; 2363 uint8_t *buf = qemu_blockalign(bs, zero_bytes); 2364 memset(buf, 0, zero_bytes); 2365 qemu_iovec_add(qiov, buf, zero_bytes); 2366 mcb->callbacks[i].free_buf = buf; 2367 } 2368 2369 // Add the second request 2370 qemu_iovec_concat(qiov, reqs[i].qiov, reqs[i].qiov->size); 2371 2372 reqs[outidx].nb_sectors = qiov->size >> 9; 2373 reqs[outidx].qiov = qiov; 2374 2375 mcb->callbacks[i].free_qiov = reqs[outidx].qiov; 2376 } else { 2377 outidx++; 2378 reqs[outidx].sector = reqs[i].sector; 2379 reqs[outidx].nb_sectors = reqs[i].nb_sectors; 2380 reqs[outidx].qiov = reqs[i].qiov; 2381 } 2382 } 2383 2384 return outidx + 1; 2385 } 2386 2387 /* 2388 * Submit multiple AIO write requests at once. 2389 * 2390 * On success, the function returns 0 and all requests in the reqs array have 2391 * been submitted. In error case this function returns -1, and any of the 2392 * requests may or may not be submitted yet. In particular, this means that the 2393 * callback will be called for some of the requests, for others it won't. The 2394 * caller must check the error field of the BlockRequest to wait for the right 2395 * callbacks (if error != 0, no callback will be called). 2396 * 2397 * The implementation may modify the contents of the reqs array, e.g. to merge 2398 * requests. However, the fields opaque and error are left unmodified as they 2399 * are used to signal failure for a single request to the caller. 2400 */ 2401 int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs) 2402 { 2403 BlockDriverAIOCB *acb; 2404 MultiwriteCB *mcb; 2405 int i; 2406 2407 /* don't submit writes if we don't have a medium */ 2408 if (bs->drv == NULL) { 2409 for (i = 0; i < num_reqs; i++) { 2410 reqs[i].error = -ENOMEDIUM; 2411 } 2412 return -1; 2413 } 2414 2415 if (num_reqs == 0) { 2416 return 0; 2417 } 2418 2419 // Create MultiwriteCB structure 2420 mcb = qemu_mallocz(sizeof(*mcb) + num_reqs * sizeof(*mcb->callbacks)); 2421 mcb->num_requests = 0; 2422 mcb->num_callbacks = num_reqs; 2423 2424 for (i = 0; i < num_reqs; i++) { 2425 mcb->callbacks[i].cb = reqs[i].cb; 2426 mcb->callbacks[i].opaque = reqs[i].opaque; 2427 } 2428 2429 // Check for mergable requests 2430 num_reqs = multiwrite_merge(bs, reqs, num_reqs, mcb); 2431 2432 trace_bdrv_aio_multiwrite(mcb, mcb->num_callbacks, num_reqs); 2433 2434 /* 2435 * Run the aio requests. As soon as one request can't be submitted 2436 * successfully, fail all requests that are not yet submitted (we must 2437 * return failure for all requests anyway) 2438 * 2439 * num_requests cannot be set to the right value immediately: If 2440 * bdrv_aio_writev fails for some request, num_requests would be too high 2441 * and therefore multiwrite_cb() would never recognize the multiwrite 2442 * request as completed. We also cannot use the loop variable i to set it 2443 * when the first request fails because the callback may already have been 2444 * called for previously submitted requests. Thus, num_requests must be 2445 * incremented for each request that is submitted. 2446 * 2447 * The problem that callbacks may be called early also means that we need 2448 * to take care that num_requests doesn't become 0 before all requests are 2449 * submitted - multiwrite_cb() would consider the multiwrite request 2450 * completed. A dummy request that is "completed" by a manual call to 2451 * multiwrite_cb() takes care of this. 2452 */ 2453 mcb->num_requests = 1; 2454 2455 // Run the aio requests 2456 for (i = 0; i < num_reqs; i++) { 2457 mcb->num_requests++; 2458 acb = bdrv_aio_writev(bs, reqs[i].sector, reqs[i].qiov, 2459 reqs[i].nb_sectors, multiwrite_cb, mcb); 2460 2461 if (acb == NULL) { 2462 // We can only fail the whole thing if no request has been 2463 // submitted yet. Otherwise we'll wait for the submitted AIOs to 2464 // complete and report the error in the callback. 2465 if (i == 0) { 2466 trace_bdrv_aio_multiwrite_earlyfail(mcb); 2467 goto fail; 2468 } else { 2469 trace_bdrv_aio_multiwrite_latefail(mcb, i); 2470 multiwrite_cb(mcb, -EIO); 2471 break; 2472 } 2473 } 2474 } 2475 2476 /* Complete the dummy request */ 2477 multiwrite_cb(mcb, 0); 2478 2479 return 0; 2480 2481 fail: 2482 for (i = 0; i < mcb->num_callbacks; i++) { 2483 reqs[i].error = -EIO; 2484 } 2485 qemu_free(mcb); 2486 return -1; 2487 } 2488 2489 BlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs, 2490 BlockDriverCompletionFunc *cb, void *opaque) 2491 { 2492 BlockDriver *drv = bs->drv; 2493 2494 trace_bdrv_aio_flush(bs, opaque); 2495 2496 if (bs->open_flags & BDRV_O_NO_FLUSH) { 2497 return bdrv_aio_noop_em(bs, cb, opaque); 2498 } 2499 2500 if (!drv) 2501 return NULL; 2502 return drv->bdrv_aio_flush(bs, cb, opaque); 2503 } 2504 2505 void bdrv_aio_cancel(BlockDriverAIOCB *acb) 2506 { 2507 acb->pool->cancel(acb); 2508 } 2509 2510 2511 /**************************************************************/ 2512 /* async block device emulation */ 2513 2514 typedef struct BlockDriverAIOCBSync { 2515 BlockDriverAIOCB common; 2516 QEMUBH *bh; 2517 int ret; 2518 /* vector translation state */ 2519 QEMUIOVector *qiov; 2520 uint8_t *bounce; 2521 int is_write; 2522 } BlockDriverAIOCBSync; 2523 2524 static void bdrv_aio_cancel_em(BlockDriverAIOCB *blockacb) 2525 { 2526 BlockDriverAIOCBSync *acb = 2527 container_of(blockacb, BlockDriverAIOCBSync, common); 2528 qemu_bh_delete(acb->bh); 2529 acb->bh = NULL; 2530 qemu_aio_release(acb); 2531 } 2532 2533 static AIOPool bdrv_em_aio_pool = { 2534 .aiocb_size = sizeof(BlockDriverAIOCBSync), 2535 .cancel = bdrv_aio_cancel_em, 2536 }; 2537 2538 static void bdrv_aio_bh_cb(void *opaque) 2539 { 2540 BlockDriverAIOCBSync *acb = opaque; 2541 2542 if (!acb->is_write) 2543 qemu_iovec_from_buffer(acb->qiov, acb->bounce, acb->qiov->size); 2544 qemu_vfree(acb->bounce); 2545 acb->common.cb(acb->common.opaque, acb->ret); 2546 qemu_bh_delete(acb->bh); 2547 acb->bh = NULL; 2548 qemu_aio_release(acb); 2549 } 2550 2551 static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs, 2552 int64_t sector_num, 2553 QEMUIOVector *qiov, 2554 int nb_sectors, 2555 BlockDriverCompletionFunc *cb, 2556 void *opaque, 2557 int is_write) 2558 2559 { 2560 BlockDriverAIOCBSync *acb; 2561 2562 acb = qemu_aio_get(&bdrv_em_aio_pool, bs, cb, opaque); 2563 acb->is_write = is_write; 2564 acb->qiov = qiov; 2565 acb->bounce = qemu_blockalign(bs, qiov->size); 2566 2567 if (!acb->bh) 2568 acb->bh = qemu_bh_new(bdrv_aio_bh_cb, acb); 2569 2570 if (is_write) { 2571 qemu_iovec_to_buffer(acb->qiov, acb->bounce); 2572 acb->ret = bdrv_write(bs, sector_num, acb->bounce, nb_sectors); 2573 } else { 2574 acb->ret = bdrv_read(bs, sector_num, acb->bounce, nb_sectors); 2575 } 2576 2577 qemu_bh_schedule(acb->bh); 2578 2579 return &acb->common; 2580 } 2581 2582 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs, 2583 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 2584 BlockDriverCompletionFunc *cb, void *opaque) 2585 { 2586 return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 0); 2587 } 2588 2589 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs, 2590 int64_t sector_num, QEMUIOVector *qiov, int nb_sectors, 2591 BlockDriverCompletionFunc *cb, void *opaque) 2592 { 2593 return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 1); 2594 } 2595 2596 static BlockDriverAIOCB *bdrv_aio_flush_em(BlockDriverState *bs, 2597 BlockDriverCompletionFunc *cb, void *opaque) 2598 { 2599 BlockDriverAIOCBSync *acb; 2600 2601 acb = qemu_aio_get(&bdrv_em_aio_pool, bs, cb, opaque); 2602 acb->is_write = 1; /* don't bounce in the completion hadler */ 2603 acb->qiov = NULL; 2604 acb->bounce = NULL; 2605 acb->ret = 0; 2606 2607 if (!acb->bh) 2608 acb->bh = qemu_bh_new(bdrv_aio_bh_cb, acb); 2609 2610 bdrv_flush(bs); 2611 qemu_bh_schedule(acb->bh); 2612 return &acb->common; 2613 } 2614 2615 static BlockDriverAIOCB *bdrv_aio_noop_em(BlockDriverState *bs, 2616 BlockDriverCompletionFunc *cb, void *opaque) 2617 { 2618 BlockDriverAIOCBSync *acb; 2619 2620 acb = qemu_aio_get(&bdrv_em_aio_pool, bs, cb, opaque); 2621 acb->is_write = 1; /* don't bounce in the completion handler */ 2622 acb->qiov = NULL; 2623 acb->bounce = NULL; 2624 acb->ret = 0; 2625 2626 if (!acb->bh) { 2627 acb->bh = qemu_bh_new(bdrv_aio_bh_cb, acb); 2628 } 2629 2630 qemu_bh_schedule(acb->bh); 2631 return &acb->common; 2632 } 2633 2634 /**************************************************************/ 2635 /* sync block device emulation */ 2636 2637 static void bdrv_rw_em_cb(void *opaque, int ret) 2638 { 2639 *(int *)opaque = ret; 2640 } 2641 2642 #define NOT_DONE 0x7fffffff 2643 2644 static int bdrv_read_em(BlockDriverState *bs, int64_t sector_num, 2645 uint8_t *buf, int nb_sectors) 2646 { 2647 int async_ret; 2648 BlockDriverAIOCB *acb; 2649 struct iovec iov; 2650 QEMUIOVector qiov; 2651 2652 async_context_push(); 2653 2654 async_ret = NOT_DONE; 2655 iov.iov_base = (void *)buf; 2656 iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; 2657 qemu_iovec_init_external(&qiov, &iov, 1); 2658 acb = bdrv_aio_readv(bs, sector_num, &qiov, nb_sectors, 2659 bdrv_rw_em_cb, &async_ret); 2660 if (acb == NULL) { 2661 async_ret = -1; 2662 goto fail; 2663 } 2664 2665 while (async_ret == NOT_DONE) { 2666 qemu_aio_wait(); 2667 } 2668 2669 2670 fail: 2671 async_context_pop(); 2672 return async_ret; 2673 } 2674 2675 static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, 2676 const uint8_t *buf, int nb_sectors) 2677 { 2678 int async_ret; 2679 BlockDriverAIOCB *acb; 2680 struct iovec iov; 2681 QEMUIOVector qiov; 2682 2683 async_context_push(); 2684 2685 async_ret = NOT_DONE; 2686 iov.iov_base = (void *)buf; 2687 iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; 2688 qemu_iovec_init_external(&qiov, &iov, 1); 2689 acb = bdrv_aio_writev(bs, sector_num, &qiov, nb_sectors, 2690 bdrv_rw_em_cb, &async_ret); 2691 if (acb == NULL) { 2692 async_ret = -1; 2693 goto fail; 2694 } 2695 while (async_ret == NOT_DONE) { 2696 qemu_aio_wait(); 2697 } 2698 2699 fail: 2700 async_context_pop(); 2701 return async_ret; 2702 } 2703 2704 void bdrv_init(void) 2705 { 2706 module_call_init(MODULE_INIT_BLOCK); 2707 } 2708 2709 void bdrv_init_with_whitelist(void) 2710 { 2711 use_bdrv_whitelist = 1; 2712 bdrv_init(); 2713 } 2714 2715 void *qemu_aio_get(AIOPool *pool, BlockDriverState *bs, 2716 BlockDriverCompletionFunc *cb, void *opaque) 2717 { 2718 BlockDriverAIOCB *acb; 2719 2720 if (pool->free_aiocb) { 2721 acb = pool->free_aiocb; 2722 pool->free_aiocb = acb->next; 2723 } else { 2724 acb = qemu_mallocz(pool->aiocb_size); 2725 acb->pool = pool; 2726 } 2727 acb->bs = bs; 2728 acb->cb = cb; 2729 acb->opaque = opaque; 2730 return acb; 2731 } 2732 2733 void qemu_aio_release(void *p) 2734 { 2735 BlockDriverAIOCB *acb = (BlockDriverAIOCB *)p; 2736 AIOPool *pool = acb->pool; 2737 acb->next = pool->free_aiocb; 2738 pool->free_aiocb = acb; 2739 } 2740 2741 /**************************************************************/ 2742 /* removable device support */ 2743 2744 /** 2745 * Return TRUE if the media is present 2746 */ 2747 int bdrv_is_inserted(BlockDriverState *bs) 2748 { 2749 BlockDriver *drv = bs->drv; 2750 int ret; 2751 if (!drv) 2752 return 0; 2753 if (!drv->bdrv_is_inserted) 2754 return !bs->tray_open; 2755 ret = drv->bdrv_is_inserted(bs); 2756 return ret; 2757 } 2758 2759 /** 2760 * Return TRUE if the media changed since the last call to this 2761 * function. It is currently only used for floppy disks 2762 */ 2763 int bdrv_media_changed(BlockDriverState *bs) 2764 { 2765 BlockDriver *drv = bs->drv; 2766 int ret; 2767 2768 if (!drv || !drv->bdrv_media_changed) 2769 ret = -ENOTSUP; 2770 else 2771 ret = drv->bdrv_media_changed(bs); 2772 if (ret == -ENOTSUP) 2773 ret = bs->media_changed; 2774 bs->media_changed = 0; 2775 return ret; 2776 } 2777 2778 /** 2779 * If eject_flag is TRUE, eject the media. Otherwise, close the tray 2780 */ 2781 int bdrv_eject(BlockDriverState *bs, int eject_flag) 2782 { 2783 BlockDriver *drv = bs->drv; 2784 int ret; 2785 2786 if (bs->locked) { 2787 return -EBUSY; 2788 } 2789 2790 if (!drv || !drv->bdrv_eject) { 2791 ret = -ENOTSUP; 2792 } else { 2793 ret = drv->bdrv_eject(bs, eject_flag); 2794 } 2795 if (ret == -ENOTSUP) { 2796 ret = 0; 2797 } 2798 if (ret >= 0) { 2799 bs->tray_open = eject_flag; 2800 } 2801 2802 return ret; 2803 } 2804 2805 int bdrv_is_locked(BlockDriverState *bs) 2806 { 2807 return bs->locked; 2808 } 2809 2810 /** 2811 * Lock or unlock the media (if it is locked, the user won't be able 2812 * to eject it manually). 2813 */ 2814 void bdrv_set_locked(BlockDriverState *bs, int locked) 2815 { 2816 BlockDriver *drv = bs->drv; 2817 2818 trace_bdrv_set_locked(bs, locked); 2819 2820 bs->locked = locked; 2821 if (drv && drv->bdrv_set_locked) { 2822 drv->bdrv_set_locked(bs, locked); 2823 } 2824 } 2825 2826 /* needed for generic scsi interface */ 2827 2828 int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf) 2829 { 2830 BlockDriver *drv = bs->drv; 2831 2832 if (drv && drv->bdrv_ioctl) 2833 return drv->bdrv_ioctl(bs, req, buf); 2834 return -ENOTSUP; 2835 } 2836 2837 BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs, 2838 unsigned long int req, void *buf, 2839 BlockDriverCompletionFunc *cb, void *opaque) 2840 { 2841 BlockDriver *drv = bs->drv; 2842 2843 if (drv && drv->bdrv_aio_ioctl) 2844 return drv->bdrv_aio_ioctl(bs, req, buf, cb, opaque); 2845 return NULL; 2846 } 2847 2848 2849 2850 void *qemu_blockalign(BlockDriverState *bs, size_t size) 2851 { 2852 return qemu_memalign((bs && bs->buffer_alignment) ? bs->buffer_alignment : 512, size); 2853 } 2854 2855 void bdrv_set_dirty_tracking(BlockDriverState *bs, int enable) 2856 { 2857 int64_t bitmap_size; 2858 2859 bs->dirty_count = 0; 2860 if (enable) { 2861 if (!bs->dirty_bitmap) { 2862 bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS) + 2863 BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1; 2864 bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * 8; 2865 2866 bs->dirty_bitmap = qemu_mallocz(bitmap_size); 2867 } 2868 } else { 2869 if (bs->dirty_bitmap) { 2870 qemu_free(bs->dirty_bitmap); 2871 bs->dirty_bitmap = NULL; 2872 } 2873 } 2874 } 2875 2876 int bdrv_get_dirty(BlockDriverState *bs, int64_t sector) 2877 { 2878 int64_t chunk = sector / (int64_t)BDRV_SECTORS_PER_DIRTY_CHUNK; 2879 2880 if (bs->dirty_bitmap && 2881 (sector << BDRV_SECTOR_BITS) < bdrv_getlength(bs)) { 2882 return !!(bs->dirty_bitmap[chunk / (sizeof(unsigned long) * 8)] & 2883 (1UL << (chunk % (sizeof(unsigned long) * 8)))); 2884 } else { 2885 return 0; 2886 } 2887 } 2888 2889 void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, 2890 int nr_sectors) 2891 { 2892 set_dirty_bitmap(bs, cur_sector, nr_sectors, 0); 2893 } 2894 2895 int64_t bdrv_get_dirty_count(BlockDriverState *bs) 2896 { 2897 return bs->dirty_count; 2898 } 2899 2900 void bdrv_set_in_use(BlockDriverState *bs, int in_use) 2901 { 2902 assert(bs->in_use != in_use); 2903 bs->in_use = in_use; 2904 } 2905 2906 int bdrv_in_use(BlockDriverState *bs) 2907 { 2908 return bs->in_use; 2909 } 2910 2911 int bdrv_img_create(const char *filename, const char *fmt, 2912 const char *base_filename, const char *base_fmt, 2913 char *options, uint64_t img_size, int flags) 2914 { 2915 QEMUOptionParameter *param = NULL, *create_options = NULL; 2916 QEMUOptionParameter *backing_fmt, *backing_file; 2917 BlockDriverState *bs = NULL; 2918 BlockDriver *drv, *proto_drv; 2919 BlockDriver *backing_drv = NULL; 2920 int ret = 0; 2921 2922 /* Find driver and parse its options */ 2923 drv = bdrv_find_format(fmt); 2924 if (!drv) { 2925 error_report("Unknown file format '%s'", fmt); 2926 ret = -EINVAL; 2927 goto out; 2928 } 2929 2930 proto_drv = bdrv_find_protocol(filename); 2931 if (!proto_drv) { 2932 error_report("Unknown protocol '%s'", filename); 2933 ret = -EINVAL; 2934 goto out; 2935 } 2936 2937 create_options = append_option_parameters(create_options, 2938 drv->create_options); 2939 create_options = append_option_parameters(create_options, 2940 proto_drv->create_options); 2941 2942 /* Create parameter list with default values */ 2943 param = parse_option_parameters("", create_options, param); 2944 2945 set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size); 2946 2947 /* Parse -o options */ 2948 if (options) { 2949 param = parse_option_parameters(options, create_options, param); 2950 if (param == NULL) { 2951 error_report("Invalid options for file format '%s'.", fmt); 2952 ret = -EINVAL; 2953 goto out; 2954 } 2955 } 2956 2957 if (base_filename) { 2958 if (set_option_parameter(param, BLOCK_OPT_BACKING_FILE, 2959 base_filename)) { 2960 error_report("Backing file not supported for file format '%s'", 2961 fmt); 2962 ret = -EINVAL; 2963 goto out; 2964 } 2965 } 2966 2967 if (base_fmt) { 2968 if (set_option_parameter(param, BLOCK_OPT_BACKING_FMT, base_fmt)) { 2969 error_report("Backing file format not supported for file " 2970 "format '%s'", fmt); 2971 ret = -EINVAL; 2972 goto out; 2973 } 2974 } 2975 2976 backing_file = get_option_parameter(param, BLOCK_OPT_BACKING_FILE); 2977 if (backing_file && backing_file->value.s) { 2978 if (!strcmp(filename, backing_file->value.s)) { 2979 error_report("Error: Trying to create an image with the " 2980 "same filename as the backing file"); 2981 ret = -EINVAL; 2982 goto out; 2983 } 2984 } 2985 2986 backing_fmt = get_option_parameter(param, BLOCK_OPT_BACKING_FMT); 2987 if (backing_fmt && backing_fmt->value.s) { 2988 backing_drv = bdrv_find_format(backing_fmt->value.s); 2989 if (!backing_drv) { 2990 error_report("Unknown backing file format '%s'", 2991 backing_fmt->value.s); 2992 ret = -EINVAL; 2993 goto out; 2994 } 2995 } 2996 2997 // The size for the image must always be specified, with one exception: 2998 // If we are using a backing file, we can obtain the size from there 2999 if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) { 3000 if (backing_file && backing_file->value.s) { 3001 uint64_t size; 3002 char buf[32]; 3003 3004 bs = bdrv_new(""); 3005 3006 ret = bdrv_open(bs, backing_file->value.s, flags, backing_drv); 3007 if (ret < 0) { 3008 error_report("Could not open '%s'", backing_file->value.s); 3009 goto out; 3010 } 3011 bdrv_get_geometry(bs, &size); 3012 size *= 512; 3013 3014 snprintf(buf, sizeof(buf), "%" PRId64, size); 3015 set_option_parameter(param, BLOCK_OPT_SIZE, buf); 3016 } else { 3017 error_report("Image creation needs a size parameter"); 3018 ret = -EINVAL; 3019 goto out; 3020 } 3021 } 3022 3023 printf("Formatting '%s', fmt=%s ", filename, fmt); 3024 print_option_parameters(param); 3025 puts(""); 3026 3027 ret = bdrv_create(drv, filename, param); 3028 3029 if (ret < 0) { 3030 if (ret == -ENOTSUP) { 3031 error_report("Formatting or formatting option not supported for " 3032 "file format '%s'", fmt); 3033 } else if (ret == -EFBIG) { 3034 error_report("The image size is too large for file format '%s'", 3035 fmt); 3036 } else { 3037 error_report("%s: error while creating %s: %s", filename, fmt, 3038 strerror(-ret)); 3039 } 3040 } 3041 3042 out: 3043 free_option_parameters(create_options); 3044 free_option_parameters(param); 3045 3046 if (bs) { 3047 bdrv_delete(bs); 3048 } 3049 3050 return ret; 3051 } 3052