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