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