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