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