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