sensor: add pedometer sensor device
[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     bdrv_close(bs);
2130
2131     /* remove from list, if necessary */
2132     bdrv_make_anon(bs);
2133
2134     g_free(bs);
2135 }
2136
2137 /*
2138  * Run consistency checks on an image
2139  *
2140  * Returns 0 if the check could be completed (it doesn't mean that the image is
2141  * free of errors) or -errno when an internal error occurred. The results of the
2142  * check are stored in res.
2143  */
2144 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
2145 {
2146     if (bs->drv == NULL) {
2147         return -ENOMEDIUM;
2148     }
2149     if (bs->drv->bdrv_check == NULL) {
2150         return -ENOTSUP;
2151     }
2152
2153     memset(res, 0, sizeof(*res));
2154     return bs->drv->bdrv_check(bs, res, fix);
2155 }
2156
2157 #define COMMIT_BUF_SECTORS 2048
2158
2159 /* commit COW file into the raw image */
2160 int bdrv_commit(BlockDriverState *bs)
2161 {
2162     BlockDriver *drv = bs->drv;
2163     int64_t sector, total_sectors, length, backing_length;
2164     int n, ro, open_flags;
2165     int ret = 0;
2166     uint8_t *buf = NULL;
2167
2168     if (!drv)
2169         return -ENOMEDIUM;
2170
2171     if (!bs->backing) {
2172         return -ENOTSUP;
2173     }
2174
2175     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2176         bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
2177         return -EBUSY;
2178     }
2179
2180     ro = bs->backing->bs->read_only;
2181     open_flags =  bs->backing->bs->open_flags;
2182
2183     if (ro) {
2184         if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
2185             return -EACCES;
2186         }
2187     }
2188
2189     length = bdrv_getlength(bs);
2190     if (length < 0) {
2191         ret = length;
2192         goto ro_cleanup;
2193     }
2194
2195     backing_length = bdrv_getlength(bs->backing->bs);
2196     if (backing_length < 0) {
2197         ret = backing_length;
2198         goto ro_cleanup;
2199     }
2200
2201     /* If our top snapshot is larger than the backing file image,
2202      * grow the backing file image if possible.  If not possible,
2203      * we must return an error */
2204     if (length > backing_length) {
2205         ret = bdrv_truncate(bs->backing->bs, length);
2206         if (ret < 0) {
2207             goto ro_cleanup;
2208         }
2209     }
2210
2211     total_sectors = length >> BDRV_SECTOR_BITS;
2212
2213     /* qemu_try_blockalign() for bs will choose an alignment that works for
2214      * bs->backing->bs as well, so no need to compare the alignment manually. */
2215     buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2216     if (buf == NULL) {
2217         ret = -ENOMEM;
2218         goto ro_cleanup;
2219     }
2220
2221     for (sector = 0; sector < total_sectors; sector += n) {
2222         ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2223         if (ret < 0) {
2224             goto ro_cleanup;
2225         }
2226         if (ret) {
2227             ret = bdrv_read(bs, sector, buf, n);
2228             if (ret < 0) {
2229                 goto ro_cleanup;
2230             }
2231
2232             ret = bdrv_write(bs->backing->bs, sector, buf, n);
2233             if (ret < 0) {
2234                 goto ro_cleanup;
2235             }
2236         }
2237     }
2238
2239     if (drv->bdrv_make_empty) {
2240         ret = drv->bdrv_make_empty(bs);
2241         if (ret < 0) {
2242             goto ro_cleanup;
2243         }
2244         bdrv_flush(bs);
2245     }
2246
2247     /*
2248      * Make sure all data we wrote to the backing device is actually
2249      * stable on disk.
2250      */
2251     if (bs->backing) {
2252         bdrv_flush(bs->backing->bs);
2253     }
2254
2255     ret = 0;
2256 ro_cleanup:
2257     qemu_vfree(buf);
2258
2259     if (ro) {
2260         /* ignoring error return here */
2261         bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
2262     }
2263
2264     return ret;
2265 }
2266
2267 int bdrv_commit_all(void)
2268 {
2269     BlockDriverState *bs;
2270
2271     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
2272         AioContext *aio_context = bdrv_get_aio_context(bs);
2273
2274         aio_context_acquire(aio_context);
2275         if (bs->drv && bs->backing) {
2276             int ret = bdrv_commit(bs);
2277             if (ret < 0) {
2278                 aio_context_release(aio_context);
2279                 return ret;
2280             }
2281         }
2282         aio_context_release(aio_context);
2283     }
2284     return 0;
2285 }
2286
2287 /*
2288  * Return values:
2289  * 0        - success
2290  * -EINVAL  - backing format specified, but no file
2291  * -ENOSPC  - can't update the backing file because no space is left in the
2292  *            image file header
2293  * -ENOTSUP - format driver doesn't support changing the backing file
2294  */
2295 int bdrv_change_backing_file(BlockDriverState *bs,
2296     const char *backing_file, const char *backing_fmt)
2297 {
2298     BlockDriver *drv = bs->drv;
2299     int ret;
2300
2301     /* Backing file format doesn't make sense without a backing file */
2302     if (backing_fmt && !backing_file) {
2303         return -EINVAL;
2304     }
2305
2306     if (drv->bdrv_change_backing_file != NULL) {
2307         ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2308     } else {
2309         ret = -ENOTSUP;
2310     }
2311
2312     if (ret == 0) {
2313         pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2314         pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2315     }
2316     return ret;
2317 }
2318
2319 /*
2320  * Finds the image layer in the chain that has 'bs' as its backing file.
2321  *
2322  * active is the current topmost image.
2323  *
2324  * Returns NULL if bs is not found in active's image chain,
2325  * or if active == bs.
2326  *
2327  * Returns the bottommost base image if bs == NULL.
2328  */
2329 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2330                                     BlockDriverState *bs)
2331 {
2332     while (active && bs != backing_bs(active)) {
2333         active = backing_bs(active);
2334     }
2335
2336     return active;
2337 }
2338
2339 /* Given a BDS, searches for the base layer. */
2340 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2341 {
2342     return bdrv_find_overlay(bs, NULL);
2343 }
2344
2345 /*
2346  * Drops images above 'base' up to and including 'top', and sets the image
2347  * above 'top' to have base as its backing file.
2348  *
2349  * Requires that the overlay to 'top' is opened r/w, so that the backing file
2350  * information in 'bs' can be properly updated.
2351  *
2352  * E.g., this will convert the following chain:
2353  * bottom <- base <- intermediate <- top <- active
2354  *
2355  * to
2356  *
2357  * bottom <- base <- active
2358  *
2359  * It is allowed for bottom==base, in which case it converts:
2360  *
2361  * base <- intermediate <- top <- active
2362  *
2363  * to
2364  *
2365  * base <- active
2366  *
2367  * If backing_file_str is non-NULL, it will be used when modifying top's
2368  * overlay image metadata.
2369  *
2370  * Error conditions:
2371  *  if active == top, that is considered an error
2372  *
2373  */
2374 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2375                            BlockDriverState *base, const char *backing_file_str)
2376 {
2377     BlockDriverState *new_top_bs = NULL;
2378     int ret = -EIO;
2379
2380     if (!top->drv || !base->drv) {
2381         goto exit;
2382     }
2383
2384     new_top_bs = bdrv_find_overlay(active, top);
2385
2386     if (new_top_bs == NULL) {
2387         /* we could not find the image above 'top', this is an error */
2388         goto exit;
2389     }
2390
2391     /* special case of new_top_bs->backing->bs already pointing to base - nothing
2392      * to do, no intermediate images */
2393     if (backing_bs(new_top_bs) == base) {
2394         ret = 0;
2395         goto exit;
2396     }
2397
2398     /* Make sure that base is in the backing chain of top */
2399     if (!bdrv_chain_contains(top, base)) {
2400         goto exit;
2401     }
2402
2403     /* success - we can delete the intermediate states, and link top->base */
2404     backing_file_str = backing_file_str ? backing_file_str : base->filename;
2405     ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
2406                                    base->drv ? base->drv->format_name : "");
2407     if (ret) {
2408         goto exit;
2409     }
2410     bdrv_set_backing_hd(new_top_bs, base);
2411
2412     ret = 0;
2413 exit:
2414     return ret;
2415 }
2416
2417 /**
2418  * Truncate file to 'offset' bytes (needed only for file protocols)
2419  */
2420 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2421 {
2422     BlockDriver *drv = bs->drv;
2423     int ret;
2424     if (!drv)
2425         return -ENOMEDIUM;
2426     if (!drv->bdrv_truncate)
2427         return -ENOTSUP;
2428     if (bs->read_only)
2429         return -EACCES;
2430
2431     ret = drv->bdrv_truncate(bs, offset);
2432     if (ret == 0) {
2433         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
2434         bdrv_dirty_bitmap_truncate(bs);
2435         if (bs->blk) {
2436             blk_dev_resize_cb(bs->blk);
2437         }
2438     }
2439     return ret;
2440 }
2441
2442 /**
2443  * Length of a allocated file in bytes. Sparse files are counted by actual
2444  * allocated space. Return < 0 if error or unknown.
2445  */
2446 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2447 {
2448     BlockDriver *drv = bs->drv;
2449     if (!drv) {
2450         return -ENOMEDIUM;
2451     }
2452     if (drv->bdrv_get_allocated_file_size) {
2453         return drv->bdrv_get_allocated_file_size(bs);
2454     }
2455     if (bs->file) {
2456         return bdrv_get_allocated_file_size(bs->file->bs);
2457     }
2458     return -ENOTSUP;
2459 }
2460
2461 /**
2462  * Return number of sectors on success, -errno on error.
2463  */
2464 int64_t bdrv_nb_sectors(BlockDriverState *bs)
2465 {
2466     BlockDriver *drv = bs->drv;
2467
2468     if (!drv)
2469         return -ENOMEDIUM;
2470
2471     if (drv->has_variable_length) {
2472         int ret = refresh_total_sectors(bs, bs->total_sectors);
2473         if (ret < 0) {
2474             return ret;
2475         }
2476     }
2477     return bs->total_sectors;
2478 }
2479
2480 /**
2481  * Return length in bytes on success, -errno on error.
2482  * The length is always a multiple of BDRV_SECTOR_SIZE.
2483  */
2484 int64_t bdrv_getlength(BlockDriverState *bs)
2485 {
2486     int64_t ret = bdrv_nb_sectors(bs);
2487
2488     ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
2489     return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
2490 }
2491
2492 /* return 0 as number of sectors if no device present or error */
2493 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
2494 {
2495     int64_t nb_sectors = bdrv_nb_sectors(bs);
2496
2497     *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
2498 }
2499
2500 int bdrv_is_read_only(BlockDriverState *bs)
2501 {
2502     return bs->read_only;
2503 }
2504
2505 int bdrv_is_sg(BlockDriverState *bs)
2506 {
2507     return bs->sg;
2508 }
2509
2510 int bdrv_enable_write_cache(BlockDriverState *bs)
2511 {
2512     return bs->enable_write_cache;
2513 }
2514
2515 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2516 {
2517     bs->enable_write_cache = wce;
2518
2519     /* so a reopen() will preserve wce */
2520     if (wce) {
2521         bs->open_flags |= BDRV_O_CACHE_WB;
2522     } else {
2523         bs->open_flags &= ~BDRV_O_CACHE_WB;
2524     }
2525 }
2526
2527 int bdrv_is_encrypted(BlockDriverState *bs)
2528 {
2529     if (bs->backing && bs->backing->bs->encrypted) {
2530         return 1;
2531     }
2532     return bs->encrypted;
2533 }
2534
2535 int bdrv_key_required(BlockDriverState *bs)
2536 {
2537     BdrvChild *backing = bs->backing;
2538
2539     if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
2540         return 1;
2541     }
2542     return (bs->encrypted && !bs->valid_key);
2543 }
2544
2545 int bdrv_set_key(BlockDriverState *bs, const char *key)
2546 {
2547     int ret;
2548     if (bs->backing && bs->backing->bs->encrypted) {
2549         ret = bdrv_set_key(bs->backing->bs, key);
2550         if (ret < 0)
2551             return ret;
2552         if (!bs->encrypted)
2553             return 0;
2554     }
2555     if (!bs->encrypted) {
2556         return -EINVAL;
2557     } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2558         return -ENOMEDIUM;
2559     }
2560     ret = bs->drv->bdrv_set_key(bs, key);
2561     if (ret < 0) {
2562         bs->valid_key = 0;
2563     } else if (!bs->valid_key) {
2564         bs->valid_key = 1;
2565         if (bs->blk) {
2566             /* call the change callback now, we skipped it on open */
2567             blk_dev_change_media_cb(bs->blk, true);
2568         }
2569     }
2570     return ret;
2571 }
2572
2573 /*
2574  * Provide an encryption key for @bs.
2575  * If @key is non-null:
2576  *     If @bs is not encrypted, fail.
2577  *     Else if the key is invalid, fail.
2578  *     Else set @bs's key to @key, replacing the existing key, if any.
2579  * If @key is null:
2580  *     If @bs is encrypted and still lacks a key, fail.
2581  *     Else do nothing.
2582  * On failure, store an error object through @errp if non-null.
2583  */
2584 void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2585 {
2586     if (key) {
2587         if (!bdrv_is_encrypted(bs)) {
2588             error_setg(errp, "Node '%s' is not encrypted",
2589                       bdrv_get_device_or_node_name(bs));
2590         } else if (bdrv_set_key(bs, key) < 0) {
2591             error_setg(errp, QERR_INVALID_PASSWORD);
2592         }
2593     } else {
2594         if (bdrv_key_required(bs)) {
2595             error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2596                       "'%s' (%s) is encrypted",
2597                       bdrv_get_device_or_node_name(bs),
2598                       bdrv_get_encrypted_filename(bs));
2599         }
2600     }
2601 }
2602
2603 const char *bdrv_get_format_name(BlockDriverState *bs)
2604 {
2605     return bs->drv ? bs->drv->format_name : NULL;
2606 }
2607
2608 static int qsort_strcmp(const void *a, const void *b)
2609 {
2610     return strcmp(a, b);
2611 }
2612
2613 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
2614                          void *opaque)
2615 {
2616     BlockDriver *drv;
2617     int count = 0;
2618     int i;
2619     const char **formats = NULL;
2620
2621     QLIST_FOREACH(drv, &bdrv_drivers, list) {
2622         if (drv->format_name) {
2623             bool found = false;
2624             int i = count;
2625             while (formats && i && !found) {
2626                 found = !strcmp(formats[--i], drv->format_name);
2627             }
2628
2629             if (!found) {
2630                 formats = g_renew(const char *, formats, count + 1);
2631                 formats[count++] = drv->format_name;
2632             }
2633         }
2634     }
2635
2636     qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2637
2638     for (i = 0; i < count; i++) {
2639         it(opaque, formats[i]);
2640     }
2641
2642     g_free(formats);
2643 }
2644
2645 /* This function is to find a node in the bs graph */
2646 BlockDriverState *bdrv_find_node(const char *node_name)
2647 {
2648     BlockDriverState *bs;
2649
2650     assert(node_name);
2651
2652     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2653         if (!strcmp(node_name, bs->node_name)) {
2654             return bs;
2655         }
2656     }
2657     return NULL;
2658 }
2659
2660 /* Put this QMP function here so it can access the static graph_bdrv_states. */
2661 BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
2662 {
2663     BlockDeviceInfoList *list, *entry;
2664     BlockDriverState *bs;
2665
2666     list = NULL;
2667     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2668         BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2669         if (!info) {
2670             qapi_free_BlockDeviceInfoList(list);
2671             return NULL;
2672         }
2673         entry = g_malloc0(sizeof(*entry));
2674         entry->value = info;
2675         entry->next = list;
2676         list = entry;
2677     }
2678
2679     return list;
2680 }
2681
2682 BlockDriverState *bdrv_lookup_bs(const char *device,
2683                                  const char *node_name,
2684                                  Error **errp)
2685 {
2686     BlockBackend *blk;
2687     BlockDriverState *bs;
2688
2689     if (device) {
2690         blk = blk_by_name(device);
2691
2692         if (blk) {
2693             bs = blk_bs(blk);
2694             if (!bs) {
2695                 error_setg(errp, "Device '%s' has no medium", device);
2696             }
2697
2698             return bs;
2699         }
2700     }
2701
2702     if (node_name) {
2703         bs = bdrv_find_node(node_name);
2704
2705         if (bs) {
2706             return bs;
2707         }
2708     }
2709
2710     error_setg(errp, "Cannot find device=%s nor node_name=%s",
2711                      device ? device : "",
2712                      node_name ? node_name : "");
2713     return NULL;
2714 }
2715
2716 /* If 'base' is in the same chain as 'top', return true. Otherwise,
2717  * return false.  If either argument is NULL, return false. */
2718 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2719 {
2720     while (top && top != base) {
2721         top = backing_bs(top);
2722     }
2723
2724     return top != NULL;
2725 }
2726
2727 BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2728 {
2729     if (!bs) {
2730         return QTAILQ_FIRST(&graph_bdrv_states);
2731     }
2732     return QTAILQ_NEXT(bs, node_list);
2733 }
2734
2735 BlockDriverState *bdrv_next(BlockDriverState *bs)
2736 {
2737     if (!bs) {
2738         return QTAILQ_FIRST(&bdrv_states);
2739     }
2740     return QTAILQ_NEXT(bs, device_list);
2741 }
2742
2743 const char *bdrv_get_node_name(const BlockDriverState *bs)
2744 {
2745     return bs->node_name;
2746 }
2747
2748 /* TODO check what callers really want: bs->node_name or blk_name() */
2749 const char *bdrv_get_device_name(const BlockDriverState *bs)
2750 {
2751     return bs->blk ? blk_name(bs->blk) : "";
2752 }
2753
2754 /* This can be used to identify nodes that might not have a device
2755  * name associated. Since node and device names live in the same
2756  * namespace, the result is unambiguous. The exception is if both are
2757  * absent, then this returns an empty (non-null) string. */
2758 const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2759 {
2760     return bs->blk ? blk_name(bs->blk) : bs->node_name;
2761 }
2762
2763 int bdrv_get_flags(BlockDriverState *bs)
2764 {
2765     return bs->open_flags;
2766 }
2767
2768 int bdrv_has_zero_init_1(BlockDriverState *bs)
2769 {
2770     return 1;
2771 }
2772
2773 int bdrv_has_zero_init(BlockDriverState *bs)
2774 {
2775     assert(bs->drv);
2776
2777     /* If BS is a copy on write image, it is initialized to
2778        the contents of the base image, which may not be zeroes.  */
2779     if (bs->backing) {
2780         return 0;
2781     }
2782     if (bs->drv->bdrv_has_zero_init) {
2783         return bs->drv->bdrv_has_zero_init(bs);
2784     }
2785
2786     /* safe default */
2787     return 0;
2788 }
2789
2790 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2791 {
2792     BlockDriverInfo bdi;
2793
2794     if (bs->backing) {
2795         return false;
2796     }
2797
2798     if (bdrv_get_info(bs, &bdi) == 0) {
2799         return bdi.unallocated_blocks_are_zero;
2800     }
2801
2802     return false;
2803 }
2804
2805 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2806 {
2807     BlockDriverInfo bdi;
2808
2809     if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
2810         return false;
2811     }
2812
2813     if (bdrv_get_info(bs, &bdi) == 0) {
2814         return bdi.can_write_zeroes_with_unmap;
2815     }
2816
2817     return false;
2818 }
2819
2820 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2821 {
2822     if (bs->backing && bs->backing->bs->encrypted)
2823         return bs->backing_file;
2824     else if (bs->encrypted)
2825         return bs->filename;
2826     else
2827         return NULL;
2828 }
2829
2830 void bdrv_get_backing_filename(BlockDriverState *bs,
2831                                char *filename, int filename_size)
2832 {
2833     pstrcpy(filename, filename_size, bs->backing_file);
2834 }
2835
2836 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2837 {
2838     BlockDriver *drv = bs->drv;
2839     if (!drv)
2840         return -ENOMEDIUM;
2841     if (!drv->bdrv_get_info)
2842         return -ENOTSUP;
2843     memset(bdi, 0, sizeof(*bdi));
2844     return drv->bdrv_get_info(bs, bdi);
2845 }
2846
2847 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2848 {
2849     BlockDriver *drv = bs->drv;
2850     if (drv && drv->bdrv_get_specific_info) {
2851         return drv->bdrv_get_specific_info(bs);
2852     }
2853     return NULL;
2854 }
2855
2856 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
2857 {
2858     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
2859         return;
2860     }
2861
2862     bs->drv->bdrv_debug_event(bs, event);
2863 }
2864
2865 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2866                           const char *tag)
2867 {
2868     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
2869         bs = bs->file ? bs->file->bs : NULL;
2870     }
2871
2872     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2873         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2874     }
2875
2876     return -ENOTSUP;
2877 }
2878
2879 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
2880 {
2881     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
2882         bs = bs->file ? bs->file->bs : NULL;
2883     }
2884
2885     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2886         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2887     }
2888
2889     return -ENOTSUP;
2890 }
2891
2892 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
2893 {
2894     while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
2895         bs = bs->file ? bs->file->bs : NULL;
2896     }
2897
2898     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
2899         return bs->drv->bdrv_debug_resume(bs, tag);
2900     }
2901
2902     return -ENOTSUP;
2903 }
2904
2905 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
2906 {
2907     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
2908         bs = bs->file ? bs->file->bs : NULL;
2909     }
2910
2911     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
2912         return bs->drv->bdrv_debug_is_suspended(bs, tag);
2913     }
2914
2915     return false;
2916 }
2917
2918 int bdrv_is_snapshot(BlockDriverState *bs)
2919 {
2920     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
2921 }
2922
2923 /* backing_file can either be relative, or absolute, or a protocol.  If it is
2924  * relative, it must be relative to the chain.  So, passing in bs->filename
2925  * from a BDS as backing_file should not be done, as that may be relative to
2926  * the CWD rather than the chain. */
2927 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
2928         const char *backing_file)
2929 {
2930     char *filename_full = NULL;
2931     char *backing_file_full = NULL;
2932     char *filename_tmp = NULL;
2933     int is_protocol = 0;
2934     BlockDriverState *curr_bs = NULL;
2935     BlockDriverState *retval = NULL;
2936
2937     if (!bs || !bs->drv || !backing_file) {
2938         return NULL;
2939     }
2940
2941     filename_full     = g_malloc(PATH_MAX);
2942     backing_file_full = g_malloc(PATH_MAX);
2943     filename_tmp      = g_malloc(PATH_MAX);
2944
2945     is_protocol = path_has_protocol(backing_file);
2946
2947     for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
2948
2949         /* If either of the filename paths is actually a protocol, then
2950          * compare unmodified paths; otherwise make paths relative */
2951         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
2952             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
2953                 retval = curr_bs->backing->bs;
2954                 break;
2955             }
2956         } else {
2957             /* If not an absolute filename path, make it relative to the current
2958              * image's filename path */
2959             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2960                          backing_file);
2961
2962             /* We are going to compare absolute pathnames */
2963             if (!realpath(filename_tmp, filename_full)) {
2964                 continue;
2965             }
2966
2967             /* We need to make sure the backing filename we are comparing against
2968              * is relative to the current image filename (or absolute) */
2969             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2970                          curr_bs->backing_file);
2971
2972             if (!realpath(filename_tmp, backing_file_full)) {
2973                 continue;
2974             }
2975
2976             if (strcmp(backing_file_full, filename_full) == 0) {
2977                 retval = curr_bs->backing->bs;
2978                 break;
2979             }
2980         }
2981     }
2982
2983     g_free(filename_full);
2984     g_free(backing_file_full);
2985     g_free(filename_tmp);
2986     return retval;
2987 }
2988
2989 int bdrv_get_backing_file_depth(BlockDriverState *bs)
2990 {
2991     if (!bs->drv) {
2992         return 0;
2993     }
2994
2995     if (!bs->backing) {
2996         return 0;
2997     }
2998
2999     return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
3000 }
3001
3002 void bdrv_init(void)
3003 {
3004     module_call_init(MODULE_INIT_BLOCK);
3005 }
3006
3007 void bdrv_init_with_whitelist(void)
3008 {
3009     use_bdrv_whitelist = 1;
3010     bdrv_init();
3011 }
3012
3013 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
3014 {
3015     Error *local_err = NULL;
3016     int ret;
3017
3018     if (!bs->drv)  {
3019         return;
3020     }
3021
3022     if (!(bs->open_flags & BDRV_O_INCOMING)) {
3023         return;
3024     }
3025     bs->open_flags &= ~BDRV_O_INCOMING;
3026
3027     if (bs->drv->bdrv_invalidate_cache) {
3028         bs->drv->bdrv_invalidate_cache(bs, &local_err);
3029     } else if (bs->file) {
3030         bdrv_invalidate_cache(bs->file->bs, &local_err);
3031     }
3032     if (local_err) {
3033         error_propagate(errp, local_err);
3034         return;
3035     }
3036
3037     ret = refresh_total_sectors(bs, bs->total_sectors);
3038     if (ret < 0) {
3039         error_setg_errno(errp, -ret, "Could not refresh total sector count");
3040         return;
3041     }
3042 }
3043
3044 void bdrv_invalidate_cache_all(Error **errp)
3045 {
3046     BlockDriverState *bs;
3047     Error *local_err = NULL;
3048
3049     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3050         AioContext *aio_context = bdrv_get_aio_context(bs);
3051
3052         aio_context_acquire(aio_context);
3053         bdrv_invalidate_cache(bs, &local_err);
3054         aio_context_release(aio_context);
3055         if (local_err) {
3056             error_propagate(errp, local_err);
3057             return;
3058         }
3059     }
3060 }
3061
3062 /**************************************************************/
3063 /* removable device support */
3064
3065 /**
3066  * Return TRUE if the media is present
3067  */
3068 bool bdrv_is_inserted(BlockDriverState *bs)
3069 {
3070     BlockDriver *drv = bs->drv;
3071     BdrvChild *child;
3072
3073     if (!drv) {
3074         return false;
3075     }
3076     if (drv->bdrv_is_inserted) {
3077         return drv->bdrv_is_inserted(bs);
3078     }
3079     QLIST_FOREACH(child, &bs->children, next) {
3080         if (!bdrv_is_inserted(child->bs)) {
3081             return false;
3082         }
3083     }
3084     return true;
3085 }
3086
3087 /**
3088  * Return whether the media changed since the last call to this
3089  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
3090  */
3091 int bdrv_media_changed(BlockDriverState *bs)
3092 {
3093     BlockDriver *drv = bs->drv;
3094
3095     if (drv && drv->bdrv_media_changed) {
3096         return drv->bdrv_media_changed(bs);
3097     }
3098     return -ENOTSUP;
3099 }
3100
3101 /**
3102  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3103  */
3104 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
3105 {
3106     BlockDriver *drv = bs->drv;
3107     const char *device_name;
3108
3109     if (drv && drv->bdrv_eject) {
3110         drv->bdrv_eject(bs, eject_flag);
3111     }
3112
3113     device_name = bdrv_get_device_name(bs);
3114     if (device_name[0] != '\0') {
3115         qapi_event_send_device_tray_moved(device_name,
3116                                           eject_flag, &error_abort);
3117     }
3118 }
3119
3120 /**
3121  * Lock or unlock the media (if it is locked, the user won't be able
3122  * to eject it manually).
3123  */
3124 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
3125 {
3126     BlockDriver *drv = bs->drv;
3127
3128     trace_bdrv_lock_medium(bs, locked);
3129
3130     if (drv && drv->bdrv_lock_medium) {
3131         drv->bdrv_lock_medium(bs, locked);
3132     }
3133 }
3134
3135 BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3136 {
3137     BdrvDirtyBitmap *bm;
3138
3139     assert(name);
3140     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3141         if (bm->name && !strcmp(name, bm->name)) {
3142             return bm;
3143         }
3144     }
3145     return NULL;
3146 }
3147
3148 void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
3149 {
3150     assert(!bdrv_dirty_bitmap_frozen(bitmap));
3151     g_free(bitmap->name);
3152     bitmap->name = NULL;
3153 }
3154
3155 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
3156                                           uint32_t granularity,
3157                                           const char *name,
3158                                           Error **errp)
3159 {
3160     int64_t bitmap_size;
3161     BdrvDirtyBitmap *bitmap;
3162     uint32_t sector_granularity;
3163
3164     assert((granularity & (granularity - 1)) == 0);
3165
3166     if (name && bdrv_find_dirty_bitmap(bs, name)) {
3167         error_setg(errp, "Bitmap already exists: %s", name);
3168         return NULL;
3169     }
3170     sector_granularity = granularity >> BDRV_SECTOR_BITS;
3171     assert(sector_granularity);
3172     bitmap_size = bdrv_nb_sectors(bs);
3173     if (bitmap_size < 0) {
3174         error_setg_errno(errp, -bitmap_size, "could not get length of device");
3175         errno = -bitmap_size;
3176         return NULL;
3177     }
3178     bitmap = g_new0(BdrvDirtyBitmap, 1);
3179     bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
3180     bitmap->size = bitmap_size;
3181     bitmap->name = g_strdup(name);
3182     bitmap->disabled = false;
3183     QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3184     return bitmap;
3185 }
3186
3187 bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3188 {
3189     return bitmap->successor;
3190 }
3191
3192 bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3193 {
3194     return !(bitmap->disabled || bitmap->successor);
3195 }
3196
3197 DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3198 {
3199     if (bdrv_dirty_bitmap_frozen(bitmap)) {
3200         return DIRTY_BITMAP_STATUS_FROZEN;
3201     } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3202         return DIRTY_BITMAP_STATUS_DISABLED;
3203     } else {
3204         return DIRTY_BITMAP_STATUS_ACTIVE;
3205     }
3206 }
3207
3208 /**
3209  * Create a successor bitmap destined to replace this bitmap after an operation.
3210  * Requires that the bitmap is not frozen and has no successor.
3211  */
3212 int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3213                                        BdrvDirtyBitmap *bitmap, Error **errp)
3214 {
3215     uint64_t granularity;
3216     BdrvDirtyBitmap *child;
3217
3218     if (bdrv_dirty_bitmap_frozen(bitmap)) {
3219         error_setg(errp, "Cannot create a successor for a bitmap that is "
3220                    "currently frozen");
3221         return -1;
3222     }
3223     assert(!bitmap->successor);
3224
3225     /* Create an anonymous successor */
3226     granularity = bdrv_dirty_bitmap_granularity(bitmap);
3227     child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3228     if (!child) {
3229         return -1;
3230     }
3231
3232     /* Successor will be on or off based on our current state. */
3233     child->disabled = bitmap->disabled;
3234
3235     /* Install the successor and freeze the parent */
3236     bitmap->successor = child;
3237     return 0;
3238 }
3239
3240 /**
3241  * For a bitmap with a successor, yield our name to the successor,
3242  * delete the old bitmap, and return a handle to the new bitmap.
3243  */
3244 BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3245                                             BdrvDirtyBitmap *bitmap,
3246                                             Error **errp)
3247 {
3248     char *name;
3249     BdrvDirtyBitmap *successor = bitmap->successor;
3250
3251     if (successor == NULL) {
3252         error_setg(errp, "Cannot relinquish control if "
3253                    "there's no successor present");
3254         return NULL;
3255     }
3256
3257     name = bitmap->name;
3258     bitmap->name = NULL;
3259     successor->name = name;
3260     bitmap->successor = NULL;
3261     bdrv_release_dirty_bitmap(bs, bitmap);
3262
3263     return successor;
3264 }
3265
3266 /**
3267  * In cases of failure where we can no longer safely delete the parent,
3268  * we may wish to re-join the parent and child/successor.
3269  * The merged parent will be un-frozen, but not explicitly re-enabled.
3270  */
3271 BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3272                                            BdrvDirtyBitmap *parent,
3273                                            Error **errp)
3274 {
3275     BdrvDirtyBitmap *successor = parent->successor;
3276
3277     if (!successor) {
3278         error_setg(errp, "Cannot reclaim a successor when none is present");
3279         return NULL;
3280     }
3281
3282     if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3283         error_setg(errp, "Merging of parent and successor bitmap failed");
3284         return NULL;
3285     }
3286     bdrv_release_dirty_bitmap(bs, successor);
3287     parent->successor = NULL;
3288
3289     return parent;
3290 }
3291
3292 /**
3293  * Truncates _all_ bitmaps attached to a BDS.
3294  */
3295 static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3296 {
3297     BdrvDirtyBitmap *bitmap;
3298     uint64_t size = bdrv_nb_sectors(bs);
3299
3300     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
3301         assert(!bdrv_dirty_bitmap_frozen(bitmap));
3302         hbitmap_truncate(bitmap->bitmap, size);
3303         bitmap->size = size;
3304     }
3305 }
3306
3307 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3308 {
3309     BdrvDirtyBitmap *bm, *next;
3310     QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3311         if (bm == bitmap) {
3312             assert(!bdrv_dirty_bitmap_frozen(bm));
3313             QLIST_REMOVE(bitmap, list);
3314             hbitmap_free(bitmap->bitmap);
3315             g_free(bitmap->name);
3316             g_free(bitmap);
3317             return;
3318         }
3319     }
3320 }
3321
3322 void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3323 {
3324     assert(!bdrv_dirty_bitmap_frozen(bitmap));
3325     bitmap->disabled = true;
3326 }
3327
3328 void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3329 {
3330     assert(!bdrv_dirty_bitmap_frozen(bitmap));
3331     bitmap->disabled = false;
3332 }
3333
3334 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3335 {
3336     BdrvDirtyBitmap *bm;
3337     BlockDirtyInfoList *list = NULL;
3338     BlockDirtyInfoList **plist = &list;
3339
3340     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3341         BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3342         BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
3343         info->count = bdrv_get_dirty_count(bm);
3344         info->granularity = bdrv_dirty_bitmap_granularity(bm);
3345         info->has_name = !!bm->name;
3346         info->name = g_strdup(bm->name);
3347         info->status = bdrv_dirty_bitmap_status(bm);
3348         entry->value = info;
3349         *plist = entry;
3350         plist = &entry->next;
3351     }
3352
3353     return list;
3354 }
3355
3356 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
3357 {
3358     if (bitmap) {
3359         return hbitmap_get(bitmap->bitmap, sector);
3360     } else {
3361         return 0;
3362     }
3363 }
3364
3365 /**
3366  * Chooses a default granularity based on the existing cluster size,
3367  * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3368  * is no cluster size information available.
3369  */
3370 uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3371 {
3372     BlockDriverInfo bdi;
3373     uint32_t granularity;
3374
3375     if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3376         granularity = MAX(4096, bdi.cluster_size);
3377         granularity = MIN(65536, granularity);
3378     } else {
3379         granularity = 65536;
3380     }
3381
3382     return granularity;
3383 }
3384
3385 uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3386 {
3387     return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3388 }
3389
3390 void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
3391 {
3392     hbitmap_iter_init(hbi, bitmap->bitmap, 0);
3393 }
3394
3395 void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
3396                            int64_t cur_sector, int nr_sectors)
3397 {
3398     assert(bdrv_dirty_bitmap_enabled(bitmap));
3399     hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3400 }
3401
3402 void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
3403                              int64_t cur_sector, int nr_sectors)
3404 {
3405     assert(bdrv_dirty_bitmap_enabled(bitmap));
3406     hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3407 }
3408
3409 void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap **out)
3410 {
3411     assert(bdrv_dirty_bitmap_enabled(bitmap));
3412     if (!out) {
3413         hbitmap_reset_all(bitmap->bitmap);
3414     } else {
3415         HBitmap *backup = bitmap->bitmap;
3416         bitmap->bitmap = hbitmap_alloc(bitmap->size,
3417                                        hbitmap_granularity(backup));
3418         *out = backup;
3419     }
3420 }
3421
3422 void bdrv_undo_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap *in)
3423 {
3424     HBitmap *tmp = bitmap->bitmap;
3425     assert(bdrv_dirty_bitmap_enabled(bitmap));
3426     bitmap->bitmap = in;
3427     hbitmap_free(tmp);
3428 }
3429
3430 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3431                     int nr_sectors)
3432 {
3433     BdrvDirtyBitmap *bitmap;
3434     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
3435         if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3436             continue;
3437         }
3438         hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3439     }
3440 }
3441
3442 /**
3443  * Advance an HBitmapIter to an arbitrary offset.
3444  */
3445 void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3446 {
3447     assert(hbi->hb);
3448     hbitmap_iter_init(hbi, hbi->hb, offset);
3449 }
3450
3451 int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
3452 {
3453     return hbitmap_count(bitmap->bitmap);
3454 }
3455
3456 /* Get a reference to bs */
3457 void bdrv_ref(BlockDriverState *bs)
3458 {
3459     bs->refcnt++;
3460 }
3461
3462 /* Release a previously grabbed reference to bs.
3463  * If after releasing, reference count is zero, the BlockDriverState is
3464  * deleted. */
3465 void bdrv_unref(BlockDriverState *bs)
3466 {
3467     if (!bs) {
3468         return;
3469     }
3470     assert(bs->refcnt > 0);
3471     if (--bs->refcnt == 0) {
3472         bdrv_delete(bs);
3473     }
3474 }
3475
3476 struct BdrvOpBlocker {
3477     Error *reason;
3478     QLIST_ENTRY(BdrvOpBlocker) list;
3479 };
3480
3481 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3482 {
3483     BdrvOpBlocker *blocker;
3484     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3485     if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3486         blocker = QLIST_FIRST(&bs->op_blockers[op]);
3487         if (errp) {
3488             error_setg(errp, "Node '%s' is busy: %s",
3489                        bdrv_get_device_or_node_name(bs),
3490                        error_get_pretty(blocker->reason));
3491         }
3492         return true;
3493     }
3494     return false;
3495 }
3496
3497 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3498 {
3499     BdrvOpBlocker *blocker;
3500     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3501
3502     blocker = g_new0(BdrvOpBlocker, 1);
3503     blocker->reason = reason;
3504     QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3505 }
3506
3507 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3508 {
3509     BdrvOpBlocker *blocker, *next;
3510     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3511     QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3512         if (blocker->reason == reason) {
3513             QLIST_REMOVE(blocker, list);
3514             g_free(blocker);
3515         }
3516     }
3517 }
3518
3519 void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3520 {
3521     int i;
3522     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3523         bdrv_op_block(bs, i, reason);
3524     }
3525 }
3526
3527 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3528 {
3529     int i;
3530     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3531         bdrv_op_unblock(bs, i, reason);
3532     }
3533 }
3534
3535 bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3536 {
3537     int i;
3538
3539     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3540         if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3541             return false;
3542         }
3543     }
3544     return true;
3545 }
3546
3547 void bdrv_img_create(const char *filename, const char *fmt,
3548                      const char *base_filename, const char *base_fmt,
3549                      char *options, uint64_t img_size, int flags,
3550                      Error **errp, bool quiet)
3551 {
3552     QemuOptsList *create_opts = NULL;
3553     QemuOpts *opts = NULL;
3554     const char *backing_fmt, *backing_file;
3555     int64_t size;
3556     BlockDriver *drv, *proto_drv;
3557     Error *local_err = NULL;
3558     int ret = 0;
3559
3560     /* Find driver and parse its options */
3561     drv = bdrv_find_format(fmt);
3562     if (!drv) {
3563         error_setg(errp, "Unknown file format '%s'", fmt);
3564         return;
3565     }
3566
3567     proto_drv = bdrv_find_protocol(filename, true, errp);
3568     if (!proto_drv) {
3569         return;
3570     }
3571
3572     if (!drv->create_opts) {
3573         error_setg(errp, "Format driver '%s' does not support image creation",
3574                    drv->format_name);
3575         return;
3576     }
3577
3578     if (!proto_drv->create_opts) {
3579         error_setg(errp, "Protocol driver '%s' does not support image creation",
3580                    proto_drv->format_name);
3581         return;
3582     }
3583
3584     create_opts = qemu_opts_append(create_opts, drv->create_opts);
3585     create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
3586
3587     /* Create parameter list with default values */
3588     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
3589     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
3590
3591     /* Parse -o options */
3592     if (options) {
3593         qemu_opts_do_parse(opts, options, NULL, &local_err);
3594         if (local_err) {
3595             error_report_err(local_err);
3596             local_err = NULL;
3597             error_setg(errp, "Invalid options for file format '%s'", fmt);
3598             goto out;
3599         }
3600     }
3601
3602     if (base_filename) {
3603         qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
3604         if (local_err) {
3605             error_setg(errp, "Backing file not supported for file format '%s'",
3606                        fmt);
3607             goto out;
3608         }
3609     }
3610
3611     if (base_fmt) {
3612         qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
3613         if (local_err) {
3614             error_setg(errp, "Backing file format not supported for file "
3615                              "format '%s'", fmt);
3616             goto out;
3617         }
3618     }
3619
3620     backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3621     if (backing_file) {
3622         if (!strcmp(filename, backing_file)) {
3623             error_setg(errp, "Error: Trying to create an image with the "
3624                              "same filename as the backing file");
3625             goto out;
3626         }
3627     }
3628
3629     backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3630
3631     // The size for the image must always be specified, with one exception:
3632     // If we are using a backing file, we can obtain the size from there
3633     size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3634     if (size == -1) {
3635         if (backing_file) {
3636             BlockDriverState *bs;
3637             char *full_backing = g_new0(char, PATH_MAX);
3638             int64_t size;
3639             int back_flags;
3640             QDict *backing_options = NULL;
3641
3642             bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3643                                                          full_backing, PATH_MAX,
3644                                                          &local_err);
3645             if (local_err) {
3646                 g_free(full_backing);
3647                 goto out;
3648             }
3649
3650             /* backing files always opened read-only */
3651             back_flags =
3652                 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
3653
3654             if (backing_fmt) {
3655                 backing_options = qdict_new();
3656                 qdict_put(backing_options, "driver",
3657                           qstring_from_str(backing_fmt));
3658             }
3659
3660             bs = NULL;
3661             ret = bdrv_open(&bs, full_backing, NULL, backing_options,
3662                             back_flags, &local_err);
3663             g_free(full_backing);
3664             if (ret < 0) {
3665                 goto out;
3666             }
3667             size = bdrv_getlength(bs);
3668             if (size < 0) {
3669                 error_setg_errno(errp, -size, "Could not get size of '%s'",
3670                                  backing_file);
3671                 bdrv_unref(bs);
3672                 goto out;
3673             }
3674
3675             qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
3676
3677             bdrv_unref(bs);
3678         } else {
3679             error_setg(errp, "Image creation needs a size parameter");
3680             goto out;
3681         }
3682     }
3683
3684     if (!quiet) {
3685         printf("Formatting '%s', fmt=%s ", filename, fmt);
3686         qemu_opts_print(opts, " ");
3687         puts("");
3688     }
3689
3690     ret = bdrv_create(drv, filename, opts, &local_err);
3691
3692     if (ret == -EFBIG) {
3693         /* This is generally a better message than whatever the driver would
3694          * deliver (especially because of the cluster_size_hint), since that
3695          * is most probably not much different from "image too large". */
3696         const char *cluster_size_hint = "";
3697         if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
3698             cluster_size_hint = " (try using a larger cluster size)";
3699         }
3700         error_setg(errp, "The image size is too large for file format '%s'"
3701                    "%s", fmt, cluster_size_hint);
3702         error_free(local_err);
3703         local_err = NULL;
3704     }
3705
3706 out:
3707     qemu_opts_del(opts);
3708     qemu_opts_free(create_opts);
3709     if (local_err) {
3710         error_propagate(errp, local_err);
3711     }
3712 }
3713
3714 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3715 {
3716     return bs->aio_context;
3717 }
3718
3719 void bdrv_detach_aio_context(BlockDriverState *bs)
3720 {
3721     BdrvAioNotifier *baf;
3722
3723     if (!bs->drv) {
3724         return;
3725     }
3726
3727     QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3728         baf->detach_aio_context(baf->opaque);
3729     }
3730
3731     if (bs->throttle_state) {
3732         throttle_timers_detach_aio_context(&bs->throttle_timers);
3733     }
3734     if (bs->drv->bdrv_detach_aio_context) {
3735         bs->drv->bdrv_detach_aio_context(bs);
3736     }
3737     if (bs->file) {
3738         bdrv_detach_aio_context(bs->file->bs);
3739     }
3740     if (bs->backing) {
3741         bdrv_detach_aio_context(bs->backing->bs);
3742     }
3743
3744     bs->aio_context = NULL;
3745 }
3746
3747 void bdrv_attach_aio_context(BlockDriverState *bs,
3748                              AioContext *new_context)
3749 {
3750     BdrvAioNotifier *ban;
3751
3752     if (!bs->drv) {
3753         return;
3754     }
3755
3756     bs->aio_context = new_context;
3757
3758     if (bs->backing) {
3759         bdrv_attach_aio_context(bs->backing->bs, new_context);
3760     }
3761     if (bs->file) {
3762         bdrv_attach_aio_context(bs->file->bs, new_context);
3763     }
3764     if (bs->drv->bdrv_attach_aio_context) {
3765         bs->drv->bdrv_attach_aio_context(bs, new_context);
3766     }
3767     if (bs->throttle_state) {
3768         throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
3769     }
3770
3771     QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3772         ban->attached_aio_context(new_context, ban->opaque);
3773     }
3774 }
3775
3776 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3777 {
3778     bdrv_drain(bs); /* ensure there are no in-flight requests */
3779
3780     bdrv_detach_aio_context(bs);
3781
3782     /* This function executes in the old AioContext so acquire the new one in
3783      * case it runs in a different thread.
3784      */
3785     aio_context_acquire(new_context);
3786     bdrv_attach_aio_context(bs, new_context);
3787     aio_context_release(new_context);
3788 }
3789
3790 void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3791         void (*attached_aio_context)(AioContext *new_context, void *opaque),
3792         void (*detach_aio_context)(void *opaque), void *opaque)
3793 {
3794     BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3795     *ban = (BdrvAioNotifier){
3796         .attached_aio_context = attached_aio_context,
3797         .detach_aio_context   = detach_aio_context,
3798         .opaque               = opaque
3799     };
3800
3801     QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3802 }
3803
3804 void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3805                                       void (*attached_aio_context)(AioContext *,
3806                                                                    void *),
3807                                       void (*detach_aio_context)(void *),
3808                                       void *opaque)
3809 {
3810     BdrvAioNotifier *ban, *ban_next;
3811
3812     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3813         if (ban->attached_aio_context == attached_aio_context &&
3814             ban->detach_aio_context   == detach_aio_context   &&
3815             ban->opaque               == opaque)
3816         {
3817             QLIST_REMOVE(ban, list);
3818             g_free(ban);
3819
3820             return;
3821         }
3822     }
3823
3824     abort();
3825 }
3826
3827 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3828                        BlockDriverAmendStatusCB *status_cb)
3829 {
3830     if (!bs->drv->bdrv_amend_options) {
3831         return -ENOTSUP;
3832     }
3833     return bs->drv->bdrv_amend_options(bs, opts, status_cb);
3834 }
3835
3836 /* This function will be called by the bdrv_recurse_is_first_non_filter method
3837  * of block filter and by bdrv_is_first_non_filter.
3838  * It is used to test if the given bs is the candidate or recurse more in the
3839  * node graph.
3840  */
3841 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3842                                       BlockDriverState *candidate)
3843 {
3844     /* return false if basic checks fails */
3845     if (!bs || !bs->drv) {
3846         return false;
3847     }
3848
3849     /* the code reached a non block filter driver -> check if the bs is
3850      * the same as the candidate. It's the recursion termination condition.
3851      */
3852     if (!bs->drv->is_filter) {
3853         return bs == candidate;
3854     }
3855     /* Down this path the driver is a block filter driver */
3856
3857     /* If the block filter recursion method is defined use it to recurse down
3858      * the node graph.
3859      */
3860     if (bs->drv->bdrv_recurse_is_first_non_filter) {
3861         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3862     }
3863
3864     /* the driver is a block filter but don't allow to recurse -> return false
3865      */
3866     return false;
3867 }
3868
3869 /* This function checks if the candidate is the first non filter bs down it's
3870  * bs chain. Since we don't have pointers to parents it explore all bs chains
3871  * from the top. Some filters can choose not to pass down the recursion.
3872  */
3873 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3874 {
3875     BlockDriverState *bs;
3876
3877     /* walk down the bs forest recursively */
3878     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3879         bool perm;
3880
3881         /* try to recurse in this top level bs */
3882         perm = bdrv_recurse_is_first_non_filter(bs, candidate);
3883
3884         /* candidate is the first non filter */
3885         if (perm) {
3886             return true;
3887         }
3888     }
3889
3890     return false;
3891 }
3892
3893 BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3894                                         const char *node_name, Error **errp)
3895 {
3896     BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
3897     AioContext *aio_context;
3898
3899     if (!to_replace_bs) {
3900         error_setg(errp, "Node name '%s' not found", node_name);
3901         return NULL;
3902     }
3903
3904     aio_context = bdrv_get_aio_context(to_replace_bs);
3905     aio_context_acquire(aio_context);
3906
3907     if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
3908         to_replace_bs = NULL;
3909         goto out;
3910     }
3911
3912     /* We don't want arbitrary node of the BDS chain to be replaced only the top
3913      * most non filter in order to prevent data corruption.
3914      * Another benefit is that this tests exclude backing files which are
3915      * blocked by the backing blockers.
3916      */
3917     if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
3918         error_setg(errp, "Only top most non filter can be replaced");
3919         to_replace_bs = NULL;
3920         goto out;
3921     }
3922
3923 out:
3924     aio_context_release(aio_context);
3925     return to_replace_bs;
3926 }
3927
3928 static bool append_open_options(QDict *d, BlockDriverState *bs)
3929 {
3930     const QDictEntry *entry;
3931     bool found_any = false;
3932
3933     for (entry = qdict_first(bs->options); entry;
3934          entry = qdict_next(bs->options, entry))
3935     {
3936         /* Only take options for this level and exclude all non-driver-specific
3937          * options */
3938         if (!strchr(qdict_entry_key(entry), '.') &&
3939             strcmp(qdict_entry_key(entry), "node-name"))
3940         {
3941             qobject_incref(qdict_entry_value(entry));
3942             qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3943             found_any = true;
3944         }
3945     }
3946
3947     return found_any;
3948 }
3949
3950 /* Updates the following BDS fields:
3951  *  - exact_filename: A filename which may be used for opening a block device
3952  *                    which (mostly) equals the given BDS (even without any
3953  *                    other options; so reading and writing must return the same
3954  *                    results, but caching etc. may be different)
3955  *  - full_open_options: Options which, when given when opening a block device
3956  *                       (without a filename), result in a BDS (mostly)
3957  *                       equalling the given one
3958  *  - filename: If exact_filename is set, it is copied here. Otherwise,
3959  *              full_open_options is converted to a JSON object, prefixed with
3960  *              "json:" (for use through the JSON pseudo protocol) and put here.
3961  */
3962 void bdrv_refresh_filename(BlockDriverState *bs)
3963 {
3964     BlockDriver *drv = bs->drv;
3965     QDict *opts;
3966
3967     if (!drv) {
3968         return;
3969     }
3970
3971     /* This BDS's file name will most probably depend on its file's name, so
3972      * refresh that first */
3973     if (bs->file) {
3974         bdrv_refresh_filename(bs->file->bs);
3975     }
3976
3977     if (drv->bdrv_refresh_filename) {
3978         /* Obsolete information is of no use here, so drop the old file name
3979          * information before refreshing it */
3980         bs->exact_filename[0] = '\0';
3981         if (bs->full_open_options) {
3982             QDECREF(bs->full_open_options);
3983             bs->full_open_options = NULL;
3984         }
3985
3986         drv->bdrv_refresh_filename(bs);
3987     } else if (bs->file) {
3988         /* Try to reconstruct valid information from the underlying file */
3989         bool has_open_options;
3990
3991         bs->exact_filename[0] = '\0';
3992         if (bs->full_open_options) {
3993             QDECREF(bs->full_open_options);
3994             bs->full_open_options = NULL;
3995         }
3996
3997         opts = qdict_new();
3998         has_open_options = append_open_options(opts, bs);
3999
4000         /* If no specific options have been given for this BDS, the filename of
4001          * the underlying file should suffice for this one as well */
4002         if (bs->file->bs->exact_filename[0] && !has_open_options) {
4003             strcpy(bs->exact_filename, bs->file->bs->exact_filename);
4004         }
4005         /* Reconstructing the full options QDict is simple for most format block
4006          * drivers, as long as the full options are known for the underlying
4007          * file BDS. The full options QDict of that file BDS should somehow
4008          * contain a representation of the filename, therefore the following
4009          * suffices without querying the (exact_)filename of this BDS. */
4010         if (bs->file->bs->full_open_options) {
4011             qdict_put_obj(opts, "driver",
4012                           QOBJECT(qstring_from_str(drv->format_name)));
4013             QINCREF(bs->file->bs->full_open_options);
4014             qdict_put_obj(opts, "file",
4015                           QOBJECT(bs->file->bs->full_open_options));
4016
4017             bs->full_open_options = opts;
4018         } else {
4019             QDECREF(opts);
4020         }
4021     } else if (!bs->full_open_options && qdict_size(bs->options)) {
4022         /* There is no underlying file BDS (at least referenced by BDS.file),
4023          * so the full options QDict should be equal to the options given
4024          * specifically for this block device when it was opened (plus the
4025          * driver specification).
4026          * Because those options don't change, there is no need to update
4027          * full_open_options when it's already set. */
4028
4029         opts = qdict_new();
4030         append_open_options(opts, bs);
4031         qdict_put_obj(opts, "driver",
4032                       QOBJECT(qstring_from_str(drv->format_name)));
4033
4034         if (bs->exact_filename[0]) {
4035             /* This may not work for all block protocol drivers (some may
4036              * require this filename to be parsed), but we have to find some
4037              * default solution here, so just include it. If some block driver
4038              * does not support pure options without any filename at all or
4039              * needs some special format of the options QDict, it needs to
4040              * implement the driver-specific bdrv_refresh_filename() function.
4041              */
4042             qdict_put_obj(opts, "filename",
4043                           QOBJECT(qstring_from_str(bs->exact_filename)));
4044         }
4045
4046         bs->full_open_options = opts;
4047     }
4048
4049     if (bs->exact_filename[0]) {
4050         pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4051     } else if (bs->full_open_options) {
4052         QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4053         snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4054                  qstring_get_str(json));
4055         QDECREF(json);
4056     }
4057 }