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