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