2 * QEMU System Emulator block driver
4 * Copyright (c) 2003 Fabrice Bellard
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:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
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
24 #include "qemu/osdep.h"
26 #include "block/block_int.h"
27 #include "block/blockjob.h"
28 #include "qemu/error-report.h"
29 #include "qemu/module.h"
30 #include "qapi/qmp/qerror.h"
31 #include "qapi/qmp/qbool.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 "qemu/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 #include "qemu/cutils.h"
46 #include <sys/ioctl.h>
47 #include <sys/queue.h>
57 #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
59 static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
60 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
62 static QTAILQ_HEAD(, BlockDriverState) all_bdrv_states =
63 QTAILQ_HEAD_INITIALIZER(all_bdrv_states);
65 static QLIST_HEAD(, BlockDriver) bdrv_drivers =
66 QLIST_HEAD_INITIALIZER(bdrv_drivers);
68 static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
69 const char *reference, QDict *options, int flags,
70 BlockDriverState *parent,
71 const BdrvChildRole *child_role, Error **errp);
73 /* If non-zero, use only whitelisted block drivers */
74 static int use_bdrv_whitelist;
76 static void bdrv_close(BlockDriverState *bs);
79 static int is_windows_drive_prefix(const char *filename)
81 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
82 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
86 int is_windows_drive(const char *filename)
88 if (is_windows_drive_prefix(filename) &&
91 if (strstart(filename, "\\\\.\\", NULL) ||
92 strstart(filename, "//./", NULL))
98 size_t bdrv_opt_mem_align(BlockDriverState *bs)
100 if (!bs || !bs->drv) {
101 /* page size or 4k (hdd sector size) should be on the safe side */
102 return MAX(4096, getpagesize());
105 return bs->bl.opt_mem_alignment;
108 size_t bdrv_min_mem_align(BlockDriverState *bs)
110 if (!bs || !bs->drv) {
111 /* page size or 4k (hdd sector size) should be on the safe side */
112 return MAX(4096, getpagesize());
115 return bs->bl.min_mem_alignment;
118 /* check if the path starts with "<protocol>:" */
119 int path_has_protocol(const char *path)
124 if (is_windows_drive(path) ||
125 is_windows_drive_prefix(path)) {
128 p = path + strcspn(path, ":/\\");
130 p = path + strcspn(path, ":/");
136 int path_is_absolute(const char *path)
139 /* specific case for names like: "\\.\d:" */
140 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
143 return (*path == '/' || *path == '\\');
145 return (*path == '/');
149 /* if filename is absolute, just copy it to dest. Otherwise, build a
150 path to it by considering it is relative to base_path. URL are
152 void path_combine(char *dest, int dest_size,
153 const char *base_path,
154 const char *filename)
161 if (path_is_absolute(filename)) {
162 pstrcpy(dest, dest_size, filename);
164 p = strchr(base_path, ':');
169 p1 = strrchr(base_path, '/');
173 p2 = strrchr(base_path, '\\');
185 if (len > dest_size - 1)
187 memcpy(dest, base_path, len);
189 pstrcat(dest, dest_size, filename);
193 void bdrv_get_full_backing_filename_from_filename(const char *backed,
195 char *dest, size_t sz,
198 if (backing[0] == '\0' || path_has_protocol(backing) ||
199 path_is_absolute(backing))
201 pstrcpy(dest, sz, backing);
202 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
203 error_setg(errp, "Cannot use relative backing file names for '%s'",
206 path_combine(dest, sz, backed, backing);
210 void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
213 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
215 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
219 void bdrv_register(BlockDriver *bdrv)
221 bdrv_setup_io_funcs(bdrv);
223 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
226 BlockDriverState *bdrv_new_root(void)
231 BlockDriverState *bdrv_new(void)
233 BlockDriverState *bs;
236 bs = g_new0(BlockDriverState, 1);
237 QLIST_INIT(&bs->dirty_bitmaps);
238 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
239 QLIST_INIT(&bs->op_blockers[i]);
241 notifier_with_return_list_init(&bs->before_write_notifiers);
242 qemu_co_queue_init(&bs->throttled_reqs[0]);
243 qemu_co_queue_init(&bs->throttled_reqs[1]);
245 bs->aio_context = qemu_get_aio_context();
247 QTAILQ_INSERT_TAIL(&all_bdrv_states, bs, bs_list);
252 BlockDriver *bdrv_find_format(const char *format_name)
255 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
256 if (!strcmp(drv1->format_name, format_name)) {
263 static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
265 static const char *whitelist_rw[] = {
266 CONFIG_BDRV_RW_WHITELIST
268 static const char *whitelist_ro[] = {
269 CONFIG_BDRV_RO_WHITELIST
273 if (!whitelist_rw[0] && !whitelist_ro[0]) {
274 return 1; /* no whitelist, anything goes */
277 for (p = whitelist_rw; *p; p++) {
278 if (!strcmp(drv->format_name, *p)) {
283 for (p = whitelist_ro; *p; p++) {
284 if (!strcmp(drv->format_name, *p)) {
292 bool bdrv_uses_whitelist(void)
294 return use_bdrv_whitelist;
297 typedef struct CreateCo {
305 static void coroutine_fn bdrv_create_co_entry(void *opaque)
307 Error *local_err = NULL;
310 CreateCo *cco = opaque;
313 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
315 error_propagate(&cco->err, local_err);
320 int bdrv_create(BlockDriver *drv, const char* filename,
321 QemuOpts *opts, Error **errp)
328 .filename = g_strdup(filename),
334 if (!drv->bdrv_create) {
335 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
340 if (qemu_in_coroutine()) {
341 /* Fast-path if already in coroutine context */
342 bdrv_create_co_entry(&cco);
344 co = qemu_coroutine_create(bdrv_create_co_entry);
345 qemu_coroutine_enter(co, &cco);
346 while (cco.ret == NOT_DONE) {
347 aio_poll(qemu_get_aio_context(), true);
354 error_propagate(errp, cco.err);
356 error_setg_errno(errp, -ret, "Could not create image");
361 g_free(cco.filename);
365 int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
368 Error *local_err = NULL;
371 drv = bdrv_find_protocol(filename, true, errp);
376 ret = bdrv_create(drv, filename, opts, &local_err);
378 error_propagate(errp, local_err);
384 * Try to get @bs's logical and physical block size.
385 * On success, store them in @bsz struct and return 0.
386 * On failure return -errno.
387 * @bs must not be empty.
389 int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
391 BlockDriver *drv = bs->drv;
393 if (drv && drv->bdrv_probe_blocksizes) {
394 return drv->bdrv_probe_blocksizes(bs, bsz);
401 * Try to get @bs's geometry (cyls, heads, sectors).
402 * On success, store them in @geo struct and return 0.
403 * On failure return -errno.
404 * @bs must not be empty.
406 int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
408 BlockDriver *drv = bs->drv;
410 if (drv && drv->bdrv_probe_geometry) {
411 return drv->bdrv_probe_geometry(bs, geo);
418 * Create a uniquely-named empty temporary file.
419 * Return 0 upon success, otherwise a negative errno value.
421 int get_tmp_filename(char *filename, int size)
424 char temp_dir[MAX_PATH];
425 /* GetTempFileName requires that its output buffer (4th param)
426 have length MAX_PATH or greater. */
427 assert(size >= MAX_PATH);
428 return (GetTempPath(MAX_PATH, temp_dir)
429 && GetTempFileName(temp_dir, "qem", 0, filename)
430 ? 0 : -GetLastError());
434 tmpdir = getenv("TMPDIR");
438 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
441 fd = mkstemp(filename);
445 if (close(fd) != 0) {
454 * Detect host devices. By convention, /dev/cdrom[N] is always
455 * recognized as a host CDROM.
457 static BlockDriver *find_hdev_driver(const char *filename)
459 int score_max = 0, score;
460 BlockDriver *drv = NULL, *d;
462 QLIST_FOREACH(d, &bdrv_drivers, list) {
463 if (d->bdrv_probe_device) {
464 score = d->bdrv_probe_device(filename);
465 if (score > score_max) {
475 BlockDriver *bdrv_find_protocol(const char *filename,
476 bool allow_protocol_prefix,
484 /* TODO Drivers without bdrv_file_open must be specified explicitly */
487 * XXX(hch): we really should not let host device detection
488 * override an explicit protocol specification, but moving this
489 * later breaks access to device names with colons in them.
490 * Thanks to the brain-dead persistent naming schemes on udev-
491 * based Linux systems those actually are quite common.
493 drv1 = find_hdev_driver(filename);
498 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
502 p = strchr(filename, ':');
505 if (len > sizeof(protocol) - 1)
506 len = sizeof(protocol) - 1;
507 memcpy(protocol, filename, len);
508 protocol[len] = '\0';
509 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
510 if (drv1->protocol_name &&
511 !strcmp(drv1->protocol_name, protocol)) {
516 error_setg(errp, "Unknown protocol '%s'", protocol);
521 * Guess image format by probing its contents.
522 * This is not a good idea when your image is raw (CVE-2008-2004), but
523 * we do it anyway for backward compatibility.
525 * @buf contains the image's first @buf_size bytes.
526 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
527 * but can be smaller if the image file is smaller)
528 * @filename is its filename.
530 * For all block drivers, call the bdrv_probe() method to get its
532 * Return the first block driver with the highest probing score.
534 BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
535 const char *filename)
537 int score_max = 0, score;
538 BlockDriver *drv = NULL, *d;
540 QLIST_FOREACH(d, &bdrv_drivers, list) {
542 score = d->bdrv_probe(buf, buf_size, filename);
543 if (score > score_max) {
553 static int find_image_format(BlockDriverState *bs, const char *filename,
554 BlockDriver **pdrv, Error **errp)
557 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
560 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
561 if (bdrv_is_sg(bs) || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
566 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
568 error_setg_errno(errp, -ret, "Could not read image for determining its "
574 drv = bdrv_probe_all(buf, ret, filename);
576 error_setg(errp, "Could not determine image format: No compatible "
585 * Set the current 'total_sectors' value
586 * Return 0 on success, -errno on error.
588 static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
590 BlockDriver *drv = bs->drv;
592 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
596 /* query actual device if possible, otherwise just trust the hint */
597 if (drv->bdrv_getlength) {
598 int64_t length = drv->bdrv_getlength(bs);
602 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
605 bs->total_sectors = hint;
610 * Combines a QDict of new block driver @options with any missing options taken
611 * from @old_options, so that leaving out an option defaults to its old value.
613 static void bdrv_join_options(BlockDriverState *bs, QDict *options,
616 if (bs->drv && bs->drv->bdrv_join_options) {
617 bs->drv->bdrv_join_options(options, old_options);
619 qdict_join(options, old_options, false);
624 * Set open flags for a given discard mode
626 * Return 0 on success, -1 if the discard mode was invalid.
628 int bdrv_parse_discard_flags(const char *mode, int *flags)
630 *flags &= ~BDRV_O_UNMAP;
632 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
634 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
635 *flags |= BDRV_O_UNMAP;
644 * Set open flags for a given cache mode
646 * Return 0 on success, -1 if the cache mode was invalid.
648 int bdrv_parse_cache_flags(const char *mode, int *flags)
650 *flags &= ~BDRV_O_CACHE_MASK;
652 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
653 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
654 } else if (!strcmp(mode, "directsync")) {
655 *flags |= BDRV_O_NOCACHE;
656 } else if (!strcmp(mode, "writeback")) {
657 *flags |= BDRV_O_CACHE_WB;
658 } else if (!strcmp(mode, "unsafe")) {
659 *flags |= BDRV_O_CACHE_WB;
660 *flags |= BDRV_O_NO_FLUSH;
661 } else if (!strcmp(mode, "writethrough")) {
662 /* this is the default */
670 int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough)
672 int ret = bdrv_parse_cache_flags(mode, flags);
677 if (*flags & BDRV_O_CACHE_WB) {
678 *flags &= ~BDRV_O_CACHE_WB;
679 *writethrough = false;
681 *writethrough = true;
688 * Returns the options and flags that a temporary snapshot should get, based on
689 * the originally requested flags (the originally requested image will have
690 * flags like a backing file)
692 static void bdrv_temp_snapshot_options(int *child_flags, QDict *child_options,
693 int parent_flags, QDict *parent_options)
695 *child_flags = (parent_flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
697 /* For temporary files, unconditional cache=unsafe is fine */
698 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
699 qdict_set_default_str(child_options, BDRV_OPT_CACHE_DIRECT, "off");
700 qdict_set_default_str(child_options, BDRV_OPT_CACHE_NO_FLUSH, "on");
704 * Returns the options and flags that bs->file should get if a protocol driver
705 * is expected, based on the given options and flags for the parent BDS
707 static void bdrv_inherited_options(int *child_flags, QDict *child_options,
708 int parent_flags, QDict *parent_options)
710 int flags = parent_flags;
712 /* Enable protocol handling, disable format probing for bs->file */
713 flags |= BDRV_O_PROTOCOL;
715 /* If the cache mode isn't explicitly set, inherit direct and no-flush from
717 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
718 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
720 /* Our block drivers take care to send flushes and respect unmap policy,
721 * so we can default to enable both on lower layers regardless of the
722 * corresponding parent options. */
723 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
724 flags |= BDRV_O_UNMAP;
726 /* Clear flags that only apply to the top layer */
727 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ |
730 *child_flags = flags;
733 const BdrvChildRole child_file = {
734 .inherit_options = bdrv_inherited_options,
738 * Returns the options and flags that bs->file should get if the use of formats
739 * (and not only protocols) is permitted for it, based on the given options and
740 * flags for the parent BDS
742 static void bdrv_inherited_fmt_options(int *child_flags, QDict *child_options,
743 int parent_flags, QDict *parent_options)
745 child_file.inherit_options(child_flags, child_options,
746 parent_flags, parent_options);
748 *child_flags &= ~(BDRV_O_PROTOCOL | BDRV_O_NO_IO);
751 const BdrvChildRole child_format = {
752 .inherit_options = bdrv_inherited_fmt_options,
756 * Returns the options and flags that bs->backing should get, based on the
757 * given options and flags for the parent BDS
759 static void bdrv_backing_options(int *child_flags, QDict *child_options,
760 int parent_flags, QDict *parent_options)
762 int flags = parent_flags;
764 /* The cache mode is inherited unmodified for backing files; except WCE,
765 * which is only applied on the top level (BlockBackend) */
766 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
767 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
768 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
770 /* backing files always opened read-only */
771 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
773 /* snapshot=on is handled on the top layer */
774 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
776 *child_flags = flags;
779 static const BdrvChildRole child_backing = {
780 .inherit_options = bdrv_backing_options,
783 static int bdrv_open_flags(BlockDriverState *bs, int flags)
785 int open_flags = flags | BDRV_O_CACHE_WB;
788 * Clear flags that are internal to the block layer before opening the
791 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
794 * Snapshots should be writable.
796 if (flags & BDRV_O_TEMPORARY) {
797 open_flags |= BDRV_O_RDWR;
803 static void update_flags_from_options(int *flags, QemuOpts *opts)
805 *flags &= ~BDRV_O_CACHE_MASK;
807 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_WB));
808 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, false)) {
809 *flags |= BDRV_O_CACHE_WB;
812 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_NO_FLUSH));
813 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
814 *flags |= BDRV_O_NO_FLUSH;
817 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_DIRECT));
818 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
819 *flags |= BDRV_O_NOCACHE;
823 static void update_options_from_flags(QDict *options, int flags)
825 if (!qdict_haskey(options, BDRV_OPT_CACHE_WB)) {
826 qdict_put(options, BDRV_OPT_CACHE_WB,
827 qbool_from_bool(flags & BDRV_O_CACHE_WB));
829 if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
830 qdict_put(options, BDRV_OPT_CACHE_DIRECT,
831 qbool_from_bool(flags & BDRV_O_NOCACHE));
833 if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
834 qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
835 qbool_from_bool(flags & BDRV_O_NO_FLUSH));
839 static void bdrv_assign_node_name(BlockDriverState *bs,
840 const char *node_name,
843 char *gen_node_name = NULL;
846 node_name = gen_node_name = id_generate(ID_BLOCK);
847 } else if (!id_wellformed(node_name)) {
849 * Check for empty string or invalid characters, but not if it is
850 * generated (generated names use characters not available to the user)
852 error_setg(errp, "Invalid node name");
856 /* takes care of avoiding namespaces collisions */
857 if (blk_by_name(node_name)) {
858 error_setg(errp, "node-name=%s is conflicting with a device id",
863 /* takes care of avoiding duplicates node names */
864 if (bdrv_find_node(node_name)) {
865 error_setg(errp, "Duplicate node name");
869 /* copy node name into the bs and insert it into the graph list */
870 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
871 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
873 g_free(gen_node_name);
876 static QemuOptsList bdrv_runtime_opts = {
877 .name = "bdrv_common",
878 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
882 .type = QEMU_OPT_STRING,
883 .help = "Node name of the block device node",
887 .type = QEMU_OPT_STRING,
888 .help = "Block driver to use for the node",
891 .name = BDRV_OPT_CACHE_WB,
892 .type = QEMU_OPT_BOOL,
893 .help = "Enable writeback mode",
896 .name = BDRV_OPT_CACHE_DIRECT,
897 .type = QEMU_OPT_BOOL,
898 .help = "Bypass software writeback cache on the host",
901 .name = BDRV_OPT_CACHE_NO_FLUSH,
902 .type = QEMU_OPT_BOOL,
903 .help = "Ignore flush requests",
905 { /* end of list */ }
910 * Common part for opening disk images and files
912 * Removes all processed options from *options.
914 static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file,
915 QDict *options, Error **errp)
918 const char *filename;
919 const char *driver_name = NULL;
920 const char *node_name = NULL;
923 Error *local_err = NULL;
925 assert(bs->file == NULL);
926 assert(options != NULL && bs->options != options);
928 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
929 qemu_opts_absorb_qdict(opts, options, &local_err);
931 error_propagate(errp, local_err);
936 driver_name = qemu_opt_get(opts, "driver");
937 drv = bdrv_find_format(driver_name);
941 filename = file->bs->filename;
943 filename = qdict_get_try_str(options, "filename");
946 if (drv->bdrv_needs_filename && !filename) {
947 error_setg(errp, "The '%s' block driver requires a file name",
953 trace_bdrv_open_common(bs, filename ?: "", bs->open_flags,
956 node_name = qemu_opt_get(opts, "node-name");
957 bdrv_assign_node_name(bs, node_name, &local_err);
959 error_propagate(errp, local_err);
964 bs->request_alignment = 512;
965 bs->zero_beyond_eof = true;
966 bs->read_only = !(bs->open_flags & BDRV_O_RDWR);
968 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
970 !bs->read_only && bdrv_is_whitelisted(drv, true)
971 ? "Driver '%s' can only be used for read-only devices"
972 : "Driver '%s' is not whitelisted",
978 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
979 if (bs->open_flags & BDRV_O_COPY_ON_READ) {
980 if (!bs->read_only) {
981 bdrv_enable_copy_on_read(bs);
983 error_setg(errp, "Can't use copy-on-read on read-only device");
989 if (filename != NULL) {
990 pstrcpy(bs->filename, sizeof(bs->filename), filename);
992 bs->filename[0] = '\0';
994 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
997 bs->opaque = g_malloc0(drv->instance_size);
999 /* Apply cache mode options */
1000 update_flags_from_options(&bs->open_flags, opts);
1002 if (!bs->blk && (bs->open_flags & BDRV_O_CACHE_WB) == 0) {
1003 error_setg(errp, "Can't set writethrough mode except for the root");
1008 bdrv_set_enable_write_cache(bs, bs->open_flags & BDRV_O_CACHE_WB);
1010 /* Open the image, either directly or using a protocol */
1011 open_flags = bdrv_open_flags(bs, bs->open_flags);
1012 if (drv->bdrv_file_open) {
1013 assert(file == NULL);
1014 assert(!drv->bdrv_needs_filename || filename != NULL);
1015 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
1018 error_setg(errp, "Can't use '%s' as a block driver for the "
1019 "protocol level", drv->format_name);
1024 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
1029 error_propagate(errp, local_err);
1030 } else if (bs->filename[0]) {
1031 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
1033 error_setg_errno(errp, -ret, "Could not open image");
1038 ret = refresh_total_sectors(bs, bs->total_sectors);
1040 error_setg_errno(errp, -ret, "Could not refresh total sector count");
1044 bdrv_refresh_limits(bs, &local_err);
1046 error_propagate(errp, local_err);
1051 assert(bdrv_opt_mem_align(bs) != 0);
1052 assert(bdrv_min_mem_align(bs) != 0);
1053 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
1055 qemu_opts_del(opts);
1064 qemu_opts_del(opts);
1068 static QDict *parse_json_filename(const char *filename, Error **errp)
1070 QObject *options_obj;
1074 ret = strstart(filename, "json:", &filename);
1077 options_obj = qobject_from_json(filename);
1079 error_setg(errp, "Could not parse the JSON options");
1083 if (qobject_type(options_obj) != QTYPE_QDICT) {
1084 qobject_decref(options_obj);
1085 error_setg(errp, "Invalid JSON object given");
1089 options = qobject_to_qdict(options_obj);
1090 qdict_flatten(options);
1095 static void parse_json_protocol(QDict *options, const char **pfilename,
1098 QDict *json_options;
1099 Error *local_err = NULL;
1101 /* Parse json: pseudo-protocol */
1102 if (!*pfilename || !g_str_has_prefix(*pfilename, "json:")) {
1106 json_options = parse_json_filename(*pfilename, &local_err);
1108 error_propagate(errp, local_err);
1112 /* Options given in the filename have lower priority than options
1113 * specified directly */
1114 qdict_join(options, json_options, false);
1115 QDECREF(json_options);
1120 * Fills in default options for opening images and converts the legacy
1121 * filename/flags pair to option QDict entries.
1122 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
1123 * block driver has been specified explicitly.
1125 static int bdrv_fill_options(QDict **options, const char *filename,
1126 int *flags, Error **errp)
1128 const char *drvname;
1129 bool protocol = *flags & BDRV_O_PROTOCOL;
1130 bool parse_filename = false;
1131 BlockDriver *drv = NULL;
1132 Error *local_err = NULL;
1134 drvname = qdict_get_try_str(*options, "driver");
1136 drv = bdrv_find_format(drvname);
1138 error_setg(errp, "Unknown driver '%s'", drvname);
1141 /* If the user has explicitly specified the driver, this choice should
1142 * override the BDRV_O_PROTOCOL flag */
1143 protocol = drv->bdrv_file_open;
1147 *flags |= BDRV_O_PROTOCOL;
1149 *flags &= ~BDRV_O_PROTOCOL;
1152 /* Translate cache options from flags into options */
1153 update_options_from_flags(*options, *flags);
1155 /* Fetch the file name from the options QDict if necessary */
1156 if (protocol && filename) {
1157 if (!qdict_haskey(*options, "filename")) {
1158 qdict_put(*options, "filename", qstring_from_str(filename));
1159 parse_filename = true;
1161 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1167 /* Find the right block driver */
1168 filename = qdict_get_try_str(*options, "filename");
1170 if (!drvname && protocol) {
1172 drv = bdrv_find_protocol(filename, parse_filename, errp);
1177 drvname = drv->format_name;
1178 qdict_put(*options, "driver", qstring_from_str(drvname));
1180 error_setg(errp, "Must specify either driver or file");
1185 assert(drv || !protocol);
1187 /* Driver-specific filename parsing */
1188 if (drv && drv->bdrv_parse_filename && parse_filename) {
1189 drv->bdrv_parse_filename(filename, *options, &local_err);
1191 error_propagate(errp, local_err);
1195 if (!drv->bdrv_needs_filename) {
1196 qdict_del(*options, "filename");
1203 BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
1204 const char *child_name,
1205 const BdrvChildRole *child_role)
1207 BdrvChild *child = g_new(BdrvChild, 1);
1208 *child = (BdrvChild) {
1210 .name = g_strdup(child_name),
1214 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent);
1219 static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1220 BlockDriverState *child_bs,
1221 const char *child_name,
1222 const BdrvChildRole *child_role)
1224 BdrvChild *child = bdrv_root_attach_child(child_bs, child_name, child_role);
1225 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1229 static void bdrv_detach_child(BdrvChild *child)
1231 if (child->next.le_prev) {
1232 QLIST_REMOVE(child, next);
1233 child->next.le_prev = NULL;
1235 QLIST_REMOVE(child, next_parent);
1236 g_free(child->name);
1240 void bdrv_root_unref_child(BdrvChild *child)
1242 BlockDriverState *child_bs;
1244 child_bs = child->bs;
1245 bdrv_detach_child(child);
1246 bdrv_unref(child_bs);
1249 void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1251 if (child == NULL) {
1255 if (child->bs->inherits_from == parent) {
1256 child->bs->inherits_from = NULL;
1259 bdrv_root_unref_child(child);
1263 * Sets the backing file link of a BDS. A new reference is created; callers
1264 * which don't need their own reference any more must call bdrv_unref().
1266 void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1269 bdrv_ref(backing_hd);
1273 assert(bs->backing_blocker);
1274 bdrv_op_unblock_all(bs->backing->bs, bs->backing_blocker);
1275 bdrv_unref_child(bs, bs->backing);
1276 } else if (backing_hd) {
1277 error_setg(&bs->backing_blocker,
1278 "node is used as backing hd of '%s'",
1279 bdrv_get_device_or_node_name(bs));
1283 error_free(bs->backing_blocker);
1284 bs->backing_blocker = NULL;
1288 bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_backing);
1289 bs->open_flags &= ~BDRV_O_NO_BACKING;
1290 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1291 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1292 backing_hd->drv ? backing_hd->drv->format_name : "");
1294 bdrv_op_block_all(backing_hd, bs->backing_blocker);
1295 /* Otherwise we won't be able to commit due to check in bdrv_commit */
1296 bdrv_op_unblock(backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
1297 bs->backing_blocker);
1299 bdrv_refresh_limits(bs, NULL);
1303 * Opens the backing file for a BlockDriverState if not yet open
1305 * bdref_key specifies the key for the image's BlockdevRef in the options QDict.
1306 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1307 * itself, all options starting with "${bdref_key}." are considered part of the
1310 * TODO Can this be unified with bdrv_open_image()?
1312 int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
1313 const char *bdref_key, Error **errp)
1315 char *backing_filename = g_malloc0(PATH_MAX);
1316 char *bdref_key_dot;
1317 const char *reference = NULL;
1319 BlockDriverState *backing_hd;
1321 QDict *tmp_parent_options = NULL;
1322 Error *local_err = NULL;
1324 if (bs->backing != NULL) {
1328 /* NULL means an empty set of options */
1329 if (parent_options == NULL) {
1330 tmp_parent_options = qdict_new();
1331 parent_options = tmp_parent_options;
1334 bs->open_flags &= ~BDRV_O_NO_BACKING;
1336 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1337 qdict_extract_subqdict(parent_options, &options, bdref_key_dot);
1338 g_free(bdref_key_dot);
1340 reference = qdict_get_try_str(parent_options, bdref_key);
1341 if (reference || qdict_haskey(options, "file.filename")) {
1342 backing_filename[0] = '\0';
1343 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
1347 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1351 error_propagate(errp, local_err);
1357 if (!bs->drv || !bs->drv->supports_backing) {
1359 error_setg(errp, "Driver doesn't support backing files");
1364 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1365 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
1369 ret = bdrv_open_inherit(&backing_hd,
1370 *backing_filename ? backing_filename : NULL,
1371 reference, options, 0, bs, &child_backing,
1374 bs->open_flags |= BDRV_O_NO_BACKING;
1375 error_prepend(errp, "Could not open backing file: ");
1379 /* Hook up the backing file link; drop our reference, bs owns the
1380 * backing_hd reference now */
1381 bdrv_set_backing_hd(bs, backing_hd);
1382 bdrv_unref(backing_hd);
1384 qdict_del(parent_options, bdref_key);
1387 g_free(backing_filename);
1388 QDECREF(tmp_parent_options);
1393 * Opens a disk image whose options are given as BlockdevRef in another block
1396 * If allow_none is true, no image will be opened if filename is false and no
1397 * BlockdevRef is given. NULL will be returned, but errp remains unset.
1399 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1400 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1401 * itself, all options starting with "${bdref_key}." are considered part of the
1404 * The BlockdevRef will be removed from the options QDict.
1406 BdrvChild *bdrv_open_child(const char *filename,
1407 QDict *options, const char *bdref_key,
1408 BlockDriverState* parent,
1409 const BdrvChildRole *child_role,
1410 bool allow_none, Error **errp)
1412 BdrvChild *c = NULL;
1413 BlockDriverState *bs;
1414 QDict *image_options;
1416 char *bdref_key_dot;
1417 const char *reference;
1419 assert(child_role != NULL);
1421 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1422 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1423 g_free(bdref_key_dot);
1425 reference = qdict_get_try_str(options, bdref_key);
1426 if (!filename && !reference && !qdict_size(image_options)) {
1428 error_setg(errp, "A block device must be specified for \"%s\"",
1431 QDECREF(image_options);
1436 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0,
1437 parent, child_role, errp);
1442 c = bdrv_attach_child(parent, bs, bdref_key, child_role);
1445 qdict_del(options, bdref_key);
1449 static int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags,
1450 QDict *snapshot_options, Error **errp)
1452 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
1453 char *tmp_filename = g_malloc0(PATH_MAX + 1);
1455 QemuOpts *opts = NULL;
1456 BlockDriverState *bs_snapshot;
1457 Error *local_err = NULL;
1460 /* if snapshot, we create a temporary backing file and open it
1461 instead of opening 'filename' directly */
1463 /* Get the required size from the image */
1464 total_size = bdrv_getlength(bs);
1465 if (total_size < 0) {
1467 error_setg_errno(errp, -total_size, "Could not get image size");
1471 /* Create the temporary image */
1472 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
1474 error_setg_errno(errp, -ret, "Could not get temporary filename");
1478 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
1480 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
1481 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, errp);
1482 qemu_opts_del(opts);
1484 error_prepend(errp, "Could not create temporary overlay '%s': ",
1489 /* Prepare options QDict for the temporary file */
1490 qdict_put(snapshot_options, "file.driver",
1491 qstring_from_str("file"));
1492 qdict_put(snapshot_options, "file.filename",
1493 qstring_from_str(tmp_filename));
1494 qdict_put(snapshot_options, "driver",
1495 qstring_from_str("qcow2"));
1497 bs_snapshot = bdrv_new();
1499 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
1501 snapshot_options = NULL;
1503 error_propagate(errp, local_err);
1507 bdrv_append(bs_snapshot, bs);
1510 QDECREF(snapshot_options);
1511 g_free(tmp_filename);
1516 * Opens a disk image (raw, qcow2, vmdk, ...)
1518 * options is a QDict of options to pass to the block drivers, or NULL for an
1519 * empty set of options. The reference to the QDict belongs to the block layer
1520 * after the call (even on failure), so if the caller intends to reuse the
1521 * dictionary, it needs to use QINCREF() before calling bdrv_open.
1523 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1524 * If it is not NULL, the referenced BDS will be reused.
1526 * The reference parameter may be used to specify an existing block device which
1527 * should be opened. If specified, neither options nor a filename may be given,
1528 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
1530 static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1531 const char *reference, QDict *options, int flags,
1532 BlockDriverState *parent,
1533 const BdrvChildRole *child_role, Error **errp)
1536 BdrvChild *file = NULL;
1537 BlockDriverState *bs;
1538 BlockDriver *drv = NULL;
1539 const char *drvname;
1540 const char *backing;
1541 Error *local_err = NULL;
1542 QDict *snapshot_options = NULL;
1543 int snapshot_flags = 0;
1546 assert(!child_role || !flags);
1547 assert(!child_role == !parent);
1550 bool options_non_empty = options ? qdict_size(options) : false;
1554 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1555 "another block device");
1559 if (filename || options_non_empty) {
1560 error_setg(errp, "Cannot reference an existing block device with "
1561 "additional options or a new filename");
1565 bs = bdrv_lookup_bs(reference, reference, errp);
1580 /* NULL means an empty set of options */
1581 if (options == NULL) {
1582 options = qdict_new();
1585 /* json: syntax counts as explicit options, as if in the QDict */
1586 parse_json_protocol(options, &filename, &local_err);
1592 bs->explicit_options = qdict_clone_shallow(options);
1595 bs->inherits_from = parent;
1596 child_role->inherit_options(&flags, options,
1597 parent->open_flags, parent->options);
1600 ret = bdrv_fill_options(&options, filename, &flags, &local_err);
1605 bs->open_flags = flags;
1606 bs->options = options;
1607 options = qdict_clone_shallow(options);
1609 /* Find the right image format driver */
1610 drvname = qdict_get_try_str(options, "driver");
1612 drv = bdrv_find_format(drvname);
1614 error_setg(errp, "Unknown driver: '%s'", drvname);
1620 assert(drvname || !(flags & BDRV_O_PROTOCOL));
1622 backing = qdict_get_try_str(options, "backing");
1623 if (backing && *backing == '\0') {
1624 flags |= BDRV_O_NO_BACKING;
1625 qdict_del(options, "backing");
1628 /* Open image file without format layer */
1629 if ((flags & BDRV_O_PROTOCOL) == 0) {
1630 if (flags & BDRV_O_RDWR) {
1631 flags |= BDRV_O_ALLOW_RDWR;
1633 if (flags & BDRV_O_SNAPSHOT) {
1634 snapshot_options = qdict_new();
1635 bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
1637 bdrv_backing_options(&flags, options, flags, options);
1640 bs->open_flags = flags;
1642 file = bdrv_open_child(filename, options, "file", bs,
1643 &child_file, true, &local_err);
1650 /* Image format probing */
1653 ret = find_image_format(file->bs, filename, &drv, &local_err);
1658 * This option update would logically belong in bdrv_fill_options(),
1659 * but we first need to open bs->file for the probing to work, while
1660 * opening bs->file already requires the (mostly) final set of options
1661 * so that cache mode etc. can be inherited.
1663 * Adding the driver later is somewhat ugly, but it's not an option
1664 * that would ever be inherited, so it's correct. We just need to make
1665 * sure to update both bs->options (which has the full effective
1666 * options for bs) and options (which has file.* already removed).
1668 qdict_put(bs->options, "driver", qstring_from_str(drv->format_name));
1669 qdict_put(options, "driver", qstring_from_str(drv->format_name));
1671 error_setg(errp, "Must specify either driver or file");
1676 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1677 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1678 /* file must be NULL if a protocol BDS is about to be created
1679 * (the inverse results in an error message from bdrv_open_common()) */
1680 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1682 /* Open the image */
1683 ret = bdrv_open_common(bs, file, options, &local_err);
1688 if (file && (bs->file != file)) {
1689 bdrv_unref_child(bs, file);
1693 /* If there is a backing file, use it */
1694 if ((flags & BDRV_O_NO_BACKING) == 0) {
1695 ret = bdrv_open_backing_file(bs, options, "backing", &local_err);
1697 goto close_and_fail;
1701 bdrv_refresh_filename(bs);
1703 /* Check if any unknown options were used */
1704 if (options && (qdict_size(options) != 0)) {
1705 const QDictEntry *entry = qdict_first(options);
1706 if (flags & BDRV_O_PROTOCOL) {
1707 error_setg(errp, "Block protocol '%s' doesn't support the option "
1708 "'%s'", drv->format_name, entry->key);
1711 "Block format '%s' does not support the option '%s'",
1712 drv->format_name, entry->key);
1716 goto close_and_fail;
1719 if (!bdrv_key_required(bs)) {
1721 blk_dev_change_media_cb(bs->blk, true);
1723 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1724 && !runstate_check(RUN_STATE_INMIGRATE)
1725 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1727 "Guest must be stopped for opening of encrypted image");
1729 goto close_and_fail;
1735 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1736 * temporary snapshot afterwards. */
1737 if (snapshot_flags) {
1738 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, snapshot_options,
1740 snapshot_options = NULL;
1742 goto close_and_fail;
1750 bdrv_unref_child(bs, file);
1752 QDECREF(snapshot_options);
1753 QDECREF(bs->explicit_options);
1754 QDECREF(bs->options);
1758 /* If *pbs is NULL, a new BDS has been created in this function and
1759 needs to be freed now. Otherwise, it does not need to be closed,
1760 since it has not really been opened yet. */
1764 error_propagate(errp, local_err);
1769 /* See fail path, but now the BDS has to be always closed */
1775 QDECREF(snapshot_options);
1778 error_propagate(errp, local_err);
1783 int bdrv_open(BlockDriverState **pbs, const char *filename,
1784 const char *reference, QDict *options, int flags, Error **errp)
1786 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
1790 typedef struct BlockReopenQueueEntry {
1792 BDRVReopenState state;
1793 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1794 } BlockReopenQueueEntry;
1797 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1798 * reopen of multiple devices.
1800 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1801 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1802 * be created and initialized. This newly created BlockReopenQueue should be
1803 * passed back in for subsequent calls that are intended to be of the same
1806 * bs is the BlockDriverState to add to the reopen queue.
1808 * options contains the changed options for the associated bs
1809 * (the BlockReopenQueue takes ownership)
1811 * flags contains the open flags for the associated bs
1813 * returns a pointer to bs_queue, which is either the newly allocated
1814 * bs_queue, or the existing bs_queue being used.
1817 static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
1818 BlockDriverState *bs,
1821 const BdrvChildRole *role,
1822 QDict *parent_options,
1827 BlockReopenQueueEntry *bs_entry;
1829 QDict *old_options, *explicit_options;
1831 if (bs_queue == NULL) {
1832 bs_queue = g_new0(BlockReopenQueue, 1);
1833 QSIMPLEQ_INIT(bs_queue);
1837 options = qdict_new();
1841 * Precedence of options:
1842 * 1. Explicitly passed in options (highest)
1843 * 2. Set in flags (only for top level)
1844 * 3. Retained from explicitly set options of bs
1845 * 4. Inherited from parent node
1846 * 5. Retained from effective options of bs
1849 if (!parent_options) {
1851 * Any setting represented by flags is always updated. If the
1852 * corresponding QDict option is set, it takes precedence. Otherwise
1853 * the flag is translated into a QDict option. The old setting of bs is
1856 update_options_from_flags(options, flags);
1859 /* Old explicitly set values (don't overwrite by inherited value) */
1860 old_options = qdict_clone_shallow(bs->explicit_options);
1861 bdrv_join_options(bs, options, old_options);
1862 QDECREF(old_options);
1864 explicit_options = qdict_clone_shallow(options);
1866 /* Inherit from parent node */
1867 if (parent_options) {
1869 role->inherit_options(&flags, options, parent_flags, parent_options);
1872 /* Old values are used for options that aren't set yet */
1873 old_options = qdict_clone_shallow(bs->options);
1874 bdrv_join_options(bs, options, old_options);
1875 QDECREF(old_options);
1877 /* bdrv_open() masks this flag out */
1878 flags &= ~BDRV_O_PROTOCOL;
1880 QLIST_FOREACH(child, &bs->children, next) {
1881 QDict *new_child_options;
1882 char *child_key_dot;
1884 /* reopen can only change the options of block devices that were
1885 * implicitly created and inherited options. For other (referenced)
1886 * block devices, a syntax like "backing.foo" results in an error. */
1887 if (child->bs->inherits_from != bs) {
1891 child_key_dot = g_strdup_printf("%s.", child->name);
1892 qdict_extract_subqdict(options, &new_child_options, child_key_dot);
1893 g_free(child_key_dot);
1895 bdrv_reopen_queue_child(bs_queue, child->bs, new_child_options, 0,
1896 child->role, options, flags);
1899 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1900 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1902 bs_entry->state.bs = bs;
1903 bs_entry->state.options = options;
1904 bs_entry->state.explicit_options = explicit_options;
1905 bs_entry->state.flags = flags;
1910 BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1911 BlockDriverState *bs,
1912 QDict *options, int flags)
1914 return bdrv_reopen_queue_child(bs_queue, bs, options, flags,
1919 * Reopen multiple BlockDriverStates atomically & transactionally.
1921 * The queue passed in (bs_queue) must have been built up previous
1922 * via bdrv_reopen_queue().
1924 * Reopens all BDS specified in the queue, with the appropriate
1925 * flags. All devices are prepared for reopen, and failure of any
1926 * device will cause all device changes to be abandonded, and intermediate
1929 * If all devices prepare successfully, then the changes are committed
1933 int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1936 BlockReopenQueueEntry *bs_entry, *next;
1937 Error *local_err = NULL;
1939 assert(bs_queue != NULL);
1943 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1944 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1945 error_propagate(errp, local_err);
1948 bs_entry->prepared = true;
1951 /* If we reach this point, we have success and just need to apply the
1954 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1955 bdrv_reopen_commit(&bs_entry->state);
1961 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1962 if (ret && bs_entry->prepared) {
1963 bdrv_reopen_abort(&bs_entry->state);
1965 QDECREF(bs_entry->state.explicit_options);
1967 QDECREF(bs_entry->state.options);
1975 /* Reopen a single BlockDriverState with the specified flags. */
1976 int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1979 Error *local_err = NULL;
1980 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags);
1982 ret = bdrv_reopen_multiple(queue, &local_err);
1983 if (local_err != NULL) {
1984 error_propagate(errp, local_err);
1991 * Prepares a BlockDriverState for reopen. All changes are staged in the
1992 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1993 * the block driver layer .bdrv_reopen_prepare()
1995 * bs is the BlockDriverState to reopen
1996 * flags are the new open flags
1997 * queue is the reopen queue
1999 * Returns 0 on success, non-zero on error. On error errp will be set
2002 * On failure, bdrv_reopen_abort() will be called to clean up any data.
2003 * It is the responsibility of the caller to then call the abort() or
2004 * commit() for any other BDS that have been left in a prepare() state
2007 int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
2011 Error *local_err = NULL;
2016 assert(reopen_state != NULL);
2017 assert(reopen_state->bs->drv != NULL);
2018 drv = reopen_state->bs->drv;
2020 /* Process generic block layer options */
2021 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
2022 qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
2024 error_propagate(errp, local_err);
2029 update_flags_from_options(&reopen_state->flags, opts);
2031 /* If a guest device is attached, it owns WCE */
2032 if (reopen_state->bs->blk && blk_get_attached_dev(reopen_state->bs->blk)) {
2033 bool old_wce = bdrv_enable_write_cache(reopen_state->bs);
2034 bool new_wce = (reopen_state->flags & BDRV_O_CACHE_WB);
2035 if (old_wce != new_wce) {
2036 error_setg(errp, "Cannot change cache.writeback: Device attached");
2041 if (!reopen_state->bs->blk && !(reopen_state->flags & BDRV_O_CACHE_WB)) {
2042 error_setg(errp, "Cannot disable cache.writeback: No BlockBackend");
2047 /* node-name and driver must be unchanged. Put them back into the QDict, so
2048 * that they are checked at the end of this function. */
2049 value = qemu_opt_get(opts, "node-name");
2051 qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2054 value = qemu_opt_get(opts, "driver");
2056 qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2059 /* if we are to stay read-only, do not allow permission change
2061 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2062 reopen_state->flags & BDRV_O_RDWR) {
2063 error_setg(errp, "Node '%s' is read only",
2064 bdrv_get_device_or_node_name(reopen_state->bs));
2069 ret = bdrv_flush(reopen_state->bs);
2071 error_setg_errno(errp, -ret, "Error flushing drive");
2075 if (drv->bdrv_reopen_prepare) {
2076 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2078 if (local_err != NULL) {
2079 error_propagate(errp, local_err);
2081 error_setg(errp, "failed while preparing to reopen image '%s'",
2082 reopen_state->bs->filename);
2087 /* It is currently mandatory to have a bdrv_reopen_prepare()
2088 * handler for each supported drv. */
2089 error_setg(errp, "Block format '%s' used by node '%s' "
2090 "does not support reopening files", drv->format_name,
2091 bdrv_get_device_or_node_name(reopen_state->bs));
2096 /* Options that are not handled are only okay if they are unchanged
2097 * compared to the old state. It is expected that some options are only
2098 * used for the initial open, but not reopen (e.g. filename) */
2099 if (qdict_size(reopen_state->options)) {
2100 const QDictEntry *entry = qdict_first(reopen_state->options);
2103 QString *new_obj = qobject_to_qstring(entry->value);
2104 const char *new = qstring_get_str(new_obj);
2105 const char *old = qdict_get_try_str(reopen_state->bs->options,
2108 if (!old || strcmp(new, old)) {
2109 error_setg(errp, "Cannot change the option '%s'", entry->key);
2113 } while ((entry = qdict_next(reopen_state->options, entry)));
2119 qemu_opts_del(opts);
2124 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2125 * makes them final by swapping the staging BlockDriverState contents into
2126 * the active BlockDriverState contents.
2128 void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2132 assert(reopen_state != NULL);
2133 drv = reopen_state->bs->drv;
2134 assert(drv != NULL);
2136 /* If there are any driver level actions to take */
2137 if (drv->bdrv_reopen_commit) {
2138 drv->bdrv_reopen_commit(reopen_state);
2141 /* set BDS specific flags now */
2142 QDECREF(reopen_state->bs->explicit_options);
2144 reopen_state->bs->explicit_options = reopen_state->explicit_options;
2145 reopen_state->bs->open_flags = reopen_state->flags;
2146 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
2148 bdrv_set_enable_write_cache(reopen_state->bs,
2149 !!(reopen_state->flags & BDRV_O_CACHE_WB));
2150 bdrv_refresh_limits(reopen_state->bs, NULL);
2154 * Abort the reopen, and delete and free the staged changes in
2157 void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2161 assert(reopen_state != NULL);
2162 drv = reopen_state->bs->drv;
2163 assert(drv != NULL);
2165 if (drv->bdrv_reopen_abort) {
2166 drv->bdrv_reopen_abort(reopen_state);
2169 QDECREF(reopen_state->explicit_options);
2173 static void bdrv_close(BlockDriverState *bs)
2175 BdrvAioNotifier *ban, *ban_next;
2179 /* Disable I/O limits and drain all pending throttled requests */
2180 if (bs->throttle_state) {
2181 bdrv_io_limits_disable(bs);
2184 bdrv_drained_begin(bs); /* complete I/O */
2186 bdrv_drain(bs); /* in case flush left pending I/O */
2188 bdrv_release_named_dirty_bitmaps(bs);
2189 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2192 blk_dev_change_media_cb(bs->blk, false);
2196 BdrvChild *child, *next;
2198 bs->drv->bdrv_close(bs);
2201 bdrv_set_backing_hd(bs, NULL);
2203 if (bs->file != NULL) {
2204 bdrv_unref_child(bs, bs->file);
2208 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
2209 /* TODO Remove bdrv_unref() from drivers' close function and use
2210 * bdrv_unref_child() here */
2211 if (child->bs->inherits_from == bs) {
2212 child->bs->inherits_from = NULL;
2214 bdrv_detach_child(child);
2219 bs->copy_on_read = 0;
2220 bs->backing_file[0] = '\0';
2221 bs->backing_format[0] = '\0';
2222 bs->total_sectors = 0;
2226 bs->zero_beyond_eof = false;
2227 QDECREF(bs->options);
2228 QDECREF(bs->explicit_options);
2230 QDECREF(bs->full_open_options);
2231 bs->full_open_options = NULL;
2234 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2237 QLIST_INIT(&bs->aio_notifiers);
2238 bdrv_drained_end(bs);
2241 void bdrv_close_all(void)
2243 BlockDriverState *bs;
2244 AioContext *aio_context;
2246 /* Drop references from requests still in flight, such as canceled block
2247 * jobs whose AIO context has not been polled yet */
2250 blk_remove_all_bs();
2251 blockdev_close_all_bdrv_states();
2253 /* Cancel all block jobs */
2254 while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2255 QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2256 aio_context = bdrv_get_aio_context(bs);
2258 aio_context_acquire(aio_context);
2260 block_job_cancel_sync(bs->job);
2261 aio_context_release(aio_context);
2264 aio_context_release(aio_context);
2267 /* All the remaining BlockDriverStates are referenced directly or
2268 * indirectly from block jobs, so there needs to be at least one BDS
2269 * directly used by a block job */
2274 /* Fields that need to stay with the top-level BDS */
2275 static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2276 BlockDriverState *bs_src)
2278 /* move some fields that need to stay attached to the device */
2281 static void change_parent_backing_link(BlockDriverState *from,
2282 BlockDriverState *to)
2284 BdrvChild *c, *next;
2287 /* FIXME We bypass blk_set_bs(), so we need to make these updates
2288 * manually. The root problem is not in this change function, but the
2289 * existence of BlockDriverState.blk. */
2290 to->blk = from->blk;
2294 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2295 assert(c->role != &child_backing);
2297 QLIST_REMOVE(c, next_parent);
2298 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2304 static void swap_feature_fields(BlockDriverState *bs_top,
2305 BlockDriverState *bs_new)
2307 BlockDriverState tmp;
2309 bdrv_move_feature_fields(&tmp, bs_top);
2310 bdrv_move_feature_fields(bs_top, bs_new);
2311 bdrv_move_feature_fields(bs_new, &tmp);
2313 assert(!bs_new->throttle_state);
2314 if (bs_top->throttle_state) {
2315 assert(bs_top->io_limits_enabled);
2316 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2317 bdrv_io_limits_disable(bs_top);
2322 * Add new bs contents at the top of an image chain while the chain is
2323 * live, while keeping required fields on the top layer.
2325 * This will modify the BlockDriverState fields, and swap contents
2326 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2328 * bs_new must not be attached to a BlockBackend.
2330 * This function does not create any image files.
2332 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2333 * that's what the callers commonly need. bs_new will be referenced by the old
2334 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2335 * reference of its own, it must call bdrv_ref().
2337 void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2339 assert(!bdrv_requests_pending(bs_top));
2340 assert(!bdrv_requests_pending(bs_new));
2343 change_parent_backing_link(bs_top, bs_new);
2345 /* Some fields always stay on top of the backing file chain */
2346 swap_feature_fields(bs_top, bs_new);
2348 bdrv_set_backing_hd(bs_new, bs_top);
2351 /* bs_new is now referenced by its new parents, we don't need the
2352 * additional reference any more. */
2356 void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2358 assert(!bdrv_requests_pending(old));
2359 assert(!bdrv_requests_pending(new));
2364 /* As long as these fields aren't in BlockBackend, but in the top-level
2365 * BlockDriverState, it's not possible for a BDS to have two BBs.
2367 * We really want to copy the fields from old to new, but we go for a
2368 * swap instead so that pointers aren't duplicated and cause trouble.
2369 * (Also, bdrv_swap() used to do the same.) */
2371 swap_feature_fields(old, new);
2373 change_parent_backing_link(old, new);
2375 /* Change backing files if a previously independent node is added to the
2376 * chain. For active commit, we replace top by its own (indirect) backing
2377 * file and don't do anything here so we don't build a loop. */
2378 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2379 bdrv_set_backing_hd(new, backing_bs(old));
2380 bdrv_set_backing_hd(old, NULL);
2386 static void bdrv_delete(BlockDriverState *bs)
2389 assert(bdrv_op_blocker_is_empty(bs));
2390 assert(!bs->refcnt);
2394 /* remove from list, if necessary */
2395 if (bs->node_name[0] != '\0') {
2396 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2398 QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2404 * Run consistency checks on an image
2406 * Returns 0 if the check could be completed (it doesn't mean that the image is
2407 * free of errors) or -errno when an internal error occurred. The results of the
2408 * check are stored in res.
2410 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
2412 if (bs->drv == NULL) {
2415 if (bs->drv->bdrv_check == NULL) {
2419 memset(res, 0, sizeof(*res));
2420 return bs->drv->bdrv_check(bs, res, fix);
2423 #define COMMIT_BUF_SECTORS 2048
2425 /* commit COW file into the raw image */
2426 int bdrv_commit(BlockDriverState *bs)
2428 BlockDriver *drv = bs->drv;
2429 int64_t sector, total_sectors, length, backing_length;
2430 int n, ro, open_flags;
2432 uint8_t *buf = NULL;
2441 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2442 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
2446 ro = bs->backing->bs->read_only;
2447 open_flags = bs->backing->bs->open_flags;
2450 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
2455 length = bdrv_getlength(bs);
2461 backing_length = bdrv_getlength(bs->backing->bs);
2462 if (backing_length < 0) {
2463 ret = backing_length;
2467 /* If our top snapshot is larger than the backing file image,
2468 * grow the backing file image if possible. If not possible,
2469 * we must return an error */
2470 if (length > backing_length) {
2471 ret = bdrv_truncate(bs->backing->bs, length);
2477 total_sectors = length >> BDRV_SECTOR_BITS;
2479 /* qemu_try_blockalign() for bs will choose an alignment that works for
2480 * bs->backing->bs as well, so no need to compare the alignment manually. */
2481 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2487 for (sector = 0; sector < total_sectors; sector += n) {
2488 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2493 ret = bdrv_read(bs, sector, buf, n);
2498 ret = bdrv_write(bs->backing->bs, sector, buf, n);
2505 if (drv->bdrv_make_empty) {
2506 ret = drv->bdrv_make_empty(bs);
2514 * Make sure all data we wrote to the backing device is actually
2518 bdrv_flush(bs->backing->bs);
2526 /* ignoring error return here */
2527 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
2536 * -EINVAL - backing format specified, but no file
2537 * -ENOSPC - can't update the backing file because no space is left in the
2539 * -ENOTSUP - format driver doesn't support changing the backing file
2541 int bdrv_change_backing_file(BlockDriverState *bs,
2542 const char *backing_file, const char *backing_fmt)
2544 BlockDriver *drv = bs->drv;
2547 /* Backing file format doesn't make sense without a backing file */
2548 if (backing_fmt && !backing_file) {
2552 if (drv->bdrv_change_backing_file != NULL) {
2553 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2559 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2560 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2566 * Finds the image layer in the chain that has 'bs' as its backing file.
2568 * active is the current topmost image.
2570 * Returns NULL if bs is not found in active's image chain,
2571 * or if active == bs.
2573 * Returns the bottommost base image if bs == NULL.
2575 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2576 BlockDriverState *bs)
2578 while (active && bs != backing_bs(active)) {
2579 active = backing_bs(active);
2585 /* Given a BDS, searches for the base layer. */
2586 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2588 return bdrv_find_overlay(bs, NULL);
2592 * Drops images above 'base' up to and including 'top', and sets the image
2593 * above 'top' to have base as its backing file.
2595 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2596 * information in 'bs' can be properly updated.
2598 * E.g., this will convert the following chain:
2599 * bottom <- base <- intermediate <- top <- active
2603 * bottom <- base <- active
2605 * It is allowed for bottom==base, in which case it converts:
2607 * base <- intermediate <- top <- active
2613 * If backing_file_str is non-NULL, it will be used when modifying top's
2614 * overlay image metadata.
2617 * if active == top, that is considered an error
2620 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2621 BlockDriverState *base, const char *backing_file_str)
2623 BlockDriverState *new_top_bs = NULL;
2626 if (!top->drv || !base->drv) {
2630 new_top_bs = bdrv_find_overlay(active, top);
2632 if (new_top_bs == NULL) {
2633 /* we could not find the image above 'top', this is an error */
2637 /* special case of new_top_bs->backing->bs already pointing to base - nothing
2638 * to do, no intermediate images */
2639 if (backing_bs(new_top_bs) == base) {
2644 /* Make sure that base is in the backing chain of top */
2645 if (!bdrv_chain_contains(top, base)) {
2649 /* success - we can delete the intermediate states, and link top->base */
2650 backing_file_str = backing_file_str ? backing_file_str : base->filename;
2651 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
2652 base->drv ? base->drv->format_name : "");
2656 bdrv_set_backing_hd(new_top_bs, base);
2664 * Truncate file to 'offset' bytes (needed only for file protocols)
2666 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2668 BlockDriver *drv = bs->drv;
2672 if (!drv->bdrv_truncate)
2677 ret = drv->bdrv_truncate(bs, offset);
2679 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
2680 bdrv_dirty_bitmap_truncate(bs);
2682 blk_dev_resize_cb(bs->blk);
2689 * Length of a allocated file in bytes. Sparse files are counted by actual
2690 * allocated space. Return < 0 if error or unknown.
2692 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2694 BlockDriver *drv = bs->drv;
2698 if (drv->bdrv_get_allocated_file_size) {
2699 return drv->bdrv_get_allocated_file_size(bs);
2702 return bdrv_get_allocated_file_size(bs->file->bs);
2708 * Return number of sectors on success, -errno on error.
2710 int64_t bdrv_nb_sectors(BlockDriverState *bs)
2712 BlockDriver *drv = bs->drv;
2717 if (drv->has_variable_length) {
2718 int ret = refresh_total_sectors(bs, bs->total_sectors);
2723 return bs->total_sectors;
2727 * Return length in bytes on success, -errno on error.
2728 * The length is always a multiple of BDRV_SECTOR_SIZE.
2730 int64_t bdrv_getlength(BlockDriverState *bs)
2732 int64_t ret = bdrv_nb_sectors(bs);
2734 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
2735 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
2738 /* return 0 as number of sectors if no device present or error */
2739 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
2741 int64_t nb_sectors = bdrv_nb_sectors(bs);
2743 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
2746 int bdrv_is_read_only(BlockDriverState *bs)
2748 return bs->read_only;
2751 int bdrv_is_sg(BlockDriverState *bs)
2756 int bdrv_enable_write_cache(BlockDriverState *bs)
2759 return blk_enable_write_cache(bs->blk);
2765 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2768 blk_set_enable_write_cache(bs->blk, wce);
2771 /* so a reopen() will preserve wce */
2773 bs->open_flags |= BDRV_O_CACHE_WB;
2775 bs->open_flags &= ~BDRV_O_CACHE_WB;
2779 int bdrv_is_encrypted(BlockDriverState *bs)
2781 if (bs->backing && bs->backing->bs->encrypted) {
2784 return bs->encrypted;
2787 int bdrv_key_required(BlockDriverState *bs)
2789 BdrvChild *backing = bs->backing;
2791 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
2794 return (bs->encrypted && !bs->valid_key);
2797 int bdrv_set_key(BlockDriverState *bs, const char *key)
2800 if (bs->backing && bs->backing->bs->encrypted) {
2801 ret = bdrv_set_key(bs->backing->bs, key);
2807 if (!bs->encrypted) {
2809 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2812 ret = bs->drv->bdrv_set_key(bs, key);
2815 } else if (!bs->valid_key) {
2818 /* call the change callback now, we skipped it on open */
2819 blk_dev_change_media_cb(bs->blk, true);
2826 * Provide an encryption key for @bs.
2827 * If @key is non-null:
2828 * If @bs is not encrypted, fail.
2829 * Else if the key is invalid, fail.
2830 * Else set @bs's key to @key, replacing the existing key, if any.
2832 * If @bs is encrypted and still lacks a key, fail.
2834 * On failure, store an error object through @errp if non-null.
2836 void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2839 if (!bdrv_is_encrypted(bs)) {
2840 error_setg(errp, "Node '%s' is not encrypted",
2841 bdrv_get_device_or_node_name(bs));
2842 } else if (bdrv_set_key(bs, key) < 0) {
2843 error_setg(errp, QERR_INVALID_PASSWORD);
2846 if (bdrv_key_required(bs)) {
2847 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2848 "'%s' (%s) is encrypted",
2849 bdrv_get_device_or_node_name(bs),
2850 bdrv_get_encrypted_filename(bs));
2855 const char *bdrv_get_format_name(BlockDriverState *bs)
2857 return bs->drv ? bs->drv->format_name : NULL;
2860 static int qsort_strcmp(const void *a, const void *b)
2862 return strcmp(a, b);
2865 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
2871 const char **formats = NULL;
2873 QLIST_FOREACH(drv, &bdrv_drivers, list) {
2874 if (drv->format_name) {
2877 while (formats && i && !found) {
2878 found = !strcmp(formats[--i], drv->format_name);
2882 formats = g_renew(const char *, formats, count + 1);
2883 formats[count++] = drv->format_name;
2888 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2890 for (i = 0; i < count; i++) {
2891 it(opaque, formats[i]);
2897 /* This function is to find a node in the bs graph */
2898 BlockDriverState *bdrv_find_node(const char *node_name)
2900 BlockDriverState *bs;
2904 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2905 if (!strcmp(node_name, bs->node_name)) {
2912 /* Put this QMP function here so it can access the static graph_bdrv_states. */
2913 BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
2915 BlockDeviceInfoList *list, *entry;
2916 BlockDriverState *bs;
2919 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2920 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2922 qapi_free_BlockDeviceInfoList(list);
2925 entry = g_malloc0(sizeof(*entry));
2926 entry->value = info;
2934 BlockDriverState *bdrv_lookup_bs(const char *device,
2935 const char *node_name,
2939 BlockDriverState *bs;
2942 blk = blk_by_name(device);
2947 error_setg(errp, "Device '%s' has no medium", device);
2955 bs = bdrv_find_node(node_name);
2962 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2963 device ? device : "",
2964 node_name ? node_name : "");
2968 /* If 'base' is in the same chain as 'top', return true. Otherwise,
2969 * return false. If either argument is NULL, return false. */
2970 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2972 while (top && top != base) {
2973 top = backing_bs(top);
2979 BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2982 return QTAILQ_FIRST(&graph_bdrv_states);
2984 return QTAILQ_NEXT(bs, node_list);
2987 /* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
2988 * the monitor or attached to a BlockBackend */
2989 BlockDriverState *bdrv_next(BlockDriverState *bs)
2991 if (!bs || bs->blk) {
2992 bs = blk_next_root_bs(bs);
2998 /* Ignore all BDSs that are attached to a BlockBackend here; they have been
2999 * handled by the above block already */
3001 bs = bdrv_next_monitor_owned(bs);
3002 } while (bs && bs->blk);
3006 const char *bdrv_get_node_name(const BlockDriverState *bs)
3008 return bs->node_name;
3011 /* TODO check what callers really want: bs->node_name or blk_name() */
3012 const char *bdrv_get_device_name(const BlockDriverState *bs)
3014 return bs->blk ? blk_name(bs->blk) : "";
3017 /* This can be used to identify nodes that might not have a device
3018 * name associated. Since node and device names live in the same
3019 * namespace, the result is unambiguous. The exception is if both are
3020 * absent, then this returns an empty (non-null) string. */
3021 const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
3023 return bs->blk ? blk_name(bs->blk) : bs->node_name;
3026 int bdrv_get_flags(BlockDriverState *bs)
3028 return bs->open_flags;
3031 int bdrv_has_zero_init_1(BlockDriverState *bs)
3036 int bdrv_has_zero_init(BlockDriverState *bs)
3040 /* If BS is a copy on write image, it is initialized to
3041 the contents of the base image, which may not be zeroes. */
3045 if (bs->drv->bdrv_has_zero_init) {
3046 return bs->drv->bdrv_has_zero_init(bs);
3053 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3055 BlockDriverInfo bdi;
3061 if (bdrv_get_info(bs, &bdi) == 0) {
3062 return bdi.unallocated_blocks_are_zero;
3068 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3070 BlockDriverInfo bdi;
3072 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
3076 if (bdrv_get_info(bs, &bdi) == 0) {
3077 return bdi.can_write_zeroes_with_unmap;
3083 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3085 if (bs->backing && bs->backing->bs->encrypted)
3086 return bs->backing_file;
3087 else if (bs->encrypted)
3088 return bs->filename;
3093 void bdrv_get_backing_filename(BlockDriverState *bs,
3094 char *filename, int filename_size)
3096 pstrcpy(filename, filename_size, bs->backing_file);
3099 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3101 BlockDriver *drv = bs->drv;
3104 if (!drv->bdrv_get_info)
3106 memset(bdi, 0, sizeof(*bdi));
3107 return drv->bdrv_get_info(bs, bdi);
3110 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3112 BlockDriver *drv = bs->drv;
3113 if (drv && drv->bdrv_get_specific_info) {
3114 return drv->bdrv_get_specific_info(bs);
3119 void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
3121 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
3125 bs->drv->bdrv_debug_event(bs, event);
3128 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3131 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
3132 bs = bs->file ? bs->file->bs : NULL;
3135 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3136 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3142 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3144 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
3145 bs = bs->file ? bs->file->bs : NULL;
3148 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3149 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3155 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3157 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
3158 bs = bs->file ? bs->file->bs : NULL;
3161 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3162 return bs->drv->bdrv_debug_resume(bs, tag);
3168 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3170 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3171 bs = bs->file ? bs->file->bs : NULL;
3174 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3175 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3181 int bdrv_is_snapshot(BlockDriverState *bs)
3183 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3186 /* backing_file can either be relative, or absolute, or a protocol. If it is
3187 * relative, it must be relative to the chain. So, passing in bs->filename
3188 * from a BDS as backing_file should not be done, as that may be relative to
3189 * the CWD rather than the chain. */
3190 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3191 const char *backing_file)
3193 char *filename_full = NULL;
3194 char *backing_file_full = NULL;
3195 char *filename_tmp = NULL;
3196 int is_protocol = 0;
3197 BlockDriverState *curr_bs = NULL;
3198 BlockDriverState *retval = NULL;
3200 if (!bs || !bs->drv || !backing_file) {
3204 filename_full = g_malloc(PATH_MAX);
3205 backing_file_full = g_malloc(PATH_MAX);
3206 filename_tmp = g_malloc(PATH_MAX);
3208 is_protocol = path_has_protocol(backing_file);
3210 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
3212 /* If either of the filename paths is actually a protocol, then
3213 * compare unmodified paths; otherwise make paths relative */
3214 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3215 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3216 retval = curr_bs->backing->bs;
3220 /* If not an absolute filename path, make it relative to the current
3221 * image's filename path */
3222 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3225 /* We are going to compare absolute pathnames */
3226 if (!realpath(filename_tmp, filename_full)) {
3230 /* We need to make sure the backing filename we are comparing against
3231 * is relative to the current image filename (or absolute) */
3232 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3233 curr_bs->backing_file);
3235 if (!realpath(filename_tmp, backing_file_full)) {
3239 if (strcmp(backing_file_full, filename_full) == 0) {
3240 retval = curr_bs->backing->bs;
3246 g_free(filename_full);
3247 g_free(backing_file_full);
3248 g_free(filename_tmp);
3252 int bdrv_get_backing_file_depth(BlockDriverState *bs)
3262 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
3265 void bdrv_init(void)
3267 module_call_init(MODULE_INIT_BLOCK);
3270 void bdrv_init_with_whitelist(void)
3272 use_bdrv_whitelist = 1;
3276 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
3278 Error *local_err = NULL;
3285 if (!(bs->open_flags & BDRV_O_INACTIVE)) {
3288 bs->open_flags &= ~BDRV_O_INACTIVE;
3290 if (bs->drv->bdrv_invalidate_cache) {
3291 bs->drv->bdrv_invalidate_cache(bs, &local_err);
3292 } else if (bs->file) {
3293 bdrv_invalidate_cache(bs->file->bs, &local_err);
3296 bs->open_flags |= BDRV_O_INACTIVE;
3297 error_propagate(errp, local_err);
3301 ret = refresh_total_sectors(bs, bs->total_sectors);
3303 bs->open_flags |= BDRV_O_INACTIVE;
3304 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3309 void bdrv_invalidate_cache_all(Error **errp)
3311 BlockDriverState *bs = NULL;
3312 Error *local_err = NULL;
3314 while ((bs = bdrv_next(bs)) != NULL) {
3315 AioContext *aio_context = bdrv_get_aio_context(bs);
3317 aio_context_acquire(aio_context);
3318 bdrv_invalidate_cache(bs, &local_err);
3319 aio_context_release(aio_context);
3321 error_propagate(errp, local_err);
3327 static int bdrv_inactivate(BlockDriverState *bs)
3331 if (bs->drv->bdrv_inactivate) {
3332 ret = bs->drv->bdrv_inactivate(bs);
3338 bs->open_flags |= BDRV_O_INACTIVE;
3342 int bdrv_inactivate_all(void)
3344 BlockDriverState *bs = NULL;
3347 while ((bs = bdrv_next(bs)) != NULL) {
3348 AioContext *aio_context = bdrv_get_aio_context(bs);
3350 aio_context_acquire(aio_context);
3351 ret = bdrv_inactivate(bs);
3352 aio_context_release(aio_context);
3361 /**************************************************************/
3362 /* removable device support */
3365 * Return TRUE if the media is present
3367 bool bdrv_is_inserted(BlockDriverState *bs)
3369 BlockDriver *drv = bs->drv;
3375 if (drv->bdrv_is_inserted) {
3376 return drv->bdrv_is_inserted(bs);
3378 QLIST_FOREACH(child, &bs->children, next) {
3379 if (!bdrv_is_inserted(child->bs)) {
3387 * Return whether the media changed since the last call to this
3388 * function, or -ENOTSUP if we don't know. Most drivers don't know.
3390 int bdrv_media_changed(BlockDriverState *bs)
3392 BlockDriver *drv = bs->drv;
3394 if (drv && drv->bdrv_media_changed) {
3395 return drv->bdrv_media_changed(bs);
3401 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3403 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
3405 BlockDriver *drv = bs->drv;
3406 const char *device_name;
3408 if (drv && drv->bdrv_eject) {
3409 drv->bdrv_eject(bs, eject_flag);
3412 device_name = bdrv_get_device_name(bs);
3413 if (device_name[0] != '\0') {
3414 qapi_event_send_device_tray_moved(device_name,
3415 eject_flag, &error_abort);
3420 * Lock or unlock the media (if it is locked, the user won't be able
3421 * to eject it manually).
3423 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
3425 BlockDriver *drv = bs->drv;
3427 trace_bdrv_lock_medium(bs, locked);
3429 if (drv && drv->bdrv_lock_medium) {
3430 drv->bdrv_lock_medium(bs, locked);
3434 /* Get a reference to bs */
3435 void bdrv_ref(BlockDriverState *bs)
3440 /* Release a previously grabbed reference to bs.
3441 * If after releasing, reference count is zero, the BlockDriverState is
3443 void bdrv_unref(BlockDriverState *bs)
3448 assert(bs->refcnt > 0);
3449 if (--bs->refcnt == 0) {
3454 struct BdrvOpBlocker {
3456 QLIST_ENTRY(BdrvOpBlocker) list;
3459 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3461 BdrvOpBlocker *blocker;
3462 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3463 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3464 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3466 *errp = error_copy(blocker->reason);
3467 error_prepend(errp, "Node '%s' is busy: ",
3468 bdrv_get_device_or_node_name(bs));
3475 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3477 BdrvOpBlocker *blocker;
3478 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3480 blocker = g_new0(BdrvOpBlocker, 1);
3481 blocker->reason = reason;
3482 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3485 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3487 BdrvOpBlocker *blocker, *next;
3488 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3489 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3490 if (blocker->reason == reason) {
3491 QLIST_REMOVE(blocker, list);
3497 void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3500 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3501 bdrv_op_block(bs, i, reason);
3505 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3508 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3509 bdrv_op_unblock(bs, i, reason);
3513 bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3517 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3518 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3525 void bdrv_img_create(const char *filename, const char *fmt,
3526 const char *base_filename, const char *base_fmt,
3527 char *options, uint64_t img_size, int flags,
3528 Error **errp, bool quiet)
3530 QemuOptsList *create_opts = NULL;
3531 QemuOpts *opts = NULL;
3532 const char *backing_fmt, *backing_file;
3534 BlockDriver *drv, *proto_drv;
3535 Error *local_err = NULL;
3538 /* Find driver and parse its options */
3539 drv = bdrv_find_format(fmt);
3541 error_setg(errp, "Unknown file format '%s'", fmt);
3545 proto_drv = bdrv_find_protocol(filename, true, errp);
3550 if (!drv->create_opts) {
3551 error_setg(errp, "Format driver '%s' does not support image creation",
3556 if (!proto_drv->create_opts) {
3557 error_setg(errp, "Protocol driver '%s' does not support image creation",
3558 proto_drv->format_name);
3562 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3563 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
3565 /* Create parameter list with default values */
3566 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
3567 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
3569 /* Parse -o options */
3571 qemu_opts_do_parse(opts, options, NULL, &local_err);
3573 error_report_err(local_err);
3575 error_setg(errp, "Invalid options for file format '%s'", fmt);
3580 if (base_filename) {
3581 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
3583 error_setg(errp, "Backing file not supported for file format '%s'",
3590 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
3592 error_setg(errp, "Backing file format not supported for file "
3593 "format '%s'", fmt);
3598 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3600 if (!strcmp(filename, backing_file)) {
3601 error_setg(errp, "Error: Trying to create an image with the "
3602 "same filename as the backing file");
3607 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3609 // The size for the image must always be specified, with one exception:
3610 // If we are using a backing file, we can obtain the size from there
3611 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3614 BlockDriverState *bs;
3615 char *full_backing = g_new0(char, PATH_MAX);
3618 QDict *backing_options = NULL;
3620 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3621 full_backing, PATH_MAX,
3624 g_free(full_backing);
3628 /* backing files always opened read-only */
3629 back_flags = flags | BDRV_O_CACHE_WB;
3630 back_flags &= ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
3633 backing_options = qdict_new();
3634 qdict_put(backing_options, "driver",
3635 qstring_from_str(backing_fmt));
3639 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
3640 back_flags, &local_err);
3641 g_free(full_backing);
3645 size = bdrv_getlength(bs);
3647 error_setg_errno(errp, -size, "Could not get size of '%s'",
3653 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
3657 error_setg(errp, "Image creation needs a size parameter");
3663 printf("Formatting '%s', fmt=%s ", filename, fmt);
3664 qemu_opts_print(opts, " ");
3668 ret = bdrv_create(drv, filename, opts, &local_err);
3670 if (ret == -EFBIG) {
3671 /* This is generally a better message than whatever the driver would
3672 * deliver (especially because of the cluster_size_hint), since that
3673 * is most probably not much different from "image too large". */
3674 const char *cluster_size_hint = "";
3675 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
3676 cluster_size_hint = " (try using a larger cluster size)";
3678 error_setg(errp, "The image size is too large for file format '%s'"
3679 "%s", fmt, cluster_size_hint);
3680 error_free(local_err);
3685 qemu_opts_del(opts);
3686 qemu_opts_free(create_opts);
3688 error_propagate(errp, local_err);
3692 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3694 return bs->aio_context;
3697 void bdrv_detach_aio_context(BlockDriverState *bs)
3699 BdrvAioNotifier *baf;
3705 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3706 baf->detach_aio_context(baf->opaque);
3709 if (bs->throttle_state) {
3710 throttle_timers_detach_aio_context(&bs->throttle_timers);
3712 if (bs->drv->bdrv_detach_aio_context) {
3713 bs->drv->bdrv_detach_aio_context(bs);
3716 bdrv_detach_aio_context(bs->file->bs);
3719 bdrv_detach_aio_context(bs->backing->bs);
3722 bs->aio_context = NULL;
3725 void bdrv_attach_aio_context(BlockDriverState *bs,
3726 AioContext *new_context)
3728 BdrvAioNotifier *ban;
3734 bs->aio_context = new_context;
3737 bdrv_attach_aio_context(bs->backing->bs, new_context);
3740 bdrv_attach_aio_context(bs->file->bs, new_context);
3742 if (bs->drv->bdrv_attach_aio_context) {
3743 bs->drv->bdrv_attach_aio_context(bs, new_context);
3745 if (bs->throttle_state) {
3746 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
3749 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3750 ban->attached_aio_context(new_context, ban->opaque);
3754 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3756 bdrv_drain(bs); /* ensure there are no in-flight requests */
3758 bdrv_detach_aio_context(bs);
3760 /* This function executes in the old AioContext so acquire the new one in
3761 * case it runs in a different thread.
3763 aio_context_acquire(new_context);
3764 bdrv_attach_aio_context(bs, new_context);
3765 aio_context_release(new_context);
3768 void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3769 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3770 void (*detach_aio_context)(void *opaque), void *opaque)
3772 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3773 *ban = (BdrvAioNotifier){
3774 .attached_aio_context = attached_aio_context,
3775 .detach_aio_context = detach_aio_context,
3779 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3782 void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3783 void (*attached_aio_context)(AioContext *,
3785 void (*detach_aio_context)(void *),
3788 BdrvAioNotifier *ban, *ban_next;
3790 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3791 if (ban->attached_aio_context == attached_aio_context &&
3792 ban->detach_aio_context == detach_aio_context &&
3793 ban->opaque == opaque)
3795 QLIST_REMOVE(ban, list);
3805 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3806 BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
3808 if (!bs->drv->bdrv_amend_options) {
3811 return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
3814 /* This function will be called by the bdrv_recurse_is_first_non_filter method
3815 * of block filter and by bdrv_is_first_non_filter.
3816 * It is used to test if the given bs is the candidate or recurse more in the
3819 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3820 BlockDriverState *candidate)
3822 /* return false if basic checks fails */
3823 if (!bs || !bs->drv) {
3827 /* the code reached a non block filter driver -> check if the bs is
3828 * the same as the candidate. It's the recursion termination condition.
3830 if (!bs->drv->is_filter) {
3831 return bs == candidate;
3833 /* Down this path the driver is a block filter driver */
3835 /* If the block filter recursion method is defined use it to recurse down
3838 if (bs->drv->bdrv_recurse_is_first_non_filter) {
3839 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3842 /* the driver is a block filter but don't allow to recurse -> return false
3847 /* This function checks if the candidate is the first non filter bs down it's
3848 * bs chain. Since we don't have pointers to parents it explore all bs chains
3849 * from the top. Some filters can choose not to pass down the recursion.
3851 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3853 BlockDriverState *bs = NULL;
3855 /* walk down the bs forest recursively */
3856 while ((bs = bdrv_next(bs)) != NULL) {
3859 /* try to recurse in this top level bs */
3860 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
3862 /* candidate is the first non filter */
3871 BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3872 const char *node_name, Error **errp)
3874 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
3875 AioContext *aio_context;
3877 if (!to_replace_bs) {
3878 error_setg(errp, "Node name '%s' not found", node_name);
3882 aio_context = bdrv_get_aio_context(to_replace_bs);
3883 aio_context_acquire(aio_context);
3885 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
3886 to_replace_bs = NULL;
3890 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3891 * most non filter in order to prevent data corruption.
3892 * Another benefit is that this tests exclude backing files which are
3893 * blocked by the backing blockers.
3895 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
3896 error_setg(errp, "Only top most non filter can be replaced");
3897 to_replace_bs = NULL;
3902 aio_context_release(aio_context);
3903 return to_replace_bs;
3906 static bool append_open_options(QDict *d, BlockDriverState *bs)
3908 const QDictEntry *entry;
3911 bool found_any = false;
3914 for (entry = qdict_first(bs->options); entry;
3915 entry = qdict_next(bs->options, entry))
3917 /* Exclude options for children */
3918 QLIST_FOREACH(child, &bs->children, next) {
3919 if (strstart(qdict_entry_key(entry), child->name, &p)
3920 && (!*p || *p == '.'))
3929 /* And exclude all non-driver-specific options */
3930 for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3931 if (!strcmp(qdict_entry_key(entry), desc->name)) {
3939 qobject_incref(qdict_entry_value(entry));
3940 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3947 /* Updates the following BDS fields:
3948 * - exact_filename: A filename which may be used for opening a block device
3949 * which (mostly) equals the given BDS (even without any
3950 * other options; so reading and writing must return the same
3951 * results, but caching etc. may be different)
3952 * - full_open_options: Options which, when given when opening a block device
3953 * (without a filename), result in a BDS (mostly)
3954 * equalling the given one
3955 * - filename: If exact_filename is set, it is copied here. Otherwise,
3956 * full_open_options is converted to a JSON object, prefixed with
3957 * "json:" (for use through the JSON pseudo protocol) and put here.
3959 void bdrv_refresh_filename(BlockDriverState *bs)
3961 BlockDriver *drv = bs->drv;
3968 /* This BDS's file name will most probably depend on its file's name, so
3969 * refresh that first */
3971 bdrv_refresh_filename(bs->file->bs);
3974 if (drv->bdrv_refresh_filename) {
3975 /* Obsolete information is of no use here, so drop the old file name
3976 * information before refreshing it */
3977 bs->exact_filename[0] = '\0';
3978 if (bs->full_open_options) {
3979 QDECREF(bs->full_open_options);
3980 bs->full_open_options = NULL;
3984 append_open_options(opts, bs);
3985 drv->bdrv_refresh_filename(bs, opts);
3987 } else if (bs->file) {
3988 /* Try to reconstruct valid information from the underlying file */
3989 bool has_open_options;
3991 bs->exact_filename[0] = '\0';
3992 if (bs->full_open_options) {
3993 QDECREF(bs->full_open_options);
3994 bs->full_open_options = NULL;
3998 has_open_options = append_open_options(opts, bs);
4000 /* If no specific options have been given for this BDS, the filename of
4001 * the underlying file should suffice for this one as well */
4002 if (bs->file->bs->exact_filename[0] && !has_open_options) {
4003 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
4005 /* Reconstructing the full options QDict is simple for most format block
4006 * drivers, as long as the full options are known for the underlying
4007 * file BDS. The full options QDict of that file BDS should somehow
4008 * contain a representation of the filename, therefore the following
4009 * suffices without querying the (exact_)filename of this BDS. */
4010 if (bs->file->bs->full_open_options) {
4011 qdict_put_obj(opts, "driver",
4012 QOBJECT(qstring_from_str(drv->format_name)));
4013 QINCREF(bs->file->bs->full_open_options);
4014 qdict_put_obj(opts, "file",
4015 QOBJECT(bs->file->bs->full_open_options));
4017 bs->full_open_options = opts;
4021 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4022 /* There is no underlying file BDS (at least referenced by BDS.file),
4023 * so the full options QDict should be equal to the options given
4024 * specifically for this block device when it was opened (plus the
4025 * driver specification).
4026 * Because those options don't change, there is no need to update
4027 * full_open_options when it's already set. */
4030 append_open_options(opts, bs);
4031 qdict_put_obj(opts, "driver",
4032 QOBJECT(qstring_from_str(drv->format_name)));
4034 if (bs->exact_filename[0]) {
4035 /* This may not work for all block protocol drivers (some may
4036 * require this filename to be parsed), but we have to find some
4037 * default solution here, so just include it. If some block driver
4038 * does not support pure options without any filename at all or
4039 * needs some special format of the options QDict, it needs to
4040 * implement the driver-specific bdrv_refresh_filename() function.
4042 qdict_put_obj(opts, "filename",
4043 QOBJECT(qstring_from_str(bs->exact_filename)));
4046 bs->full_open_options = opts;
4049 if (bs->exact_filename[0]) {
4050 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4051 } else if (bs->full_open_options) {
4052 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4053 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4054 qstring_get_str(json));