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