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