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