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