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