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