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