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