]> git.proxmox.com Git - mirror_qemu.git/blame - block.c
pc-bios/s390-ccw: build for z900
[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) {
455b0fde 1804 error_setg_errno(errp, -ret, "Error flushing drive");
e971aa12
JC
1805 goto error;
1806 }
1807
1808 if (drv->bdrv_reopen_prepare) {
1809 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1810 if (ret) {
1811 if (local_err != NULL) {
1812 error_propagate(errp, local_err);
1813 } else {
d8b6895f
LC
1814 error_setg(errp, "failed while preparing to reopen image '%s'",
1815 reopen_state->bs->filename);
e971aa12
JC
1816 }
1817 goto error;
1818 }
1819 } else {
1820 /* It is currently mandatory to have a bdrv_reopen_prepare()
1821 * handler for each supported drv. */
81e5f78a
AG
1822 error_setg(errp, "Block format '%s' used by node '%s' "
1823 "does not support reopening files", drv->format_name,
1824 bdrv_get_device_or_node_name(reopen_state->bs));
e971aa12
JC
1825 ret = -1;
1826 goto error;
1827 }
1828
4d2cb092
KW
1829 /* Options that are not handled are only okay if they are unchanged
1830 * compared to the old state. It is expected that some options are only
1831 * used for the initial open, but not reopen (e.g. filename) */
1832 if (qdict_size(reopen_state->options)) {
1833 const QDictEntry *entry = qdict_first(reopen_state->options);
1834
1835 do {
1836 QString *new_obj = qobject_to_qstring(entry->value);
1837 const char *new = qstring_get_str(new_obj);
1838 const char *old = qdict_get_try_str(reopen_state->bs->options,
1839 entry->key);
1840
1841 if (!old || strcmp(new, old)) {
1842 error_setg(errp, "Cannot change the option '%s'", entry->key);
1843 ret = -EINVAL;
1844 goto error;
1845 }
1846 } while ((entry = qdict_next(reopen_state->options, entry)));
1847 }
1848
e971aa12
JC
1849 ret = 0;
1850
1851error:
1852 return ret;
1853}
1854
1855/*
1856 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1857 * makes them final by swapping the staging BlockDriverState contents into
1858 * the active BlockDriverState contents.
1859 */
1860void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1861{
1862 BlockDriver *drv;
1863
1864 assert(reopen_state != NULL);
1865 drv = reopen_state->bs->drv;
1866 assert(drv != NULL);
1867
1868 /* If there are any driver level actions to take */
1869 if (drv->bdrv_reopen_commit) {
1870 drv->bdrv_reopen_commit(reopen_state);
1871 }
1872
1873 /* set BDS specific flags now */
1874 reopen_state->bs->open_flags = reopen_state->flags;
1875 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1876 BDRV_O_CACHE_WB);
1877 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
355ef4ac 1878
3baca891 1879 bdrv_refresh_limits(reopen_state->bs, NULL);
e971aa12
JC
1880}
1881
1882/*
1883 * Abort the reopen, and delete and free the staged changes in
1884 * reopen_state
1885 */
1886void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1887{
1888 BlockDriver *drv;
1889
1890 assert(reopen_state != NULL);
1891 drv = reopen_state->bs->drv;
1892 assert(drv != NULL);
1893
1894 if (drv->bdrv_reopen_abort) {
1895 drv->bdrv_reopen_abort(reopen_state);
1896 }
1897}
1898
1899
fc01f7e7
FB
1900void bdrv_close(BlockDriverState *bs)
1901{
33384421
HR
1902 BdrvAioNotifier *ban, *ban_next;
1903
3cbc002c
PB
1904 if (bs->job) {
1905 block_job_cancel_sync(bs->job);
1906 }
99b7e775
AG
1907
1908 /* Disable I/O limits and drain all pending throttled requests */
a0d64a61 1909 if (bs->throttle_state) {
99b7e775
AG
1910 bdrv_io_limits_disable(bs);
1911 }
1912
53ec73e2 1913 bdrv_drain(bs); /* complete I/O */
58fda173 1914 bdrv_flush(bs);
53ec73e2 1915 bdrv_drain(bs); /* in case flush left pending I/O */
d7d512f6 1916 notifier_list_notify(&bs->close_notifiers, bs);
7094f12f 1917
b4d02820
HR
1918 if (bs->blk) {
1919 blk_dev_change_media_cb(bs->blk, false);
1920 }
1921
3cbc002c 1922 if (bs->drv) {
6e93e7c4
KW
1923 BdrvChild *child, *next;
1924
9a7dedbc 1925 bs->drv->bdrv_close(bs);
9a4f4c31 1926 bs->drv = NULL;
9a7dedbc 1927
5db15a57 1928 bdrv_set_backing_hd(bs, NULL);
9a7dedbc 1929
9a4f4c31
KW
1930 if (bs->file != NULL) {
1931 bdrv_unref_child(bs, bs->file);
1932 bs->file = NULL;
1933 }
1934
6e93e7c4 1935 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
33a60407
KW
1936 /* TODO Remove bdrv_unref() from drivers' close function and use
1937 * bdrv_unref_child() here */
bddcec37
KW
1938 if (child->bs->inherits_from == bs) {
1939 child->bs->inherits_from = NULL;
1940 }
33a60407 1941 bdrv_detach_child(child);
6e93e7c4
KW
1942 }
1943
7267c094 1944 g_free(bs->opaque);
ea2384d3 1945 bs->opaque = NULL;
53fec9d3 1946 bs->copy_on_read = 0;
a275fa42
PB
1947 bs->backing_file[0] = '\0';
1948 bs->backing_format[0] = '\0';
6405875c
PB
1949 bs->total_sectors = 0;
1950 bs->encrypted = 0;
1951 bs->valid_key = 0;
1952 bs->sg = 0;
0d51b4de 1953 bs->zero_beyond_eof = false;
de9c0cec
KW
1954 QDECREF(bs->options);
1955 bs->options = NULL;
91af7014
HR
1956 QDECREF(bs->full_open_options);
1957 bs->full_open_options = NULL;
b338082b 1958 }
98f90dba 1959
33384421
HR
1960 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1961 g_free(ban);
1962 }
1963 QLIST_INIT(&bs->aio_notifiers);
b338082b
FB
1964}
1965
2bc93fed
MK
1966void bdrv_close_all(void)
1967{
1968 BlockDriverState *bs;
1969
dc364f4c 1970 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
ed78cda3
SH
1971 AioContext *aio_context = bdrv_get_aio_context(bs);
1972
1973 aio_context_acquire(aio_context);
2bc93fed 1974 bdrv_close(bs);
ed78cda3 1975 aio_context_release(aio_context);
2bc93fed
MK
1976 }
1977}
1978
dc364f4c
BC
1979/* make a BlockDriverState anonymous by removing from bdrv_state and
1980 * graph_bdrv_state list.
d22b2f41
RH
1981 Also, NULL terminate the device_name to prevent double remove */
1982void bdrv_make_anon(BlockDriverState *bs)
1983{
bfb197e0
MA
1984 /*
1985 * Take care to remove bs from bdrv_states only when it's actually
1986 * in it. Note that bs->device_list.tqe_prev is initially null,
1987 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1988 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1989 * resetting it to null on remove.
1990 */
1991 if (bs->device_list.tqe_prev) {
dc364f4c 1992 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
bfb197e0 1993 bs->device_list.tqe_prev = NULL;
d22b2f41 1994 }
dc364f4c
BC
1995 if (bs->node_name[0] != '\0') {
1996 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1997 }
1998 bs->node_name[0] = '\0';
d22b2f41
RH
1999}
2000
8e419aef 2001/* Fields that need to stay with the top-level BDS */
4ddc07ca
PB
2002static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2003 BlockDriverState *bs_src)
8802d1fd 2004{
4ddc07ca 2005 /* move some fields that need to stay attached to the device */
8802d1fd
JC
2006
2007 /* dev info */
4ddc07ca 2008 bs_dest->copy_on_read = bs_src->copy_on_read;
8802d1fd 2009
4ddc07ca 2010 bs_dest->enable_write_cache = bs_src->enable_write_cache;
c4a248a1 2011
a9fc4408 2012 /* dirty bitmap */
e4654d2d 2013 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
063dd40e 2014}
a9fc4408 2015
dd62f1ca
KW
2016static void change_parent_backing_link(BlockDriverState *from,
2017 BlockDriverState *to)
2018{
2019 BdrvChild *c, *next;
2020
2021 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2022 assert(c->role != &child_backing);
2023 c->bs = to;
2024 QLIST_REMOVE(c, next_parent);
2025 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2026 bdrv_ref(to);
2027 bdrv_unref(from);
2028 }
2029 if (from->blk) {
2030 blk_set_bs(from->blk, to);
2031 if (!to->device_list.tqe_prev) {
2032 QTAILQ_INSERT_BEFORE(from, to, device_list);
2033 }
2034 QTAILQ_REMOVE(&bdrv_states, from, device_list);
2035 }
2036}
2037
2038static void swap_feature_fields(BlockDriverState *bs_top,
2039 BlockDriverState *bs_new)
2040{
2041 BlockDriverState tmp;
2042
2043 bdrv_move_feature_fields(&tmp, bs_top);
2044 bdrv_move_feature_fields(bs_top, bs_new);
2045 bdrv_move_feature_fields(bs_new, &tmp);
2046
2047 assert(!bs_new->throttle_state);
2048 if (bs_top->throttle_state) {
2049 assert(bs_top->io_limits_enabled);
2050 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2051 bdrv_io_limits_disable(bs_top);
2052 }
2053}
2054
4ddc07ca
PB
2055/*
2056 * Add new bs contents at the top of an image chain while the chain is
2057 * live, while keeping required fields on the top layer.
2058 *
2059 * This will modify the BlockDriverState fields, and swap contents
2060 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2061 *
bfb197e0 2062 * bs_new must not be attached to a BlockBackend.
4ddc07ca
PB
2063 *
2064 * This function does not create any image files.
dd62f1ca
KW
2065 *
2066 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2067 * that's what the callers commonly need. bs_new will be referenced by the old
2068 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2069 * reference of its own, it must call bdrv_ref().
4ddc07ca
PB
2070 */
2071void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2072{
dd62f1ca
KW
2073 assert(!bdrv_requests_pending(bs_top));
2074 assert(!bdrv_requests_pending(bs_new));
2075
2076 bdrv_ref(bs_top);
2077 change_parent_backing_link(bs_top, bs_new);
2078
2079 /* Some fields always stay on top of the backing file chain */
2080 swap_feature_fields(bs_top, bs_new);
2081
2082 bdrv_set_backing_hd(bs_new, bs_top);
2083 bdrv_unref(bs_top);
4ddc07ca 2084
dd62f1ca
KW
2085 /* bs_new is now referenced by its new parents, we don't need the
2086 * additional reference any more. */
2087 bdrv_unref(bs_new);
8802d1fd
JC
2088}
2089
3f09bfbc
KW
2090void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2091{
2092 assert(!bdrv_requests_pending(old));
2093 assert(!bdrv_requests_pending(new));
2094
2095 bdrv_ref(old);
2096
2097 if (old->blk) {
2098 /* As long as these fields aren't in BlockBackend, but in the top-level
2099 * BlockDriverState, it's not possible for a BDS to have two BBs.
2100 *
2101 * We really want to copy the fields from old to new, but we go for a
2102 * swap instead so that pointers aren't duplicated and cause trouble.
2103 * (Also, bdrv_swap() used to do the same.) */
2104 assert(!new->blk);
2105 swap_feature_fields(old, new);
2106 }
2107 change_parent_backing_link(old, new);
2108
2109 /* Change backing files if a previously independent node is added to the
2110 * chain. For active commit, we replace top by its own (indirect) backing
2111 * file and don't do anything here so we don't build a loop. */
2112 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2113 bdrv_set_backing_hd(new, backing_bs(old));
2114 bdrv_set_backing_hd(old, NULL);
2115 }
2116
2117 bdrv_unref(old);
2118}
2119
4f6fd349 2120static void bdrv_delete(BlockDriverState *bs)
b338082b 2121{
3e914655 2122 assert(!bs->job);
3718d8ab 2123 assert(bdrv_op_blocker_is_empty(bs));
4f6fd349 2124 assert(!bs->refcnt);
e4654d2d 2125 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
18846dee 2126
e1b5c52e
SH
2127 bdrv_close(bs);
2128
1b7bdbc1 2129 /* remove from list, if necessary */
d22b2f41 2130 bdrv_make_anon(bs);
34c6f050 2131
7267c094 2132 g_free(bs);
fc01f7e7
FB
2133}
2134
e97fc193
AL
2135/*
2136 * Run consistency checks on an image
2137 *
e076f338 2138 * Returns 0 if the check could be completed (it doesn't mean that the image is
a1c7273b 2139 * free of errors) or -errno when an internal error occurred. The results of the
e076f338 2140 * check are stored in res.
e97fc193 2141 */
4534ff54 2142int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
e97fc193 2143{
908bcd54
HR
2144 if (bs->drv == NULL) {
2145 return -ENOMEDIUM;
2146 }
e97fc193
AL
2147 if (bs->drv->bdrv_check == NULL) {
2148 return -ENOTSUP;
2149 }
2150
e076f338 2151 memset(res, 0, sizeof(*res));
4534ff54 2152 return bs->drv->bdrv_check(bs, res, fix);
e97fc193
AL
2153}
2154
8a426614
KW
2155#define COMMIT_BUF_SECTORS 2048
2156
33e3963e
FB
2157/* commit COW file into the raw image */
2158int bdrv_commit(BlockDriverState *bs)
2159{
19cb3738 2160 BlockDriver *drv = bs->drv;
72706ea4 2161 int64_t sector, total_sectors, length, backing_length;
8a426614 2162 int n, ro, open_flags;
0bce597d 2163 int ret = 0;
72706ea4 2164 uint8_t *buf = NULL;
33e3963e 2165
19cb3738
FB
2166 if (!drv)
2167 return -ENOMEDIUM;
6bb45158 2168
760e0063 2169 if (!bs->backing) {
4dca4b63 2170 return -ENOTSUP;
33e3963e
FB
2171 }
2172
bb00021d 2173 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
760e0063 2174 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
2d3735d3
SH
2175 return -EBUSY;
2176 }
2177
760e0063
KW
2178 ro = bs->backing->bs->read_only;
2179 open_flags = bs->backing->bs->open_flags;
4dca4b63
NS
2180
2181 if (ro) {
760e0063 2182 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
0bce597d 2183 return -EACCES;
4dca4b63 2184 }
ea2384d3 2185 }
33e3963e 2186
72706ea4
JC
2187 length = bdrv_getlength(bs);
2188 if (length < 0) {
2189 ret = length;
2190 goto ro_cleanup;
2191 }
2192
760e0063 2193 backing_length = bdrv_getlength(bs->backing->bs);
72706ea4
JC
2194 if (backing_length < 0) {
2195 ret = backing_length;
2196 goto ro_cleanup;
2197 }
2198
2199 /* If our top snapshot is larger than the backing file image,
2200 * grow the backing file image if possible. If not possible,
2201 * we must return an error */
2202 if (length > backing_length) {
760e0063 2203 ret = bdrv_truncate(bs->backing->bs, length);
72706ea4
JC
2204 if (ret < 0) {
2205 goto ro_cleanup;
2206 }
2207 }
2208
2209 total_sectors = length >> BDRV_SECTOR_BITS;
857d4f46
KW
2210
2211 /* qemu_try_blockalign() for bs will choose an alignment that works for
760e0063 2212 * bs->backing->bs as well, so no need to compare the alignment manually. */
857d4f46
KW
2213 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2214 if (buf == NULL) {
2215 ret = -ENOMEM;
2216 goto ro_cleanup;
2217 }
8a426614
KW
2218
2219 for (sector = 0; sector < total_sectors; sector += n) {
d663640c
PB
2220 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2221 if (ret < 0) {
2222 goto ro_cleanup;
2223 }
2224 if (ret) {
dabfa6cc
KW
2225 ret = bdrv_read(bs, sector, buf, n);
2226 if (ret < 0) {
8a426614
KW
2227 goto ro_cleanup;
2228 }
2229
760e0063 2230 ret = bdrv_write(bs->backing->bs, sector, buf, n);
dabfa6cc 2231 if (ret < 0) {
8a426614
KW
2232 goto ro_cleanup;
2233 }
ea2384d3 2234 }
33e3963e 2235 }
95389c86 2236
1d44952f
CH
2237 if (drv->bdrv_make_empty) {
2238 ret = drv->bdrv_make_empty(bs);
dabfa6cc
KW
2239 if (ret < 0) {
2240 goto ro_cleanup;
2241 }
1d44952f
CH
2242 bdrv_flush(bs);
2243 }
95389c86 2244
3f5075ae
CH
2245 /*
2246 * Make sure all data we wrote to the backing device is actually
2247 * stable on disk.
2248 */
760e0063
KW
2249 if (bs->backing) {
2250 bdrv_flush(bs->backing->bs);
dabfa6cc 2251 }
4dca4b63 2252
dabfa6cc 2253 ret = 0;
4dca4b63 2254ro_cleanup:
857d4f46 2255 qemu_vfree(buf);
4dca4b63
NS
2256
2257 if (ro) {
0bce597d 2258 /* ignoring error return here */
760e0063 2259 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
4dca4b63
NS
2260 }
2261
1d44952f 2262 return ret;
33e3963e
FB
2263}
2264
e8877497 2265int bdrv_commit_all(void)
6ab4b5ab
MA
2266{
2267 BlockDriverState *bs;
2268
dc364f4c 2269 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
ed78cda3
SH
2270 AioContext *aio_context = bdrv_get_aio_context(bs);
2271
2272 aio_context_acquire(aio_context);
760e0063 2273 if (bs->drv && bs->backing) {
272d2d8e
JC
2274 int ret = bdrv_commit(bs);
2275 if (ret < 0) {
ed78cda3 2276 aio_context_release(aio_context);
272d2d8e
JC
2277 return ret;
2278 }
e8877497 2279 }
ed78cda3 2280 aio_context_release(aio_context);
6ab4b5ab 2281 }
e8877497 2282 return 0;
6ab4b5ab
MA
2283}
2284
756e6736
KW
2285/*
2286 * Return values:
2287 * 0 - success
2288 * -EINVAL - backing format specified, but no file
2289 * -ENOSPC - can't update the backing file because no space is left in the
2290 * image file header
2291 * -ENOTSUP - format driver doesn't support changing the backing file
2292 */
2293int bdrv_change_backing_file(BlockDriverState *bs,
2294 const char *backing_file, const char *backing_fmt)
2295{
2296 BlockDriver *drv = bs->drv;
469ef350 2297 int ret;
756e6736 2298
5f377794
PB
2299 /* Backing file format doesn't make sense without a backing file */
2300 if (backing_fmt && !backing_file) {
2301 return -EINVAL;
2302 }
2303
756e6736 2304 if (drv->bdrv_change_backing_file != NULL) {
469ef350 2305 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
756e6736 2306 } else {
469ef350 2307 ret = -ENOTSUP;
756e6736 2308 }
469ef350
PB
2309
2310 if (ret == 0) {
2311 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2312 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2313 }
2314 return ret;
756e6736
KW
2315}
2316
6ebdcee2
JC
2317/*
2318 * Finds the image layer in the chain that has 'bs' as its backing file.
2319 *
2320 * active is the current topmost image.
2321 *
2322 * Returns NULL if bs is not found in active's image chain,
2323 * or if active == bs.
4caf0fcd
JC
2324 *
2325 * Returns the bottommost base image if bs == NULL.
6ebdcee2
JC
2326 */
2327BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2328 BlockDriverState *bs)
2329{
760e0063
KW
2330 while (active && bs != backing_bs(active)) {
2331 active = backing_bs(active);
6ebdcee2
JC
2332 }
2333
4caf0fcd
JC
2334 return active;
2335}
6ebdcee2 2336
4caf0fcd
JC
2337/* Given a BDS, searches for the base layer. */
2338BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2339{
2340 return bdrv_find_overlay(bs, NULL);
6ebdcee2
JC
2341}
2342
6ebdcee2
JC
2343/*
2344 * Drops images above 'base' up to and including 'top', and sets the image
2345 * above 'top' to have base as its backing file.
2346 *
2347 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2348 * information in 'bs' can be properly updated.
2349 *
2350 * E.g., this will convert the following chain:
2351 * bottom <- base <- intermediate <- top <- active
2352 *
2353 * to
2354 *
2355 * bottom <- base <- active
2356 *
2357 * It is allowed for bottom==base, in which case it converts:
2358 *
2359 * base <- intermediate <- top <- active
2360 *
2361 * to
2362 *
2363 * base <- active
2364 *
54e26900
JC
2365 * If backing_file_str is non-NULL, it will be used when modifying top's
2366 * overlay image metadata.
2367 *
6ebdcee2
JC
2368 * Error conditions:
2369 * if active == top, that is considered an error
2370 *
2371 */
2372int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
54e26900 2373 BlockDriverState *base, const char *backing_file_str)
6ebdcee2 2374{
6ebdcee2 2375 BlockDriverState *new_top_bs = NULL;
6ebdcee2
JC
2376 int ret = -EIO;
2377
6ebdcee2
JC
2378 if (!top->drv || !base->drv) {
2379 goto exit;
2380 }
2381
2382 new_top_bs = bdrv_find_overlay(active, top);
2383
2384 if (new_top_bs == NULL) {
2385 /* we could not find the image above 'top', this is an error */
2386 goto exit;
2387 }
2388
760e0063 2389 /* special case of new_top_bs->backing->bs already pointing to base - nothing
6ebdcee2 2390 * to do, no intermediate images */
760e0063 2391 if (backing_bs(new_top_bs) == base) {
6ebdcee2
JC
2392 ret = 0;
2393 goto exit;
2394 }
2395
5db15a57
KW
2396 /* Make sure that base is in the backing chain of top */
2397 if (!bdrv_chain_contains(top, base)) {
6ebdcee2
JC
2398 goto exit;
2399 }
2400
2401 /* success - we can delete the intermediate states, and link top->base */
5db15a57 2402 backing_file_str = backing_file_str ? backing_file_str : base->filename;
54e26900 2403 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
5db15a57 2404 base->drv ? base->drv->format_name : "");
6ebdcee2
JC
2405 if (ret) {
2406 goto exit;
2407 }
5db15a57 2408 bdrv_set_backing_hd(new_top_bs, base);
6ebdcee2 2409
6ebdcee2 2410 ret = 0;
6ebdcee2 2411exit:
6ebdcee2
JC
2412 return ret;
2413}
2414
61007b31
SH
2415/**
2416 * Truncate file to 'offset' bytes (needed only for file protocols)
2417 */
2418int bdrv_truncate(BlockDriverState *bs, int64_t offset)
71d0770c 2419{
61007b31
SH
2420 BlockDriver *drv = bs->drv;
2421 int ret;
2422 if (!drv)
71d0770c 2423 return -ENOMEDIUM;
61007b31
SH
2424 if (!drv->bdrv_truncate)
2425 return -ENOTSUP;
2426 if (bs->read_only)
2427 return -EACCES;
71d0770c 2428
61007b31
SH
2429 ret = drv->bdrv_truncate(bs, offset);
2430 if (ret == 0) {
2431 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
2432 bdrv_dirty_bitmap_truncate(bs);
2433 if (bs->blk) {
2434 blk_dev_resize_cb(bs->blk);
2435 }
c0191e76 2436 }
61007b31 2437 return ret;
71d0770c
AL
2438}
2439
61007b31
SH
2440/**
2441 * Length of a allocated file in bytes. Sparse files are counted by actual
2442 * allocated space. Return < 0 if error or unknown.
2443 */
2444int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
71d0770c 2445{
61007b31
SH
2446 BlockDriver *drv = bs->drv;
2447 if (!drv) {
2448 return -ENOMEDIUM;
8f4754ed 2449 }
61007b31
SH
2450 if (drv->bdrv_get_allocated_file_size) {
2451 return drv->bdrv_get_allocated_file_size(bs);
2452 }
2453 if (bs->file) {
9a4f4c31 2454 return bdrv_get_allocated_file_size(bs->file->bs);
1c9805a3 2455 }
61007b31 2456 return -ENOTSUP;
1c9805a3 2457}
e7a8a783 2458
61007b31
SH
2459/**
2460 * Return number of sectors on success, -errno on error.
1c9805a3 2461 */
61007b31 2462int64_t bdrv_nb_sectors(BlockDriverState *bs)
1c9805a3 2463{
61007b31 2464 BlockDriver *drv = bs->drv;
498e386c 2465
61007b31
SH
2466 if (!drv)
2467 return -ENOMEDIUM;
2572b37a 2468
61007b31
SH
2469 if (drv->has_variable_length) {
2470 int ret = refresh_total_sectors(bs, bs->total_sectors);
2471 if (ret < 0) {
2472 return ret;
1c9805a3
SH
2473 }
2474 }
61007b31 2475 return bs->total_sectors;
1c9805a3 2476}
b338082b 2477
61007b31
SH
2478/**
2479 * Return length in bytes on success, -errno on error.
2480 * The length is always a multiple of BDRV_SECTOR_SIZE.
8d3b1a2d 2481 */
61007b31 2482int64_t bdrv_getlength(BlockDriverState *bs)
8d3b1a2d 2483{
61007b31 2484 int64_t ret = bdrv_nb_sectors(bs);
8d3b1a2d 2485
4a9c9ea0 2486 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
61007b31 2487 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
fc01f7e7
FB
2488}
2489
61007b31
SH
2490/* return 0 as number of sectors if no device present or error */
2491void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
07d27a44 2492{
61007b31 2493 int64_t nb_sectors = bdrv_nb_sectors(bs);
07d27a44 2494
61007b31 2495 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
07d27a44
MA
2496}
2497
61007b31 2498int bdrv_is_read_only(BlockDriverState *bs)
8d3b1a2d 2499{
61007b31 2500 return bs->read_only;
83f64091 2501}
83f64091 2502
61007b31 2503int bdrv_is_sg(BlockDriverState *bs)
f08145fe 2504{
61007b31 2505 return bs->sg;
f08145fe
KW
2506}
2507
61007b31 2508int bdrv_enable_write_cache(BlockDriverState *bs)
ab185921 2509{
61007b31 2510 return bs->enable_write_cache;
ab185921
SH
2511}
2512
61007b31 2513void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
da1fa91d 2514{
61007b31 2515 bs->enable_write_cache = wce;
ab185921 2516
61007b31
SH
2517 /* so a reopen() will preserve wce */
2518 if (wce) {
2519 bs->open_flags |= BDRV_O_CACHE_WB;
893a8f62 2520 } else {
61007b31 2521 bs->open_flags &= ~BDRV_O_CACHE_WB;
893a8f62 2522 }
da1fa91d
KW
2523}
2524
61007b31 2525int bdrv_is_encrypted(BlockDriverState *bs)
fc3959e4 2526{
760e0063 2527 if (bs->backing && bs->backing->bs->encrypted) {
61007b31 2528 return 1;
760e0063 2529 }
61007b31 2530 return bs->encrypted;
fc3959e4
FZ
2531}
2532
61007b31 2533int bdrv_key_required(BlockDriverState *bs)
fc3959e4 2534{
760e0063 2535 BdrvChild *backing = bs->backing;
61007b31 2536
760e0063 2537 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
61007b31 2538 return 1;
760e0063 2539 }
61007b31 2540 return (bs->encrypted && !bs->valid_key);
fc3959e4
FZ
2541}
2542
61007b31 2543int bdrv_set_key(BlockDriverState *bs, const char *key)
d0c7f642 2544{
d0c7f642 2545 int ret;
760e0063
KW
2546 if (bs->backing && bs->backing->bs->encrypted) {
2547 ret = bdrv_set_key(bs->backing->bs, key);
61007b31
SH
2548 if (ret < 0)
2549 return ret;
2550 if (!bs->encrypted)
2551 return 0;
2552 }
2553 if (!bs->encrypted) {
2554 return -EINVAL;
2555 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
d0c7f642
KW
2556 return -ENOMEDIUM;
2557 }
61007b31 2558 ret = bs->drv->bdrv_set_key(bs, key);
b9c64947 2559 if (ret < 0) {
61007b31
SH
2560 bs->valid_key = 0;
2561 } else if (!bs->valid_key) {
2562 bs->valid_key = 1;
2563 if (bs->blk) {
2564 /* call the change callback now, we skipped it on open */
2565 blk_dev_change_media_cb(bs->blk, true);
2566 }
1b0288ae 2567 }
61007b31
SH
2568 return ret;
2569}
f08f2dda 2570
c5fbe571 2571/*
61007b31
SH
2572 * Provide an encryption key for @bs.
2573 * If @key is non-null:
2574 * If @bs is not encrypted, fail.
2575 * Else if the key is invalid, fail.
2576 * Else set @bs's key to @key, replacing the existing key, if any.
2577 * If @key is null:
2578 * If @bs is encrypted and still lacks a key, fail.
2579 * Else do nothing.
2580 * On failure, store an error object through @errp if non-null.
c5fbe571 2581 */
61007b31 2582void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
c5fbe571 2583{
61007b31
SH
2584 if (key) {
2585 if (!bdrv_is_encrypted(bs)) {
2586 error_setg(errp, "Node '%s' is not encrypted",
2587 bdrv_get_device_or_node_name(bs));
2588 } else if (bdrv_set_key(bs, key) < 0) {
c6bd8c70 2589 error_setg(errp, QERR_INVALID_PASSWORD);
4d2855a3
MA
2590 }
2591 } else {
2592 if (bdrv_key_required(bs)) {
b1ca6391
MA
2593 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2594 "'%s' (%s) is encrypted",
81e5f78a 2595 bdrv_get_device_or_node_name(bs),
4d2855a3
MA
2596 bdrv_get_encrypted_filename(bs));
2597 }
2598 }
2599}
2600
61007b31 2601const char *bdrv_get_format_name(BlockDriverState *bs)
40b4f539 2602{
61007b31 2603 return bs->drv ? bs->drv->format_name : NULL;
40b4f539
KW
2604}
2605
61007b31 2606static int qsort_strcmp(const void *a, const void *b)
40b4f539 2607{
61007b31 2608 return strcmp(a, b);
40b4f539
KW
2609}
2610
61007b31
SH
2611void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
2612 void *opaque)
40b4f539 2613{
61007b31
SH
2614 BlockDriver *drv;
2615 int count = 0;
2616 int i;
2617 const char **formats = NULL;
40b4f539 2618
61007b31
SH
2619 QLIST_FOREACH(drv, &bdrv_drivers, list) {
2620 if (drv->format_name) {
2621 bool found = false;
2622 int i = count;
2623 while (formats && i && !found) {
2624 found = !strcmp(formats[--i], drv->format_name);
2625 }
e2a305fb 2626
61007b31
SH
2627 if (!found) {
2628 formats = g_renew(const char *, formats, count + 1);
2629 formats[count++] = drv->format_name;
2630 }
6c5a42ac 2631 }
61007b31 2632 }
6c5a42ac 2633
61007b31 2634 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
40b4f539 2635
61007b31
SH
2636 for (i = 0; i < count; i++) {
2637 it(opaque, formats[i]);
2638 }
40b4f539 2639
61007b31
SH
2640 g_free(formats);
2641}
40b4f539 2642
61007b31
SH
2643/* This function is to find a node in the bs graph */
2644BlockDriverState *bdrv_find_node(const char *node_name)
2645{
2646 BlockDriverState *bs;
391827eb 2647
61007b31 2648 assert(node_name);
40b4f539 2649
61007b31
SH
2650 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2651 if (!strcmp(node_name, bs->node_name)) {
2652 return bs;
40b4f539
KW
2653 }
2654 }
61007b31 2655 return NULL;
40b4f539
KW
2656}
2657
61007b31
SH
2658/* Put this QMP function here so it can access the static graph_bdrv_states. */
2659BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
40b4f539 2660{
61007b31
SH
2661 BlockDeviceInfoList *list, *entry;
2662 BlockDriverState *bs;
40b4f539 2663
61007b31
SH
2664 list = NULL;
2665 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2666 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2667 if (!info) {
2668 qapi_free_BlockDeviceInfoList(list);
2669 return NULL;
301db7c2 2670 }
61007b31
SH
2671 entry = g_malloc0(sizeof(*entry));
2672 entry->value = info;
2673 entry->next = list;
2674 list = entry;
301db7c2
RH
2675 }
2676
61007b31
SH
2677 return list;
2678}
40b4f539 2679
61007b31
SH
2680BlockDriverState *bdrv_lookup_bs(const char *device,
2681 const char *node_name,
2682 Error **errp)
2683{
2684 BlockBackend *blk;
2685 BlockDriverState *bs;
40b4f539 2686
61007b31
SH
2687 if (device) {
2688 blk = blk_by_name(device);
40b4f539 2689
61007b31 2690 if (blk) {
9f4ed6fb
AG
2691 bs = blk_bs(blk);
2692 if (!bs) {
5433c24f 2693 error_setg(errp, "Device '%s' has no medium", device);
5433c24f
HR
2694 }
2695
9f4ed6fb 2696 return bs;
61007b31
SH
2697 }
2698 }
40b4f539 2699
61007b31
SH
2700 if (node_name) {
2701 bs = bdrv_find_node(node_name);
6d519a5f 2702
61007b31
SH
2703 if (bs) {
2704 return bs;
2705 }
40b4f539
KW
2706 }
2707
61007b31
SH
2708 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2709 device ? device : "",
2710 node_name ? node_name : "");
2711 return NULL;
40b4f539
KW
2712}
2713
61007b31
SH
2714/* If 'base' is in the same chain as 'top', return true. Otherwise,
2715 * return false. If either argument is NULL, return false. */
2716bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
83f64091 2717{
61007b31 2718 while (top && top != base) {
760e0063 2719 top = backing_bs(top);
02c50efe 2720 }
61007b31
SH
2721
2722 return top != NULL;
02c50efe
FZ
2723}
2724
61007b31 2725BlockDriverState *bdrv_next_node(BlockDriverState *bs)
02c50efe 2726{
61007b31
SH
2727 if (!bs) {
2728 return QTAILQ_FIRST(&graph_bdrv_states);
02c50efe 2729 }
61007b31 2730 return QTAILQ_NEXT(bs, node_list);
83f64091
FB
2731}
2732
61007b31 2733BlockDriverState *bdrv_next(BlockDriverState *bs)
83f64091 2734{
61007b31
SH
2735 if (!bs) {
2736 return QTAILQ_FIRST(&bdrv_states);
857d4f46 2737 }
61007b31 2738 return QTAILQ_NEXT(bs, device_list);
83f64091 2739}
beac80cd 2740
61007b31 2741const char *bdrv_get_node_name(const BlockDriverState *bs)
83f64091 2742{
61007b31 2743 return bs->node_name;
beac80cd
FB
2744}
2745
61007b31
SH
2746/* TODO check what callers really want: bs->node_name or blk_name() */
2747const char *bdrv_get_device_name(const BlockDriverState *bs)
beac80cd 2748{
61007b31 2749 return bs->blk ? blk_name(bs->blk) : "";
f141eafe 2750}
83f64091 2751
61007b31
SH
2752/* This can be used to identify nodes that might not have a device
2753 * name associated. Since node and device names live in the same
2754 * namespace, the result is unambiguous. The exception is if both are
2755 * absent, then this returns an empty (non-null) string. */
2756const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
f141eafe 2757{
61007b31 2758 return bs->blk ? blk_name(bs->blk) : bs->node_name;
beac80cd 2759}
beac80cd 2760
61007b31 2761int bdrv_get_flags(BlockDriverState *bs)
0b5a2445 2762{
61007b31 2763 return bs->open_flags;
0b5a2445
PB
2764}
2765
61007b31 2766int bdrv_has_zero_init_1(BlockDriverState *bs)
68485420 2767{
61007b31 2768 return 1;
0b5a2445
PB
2769}
2770
61007b31 2771int bdrv_has_zero_init(BlockDriverState *bs)
0b5a2445 2772{
61007b31 2773 assert(bs->drv);
0b5a2445 2774
61007b31
SH
2775 /* If BS is a copy on write image, it is initialized to
2776 the contents of the base image, which may not be zeroes. */
760e0063 2777 if (bs->backing) {
61007b31
SH
2778 return 0;
2779 }
2780 if (bs->drv->bdrv_has_zero_init) {
2781 return bs->drv->bdrv_has_zero_init(bs);
0b5a2445 2782 }
61007b31
SH
2783
2784 /* safe default */
2785 return 0;
68485420
KW
2786}
2787
61007b31 2788bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
b2a61371 2789{
61007b31 2790 BlockDriverInfo bdi;
b2a61371 2791
760e0063 2792 if (bs->backing) {
61007b31
SH
2793 return false;
2794 }
2795
2796 if (bdrv_get_info(bs, &bdi) == 0) {
2797 return bdi.unallocated_blocks_are_zero;
b2a61371
SH
2798 }
2799
61007b31 2800 return false;
b2a61371
SH
2801}
2802
61007b31 2803bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
68485420 2804{
61007b31 2805 BlockDriverInfo bdi;
68485420 2806
760e0063 2807 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
61007b31
SH
2808 return false;
2809 }
68485420 2810
61007b31
SH
2811 if (bdrv_get_info(bs, &bdi) == 0) {
2812 return bdi.can_write_zeroes_with_unmap;
2813 }
68485420 2814
61007b31 2815 return false;
68485420
KW
2816}
2817
61007b31 2818const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
b2e12bc6 2819{
760e0063 2820 if (bs->backing && bs->backing->bs->encrypted)
61007b31
SH
2821 return bs->backing_file;
2822 else if (bs->encrypted)
2823 return bs->filename;
2824 else
2825 return NULL;
b2e12bc6
CH
2826}
2827
61007b31
SH
2828void bdrv_get_backing_filename(BlockDriverState *bs,
2829 char *filename, int filename_size)
016f5cf6 2830{
61007b31
SH
2831 pstrcpy(filename, filename_size, bs->backing_file);
2832}
d318aea9 2833
61007b31
SH
2834int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2835{
2836 BlockDriver *drv = bs->drv;
2837 if (!drv)
2838 return -ENOMEDIUM;
2839 if (!drv->bdrv_get_info)
2840 return -ENOTSUP;
2841 memset(bdi, 0, sizeof(*bdi));
2842 return drv->bdrv_get_info(bs, bdi);
2843}
016f5cf6 2844
61007b31
SH
2845ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2846{
2847 BlockDriver *drv = bs->drv;
2848 if (drv && drv->bdrv_get_specific_info) {
2849 return drv->bdrv_get_specific_info(bs);
2850 }
2851 return NULL;
016f5cf6
AG
2852}
2853
61007b31 2854void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
4265d620 2855{
61007b31
SH
2856 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
2857 return;
2858 }
4265d620 2859
61007b31 2860 bs->drv->bdrv_debug_event(bs, event);
4265d620
PB
2861}
2862
61007b31
SH
2863int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2864 const char *tag)
4265d620 2865{
61007b31 2866 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
9a4f4c31 2867 bs = bs->file ? bs->file->bs : NULL;
61007b31 2868 }
4265d620 2869
61007b31
SH
2870 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2871 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2872 }
4265d620 2873
61007b31 2874 return -ENOTSUP;
4265d620
PB
2875}
2876
61007b31 2877int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
ea2384d3 2878{
61007b31 2879 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
9a4f4c31 2880 bs = bs->file ? bs->file->bs : NULL;
61007b31 2881 }
ce1a14dc 2882
61007b31
SH
2883 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2884 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2885 }
2886
2887 return -ENOTSUP;
eb852011
MA
2888}
2889
61007b31 2890int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
ce1a14dc 2891{
61007b31 2892 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
9a4f4c31 2893 bs = bs->file ? bs->file->bs : NULL;
61007b31 2894 }
ce1a14dc 2895
61007b31
SH
2896 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
2897 return bs->drv->bdrv_debug_resume(bs, tag);
2898 }
ce1a14dc 2899
61007b31 2900 return -ENOTSUP;
f197fe2b
FZ
2901}
2902
61007b31 2903bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
ce1a14dc 2904{
61007b31 2905 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
9a4f4c31 2906 bs = bs->file ? bs->file->bs : NULL;
f197fe2b 2907 }
19cb3738 2908
61007b31
SH
2909 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
2910 return bs->drv->bdrv_debug_is_suspended(bs, tag);
2911 }
f9f05dc5 2912
61007b31
SH
2913 return false;
2914}
f9f05dc5 2915
61007b31 2916int bdrv_is_snapshot(BlockDriverState *bs)
f9f05dc5 2917{
61007b31 2918 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
f9f05dc5
KW
2919}
2920
61007b31
SH
2921/* backing_file can either be relative, or absolute, or a protocol. If it is
2922 * relative, it must be relative to the chain. So, passing in bs->filename
2923 * from a BDS as backing_file should not be done, as that may be relative to
2924 * the CWD rather than the chain. */
2925BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
2926 const char *backing_file)
f9f05dc5 2927{
61007b31
SH
2928 char *filename_full = NULL;
2929 char *backing_file_full = NULL;
2930 char *filename_tmp = NULL;
2931 int is_protocol = 0;
2932 BlockDriverState *curr_bs = NULL;
2933 BlockDriverState *retval = NULL;
f9f05dc5 2934
61007b31
SH
2935 if (!bs || !bs->drv || !backing_file) {
2936 return NULL;
f9f05dc5
KW
2937 }
2938
61007b31
SH
2939 filename_full = g_malloc(PATH_MAX);
2940 backing_file_full = g_malloc(PATH_MAX);
2941 filename_tmp = g_malloc(PATH_MAX);
f9f05dc5 2942
61007b31 2943 is_protocol = path_has_protocol(backing_file);
f9f05dc5 2944
760e0063 2945 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
f9f05dc5 2946
61007b31
SH
2947 /* If either of the filename paths is actually a protocol, then
2948 * compare unmodified paths; otherwise make paths relative */
2949 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
2950 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
760e0063 2951 retval = curr_bs->backing->bs;
61007b31
SH
2952 break;
2953 }
2954 } else {
2955 /* If not an absolute filename path, make it relative to the current
2956 * image's filename path */
2957 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2958 backing_file);
f9f05dc5 2959
61007b31
SH
2960 /* We are going to compare absolute pathnames */
2961 if (!realpath(filename_tmp, filename_full)) {
2962 continue;
2963 }
07f07615 2964
61007b31
SH
2965 /* We need to make sure the backing filename we are comparing against
2966 * is relative to the current image filename (or absolute) */
2967 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2968 curr_bs->backing_file);
07f07615 2969
61007b31
SH
2970 if (!realpath(filename_tmp, backing_file_full)) {
2971 continue;
2972 }
eb489bb1 2973
61007b31 2974 if (strcmp(backing_file_full, filename_full) == 0) {
760e0063 2975 retval = curr_bs->backing->bs;
61007b31
SH
2976 break;
2977 }
2978 }
eb489bb1
KW
2979 }
2980
61007b31
SH
2981 g_free(filename_full);
2982 g_free(backing_file_full);
2983 g_free(filename_tmp);
2984 return retval;
2985}
2986
2987int bdrv_get_backing_file_depth(BlockDriverState *bs)
2988{
2989 if (!bs->drv) {
2990 return 0;
eb489bb1
KW
2991 }
2992
760e0063 2993 if (!bs->backing) {
61007b31 2994 return 0;
ca716364
KW
2995 }
2996
760e0063 2997 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
61007b31 2998}
07f07615 2999
61007b31
SH
3000void bdrv_init(void)
3001{
3002 module_call_init(MODULE_INIT_BLOCK);
3003}
29cdb251 3004
61007b31
SH
3005void bdrv_init_with_whitelist(void)
3006{
3007 use_bdrv_whitelist = 1;
3008 bdrv_init();
07f07615
PB
3009}
3010
5a8a30db 3011void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
0f15423c 3012{
5a8a30db
KW
3013 Error *local_err = NULL;
3014 int ret;
3015
3456a8d1
KW
3016 if (!bs->drv) {
3017 return;
3018 }
3019
7ea2d269
AK
3020 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3021 return;
3022 }
3023 bs->open_flags &= ~BDRV_O_INCOMING;
3024
3456a8d1 3025 if (bs->drv->bdrv_invalidate_cache) {
5a8a30db 3026 bs->drv->bdrv_invalidate_cache(bs, &local_err);
3456a8d1 3027 } else if (bs->file) {
9a4f4c31 3028 bdrv_invalidate_cache(bs->file->bs, &local_err);
5a8a30db
KW
3029 }
3030 if (local_err) {
3031 error_propagate(errp, local_err);
3032 return;
0f15423c 3033 }
3456a8d1 3034
5a8a30db
KW
3035 ret = refresh_total_sectors(bs, bs->total_sectors);
3036 if (ret < 0) {
3037 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3038 return;
3039 }
0f15423c
AL
3040}
3041
5a8a30db 3042void bdrv_invalidate_cache_all(Error **errp)
0f15423c
AL
3043{
3044 BlockDriverState *bs;
5a8a30db 3045 Error *local_err = NULL;
0f15423c 3046
dc364f4c 3047 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
ed78cda3
SH
3048 AioContext *aio_context = bdrv_get_aio_context(bs);
3049
3050 aio_context_acquire(aio_context);
5a8a30db 3051 bdrv_invalidate_cache(bs, &local_err);
ed78cda3 3052 aio_context_release(aio_context);
5a8a30db
KW
3053 if (local_err) {
3054 error_propagate(errp, local_err);
3055 return;
3056 }
0f15423c
AL
3057 }
3058}
3059
19cb3738
FB
3060/**************************************************************/
3061/* removable device support */
3062
3063/**
3064 * Return TRUE if the media is present
3065 */
e031f750 3066bool bdrv_is_inserted(BlockDriverState *bs)
19cb3738
FB
3067{
3068 BlockDriver *drv = bs->drv;
28d7a789 3069 BdrvChild *child;
a1aff5bf 3070
e031f750
HR
3071 if (!drv) {
3072 return false;
3073 }
28d7a789
HR
3074 if (drv->bdrv_is_inserted) {
3075 return drv->bdrv_is_inserted(bs);
3076 }
3077 QLIST_FOREACH(child, &bs->children, next) {
3078 if (!bdrv_is_inserted(child->bs)) {
3079 return false;
3080 }
e031f750 3081 }
28d7a789 3082 return true;
19cb3738
FB
3083}
3084
3085/**
8e49ca46
MA
3086 * Return whether the media changed since the last call to this
3087 * function, or -ENOTSUP if we don't know. Most drivers don't know.
19cb3738
FB
3088 */
3089int bdrv_media_changed(BlockDriverState *bs)
3090{
3091 BlockDriver *drv = bs->drv;
19cb3738 3092
8e49ca46
MA
3093 if (drv && drv->bdrv_media_changed) {
3094 return drv->bdrv_media_changed(bs);
3095 }
3096 return -ENOTSUP;
19cb3738
FB
3097}
3098
3099/**
3100 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3101 */
f36f3949 3102void bdrv_eject(BlockDriverState *bs, bool eject_flag)
19cb3738
FB
3103{
3104 BlockDriver *drv = bs->drv;
bfb197e0 3105 const char *device_name;
19cb3738 3106
822e1cd1
MA
3107 if (drv && drv->bdrv_eject) {
3108 drv->bdrv_eject(bs, eject_flag);
19cb3738 3109 }
6f382ed2 3110
bfb197e0
MA
3111 device_name = bdrv_get_device_name(bs);
3112 if (device_name[0] != '\0') {
3113 qapi_event_send_device_tray_moved(device_name,
a5ee7bd4 3114 eject_flag, &error_abort);
6f382ed2 3115 }
19cb3738
FB
3116}
3117
19cb3738
FB
3118/**
3119 * Lock or unlock the media (if it is locked, the user won't be able
3120 * to eject it manually).
3121 */
025e849a 3122void bdrv_lock_medium(BlockDriverState *bs, bool locked)
19cb3738
FB
3123{
3124 BlockDriver *drv = bs->drv;
3125
025e849a 3126 trace_bdrv_lock_medium(bs, locked);
b8c6d095 3127
025e849a
MA
3128 if (drv && drv->bdrv_lock_medium) {
3129 drv->bdrv_lock_medium(bs, locked);
19cb3738
FB
3130 }
3131}
985a03b0 3132
0db6e54a
FZ
3133BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3134{
3135 BdrvDirtyBitmap *bm;
3136
3137 assert(name);
3138 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3139 if (bm->name && !strcmp(name, bm->name)) {
3140 return bm;
3141 }
3142 }
3143 return NULL;
3144}
3145
20dca810 3146void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
0db6e54a 3147{
9bd2b08f 3148 assert(!bdrv_dirty_bitmap_frozen(bitmap));
0db6e54a
FZ
3149 g_free(bitmap->name);
3150 bitmap->name = NULL;
3151}
3152
3153BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
5fba6c0e 3154 uint32_t granularity,
0db6e54a 3155 const char *name,
b8afb520 3156 Error **errp)
7cd1e32a
LS
3157{
3158 int64_t bitmap_size;
e4654d2d 3159 BdrvDirtyBitmap *bitmap;
5fba6c0e 3160 uint32_t sector_granularity;
a55eb92c 3161
50717e94
PB
3162 assert((granularity & (granularity - 1)) == 0);
3163
0db6e54a
FZ
3164 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3165 error_setg(errp, "Bitmap already exists: %s", name);
3166 return NULL;
3167 }
5fba6c0e
JS
3168 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3169 assert(sector_granularity);
57322b78 3170 bitmap_size = bdrv_nb_sectors(bs);
b8afb520
FZ
3171 if (bitmap_size < 0) {
3172 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3173 errno = -bitmap_size;
3174 return NULL;
3175 }
5839e53b 3176 bitmap = g_new0(BdrvDirtyBitmap, 1);
5fba6c0e 3177 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
e74e6b78 3178 bitmap->size = bitmap_size;
0db6e54a 3179 bitmap->name = g_strdup(name);
b8e6fb75 3180 bitmap->disabled = false;
e4654d2d
FZ
3181 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3182 return bitmap;
3183}
3184
9bd2b08f
JS
3185bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3186{
3187 return bitmap->successor;
3188}
3189
b8e6fb75
JS
3190bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3191{
9bd2b08f
JS
3192 return !(bitmap->disabled || bitmap->successor);
3193}
3194
9abe3bdc
JS
3195DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3196{
3197 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3198 return DIRTY_BITMAP_STATUS_FROZEN;
3199 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3200 return DIRTY_BITMAP_STATUS_DISABLED;
3201 } else {
3202 return DIRTY_BITMAP_STATUS_ACTIVE;
3203 }
3204}
3205
9bd2b08f
JS
3206/**
3207 * Create a successor bitmap destined to replace this bitmap after an operation.
3208 * Requires that the bitmap is not frozen and has no successor.
3209 */
3210int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3211 BdrvDirtyBitmap *bitmap, Error **errp)
3212{
3213 uint64_t granularity;
3214 BdrvDirtyBitmap *child;
3215
3216 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3217 error_setg(errp, "Cannot create a successor for a bitmap that is "
3218 "currently frozen");
3219 return -1;
3220 }
3221 assert(!bitmap->successor);
3222
3223 /* Create an anonymous successor */
3224 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3225 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3226 if (!child) {
3227 return -1;
3228 }
3229
3230 /* Successor will be on or off based on our current state. */
3231 child->disabled = bitmap->disabled;
3232
3233 /* Install the successor and freeze the parent */
3234 bitmap->successor = child;
3235 return 0;
3236}
3237
3238/**
3239 * For a bitmap with a successor, yield our name to the successor,
3240 * delete the old bitmap, and return a handle to the new bitmap.
3241 */
3242BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3243 BdrvDirtyBitmap *bitmap,
3244 Error **errp)
3245{
3246 char *name;
3247 BdrvDirtyBitmap *successor = bitmap->successor;
3248
3249 if (successor == NULL) {
3250 error_setg(errp, "Cannot relinquish control if "
3251 "there's no successor present");
3252 return NULL;
3253 }
3254
3255 name = bitmap->name;
3256 bitmap->name = NULL;
3257 successor->name = name;
3258 bitmap->successor = NULL;
3259 bdrv_release_dirty_bitmap(bs, bitmap);
3260
3261 return successor;
3262}
3263
3264/**
3265 * In cases of failure where we can no longer safely delete the parent,
3266 * we may wish to re-join the parent and child/successor.
3267 * The merged parent will be un-frozen, but not explicitly re-enabled.
3268 */
3269BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3270 BdrvDirtyBitmap *parent,
3271 Error **errp)
3272{
3273 BdrvDirtyBitmap *successor = parent->successor;
3274
3275 if (!successor) {
3276 error_setg(errp, "Cannot reclaim a successor when none is present");
3277 return NULL;
3278 }
3279
3280 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3281 error_setg(errp, "Merging of parent and successor bitmap failed");
3282 return NULL;
3283 }
3284 bdrv_release_dirty_bitmap(bs, successor);
3285 parent->successor = NULL;
3286
3287 return parent;
b8e6fb75
JS
3288}
3289
ce1ffea8
JS
3290/**
3291 * Truncates _all_ bitmaps attached to a BDS.
3292 */
3293static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3294{
3295 BdrvDirtyBitmap *bitmap;
3296 uint64_t size = bdrv_nb_sectors(bs);
3297
3298 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
06207b0f 3299 assert(!bdrv_dirty_bitmap_frozen(bitmap));
ce1ffea8 3300 hbitmap_truncate(bitmap->bitmap, size);
5270b6a0 3301 bitmap->size = size;
ce1ffea8
JS
3302 }
3303}
3304
e4654d2d
FZ
3305void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3306{
3307 BdrvDirtyBitmap *bm, *next;
3308 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3309 if (bm == bitmap) {
9bd2b08f 3310 assert(!bdrv_dirty_bitmap_frozen(bm));
e4654d2d
FZ
3311 QLIST_REMOVE(bitmap, list);
3312 hbitmap_free(bitmap->bitmap);
0db6e54a 3313 g_free(bitmap->name);
e4654d2d
FZ
3314 g_free(bitmap);
3315 return;
a55eb92c 3316 }
7cd1e32a
LS
3317 }
3318}
3319
b8e6fb75
JS
3320void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3321{
9bd2b08f 3322 assert(!bdrv_dirty_bitmap_frozen(bitmap));
b8e6fb75
JS
3323 bitmap->disabled = true;
3324}
3325
3326void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3327{
9bd2b08f 3328 assert(!bdrv_dirty_bitmap_frozen(bitmap));
b8e6fb75
JS
3329 bitmap->disabled = false;
3330}
3331
21b56835
FZ
3332BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3333{
3334 BdrvDirtyBitmap *bm;
3335 BlockDirtyInfoList *list = NULL;
3336 BlockDirtyInfoList **plist = &list;
3337
3338 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
5839e53b
MA
3339 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3340 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
20dca810 3341 info->count = bdrv_get_dirty_count(bm);
592fdd02 3342 info->granularity = bdrv_dirty_bitmap_granularity(bm);
0db6e54a
FZ
3343 info->has_name = !!bm->name;
3344 info->name = g_strdup(bm->name);
9abe3bdc 3345 info->status = bdrv_dirty_bitmap_status(bm);
21b56835
FZ
3346 entry->value = info;
3347 *plist = entry;
3348 plist = &entry->next;
3349 }
3350
3351 return list;
3352}
3353
e4654d2d 3354int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
7cd1e32a 3355{
e4654d2d
FZ
3356 if (bitmap) {
3357 return hbitmap_get(bitmap->bitmap, sector);
7cd1e32a
LS
3358 } else {
3359 return 0;
3360 }
3361}
3362
341ebc2f
JS
3363/**
3364 * Chooses a default granularity based on the existing cluster size,
3365 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3366 * is no cluster size information available.
3367 */
3368uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3369{
3370 BlockDriverInfo bdi;
3371 uint32_t granularity;
3372
3373 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3374 granularity = MAX(4096, bdi.cluster_size);
3375 granularity = MIN(65536, granularity);
3376 } else {
3377 granularity = 65536;
3378 }
3379
3380 return granularity;
3381}
3382
592fdd02
JS
3383uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3384{
3385 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3386}
3387
20dca810 3388void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
1755da16 3389{
e4654d2d 3390 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
1755da16
PB
3391}
3392
20dca810 3393void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
c4237dfa
VSO
3394 int64_t cur_sector, int nr_sectors)
3395{
b8e6fb75 3396 assert(bdrv_dirty_bitmap_enabled(bitmap));
c4237dfa
VSO
3397 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3398}
3399
20dca810 3400void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
c4237dfa
VSO
3401 int64_t cur_sector, int nr_sectors)
3402{
b8e6fb75 3403 assert(bdrv_dirty_bitmap_enabled(bitmap));
c4237dfa
VSO
3404 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3405}
3406
df9a681d 3407void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap **out)
e74e6b78
JS
3408{
3409 assert(bdrv_dirty_bitmap_enabled(bitmap));
df9a681d
FZ
3410 if (!out) {
3411 hbitmap_reset_all(bitmap->bitmap);
3412 } else {
3413 HBitmap *backup = bitmap->bitmap;
3414 bitmap->bitmap = hbitmap_alloc(bitmap->size,
3415 hbitmap_granularity(backup));
3416 *out = backup;
3417 }
3418}
3419
3420void bdrv_undo_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap *in)
3421{
3422 HBitmap *tmp = bitmap->bitmap;
3423 assert(bdrv_dirty_bitmap_enabled(bitmap));
3424 bitmap->bitmap = in;
3425 hbitmap_free(tmp);
e74e6b78
JS
3426}
3427
e0c47b6c
SH
3428void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3429 int nr_sectors)
1755da16 3430{
e4654d2d
FZ
3431 BdrvDirtyBitmap *bitmap;
3432 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
b8e6fb75
JS
3433 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3434 continue;
3435 }
e4654d2d
FZ
3436 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3437 }
1755da16
PB
3438}
3439
d58d8453
JS
3440/**
3441 * Advance an HBitmapIter to an arbitrary offset.
3442 */
3443void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3444{
3445 assert(hbi->hb);
3446 hbitmap_iter_init(hbi, hbi->hb, offset);
3447}
3448
20dca810 3449int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
aaa0eb75 3450{
e4654d2d 3451 return hbitmap_count(bitmap->bitmap);
aaa0eb75 3452}
f88e1a42 3453
9fcb0251
FZ
3454/* Get a reference to bs */
3455void bdrv_ref(BlockDriverState *bs)
3456{
3457 bs->refcnt++;
3458}
3459
3460/* Release a previously grabbed reference to bs.
3461 * If after releasing, reference count is zero, the BlockDriverState is
3462 * deleted. */
3463void bdrv_unref(BlockDriverState *bs)
3464{
9a4d5ca6
JC
3465 if (!bs) {
3466 return;
3467 }
9fcb0251
FZ
3468 assert(bs->refcnt > 0);
3469 if (--bs->refcnt == 0) {
3470 bdrv_delete(bs);
3471 }
3472}
3473
fbe40ff7
FZ
3474struct BdrvOpBlocker {
3475 Error *reason;
3476 QLIST_ENTRY(BdrvOpBlocker) list;
3477};
3478
3479bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3480{
3481 BdrvOpBlocker *blocker;
3482 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3483 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3484 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3485 if (errp) {
81e5f78a
AG
3486 error_setg(errp, "Node '%s' is busy: %s",
3487 bdrv_get_device_or_node_name(bs),
bfb197e0 3488 error_get_pretty(blocker->reason));
fbe40ff7
FZ
3489 }
3490 return true;
3491 }
3492 return false;
3493}
3494
3495void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3496{
3497 BdrvOpBlocker *blocker;
3498 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3499
5839e53b 3500 blocker = g_new0(BdrvOpBlocker, 1);
fbe40ff7
FZ
3501 blocker->reason = reason;
3502 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3503}
3504
3505void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3506{
3507 BdrvOpBlocker *blocker, *next;
3508 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3509 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3510 if (blocker->reason == reason) {
3511 QLIST_REMOVE(blocker, list);
3512 g_free(blocker);
3513 }
3514 }
3515}
3516
3517void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3518{
3519 int i;
3520 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3521 bdrv_op_block(bs, i, reason);
3522 }
3523}
3524
3525void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3526{
3527 int i;
3528 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3529 bdrv_op_unblock(bs, i, reason);
3530 }
3531}
3532
3533bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3534{
3535 int i;
3536
3537 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3538 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3539 return false;
3540 }
3541 }
3542 return true;
3543}
3544
d92ada22
LC
3545void bdrv_img_create(const char *filename, const char *fmt,
3546 const char *base_filename, const char *base_fmt,
f382d43a
MR
3547 char *options, uint64_t img_size, int flags,
3548 Error **errp, bool quiet)
f88e1a42 3549{
83d0521a
CL
3550 QemuOptsList *create_opts = NULL;
3551 QemuOpts *opts = NULL;
3552 const char *backing_fmt, *backing_file;
3553 int64_t size;
f88e1a42 3554 BlockDriver *drv, *proto_drv;
cc84d90f 3555 Error *local_err = NULL;
f88e1a42
JS
3556 int ret = 0;
3557
3558 /* Find driver and parse its options */
3559 drv = bdrv_find_format(fmt);
3560 if (!drv) {
71c79813 3561 error_setg(errp, "Unknown file format '%s'", fmt);
d92ada22 3562 return;
f88e1a42
JS
3563 }
3564
b65a5e12 3565 proto_drv = bdrv_find_protocol(filename, true, errp);
f88e1a42 3566 if (!proto_drv) {
d92ada22 3567 return;
f88e1a42
JS
3568 }
3569
c6149724
HR
3570 if (!drv->create_opts) {
3571 error_setg(errp, "Format driver '%s' does not support image creation",
3572 drv->format_name);
3573 return;
3574 }
3575
3576 if (!proto_drv->create_opts) {
3577 error_setg(errp, "Protocol driver '%s' does not support image creation",
3578 proto_drv->format_name);
3579 return;
3580 }
3581
c282e1fd
CL
3582 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3583 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
f88e1a42
JS
3584
3585 /* Create parameter list with default values */
83d0521a 3586 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
39101f25 3587 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
f88e1a42
JS
3588
3589 /* Parse -o options */
3590 if (options) {
dc523cd3
MA
3591 qemu_opts_do_parse(opts, options, NULL, &local_err);
3592 if (local_err) {
3593 error_report_err(local_err);
3594 local_err = NULL;
83d0521a 3595 error_setg(errp, "Invalid options for file format '%s'", fmt);
f88e1a42
JS
3596 goto out;
3597 }
3598 }
3599
3600 if (base_filename) {
f43e47db 3601 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
6be4194b 3602 if (local_err) {
71c79813
LC
3603 error_setg(errp, "Backing file not supported for file format '%s'",
3604 fmt);
f88e1a42
JS
3605 goto out;
3606 }
3607 }
3608
3609 if (base_fmt) {
f43e47db 3610 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
6be4194b 3611 if (local_err) {
71c79813
LC
3612 error_setg(errp, "Backing file format not supported for file "
3613 "format '%s'", fmt);
f88e1a42
JS
3614 goto out;
3615 }
3616 }
3617
83d0521a
CL
3618 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3619 if (backing_file) {
3620 if (!strcmp(filename, backing_file)) {
71c79813
LC
3621 error_setg(errp, "Error: Trying to create an image with the "
3622 "same filename as the backing file");
792da93a
JS
3623 goto out;
3624 }
3625 }
3626
83d0521a 3627 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
f88e1a42
JS
3628
3629 // The size for the image must always be specified, with one exception:
3630 // If we are using a backing file, we can obtain the size from there
83d0521a
CL
3631 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3632 if (size == -1) {
3633 if (backing_file) {
66f6b814 3634 BlockDriverState *bs;
29168018 3635 char *full_backing = g_new0(char, PATH_MAX);
52bf1e72 3636 int64_t size;
63090dac 3637 int back_flags;
e6641719 3638 QDict *backing_options = NULL;
63090dac 3639
29168018
HR
3640 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3641 full_backing, PATH_MAX,
3642 &local_err);
3643 if (local_err) {
3644 g_free(full_backing);
3645 goto out;
3646 }
3647
63090dac
PB
3648 /* backing files always opened read-only */
3649 back_flags =
3650 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
f88e1a42 3651
e6641719
HR
3652 if (backing_fmt) {
3653 backing_options = qdict_new();
3654 qdict_put(backing_options, "driver",
3655 qstring_from_str(backing_fmt));
3656 }
3657
f67503e5 3658 bs = NULL;
e6641719 3659 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
6ebf9aa2 3660 back_flags, &local_err);
29168018 3661 g_free(full_backing);
f88e1a42 3662 if (ret < 0) {
f88e1a42
JS
3663 goto out;
3664 }
52bf1e72
MA
3665 size = bdrv_getlength(bs);
3666 if (size < 0) {
3667 error_setg_errno(errp, -size, "Could not get size of '%s'",
3668 backing_file);
3669 bdrv_unref(bs);
3670 goto out;
3671 }
f88e1a42 3672
39101f25 3673 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
66f6b814
HR
3674
3675 bdrv_unref(bs);
f88e1a42 3676 } else {
71c79813 3677 error_setg(errp, "Image creation needs a size parameter");
f88e1a42
JS
3678 goto out;
3679 }
3680 }
3681
f382d43a 3682 if (!quiet) {
fe646693 3683 printf("Formatting '%s', fmt=%s ", filename, fmt);
43c5d8f8 3684 qemu_opts_print(opts, " ");
f382d43a
MR
3685 puts("");
3686 }
83d0521a 3687
c282e1fd 3688 ret = bdrv_create(drv, filename, opts, &local_err);
83d0521a 3689
cc84d90f
HR
3690 if (ret == -EFBIG) {
3691 /* This is generally a better message than whatever the driver would
3692 * deliver (especially because of the cluster_size_hint), since that
3693 * is most probably not much different from "image too large". */
3694 const char *cluster_size_hint = "";
83d0521a 3695 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
cc84d90f 3696 cluster_size_hint = " (try using a larger cluster size)";
f88e1a42 3697 }
cc84d90f
HR
3698 error_setg(errp, "The image size is too large for file format '%s'"
3699 "%s", fmt, cluster_size_hint);
3700 error_free(local_err);
3701 local_err = NULL;
f88e1a42
JS
3702 }
3703
3704out:
83d0521a
CL
3705 qemu_opts_del(opts);
3706 qemu_opts_free(create_opts);
84d18f06 3707 if (local_err) {
cc84d90f
HR
3708 error_propagate(errp, local_err);
3709 }
f88e1a42 3710}
85d126f3
SH
3711
3712AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3713{
dcd04228
SH
3714 return bs->aio_context;
3715}
3716
3717void bdrv_detach_aio_context(BlockDriverState *bs)
3718{
33384421
HR
3719 BdrvAioNotifier *baf;
3720
dcd04228
SH
3721 if (!bs->drv) {
3722 return;
3723 }
3724
33384421
HR
3725 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3726 baf->detach_aio_context(baf->opaque);
3727 }
3728
a0d64a61 3729 if (bs->throttle_state) {
0e5b0a2d 3730 throttle_timers_detach_aio_context(&bs->throttle_timers);
13af91eb 3731 }
dcd04228
SH
3732 if (bs->drv->bdrv_detach_aio_context) {
3733 bs->drv->bdrv_detach_aio_context(bs);
3734 }
3735 if (bs->file) {
9a4f4c31 3736 bdrv_detach_aio_context(bs->file->bs);
dcd04228 3737 }
760e0063
KW
3738 if (bs->backing) {
3739 bdrv_detach_aio_context(bs->backing->bs);
dcd04228
SH
3740 }
3741
3742 bs->aio_context = NULL;
3743}
3744
3745void bdrv_attach_aio_context(BlockDriverState *bs,
3746 AioContext *new_context)
3747{
33384421
HR
3748 BdrvAioNotifier *ban;
3749
dcd04228
SH
3750 if (!bs->drv) {
3751 return;
3752 }
3753
3754 bs->aio_context = new_context;
3755
760e0063
KW
3756 if (bs->backing) {
3757 bdrv_attach_aio_context(bs->backing->bs, new_context);
dcd04228
SH
3758 }
3759 if (bs->file) {
9a4f4c31 3760 bdrv_attach_aio_context(bs->file->bs, new_context);
dcd04228
SH
3761 }
3762 if (bs->drv->bdrv_attach_aio_context) {
3763 bs->drv->bdrv_attach_aio_context(bs, new_context);
3764 }
a0d64a61 3765 if (bs->throttle_state) {
0e5b0a2d 3766 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
13af91eb 3767 }
33384421
HR
3768
3769 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3770 ban->attached_aio_context(new_context, ban->opaque);
3771 }
dcd04228
SH
3772}
3773
3774void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3775{
53ec73e2 3776 bdrv_drain(bs); /* ensure there are no in-flight requests */
dcd04228
SH
3777
3778 bdrv_detach_aio_context(bs);
3779
3780 /* This function executes in the old AioContext so acquire the new one in
3781 * case it runs in a different thread.
3782 */
3783 aio_context_acquire(new_context);
3784 bdrv_attach_aio_context(bs, new_context);
3785 aio_context_release(new_context);
85d126f3 3786}
d616b224 3787
33384421
HR
3788void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3789 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3790 void (*detach_aio_context)(void *opaque), void *opaque)
3791{
3792 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3793 *ban = (BdrvAioNotifier){
3794 .attached_aio_context = attached_aio_context,
3795 .detach_aio_context = detach_aio_context,
3796 .opaque = opaque
3797 };
3798
3799 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3800}
3801
3802void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3803 void (*attached_aio_context)(AioContext *,
3804 void *),
3805 void (*detach_aio_context)(void *),
3806 void *opaque)
3807{
3808 BdrvAioNotifier *ban, *ban_next;
3809
3810 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3811 if (ban->attached_aio_context == attached_aio_context &&
3812 ban->detach_aio_context == detach_aio_context &&
3813 ban->opaque == opaque)
3814 {
3815 QLIST_REMOVE(ban, list);
3816 g_free(ban);
3817
3818 return;
3819 }
3820 }
3821
3822 abort();
3823}
3824
77485434
HR
3825int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3826 BlockDriverAmendStatusCB *status_cb)
6f176b48 3827{
c282e1fd 3828 if (!bs->drv->bdrv_amend_options) {
6f176b48
HR
3829 return -ENOTSUP;
3830 }
77485434 3831 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
6f176b48 3832}
f6186f49 3833
b5042a36
BC
3834/* This function will be called by the bdrv_recurse_is_first_non_filter method
3835 * of block filter and by bdrv_is_first_non_filter.
3836 * It is used to test if the given bs is the candidate or recurse more in the
3837 * node graph.
212a5a8f 3838 */
b5042a36 3839bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
212a5a8f 3840 BlockDriverState *candidate)
f6186f49 3841{
b5042a36
BC
3842 /* return false if basic checks fails */
3843 if (!bs || !bs->drv) {
212a5a8f 3844 return false;
f6186f49
BC
3845 }
3846
b5042a36
BC
3847 /* the code reached a non block filter driver -> check if the bs is
3848 * the same as the candidate. It's the recursion termination condition.
3849 */
3850 if (!bs->drv->is_filter) {
3851 return bs == candidate;
212a5a8f 3852 }
b5042a36 3853 /* Down this path the driver is a block filter driver */
212a5a8f 3854
b5042a36
BC
3855 /* If the block filter recursion method is defined use it to recurse down
3856 * the node graph.
3857 */
3858 if (bs->drv->bdrv_recurse_is_first_non_filter) {
212a5a8f 3859 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
f6186f49
BC
3860 }
3861
b5042a36
BC
3862 /* the driver is a block filter but don't allow to recurse -> return false
3863 */
3864 return false;
f6186f49
BC
3865}
3866
212a5a8f
BC
3867/* This function checks if the candidate is the first non filter bs down it's
3868 * bs chain. Since we don't have pointers to parents it explore all bs chains
3869 * from the top. Some filters can choose not to pass down the recursion.
3870 */
3871bool bdrv_is_first_non_filter(BlockDriverState *candidate)
f6186f49 3872{
212a5a8f
BC
3873 BlockDriverState *bs;
3874
3875 /* walk down the bs forest recursively */
3876 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3877 bool perm;
3878
b5042a36 3879 /* try to recurse in this top level bs */
e6dc8a1f 3880 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
212a5a8f
BC
3881
3882 /* candidate is the first non filter */
3883 if (perm) {
3884 return true;
3885 }
3886 }
3887
3888 return false;
f6186f49 3889}
09158f00 3890
e12f3784
WC
3891BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3892 const char *node_name, Error **errp)
09158f00
BC
3893{
3894 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
5a7e7a0b
SH
3895 AioContext *aio_context;
3896
09158f00
BC
3897 if (!to_replace_bs) {
3898 error_setg(errp, "Node name '%s' not found", node_name);
3899 return NULL;
3900 }
3901
5a7e7a0b
SH
3902 aio_context = bdrv_get_aio_context(to_replace_bs);
3903 aio_context_acquire(aio_context);
3904
09158f00 3905 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
5a7e7a0b
SH
3906 to_replace_bs = NULL;
3907 goto out;
09158f00
BC
3908 }
3909
3910 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3911 * most non filter in order to prevent data corruption.
3912 * Another benefit is that this tests exclude backing files which are
3913 * blocked by the backing blockers.
3914 */
e12f3784 3915 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
09158f00 3916 error_setg(errp, "Only top most non filter can be replaced");
5a7e7a0b
SH
3917 to_replace_bs = NULL;
3918 goto out;
09158f00
BC
3919 }
3920
5a7e7a0b
SH
3921out:
3922 aio_context_release(aio_context);
09158f00
BC
3923 return to_replace_bs;
3924}
448ad91d 3925
91af7014
HR
3926static bool append_open_options(QDict *d, BlockDriverState *bs)
3927{
3928 const QDictEntry *entry;
3929 bool found_any = false;
3930
3931 for (entry = qdict_first(bs->options); entry;
3932 entry = qdict_next(bs->options, entry))
3933 {
3934 /* Only take options for this level and exclude all non-driver-specific
3935 * options */
3936 if (!strchr(qdict_entry_key(entry), '.') &&
3937 strcmp(qdict_entry_key(entry), "node-name"))
3938 {
3939 qobject_incref(qdict_entry_value(entry));
3940 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3941 found_any = true;
3942 }
3943 }
3944
3945 return found_any;
3946}
3947
3948/* Updates the following BDS fields:
3949 * - exact_filename: A filename which may be used for opening a block device
3950 * which (mostly) equals the given BDS (even without any
3951 * other options; so reading and writing must return the same
3952 * results, but caching etc. may be different)
3953 * - full_open_options: Options which, when given when opening a block device
3954 * (without a filename), result in a BDS (mostly)
3955 * equalling the given one
3956 * - filename: If exact_filename is set, it is copied here. Otherwise,
3957 * full_open_options is converted to a JSON object, prefixed with
3958 * "json:" (for use through the JSON pseudo protocol) and put here.
3959 */
3960void bdrv_refresh_filename(BlockDriverState *bs)
3961{
3962 BlockDriver *drv = bs->drv;
3963 QDict *opts;
3964
3965 if (!drv) {
3966 return;
3967 }
3968
3969 /* This BDS's file name will most probably depend on its file's name, so
3970 * refresh that first */
3971 if (bs->file) {
9a4f4c31 3972 bdrv_refresh_filename(bs->file->bs);
91af7014
HR
3973 }
3974
3975 if (drv->bdrv_refresh_filename) {
3976 /* Obsolete information is of no use here, so drop the old file name
3977 * information before refreshing it */
3978 bs->exact_filename[0] = '\0';
3979 if (bs->full_open_options) {
3980 QDECREF(bs->full_open_options);
3981 bs->full_open_options = NULL;
3982 }
3983
3984 drv->bdrv_refresh_filename(bs);
3985 } else if (bs->file) {
3986 /* Try to reconstruct valid information from the underlying file */
3987 bool has_open_options;
3988
3989 bs->exact_filename[0] = '\0';
3990 if (bs->full_open_options) {
3991 QDECREF(bs->full_open_options);
3992 bs->full_open_options = NULL;
3993 }
3994
3995 opts = qdict_new();
3996 has_open_options = append_open_options(opts, bs);
3997
3998 /* If no specific options have been given for this BDS, the filename of
3999 * the underlying file should suffice for this one as well */
9a4f4c31
KW
4000 if (bs->file->bs->exact_filename[0] && !has_open_options) {
4001 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
91af7014
HR
4002 }
4003 /* Reconstructing the full options QDict is simple for most format block
4004 * drivers, as long as the full options are known for the underlying
4005 * file BDS. The full options QDict of that file BDS should somehow
4006 * contain a representation of the filename, therefore the following
4007 * suffices without querying the (exact_)filename of this BDS. */
9a4f4c31 4008 if (bs->file->bs->full_open_options) {
91af7014
HR
4009 qdict_put_obj(opts, "driver",
4010 QOBJECT(qstring_from_str(drv->format_name)));
9a4f4c31
KW
4011 QINCREF(bs->file->bs->full_open_options);
4012 qdict_put_obj(opts, "file",
4013 QOBJECT(bs->file->bs->full_open_options));
91af7014
HR
4014
4015 bs->full_open_options = opts;
4016 } else {
4017 QDECREF(opts);
4018 }
4019 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4020 /* There is no underlying file BDS (at least referenced by BDS.file),
4021 * so the full options QDict should be equal to the options given
4022 * specifically for this block device when it was opened (plus the
4023 * driver specification).
4024 * Because those options don't change, there is no need to update
4025 * full_open_options when it's already set. */
4026
4027 opts = qdict_new();
4028 append_open_options(opts, bs);
4029 qdict_put_obj(opts, "driver",
4030 QOBJECT(qstring_from_str(drv->format_name)));
4031
4032 if (bs->exact_filename[0]) {
4033 /* This may not work for all block protocol drivers (some may
4034 * require this filename to be parsed), but we have to find some
4035 * default solution here, so just include it. If some block driver
4036 * does not support pure options without any filename at all or
4037 * needs some special format of the options QDict, it needs to
4038 * implement the driver-specific bdrv_refresh_filename() function.
4039 */
4040 qdict_put_obj(opts, "filename",
4041 QOBJECT(qstring_from_str(bs->exact_filename)));
4042 }
4043
4044 bs->full_open_options = opts;
4045 }
4046
4047 if (bs->exact_filename[0]) {
4048 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4049 } else if (bs->full_open_options) {
4050 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4051 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4052 qstring_get_str(json));
4053 QDECREF(json);
4054 }
4055}