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