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