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