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