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