qemu-io: Use bdrv_parse_cache_mode() in reopen_f()
[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     /* WCE is a BlockBackend level option, can't change it */
2032     bool old_wce = bdrv_enable_write_cache(reopen_state->bs);
2033     bool new_wce = (reopen_state->flags & BDRV_O_CACHE_WB);
2034
2035     if (old_wce != new_wce) {
2036         error_setg(errp, "Cannot change cache.writeback");
2037         ret = -EINVAL;
2038         goto error;
2039     }
2040
2041     /* node-name and driver must be unchanged. Put them back into the QDict, so
2042      * that they are checked at the end of this function. */
2043     value = qemu_opt_get(opts, "node-name");
2044     if (value) {
2045         qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2046     }
2047
2048     value = qemu_opt_get(opts, "driver");
2049     if (value) {
2050         qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2051     }
2052
2053     /* if we are to stay read-only, do not allow permission change
2054      * to r/w */
2055     if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2056         reopen_state->flags & BDRV_O_RDWR) {
2057         error_setg(errp, "Node '%s' is read only",
2058                    bdrv_get_device_or_node_name(reopen_state->bs));
2059         goto error;
2060     }
2061
2062
2063     ret = bdrv_flush(reopen_state->bs);
2064     if (ret) {
2065         error_setg_errno(errp, -ret, "Error flushing drive");
2066         goto error;
2067     }
2068
2069     if (drv->bdrv_reopen_prepare) {
2070         ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2071         if (ret) {
2072             if (local_err != NULL) {
2073                 error_propagate(errp, local_err);
2074             } else {
2075                 error_setg(errp, "failed while preparing to reopen image '%s'",
2076                            reopen_state->bs->filename);
2077             }
2078             goto error;
2079         }
2080     } else {
2081         /* It is currently mandatory to have a bdrv_reopen_prepare()
2082          * handler for each supported drv. */
2083         error_setg(errp, "Block format '%s' used by node '%s' "
2084                    "does not support reopening files", drv->format_name,
2085                    bdrv_get_device_or_node_name(reopen_state->bs));
2086         ret = -1;
2087         goto error;
2088     }
2089
2090     /* Options that are not handled are only okay if they are unchanged
2091      * compared to the old state. It is expected that some options are only
2092      * used for the initial open, but not reopen (e.g. filename) */
2093     if (qdict_size(reopen_state->options)) {
2094         const QDictEntry *entry = qdict_first(reopen_state->options);
2095
2096         do {
2097             QString *new_obj = qobject_to_qstring(entry->value);
2098             const char *new = qstring_get_str(new_obj);
2099             const char *old = qdict_get_try_str(reopen_state->bs->options,
2100                                                 entry->key);
2101
2102             if (!old || strcmp(new, old)) {
2103                 error_setg(errp, "Cannot change the option '%s'", entry->key);
2104                 ret = -EINVAL;
2105                 goto error;
2106             }
2107         } while ((entry = qdict_next(reopen_state->options, entry)));
2108     }
2109
2110     ret = 0;
2111
2112 error:
2113     qemu_opts_del(opts);
2114     return ret;
2115 }
2116
2117 /*
2118  * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2119  * makes them final by swapping the staging BlockDriverState contents into
2120  * the active BlockDriverState contents.
2121  */
2122 void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2123 {
2124     BlockDriver *drv;
2125
2126     assert(reopen_state != NULL);
2127     drv = reopen_state->bs->drv;
2128     assert(drv != NULL);
2129
2130     /* If there are any driver level actions to take */
2131     if (drv->bdrv_reopen_commit) {
2132         drv->bdrv_reopen_commit(reopen_state);
2133     }
2134
2135     /* set BDS specific flags now */
2136     QDECREF(reopen_state->bs->explicit_options);
2137
2138     reopen_state->bs->explicit_options   = reopen_state->explicit_options;
2139     reopen_state->bs->open_flags         = reopen_state->flags;
2140     reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
2141
2142     bdrv_set_enable_write_cache(reopen_state->bs,
2143                                 !!(reopen_state->flags & BDRV_O_CACHE_WB));
2144     bdrv_refresh_limits(reopen_state->bs, NULL);
2145 }
2146
2147 /*
2148  * Abort the reopen, and delete and free the staged changes in
2149  * reopen_state
2150  */
2151 void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2152 {
2153     BlockDriver *drv;
2154
2155     assert(reopen_state != NULL);
2156     drv = reopen_state->bs->drv;
2157     assert(drv != NULL);
2158
2159     if (drv->bdrv_reopen_abort) {
2160         drv->bdrv_reopen_abort(reopen_state);
2161     }
2162
2163     QDECREF(reopen_state->explicit_options);
2164 }
2165
2166
2167 static void bdrv_close(BlockDriverState *bs)
2168 {
2169     BdrvAioNotifier *ban, *ban_next;
2170
2171     assert(!bs->job);
2172
2173     /* Disable I/O limits and drain all pending throttled requests */
2174     if (bs->throttle_state) {
2175         bdrv_io_limits_disable(bs);
2176     }
2177
2178     bdrv_drained_begin(bs); /* complete I/O */
2179     bdrv_flush(bs);
2180     bdrv_drain(bs); /* in case flush left pending I/O */
2181
2182     bdrv_release_named_dirty_bitmaps(bs);
2183     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2184
2185     if (bs->blk) {
2186         blk_dev_change_media_cb(bs->blk, false);
2187     }
2188
2189     if (bs->drv) {
2190         BdrvChild *child, *next;
2191
2192         bs->drv->bdrv_close(bs);
2193         bs->drv = NULL;
2194
2195         bdrv_set_backing_hd(bs, NULL);
2196
2197         if (bs->file != NULL) {
2198             bdrv_unref_child(bs, bs->file);
2199             bs->file = NULL;
2200         }
2201
2202         QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
2203             /* TODO Remove bdrv_unref() from drivers' close function and use
2204              * bdrv_unref_child() here */
2205             if (child->bs->inherits_from == bs) {
2206                 child->bs->inherits_from = NULL;
2207             }
2208             bdrv_detach_child(child);
2209         }
2210
2211         g_free(bs->opaque);
2212         bs->opaque = NULL;
2213         bs->copy_on_read = 0;
2214         bs->backing_file[0] = '\0';
2215         bs->backing_format[0] = '\0';
2216         bs->total_sectors = 0;
2217         bs->encrypted = 0;
2218         bs->valid_key = 0;
2219         bs->sg = 0;
2220         bs->zero_beyond_eof = false;
2221         QDECREF(bs->options);
2222         QDECREF(bs->explicit_options);
2223         bs->options = NULL;
2224         QDECREF(bs->full_open_options);
2225         bs->full_open_options = NULL;
2226     }
2227
2228     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2229         g_free(ban);
2230     }
2231     QLIST_INIT(&bs->aio_notifiers);
2232     bdrv_drained_end(bs);
2233 }
2234
2235 void bdrv_close_all(void)
2236 {
2237     BlockDriverState *bs;
2238     AioContext *aio_context;
2239
2240     /* Drop references from requests still in flight, such as canceled block
2241      * jobs whose AIO context has not been polled yet */
2242     bdrv_drain_all();
2243
2244     blk_remove_all_bs();
2245     blockdev_close_all_bdrv_states();
2246
2247     /* Cancel all block jobs */
2248     while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2249         QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2250             aio_context = bdrv_get_aio_context(bs);
2251
2252             aio_context_acquire(aio_context);
2253             if (bs->job) {
2254                 block_job_cancel_sync(bs->job);
2255                 aio_context_release(aio_context);
2256                 break;
2257             }
2258             aio_context_release(aio_context);
2259         }
2260
2261         /* All the remaining BlockDriverStates are referenced directly or
2262          * indirectly from block jobs, so there needs to be at least one BDS
2263          * directly used by a block job */
2264         assert(bs);
2265     }
2266 }
2267
2268 /* Fields that need to stay with the top-level BDS */
2269 static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2270                                      BlockDriverState *bs_src)
2271 {
2272     /* move some fields that need to stay attached to the device */
2273 }
2274
2275 static void change_parent_backing_link(BlockDriverState *from,
2276                                        BlockDriverState *to)
2277 {
2278     BdrvChild *c, *next;
2279
2280     if (from->blk) {
2281         /* FIXME We bypass blk_set_bs(), so we need to make these updates
2282          * manually. The root problem is not in this change function, but the
2283          * existence of BlockDriverState.blk. */
2284         to->blk = from->blk;
2285         from->blk = NULL;
2286     }
2287
2288     QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2289         assert(c->role != &child_backing);
2290         c->bs = to;
2291         QLIST_REMOVE(c, next_parent);
2292         QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2293         bdrv_ref(to);
2294         bdrv_unref(from);
2295     }
2296 }
2297
2298 static void swap_feature_fields(BlockDriverState *bs_top,
2299                                 BlockDriverState *bs_new)
2300 {
2301     BlockDriverState tmp;
2302
2303     bdrv_move_feature_fields(&tmp, bs_top);
2304     bdrv_move_feature_fields(bs_top, bs_new);
2305     bdrv_move_feature_fields(bs_new, &tmp);
2306
2307     assert(!bs_new->throttle_state);
2308     if (bs_top->throttle_state) {
2309         assert(bs_top->io_limits_enabled);
2310         bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2311         bdrv_io_limits_disable(bs_top);
2312     }
2313 }
2314
2315 /*
2316  * Add new bs contents at the top of an image chain while the chain is
2317  * live, while keeping required fields on the top layer.
2318  *
2319  * This will modify the BlockDriverState fields, and swap contents
2320  * between bs_new and bs_top. Both bs_new and bs_top are modified.
2321  *
2322  * bs_new must not be attached to a BlockBackend.
2323  *
2324  * This function does not create any image files.
2325  *
2326  * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2327  * that's what the callers commonly need. bs_new will be referenced by the old
2328  * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2329  * reference of its own, it must call bdrv_ref().
2330  */
2331 void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2332 {
2333     assert(!bdrv_requests_pending(bs_top));
2334     assert(!bdrv_requests_pending(bs_new));
2335
2336     bdrv_ref(bs_top);
2337     change_parent_backing_link(bs_top, bs_new);
2338
2339     /* Some fields always stay on top of the backing file chain */
2340     swap_feature_fields(bs_top, bs_new);
2341
2342     bdrv_set_backing_hd(bs_new, bs_top);
2343     bdrv_unref(bs_top);
2344
2345     /* bs_new is now referenced by its new parents, we don't need the
2346      * additional reference any more. */
2347     bdrv_unref(bs_new);
2348 }
2349
2350 void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2351 {
2352     assert(!bdrv_requests_pending(old));
2353     assert(!bdrv_requests_pending(new));
2354
2355     bdrv_ref(old);
2356
2357     if (old->blk) {
2358         /* As long as these fields aren't in BlockBackend, but in the top-level
2359          * BlockDriverState, it's not possible for a BDS to have two BBs.
2360          *
2361          * We really want to copy the fields from old to new, but we go for a
2362          * swap instead so that pointers aren't duplicated and cause trouble.
2363          * (Also, bdrv_swap() used to do the same.) */
2364         assert(!new->blk);
2365         swap_feature_fields(old, new);
2366     }
2367     change_parent_backing_link(old, new);
2368
2369     /* Change backing files if a previously independent node is added to the
2370      * chain. For active commit, we replace top by its own (indirect) backing
2371      * file and don't do anything here so we don't build a loop. */
2372     if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2373         bdrv_set_backing_hd(new, backing_bs(old));
2374         bdrv_set_backing_hd(old, NULL);
2375     }
2376
2377     bdrv_unref(old);
2378 }
2379
2380 static void bdrv_delete(BlockDriverState *bs)
2381 {
2382     assert(!bs->job);
2383     assert(bdrv_op_blocker_is_empty(bs));
2384     assert(!bs->refcnt);
2385
2386     bdrv_close(bs);
2387
2388     /* remove from list, if necessary */
2389     if (bs->node_name[0] != '\0') {
2390         QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2391     }
2392     QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2393
2394     g_free(bs);
2395 }
2396
2397 /*
2398  * Run consistency checks on an image
2399  *
2400  * Returns 0 if the check could be completed (it doesn't mean that the image is
2401  * free of errors) or -errno when an internal error occurred. The results of the
2402  * check are stored in res.
2403  */
2404 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
2405 {
2406     if (bs->drv == NULL) {
2407         return -ENOMEDIUM;
2408     }
2409     if (bs->drv->bdrv_check == NULL) {
2410         return -ENOTSUP;
2411     }
2412
2413     memset(res, 0, sizeof(*res));
2414     return bs->drv->bdrv_check(bs, res, fix);
2415 }
2416
2417 #define COMMIT_BUF_SECTORS 2048
2418
2419 /* commit COW file into the raw image */
2420 int bdrv_commit(BlockDriverState *bs)
2421 {
2422     BlockDriver *drv = bs->drv;
2423     int64_t sector, total_sectors, length, backing_length;
2424     int n, ro, open_flags;
2425     int ret = 0;
2426     uint8_t *buf = NULL;
2427
2428     if (!drv)
2429         return -ENOMEDIUM;
2430
2431     if (!bs->backing) {
2432         return -ENOTSUP;
2433     }
2434
2435     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2436         bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
2437         return -EBUSY;
2438     }
2439
2440     ro = bs->backing->bs->read_only;
2441     open_flags =  bs->backing->bs->open_flags;
2442
2443     if (ro) {
2444         if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
2445             return -EACCES;
2446         }
2447     }
2448
2449     length = bdrv_getlength(bs);
2450     if (length < 0) {
2451         ret = length;
2452         goto ro_cleanup;
2453     }
2454
2455     backing_length = bdrv_getlength(bs->backing->bs);
2456     if (backing_length < 0) {
2457         ret = backing_length;
2458         goto ro_cleanup;
2459     }
2460
2461     /* If our top snapshot is larger than the backing file image,
2462      * grow the backing file image if possible.  If not possible,
2463      * we must return an error */
2464     if (length > backing_length) {
2465         ret = bdrv_truncate(bs->backing->bs, length);
2466         if (ret < 0) {
2467             goto ro_cleanup;
2468         }
2469     }
2470
2471     total_sectors = length >> BDRV_SECTOR_BITS;
2472
2473     /* qemu_try_blockalign() for bs will choose an alignment that works for
2474      * bs->backing->bs as well, so no need to compare the alignment manually. */
2475     buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2476     if (buf == NULL) {
2477         ret = -ENOMEM;
2478         goto ro_cleanup;
2479     }
2480
2481     for (sector = 0; sector < total_sectors; sector += n) {
2482         ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2483         if (ret < 0) {
2484             goto ro_cleanup;
2485         }
2486         if (ret) {
2487             ret = bdrv_read(bs, sector, buf, n);
2488             if (ret < 0) {
2489                 goto ro_cleanup;
2490             }
2491
2492             ret = bdrv_write(bs->backing->bs, sector, buf, n);
2493             if (ret < 0) {
2494                 goto ro_cleanup;
2495             }
2496         }
2497     }
2498
2499     if (drv->bdrv_make_empty) {
2500         ret = drv->bdrv_make_empty(bs);
2501         if (ret < 0) {
2502             goto ro_cleanup;
2503         }
2504         bdrv_flush(bs);
2505     }
2506
2507     /*
2508      * Make sure all data we wrote to the backing device is actually
2509      * stable on disk.
2510      */
2511     if (bs->backing) {
2512         bdrv_flush(bs->backing->bs);
2513     }
2514
2515     ret = 0;
2516 ro_cleanup:
2517     qemu_vfree(buf);
2518
2519     if (ro) {
2520         /* ignoring error return here */
2521         bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
2522     }
2523
2524     return ret;
2525 }
2526
2527 /*
2528  * Return values:
2529  * 0        - success
2530  * -EINVAL  - backing format specified, but no file
2531  * -ENOSPC  - can't update the backing file because no space is left in the
2532  *            image file header
2533  * -ENOTSUP - format driver doesn't support changing the backing file
2534  */
2535 int bdrv_change_backing_file(BlockDriverState *bs,
2536     const char *backing_file, const char *backing_fmt)
2537 {
2538     BlockDriver *drv = bs->drv;
2539     int ret;
2540
2541     /* Backing file format doesn't make sense without a backing file */
2542     if (backing_fmt && !backing_file) {
2543         return -EINVAL;
2544     }
2545
2546     if (drv->bdrv_change_backing_file != NULL) {
2547         ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2548     } else {
2549         ret = -ENOTSUP;
2550     }
2551
2552     if (ret == 0) {
2553         pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2554         pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2555     }
2556     return ret;
2557 }
2558
2559 /*
2560  * Finds the image layer in the chain that has 'bs' as its backing file.
2561  *
2562  * active is the current topmost image.
2563  *
2564  * Returns NULL if bs is not found in active's image chain,
2565  * or if active == bs.
2566  *
2567  * Returns the bottommost base image if bs == NULL.
2568  */
2569 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2570                                     BlockDriverState *bs)
2571 {
2572     while (active && bs != backing_bs(active)) {
2573         active = backing_bs(active);
2574     }
2575
2576     return active;
2577 }
2578
2579 /* Given a BDS, searches for the base layer. */
2580 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2581 {
2582     return bdrv_find_overlay(bs, NULL);
2583 }
2584
2585 /*
2586  * Drops images above 'base' up to and including 'top', and sets the image
2587  * above 'top' to have base as its backing file.
2588  *
2589  * Requires that the overlay to 'top' is opened r/w, so that the backing file
2590  * information in 'bs' can be properly updated.
2591  *
2592  * E.g., this will convert the following chain:
2593  * bottom <- base <- intermediate <- top <- active
2594  *
2595  * to
2596  *
2597  * bottom <- base <- active
2598  *
2599  * It is allowed for bottom==base, in which case it converts:
2600  *
2601  * base <- intermediate <- top <- active
2602  *
2603  * to
2604  *
2605  * base <- active
2606  *
2607  * If backing_file_str is non-NULL, it will be used when modifying top's
2608  * overlay image metadata.
2609  *
2610  * Error conditions:
2611  *  if active == top, that is considered an error
2612  *
2613  */
2614 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2615                            BlockDriverState *base, const char *backing_file_str)
2616 {
2617     BlockDriverState *new_top_bs = NULL;
2618     int ret = -EIO;
2619
2620     if (!top->drv || !base->drv) {
2621         goto exit;
2622     }
2623
2624     new_top_bs = bdrv_find_overlay(active, top);
2625
2626     if (new_top_bs == NULL) {
2627         /* we could not find the image above 'top', this is an error */
2628         goto exit;
2629     }
2630
2631     /* special case of new_top_bs->backing->bs already pointing to base - nothing
2632      * to do, no intermediate images */
2633     if (backing_bs(new_top_bs) == base) {
2634         ret = 0;
2635         goto exit;
2636     }
2637
2638     /* Make sure that base is in the backing chain of top */
2639     if (!bdrv_chain_contains(top, base)) {
2640         goto exit;
2641     }
2642
2643     /* success - we can delete the intermediate states, and link top->base */
2644     backing_file_str = backing_file_str ? backing_file_str : base->filename;
2645     ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
2646                                    base->drv ? base->drv->format_name : "");
2647     if (ret) {
2648         goto exit;
2649     }
2650     bdrv_set_backing_hd(new_top_bs, base);
2651
2652     ret = 0;
2653 exit:
2654     return ret;
2655 }
2656
2657 /**
2658  * Truncate file to 'offset' bytes (needed only for file protocols)
2659  */
2660 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2661 {
2662     BlockDriver *drv = bs->drv;
2663     int ret;
2664     if (!drv)
2665         return -ENOMEDIUM;
2666     if (!drv->bdrv_truncate)
2667         return -ENOTSUP;
2668     if (bs->read_only)
2669         return -EACCES;
2670
2671     ret = drv->bdrv_truncate(bs, offset);
2672     if (ret == 0) {
2673         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
2674         bdrv_dirty_bitmap_truncate(bs);
2675         if (bs->blk) {
2676             blk_dev_resize_cb(bs->blk);
2677         }
2678     }
2679     return ret;
2680 }
2681
2682 /**
2683  * Length of a allocated file in bytes. Sparse files are counted by actual
2684  * allocated space. Return < 0 if error or unknown.
2685  */
2686 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2687 {
2688     BlockDriver *drv = bs->drv;
2689     if (!drv) {
2690         return -ENOMEDIUM;
2691     }
2692     if (drv->bdrv_get_allocated_file_size) {
2693         return drv->bdrv_get_allocated_file_size(bs);
2694     }
2695     if (bs->file) {
2696         return bdrv_get_allocated_file_size(bs->file->bs);
2697     }
2698     return -ENOTSUP;
2699 }
2700
2701 /**
2702  * Return number of sectors on success, -errno on error.
2703  */
2704 int64_t bdrv_nb_sectors(BlockDriverState *bs)
2705 {
2706     BlockDriver *drv = bs->drv;
2707
2708     if (!drv)
2709         return -ENOMEDIUM;
2710
2711     if (drv->has_variable_length) {
2712         int ret = refresh_total_sectors(bs, bs->total_sectors);
2713         if (ret < 0) {
2714             return ret;
2715         }
2716     }
2717     return bs->total_sectors;
2718 }
2719
2720 /**
2721  * Return length in bytes on success, -errno on error.
2722  * The length is always a multiple of BDRV_SECTOR_SIZE.
2723  */
2724 int64_t bdrv_getlength(BlockDriverState *bs)
2725 {
2726     int64_t ret = bdrv_nb_sectors(bs);
2727
2728     ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
2729     return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
2730 }
2731
2732 /* return 0 as number of sectors if no device present or error */
2733 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
2734 {
2735     int64_t nb_sectors = bdrv_nb_sectors(bs);
2736
2737     *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
2738 }
2739
2740 int bdrv_is_read_only(BlockDriverState *bs)
2741 {
2742     return bs->read_only;
2743 }
2744
2745 int bdrv_is_sg(BlockDriverState *bs)
2746 {
2747     return bs->sg;
2748 }
2749
2750 int bdrv_enable_write_cache(BlockDriverState *bs)
2751 {
2752     if (bs->blk) {
2753         return blk_enable_write_cache(bs->blk);
2754     } else {
2755         return true;
2756     }
2757 }
2758
2759 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2760 {
2761     if (bs->blk) {
2762         blk_set_enable_write_cache(bs->blk, wce);
2763     }
2764
2765     /* so a reopen() will preserve wce */
2766     if (wce) {
2767         bs->open_flags |= BDRV_O_CACHE_WB;
2768     } else {
2769         bs->open_flags &= ~BDRV_O_CACHE_WB;
2770     }
2771 }
2772
2773 int bdrv_is_encrypted(BlockDriverState *bs)
2774 {
2775     if (bs->backing && bs->backing->bs->encrypted) {
2776         return 1;
2777     }
2778     return bs->encrypted;
2779 }
2780
2781 int bdrv_key_required(BlockDriverState *bs)
2782 {
2783     BdrvChild *backing = bs->backing;
2784
2785     if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
2786         return 1;
2787     }
2788     return (bs->encrypted && !bs->valid_key);
2789 }
2790
2791 int bdrv_set_key(BlockDriverState *bs, const char *key)
2792 {
2793     int ret;
2794     if (bs->backing && bs->backing->bs->encrypted) {
2795         ret = bdrv_set_key(bs->backing->bs, key);
2796         if (ret < 0)
2797             return ret;
2798         if (!bs->encrypted)
2799             return 0;
2800     }
2801     if (!bs->encrypted) {
2802         return -EINVAL;
2803     } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2804         return -ENOMEDIUM;
2805     }
2806     ret = bs->drv->bdrv_set_key(bs, key);
2807     if (ret < 0) {
2808         bs->valid_key = 0;
2809     } else if (!bs->valid_key) {
2810         bs->valid_key = 1;
2811         if (bs->blk) {
2812             /* call the change callback now, we skipped it on open */
2813             blk_dev_change_media_cb(bs->blk, true);
2814         }
2815     }
2816     return ret;
2817 }
2818
2819 /*
2820  * Provide an encryption key for @bs.
2821  * If @key is non-null:
2822  *     If @bs is not encrypted, fail.
2823  *     Else if the key is invalid, fail.
2824  *     Else set @bs's key to @key, replacing the existing key, if any.
2825  * If @key is null:
2826  *     If @bs is encrypted and still lacks a key, fail.
2827  *     Else do nothing.
2828  * On failure, store an error object through @errp if non-null.
2829  */
2830 void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2831 {
2832     if (key) {
2833         if (!bdrv_is_encrypted(bs)) {
2834             error_setg(errp, "Node '%s' is not encrypted",
2835                       bdrv_get_device_or_node_name(bs));
2836         } else if (bdrv_set_key(bs, key) < 0) {
2837             error_setg(errp, QERR_INVALID_PASSWORD);
2838         }
2839     } else {
2840         if (bdrv_key_required(bs)) {
2841             error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2842                       "'%s' (%s) is encrypted",
2843                       bdrv_get_device_or_node_name(bs),
2844                       bdrv_get_encrypted_filename(bs));
2845         }
2846     }
2847 }
2848
2849 const char *bdrv_get_format_name(BlockDriverState *bs)
2850 {
2851     return bs->drv ? bs->drv->format_name : NULL;
2852 }
2853
2854 static int qsort_strcmp(const void *a, const void *b)
2855 {
2856     return strcmp(a, b);
2857 }
2858
2859 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
2860                          void *opaque)
2861 {
2862     BlockDriver *drv;
2863     int count = 0;
2864     int i;
2865     const char **formats = NULL;
2866
2867     QLIST_FOREACH(drv, &bdrv_drivers, list) {
2868         if (drv->format_name) {
2869             bool found = false;
2870             int i = count;
2871             while (formats && i && !found) {
2872                 found = !strcmp(formats[--i], drv->format_name);
2873             }
2874
2875             if (!found) {
2876                 formats = g_renew(const char *, formats, count + 1);
2877                 formats[count++] = drv->format_name;
2878             }
2879         }
2880     }
2881
2882     qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2883
2884     for (i = 0; i < count; i++) {
2885         it(opaque, formats[i]);
2886     }
2887
2888     g_free(formats);
2889 }
2890
2891 /* This function is to find a node in the bs graph */
2892 BlockDriverState *bdrv_find_node(const char *node_name)
2893 {
2894     BlockDriverState *bs;
2895
2896     assert(node_name);
2897
2898     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2899         if (!strcmp(node_name, bs->node_name)) {
2900             return bs;
2901         }
2902     }
2903     return NULL;
2904 }
2905
2906 /* Put this QMP function here so it can access the static graph_bdrv_states. */
2907 BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
2908 {
2909     BlockDeviceInfoList *list, *entry;
2910     BlockDriverState *bs;
2911
2912     list = NULL;
2913     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2914         BlockDeviceInfo *info = bdrv_block_device_info(NULL, bs, errp);
2915         if (!info) {
2916             qapi_free_BlockDeviceInfoList(list);
2917             return NULL;
2918         }
2919         entry = g_malloc0(sizeof(*entry));
2920         entry->value = info;
2921         entry->next = list;
2922         list = entry;
2923     }
2924
2925     return list;
2926 }
2927
2928 BlockDriverState *bdrv_lookup_bs(const char *device,
2929                                  const char *node_name,
2930                                  Error **errp)
2931 {
2932     BlockBackend *blk;
2933     BlockDriverState *bs;
2934
2935     if (device) {
2936         blk = blk_by_name(device);
2937
2938         if (blk) {
2939             bs = blk_bs(blk);
2940             if (!bs) {
2941                 error_setg(errp, "Device '%s' has no medium", device);
2942             }
2943
2944             return bs;
2945         }
2946     }
2947
2948     if (node_name) {
2949         bs = bdrv_find_node(node_name);
2950
2951         if (bs) {
2952             return bs;
2953         }
2954     }
2955
2956     error_setg(errp, "Cannot find device=%s nor node_name=%s",
2957                      device ? device : "",
2958                      node_name ? node_name : "");
2959     return NULL;
2960 }
2961
2962 /* If 'base' is in the same chain as 'top', return true. Otherwise,
2963  * return false.  If either argument is NULL, return false. */
2964 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2965 {
2966     while (top && top != base) {
2967         top = backing_bs(top);
2968     }
2969
2970     return top != NULL;
2971 }
2972
2973 BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2974 {
2975     if (!bs) {
2976         return QTAILQ_FIRST(&graph_bdrv_states);
2977     }
2978     return QTAILQ_NEXT(bs, node_list);
2979 }
2980
2981 /* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
2982  * the monitor or attached to a BlockBackend */
2983 BlockDriverState *bdrv_next(BlockDriverState *bs)
2984 {
2985     if (!bs || bs->blk) {
2986         bs = blk_next_root_bs(bs);
2987         if (bs) {
2988             return bs;
2989         }
2990     }
2991
2992     /* Ignore all BDSs that are attached to a BlockBackend here; they have been
2993      * handled by the above block already */
2994     do {
2995         bs = bdrv_next_monitor_owned(bs);
2996     } while (bs && bs->blk);
2997     return bs;
2998 }
2999
3000 const char *bdrv_get_node_name(const BlockDriverState *bs)
3001 {
3002     return bs->node_name;
3003 }
3004
3005 /* TODO check what callers really want: bs->node_name or blk_name() */
3006 const char *bdrv_get_device_name(const BlockDriverState *bs)
3007 {
3008     return bs->blk ? blk_name(bs->blk) : "";
3009 }
3010
3011 /* This can be used to identify nodes that might not have a device
3012  * name associated. Since node and device names live in the same
3013  * namespace, the result is unambiguous. The exception is if both are
3014  * absent, then this returns an empty (non-null) string. */
3015 const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
3016 {
3017     return bs->blk ? blk_name(bs->blk) : bs->node_name;
3018 }
3019
3020 int bdrv_get_flags(BlockDriverState *bs)
3021 {
3022     return bs->open_flags;
3023 }
3024
3025 int bdrv_has_zero_init_1(BlockDriverState *bs)
3026 {
3027     return 1;
3028 }
3029
3030 int bdrv_has_zero_init(BlockDriverState *bs)
3031 {
3032     assert(bs->drv);
3033
3034     /* If BS is a copy on write image, it is initialized to
3035        the contents of the base image, which may not be zeroes.  */
3036     if (bs->backing) {
3037         return 0;
3038     }
3039     if (bs->drv->bdrv_has_zero_init) {
3040         return bs->drv->bdrv_has_zero_init(bs);
3041     }
3042
3043     /* safe default */
3044     return 0;
3045 }
3046
3047 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3048 {
3049     BlockDriverInfo bdi;
3050
3051     if (bs->backing) {
3052         return false;
3053     }
3054
3055     if (bdrv_get_info(bs, &bdi) == 0) {
3056         return bdi.unallocated_blocks_are_zero;
3057     }
3058
3059     return false;
3060 }
3061
3062 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3063 {
3064     BlockDriverInfo bdi;
3065
3066     if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
3067         return false;
3068     }
3069
3070     if (bdrv_get_info(bs, &bdi) == 0) {
3071         return bdi.can_write_zeroes_with_unmap;
3072     }
3073
3074     return false;
3075 }
3076
3077 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3078 {
3079     if (bs->backing && bs->backing->bs->encrypted)
3080         return bs->backing_file;
3081     else if (bs->encrypted)
3082         return bs->filename;
3083     else
3084         return NULL;
3085 }
3086
3087 void bdrv_get_backing_filename(BlockDriverState *bs,
3088                                char *filename, int filename_size)
3089 {
3090     pstrcpy(filename, filename_size, bs->backing_file);
3091 }
3092
3093 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3094 {
3095     BlockDriver *drv = bs->drv;
3096     if (!drv)
3097         return -ENOMEDIUM;
3098     if (!drv->bdrv_get_info)
3099         return -ENOTSUP;
3100     memset(bdi, 0, sizeof(*bdi));
3101     return drv->bdrv_get_info(bs, bdi);
3102 }
3103
3104 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3105 {
3106     BlockDriver *drv = bs->drv;
3107     if (drv && drv->bdrv_get_specific_info) {
3108         return drv->bdrv_get_specific_info(bs);
3109     }
3110     return NULL;
3111 }
3112
3113 void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
3114 {
3115     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
3116         return;
3117     }
3118
3119     bs->drv->bdrv_debug_event(bs, event);
3120 }
3121
3122 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3123                           const char *tag)
3124 {
3125     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
3126         bs = bs->file ? bs->file->bs : NULL;
3127     }
3128
3129     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3130         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3131     }
3132
3133     return -ENOTSUP;
3134 }
3135
3136 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3137 {
3138     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
3139         bs = bs->file ? bs->file->bs : NULL;
3140     }
3141
3142     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3143         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3144     }
3145
3146     return -ENOTSUP;
3147 }
3148
3149 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3150 {
3151     while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
3152         bs = bs->file ? bs->file->bs : NULL;
3153     }
3154
3155     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3156         return bs->drv->bdrv_debug_resume(bs, tag);
3157     }
3158
3159     return -ENOTSUP;
3160 }
3161
3162 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3163 {
3164     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3165         bs = bs->file ? bs->file->bs : NULL;
3166     }
3167
3168     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3169         return bs->drv->bdrv_debug_is_suspended(bs, tag);
3170     }
3171
3172     return false;
3173 }
3174
3175 int bdrv_is_snapshot(BlockDriverState *bs)
3176 {
3177     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3178 }
3179
3180 /* backing_file can either be relative, or absolute, or a protocol.  If it is
3181  * relative, it must be relative to the chain.  So, passing in bs->filename
3182  * from a BDS as backing_file should not be done, as that may be relative to
3183  * the CWD rather than the chain. */
3184 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3185         const char *backing_file)
3186 {
3187     char *filename_full = NULL;
3188     char *backing_file_full = NULL;
3189     char *filename_tmp = NULL;
3190     int is_protocol = 0;
3191     BlockDriverState *curr_bs = NULL;
3192     BlockDriverState *retval = NULL;
3193
3194     if (!bs || !bs->drv || !backing_file) {
3195         return NULL;
3196     }
3197
3198     filename_full     = g_malloc(PATH_MAX);
3199     backing_file_full = g_malloc(PATH_MAX);
3200     filename_tmp      = g_malloc(PATH_MAX);
3201
3202     is_protocol = path_has_protocol(backing_file);
3203
3204     for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
3205
3206         /* If either of the filename paths is actually a protocol, then
3207          * compare unmodified paths; otherwise make paths relative */
3208         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3209             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3210                 retval = curr_bs->backing->bs;
3211                 break;
3212             }
3213         } else {
3214             /* If not an absolute filename path, make it relative to the current
3215              * image's filename path */
3216             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3217                          backing_file);
3218
3219             /* We are going to compare absolute pathnames */
3220             if (!realpath(filename_tmp, filename_full)) {
3221                 continue;
3222             }
3223
3224             /* We need to make sure the backing filename we are comparing against
3225              * is relative to the current image filename (or absolute) */
3226             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3227                          curr_bs->backing_file);
3228
3229             if (!realpath(filename_tmp, backing_file_full)) {
3230                 continue;
3231             }
3232
3233             if (strcmp(backing_file_full, filename_full) == 0) {
3234                 retval = curr_bs->backing->bs;
3235                 break;
3236             }
3237         }
3238     }
3239
3240     g_free(filename_full);
3241     g_free(backing_file_full);
3242     g_free(filename_tmp);
3243     return retval;
3244 }
3245
3246 int bdrv_get_backing_file_depth(BlockDriverState *bs)
3247 {
3248     if (!bs->drv) {
3249         return 0;
3250     }
3251
3252     if (!bs->backing) {
3253         return 0;
3254     }
3255
3256     return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
3257 }
3258
3259 void bdrv_init(void)
3260 {
3261     module_call_init(MODULE_INIT_BLOCK);
3262 }
3263
3264 void bdrv_init_with_whitelist(void)
3265 {
3266     use_bdrv_whitelist = 1;
3267     bdrv_init();
3268 }
3269
3270 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
3271 {
3272     Error *local_err = NULL;
3273     int ret;
3274
3275     if (!bs->drv)  {
3276         return;
3277     }
3278
3279     if (!(bs->open_flags & BDRV_O_INACTIVE)) {
3280         return;
3281     }
3282     bs->open_flags &= ~BDRV_O_INACTIVE;
3283
3284     if (bs->drv->bdrv_invalidate_cache) {
3285         bs->drv->bdrv_invalidate_cache(bs, &local_err);
3286     } else if (bs->file) {
3287         bdrv_invalidate_cache(bs->file->bs, &local_err);
3288     }
3289     if (local_err) {
3290         bs->open_flags |= BDRV_O_INACTIVE;
3291         error_propagate(errp, local_err);
3292         return;
3293     }
3294
3295     ret = refresh_total_sectors(bs, bs->total_sectors);
3296     if (ret < 0) {
3297         bs->open_flags |= BDRV_O_INACTIVE;
3298         error_setg_errno(errp, -ret, "Could not refresh total sector count");
3299         return;
3300     }
3301 }
3302
3303 void bdrv_invalidate_cache_all(Error **errp)
3304 {
3305     BlockDriverState *bs = NULL;
3306     Error *local_err = NULL;
3307
3308     while ((bs = bdrv_next(bs)) != NULL) {
3309         AioContext *aio_context = bdrv_get_aio_context(bs);
3310
3311         aio_context_acquire(aio_context);
3312         bdrv_invalidate_cache(bs, &local_err);
3313         aio_context_release(aio_context);
3314         if (local_err) {
3315             error_propagate(errp, local_err);
3316             return;
3317         }
3318     }
3319 }
3320
3321 static int bdrv_inactivate(BlockDriverState *bs)
3322 {
3323     int ret;
3324
3325     if (bs->drv->bdrv_inactivate) {
3326         ret = bs->drv->bdrv_inactivate(bs);
3327         if (ret < 0) {
3328             return ret;
3329         }
3330     }
3331
3332     bs->open_flags |= BDRV_O_INACTIVE;
3333     return 0;
3334 }
3335
3336 int bdrv_inactivate_all(void)
3337 {
3338     BlockDriverState *bs = NULL;
3339     int ret;
3340
3341     while ((bs = bdrv_next(bs)) != NULL) {
3342         AioContext *aio_context = bdrv_get_aio_context(bs);
3343
3344         aio_context_acquire(aio_context);
3345         ret = bdrv_inactivate(bs);
3346         aio_context_release(aio_context);
3347         if (ret < 0) {
3348             return ret;
3349         }
3350     }
3351
3352     return 0;
3353 }
3354
3355 /**************************************************************/
3356 /* removable device support */
3357
3358 /**
3359  * Return TRUE if the media is present
3360  */
3361 bool bdrv_is_inserted(BlockDriverState *bs)
3362 {
3363     BlockDriver *drv = bs->drv;
3364     BdrvChild *child;
3365
3366     if (!drv) {
3367         return false;
3368     }
3369     if (drv->bdrv_is_inserted) {
3370         return drv->bdrv_is_inserted(bs);
3371     }
3372     QLIST_FOREACH(child, &bs->children, next) {
3373         if (!bdrv_is_inserted(child->bs)) {
3374             return false;
3375         }
3376     }
3377     return true;
3378 }
3379
3380 /**
3381  * Return whether the media changed since the last call to this
3382  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
3383  */
3384 int bdrv_media_changed(BlockDriverState *bs)
3385 {
3386     BlockDriver *drv = bs->drv;
3387
3388     if (drv && drv->bdrv_media_changed) {
3389         return drv->bdrv_media_changed(bs);
3390     }
3391     return -ENOTSUP;
3392 }
3393
3394 /**
3395  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3396  */
3397 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
3398 {
3399     BlockDriver *drv = bs->drv;
3400     const char *device_name;
3401
3402     if (drv && drv->bdrv_eject) {
3403         drv->bdrv_eject(bs, eject_flag);
3404     }
3405
3406     device_name = bdrv_get_device_name(bs);
3407     if (device_name[0] != '\0') {
3408         qapi_event_send_device_tray_moved(device_name,
3409                                           eject_flag, &error_abort);
3410     }
3411 }
3412
3413 /**
3414  * Lock or unlock the media (if it is locked, the user won't be able
3415  * to eject it manually).
3416  */
3417 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
3418 {
3419     BlockDriver *drv = bs->drv;
3420
3421     trace_bdrv_lock_medium(bs, locked);
3422
3423     if (drv && drv->bdrv_lock_medium) {
3424         drv->bdrv_lock_medium(bs, locked);
3425     }
3426 }
3427
3428 /* Get a reference to bs */
3429 void bdrv_ref(BlockDriverState *bs)
3430 {
3431     bs->refcnt++;
3432 }
3433
3434 /* Release a previously grabbed reference to bs.
3435  * If after releasing, reference count is zero, the BlockDriverState is
3436  * deleted. */
3437 void bdrv_unref(BlockDriverState *bs)
3438 {
3439     if (!bs) {
3440         return;
3441     }
3442     assert(bs->refcnt > 0);
3443     if (--bs->refcnt == 0) {
3444         bdrv_delete(bs);
3445     }
3446 }
3447
3448 struct BdrvOpBlocker {
3449     Error *reason;
3450     QLIST_ENTRY(BdrvOpBlocker) list;
3451 };
3452
3453 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3454 {
3455     BdrvOpBlocker *blocker;
3456     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3457     if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3458         blocker = QLIST_FIRST(&bs->op_blockers[op]);
3459         if (errp) {
3460             *errp = error_copy(blocker->reason);
3461             error_prepend(errp, "Node '%s' is busy: ",
3462                           bdrv_get_device_or_node_name(bs));
3463         }
3464         return true;
3465     }
3466     return false;
3467 }
3468
3469 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3470 {
3471     BdrvOpBlocker *blocker;
3472     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3473
3474     blocker = g_new0(BdrvOpBlocker, 1);
3475     blocker->reason = reason;
3476     QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3477 }
3478
3479 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3480 {
3481     BdrvOpBlocker *blocker, *next;
3482     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3483     QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3484         if (blocker->reason == reason) {
3485             QLIST_REMOVE(blocker, list);
3486             g_free(blocker);
3487         }
3488     }
3489 }
3490
3491 void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3492 {
3493     int i;
3494     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3495         bdrv_op_block(bs, i, reason);
3496     }
3497 }
3498
3499 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3500 {
3501     int i;
3502     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3503         bdrv_op_unblock(bs, i, reason);
3504     }
3505 }
3506
3507 bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3508 {
3509     int i;
3510
3511     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3512         if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3513             return false;
3514         }
3515     }
3516     return true;
3517 }
3518
3519 void bdrv_img_create(const char *filename, const char *fmt,
3520                      const char *base_filename, const char *base_fmt,
3521                      char *options, uint64_t img_size, int flags,
3522                      Error **errp, bool quiet)
3523 {
3524     QemuOptsList *create_opts = NULL;
3525     QemuOpts *opts = NULL;
3526     const char *backing_fmt, *backing_file;
3527     int64_t size;
3528     BlockDriver *drv, *proto_drv;
3529     Error *local_err = NULL;
3530     int ret = 0;
3531
3532     /* Find driver and parse its options */
3533     drv = bdrv_find_format(fmt);
3534     if (!drv) {
3535         error_setg(errp, "Unknown file format '%s'", fmt);
3536         return;
3537     }
3538
3539     proto_drv = bdrv_find_protocol(filename, true, errp);
3540     if (!proto_drv) {
3541         return;
3542     }
3543
3544     if (!drv->create_opts) {
3545         error_setg(errp, "Format driver '%s' does not support image creation",
3546                    drv->format_name);
3547         return;
3548     }
3549
3550     if (!proto_drv->create_opts) {
3551         error_setg(errp, "Protocol driver '%s' does not support image creation",
3552                    proto_drv->format_name);
3553         return;
3554     }
3555
3556     create_opts = qemu_opts_append(create_opts, drv->create_opts);
3557     create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
3558
3559     /* Create parameter list with default values */
3560     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
3561     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
3562
3563     /* Parse -o options */
3564     if (options) {
3565         qemu_opts_do_parse(opts, options, NULL, &local_err);
3566         if (local_err) {
3567             error_report_err(local_err);
3568             local_err = NULL;
3569             error_setg(errp, "Invalid options for file format '%s'", fmt);
3570             goto out;
3571         }
3572     }
3573
3574     if (base_filename) {
3575         qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
3576         if (local_err) {
3577             error_setg(errp, "Backing file not supported for file format '%s'",
3578                        fmt);
3579             goto out;
3580         }
3581     }
3582
3583     if (base_fmt) {
3584         qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
3585         if (local_err) {
3586             error_setg(errp, "Backing file format not supported for file "
3587                              "format '%s'", fmt);
3588             goto out;
3589         }
3590     }
3591
3592     backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3593     if (backing_file) {
3594         if (!strcmp(filename, backing_file)) {
3595             error_setg(errp, "Error: Trying to create an image with the "
3596                              "same filename as the backing file");
3597             goto out;
3598         }
3599     }
3600
3601     backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3602
3603     // The size for the image must always be specified, with one exception:
3604     // If we are using a backing file, we can obtain the size from there
3605     size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3606     if (size == -1) {
3607         if (backing_file) {
3608             BlockDriverState *bs;
3609             char *full_backing = g_new0(char, PATH_MAX);
3610             int64_t size;
3611             int back_flags;
3612             QDict *backing_options = NULL;
3613
3614             bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3615                                                          full_backing, PATH_MAX,
3616                                                          &local_err);
3617             if (local_err) {
3618                 g_free(full_backing);
3619                 goto out;
3620             }
3621
3622             /* backing files always opened read-only */
3623             back_flags = flags | BDRV_O_CACHE_WB;
3624             back_flags &= ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
3625
3626             if (backing_fmt) {
3627                 backing_options = qdict_new();
3628                 qdict_put(backing_options, "driver",
3629                           qstring_from_str(backing_fmt));
3630             }
3631
3632             bs = NULL;
3633             ret = bdrv_open(&bs, full_backing, NULL, backing_options,
3634                             back_flags, &local_err);
3635             g_free(full_backing);
3636             if (ret < 0) {
3637                 goto out;
3638             }
3639             size = bdrv_getlength(bs);
3640             if (size < 0) {
3641                 error_setg_errno(errp, -size, "Could not get size of '%s'",
3642                                  backing_file);
3643                 bdrv_unref(bs);
3644                 goto out;
3645             }
3646
3647             qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
3648
3649             bdrv_unref(bs);
3650         } else {
3651             error_setg(errp, "Image creation needs a size parameter");
3652             goto out;
3653         }
3654     }
3655
3656     if (!quiet) {
3657         printf("Formatting '%s', fmt=%s ", filename, fmt);
3658         qemu_opts_print(opts, " ");
3659         puts("");
3660     }
3661
3662     ret = bdrv_create(drv, filename, opts, &local_err);
3663
3664     if (ret == -EFBIG) {
3665         /* This is generally a better message than whatever the driver would
3666          * deliver (especially because of the cluster_size_hint), since that
3667          * is most probably not much different from "image too large". */
3668         const char *cluster_size_hint = "";
3669         if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
3670             cluster_size_hint = " (try using a larger cluster size)";
3671         }
3672         error_setg(errp, "The image size is too large for file format '%s'"
3673                    "%s", fmt, cluster_size_hint);
3674         error_free(local_err);
3675         local_err = NULL;
3676     }
3677
3678 out:
3679     qemu_opts_del(opts);
3680     qemu_opts_free(create_opts);
3681     if (local_err) {
3682         error_propagate(errp, local_err);
3683     }
3684 }
3685
3686 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3687 {
3688     return bs->aio_context;
3689 }
3690
3691 void bdrv_detach_aio_context(BlockDriverState *bs)
3692 {
3693     BdrvAioNotifier *baf;
3694
3695     if (!bs->drv) {
3696         return;
3697     }
3698
3699     QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3700         baf->detach_aio_context(baf->opaque);
3701     }
3702
3703     if (bs->throttle_state) {
3704         throttle_timers_detach_aio_context(&bs->throttle_timers);
3705     }
3706     if (bs->drv->bdrv_detach_aio_context) {
3707         bs->drv->bdrv_detach_aio_context(bs);
3708     }
3709     if (bs->file) {
3710         bdrv_detach_aio_context(bs->file->bs);
3711     }
3712     if (bs->backing) {
3713         bdrv_detach_aio_context(bs->backing->bs);
3714     }
3715
3716     bs->aio_context = NULL;
3717 }
3718
3719 void bdrv_attach_aio_context(BlockDriverState *bs,
3720                              AioContext *new_context)
3721 {
3722     BdrvAioNotifier *ban;
3723
3724     if (!bs->drv) {
3725         return;
3726     }
3727
3728     bs->aio_context = new_context;
3729
3730     if (bs->backing) {
3731         bdrv_attach_aio_context(bs->backing->bs, new_context);
3732     }
3733     if (bs->file) {
3734         bdrv_attach_aio_context(bs->file->bs, new_context);
3735     }
3736     if (bs->drv->bdrv_attach_aio_context) {
3737         bs->drv->bdrv_attach_aio_context(bs, new_context);
3738     }
3739     if (bs->throttle_state) {
3740         throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
3741     }
3742
3743     QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3744         ban->attached_aio_context(new_context, ban->opaque);
3745     }
3746 }
3747
3748 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3749 {
3750     bdrv_drain(bs); /* ensure there are no in-flight requests */
3751
3752     bdrv_detach_aio_context(bs);
3753
3754     /* This function executes in the old AioContext so acquire the new one in
3755      * case it runs in a different thread.
3756      */
3757     aio_context_acquire(new_context);
3758     bdrv_attach_aio_context(bs, new_context);
3759     aio_context_release(new_context);
3760 }
3761
3762 void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3763         void (*attached_aio_context)(AioContext *new_context, void *opaque),
3764         void (*detach_aio_context)(void *opaque), void *opaque)
3765 {
3766     BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3767     *ban = (BdrvAioNotifier){
3768         .attached_aio_context = attached_aio_context,
3769         .detach_aio_context   = detach_aio_context,
3770         .opaque               = opaque
3771     };
3772
3773     QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3774 }
3775
3776 void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3777                                       void (*attached_aio_context)(AioContext *,
3778                                                                    void *),
3779                                       void (*detach_aio_context)(void *),
3780                                       void *opaque)
3781 {
3782     BdrvAioNotifier *ban, *ban_next;
3783
3784     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3785         if (ban->attached_aio_context == attached_aio_context &&
3786             ban->detach_aio_context   == detach_aio_context   &&
3787             ban->opaque               == opaque)
3788         {
3789             QLIST_REMOVE(ban, list);
3790             g_free(ban);
3791
3792             return;
3793         }
3794     }
3795
3796     abort();
3797 }
3798
3799 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3800                        BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
3801 {
3802     if (!bs->drv->bdrv_amend_options) {
3803         return -ENOTSUP;
3804     }
3805     return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
3806 }
3807
3808 /* This function will be called by the bdrv_recurse_is_first_non_filter method
3809  * of block filter and by bdrv_is_first_non_filter.
3810  * It is used to test if the given bs is the candidate or recurse more in the
3811  * node graph.
3812  */
3813 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3814                                       BlockDriverState *candidate)
3815 {
3816     /* return false if basic checks fails */
3817     if (!bs || !bs->drv) {
3818         return false;
3819     }
3820
3821     /* the code reached a non block filter driver -> check if the bs is
3822      * the same as the candidate. It's the recursion termination condition.
3823      */
3824     if (!bs->drv->is_filter) {
3825         return bs == candidate;
3826     }
3827     /* Down this path the driver is a block filter driver */
3828
3829     /* If the block filter recursion method is defined use it to recurse down
3830      * the node graph.
3831      */
3832     if (bs->drv->bdrv_recurse_is_first_non_filter) {
3833         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3834     }
3835
3836     /* the driver is a block filter but don't allow to recurse -> return false
3837      */
3838     return false;
3839 }
3840
3841 /* This function checks if the candidate is the first non filter bs down it's
3842  * bs chain. Since we don't have pointers to parents it explore all bs chains
3843  * from the top. Some filters can choose not to pass down the recursion.
3844  */
3845 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3846 {
3847     BlockDriverState *bs = NULL;
3848
3849     /* walk down the bs forest recursively */
3850     while ((bs = bdrv_next(bs)) != NULL) {
3851         bool perm;
3852
3853         /* try to recurse in this top level bs */
3854         perm = bdrv_recurse_is_first_non_filter(bs, candidate);
3855
3856         /* candidate is the first non filter */
3857         if (perm) {
3858             return true;
3859         }
3860     }
3861
3862     return false;
3863 }
3864
3865 BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3866                                         const char *node_name, Error **errp)
3867 {
3868     BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
3869     AioContext *aio_context;
3870
3871     if (!to_replace_bs) {
3872         error_setg(errp, "Node name '%s' not found", node_name);
3873         return NULL;
3874     }
3875
3876     aio_context = bdrv_get_aio_context(to_replace_bs);
3877     aio_context_acquire(aio_context);
3878
3879     if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
3880         to_replace_bs = NULL;
3881         goto out;
3882     }
3883
3884     /* We don't want arbitrary node of the BDS chain to be replaced only the top
3885      * most non filter in order to prevent data corruption.
3886      * Another benefit is that this tests exclude backing files which are
3887      * blocked by the backing blockers.
3888      */
3889     if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
3890         error_setg(errp, "Only top most non filter can be replaced");
3891         to_replace_bs = NULL;
3892         goto out;
3893     }
3894
3895 out:
3896     aio_context_release(aio_context);
3897     return to_replace_bs;
3898 }
3899
3900 static bool append_open_options(QDict *d, BlockDriverState *bs)
3901 {
3902     const QDictEntry *entry;
3903     QemuOptDesc *desc;
3904     BdrvChild *child;
3905     bool found_any = false;
3906     const char *p;
3907
3908     for (entry = qdict_first(bs->options); entry;
3909          entry = qdict_next(bs->options, entry))
3910     {
3911         /* Exclude options for children */
3912         QLIST_FOREACH(child, &bs->children, next) {
3913             if (strstart(qdict_entry_key(entry), child->name, &p)
3914                 && (!*p || *p == '.'))
3915             {
3916                 break;
3917             }
3918         }
3919         if (child) {
3920             continue;
3921         }
3922
3923         /* And exclude all non-driver-specific options */
3924         for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3925             if (!strcmp(qdict_entry_key(entry), desc->name)) {
3926                 break;
3927             }
3928         }
3929         if (desc->name) {
3930             continue;
3931         }
3932
3933         qobject_incref(qdict_entry_value(entry));
3934         qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3935         found_any = true;
3936     }
3937
3938     return found_any;
3939 }
3940
3941 /* Updates the following BDS fields:
3942  *  - exact_filename: A filename which may be used for opening a block device
3943  *                    which (mostly) equals the given BDS (even without any
3944  *                    other options; so reading and writing must return the same
3945  *                    results, but caching etc. may be different)
3946  *  - full_open_options: Options which, when given when opening a block device
3947  *                       (without a filename), result in a BDS (mostly)
3948  *                       equalling the given one
3949  *  - filename: If exact_filename is set, it is copied here. Otherwise,
3950  *              full_open_options is converted to a JSON object, prefixed with
3951  *              "json:" (for use through the JSON pseudo protocol) and put here.
3952  */
3953 void bdrv_refresh_filename(BlockDriverState *bs)
3954 {
3955     BlockDriver *drv = bs->drv;
3956     QDict *opts;
3957
3958     if (!drv) {
3959         return;
3960     }
3961
3962     /* This BDS's file name will most probably depend on its file's name, so
3963      * refresh that first */
3964     if (bs->file) {
3965         bdrv_refresh_filename(bs->file->bs);
3966     }
3967
3968     if (drv->bdrv_refresh_filename) {
3969         /* Obsolete information is of no use here, so drop the old file name
3970          * information before refreshing it */
3971         bs->exact_filename[0] = '\0';
3972         if (bs->full_open_options) {
3973             QDECREF(bs->full_open_options);
3974             bs->full_open_options = NULL;
3975         }
3976
3977         opts = qdict_new();
3978         append_open_options(opts, bs);
3979         drv->bdrv_refresh_filename(bs, opts);
3980         QDECREF(opts);
3981     } else if (bs->file) {
3982         /* Try to reconstruct valid information from the underlying file */
3983         bool has_open_options;
3984
3985         bs->exact_filename[0] = '\0';
3986         if (bs->full_open_options) {
3987             QDECREF(bs->full_open_options);
3988             bs->full_open_options = NULL;
3989         }
3990
3991         opts = qdict_new();
3992         has_open_options = append_open_options(opts, bs);
3993
3994         /* If no specific options have been given for this BDS, the filename of
3995          * the underlying file should suffice for this one as well */
3996         if (bs->file->bs->exact_filename[0] && !has_open_options) {
3997             strcpy(bs->exact_filename, bs->file->bs->exact_filename);
3998         }
3999         /* Reconstructing the full options QDict is simple for most format block
4000          * drivers, as long as the full options are known for the underlying
4001          * file BDS. The full options QDict of that file BDS should somehow
4002          * contain a representation of the filename, therefore the following
4003          * suffices without querying the (exact_)filename of this BDS. */
4004         if (bs->file->bs->full_open_options) {
4005             qdict_put_obj(opts, "driver",
4006                           QOBJECT(qstring_from_str(drv->format_name)));
4007             QINCREF(bs->file->bs->full_open_options);
4008             qdict_put_obj(opts, "file",
4009                           QOBJECT(bs->file->bs->full_open_options));
4010
4011             bs->full_open_options = opts;
4012         } else {
4013             QDECREF(opts);
4014         }
4015     } else if (!bs->full_open_options && qdict_size(bs->options)) {
4016         /* There is no underlying file BDS (at least referenced by BDS.file),
4017          * so the full options QDict should be equal to the options given
4018          * specifically for this block device when it was opened (plus the
4019          * driver specification).
4020          * Because those options don't change, there is no need to update
4021          * full_open_options when it's already set. */
4022
4023         opts = qdict_new();
4024         append_open_options(opts, bs);
4025         qdict_put_obj(opts, "driver",
4026                       QOBJECT(qstring_from_str(drv->format_name)));
4027
4028         if (bs->exact_filename[0]) {
4029             /* This may not work for all block protocol drivers (some may
4030              * require this filename to be parsed), but we have to find some
4031              * default solution here, so just include it. If some block driver
4032              * does not support pure options without any filename at all or
4033              * needs some special format of the options QDict, it needs to
4034              * implement the driver-specific bdrv_refresh_filename() function.
4035              */
4036             qdict_put_obj(opts, "filename",
4037                           QOBJECT(qstring_from_str(bs->exact_filename)));
4038         }
4039
4040         bs->full_open_options = opts;
4041     }
4042
4043     if (bs->exact_filename[0]) {
4044         pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4045     } else if (bs->full_open_options) {
4046         QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4047         snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4048                  qstring_get_str(json));
4049         QDECREF(json);
4050     }
4051 }
This page took 0.258643 seconds and 4 git commands to generate.