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