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