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