blob: 9a860f12c77f6d394ba7fd6c10fdf3746626943c [file] [log] [blame]
bellardfc01f7e2003-06-30 10:03:06 +00001/*
2 * QEMU System Emulator block driver
ths5fafdf22007-09-16 21:08:06 +00003 *
bellardfc01f7e2003-06-30 10:03:06 +00004 * Copyright (c) 2003 Fabrice Bellard
ths5fafdf22007-09-16 21:08:06 +00005 *
bellardfc01f7e2003-06-30 10:03:06 +00006 * 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 */
blueswir13990d092008-12-05 17:53:21 +000024#include "config-host.h"
pbrookfaf07962007-11-11 02:51:17 +000025#include "qemu-common.h"
Stefan Hajnoczi6d519a52010-05-22 18:15:08 +010026#include "trace.h"
Paolo Bonzini737e1502012-12-17 18:19:44 +010027#include "block/block_int.h"
28#include "block/blockjob.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010029#include "qemu/module.h"
Paolo Bonzini7b1b5d12012-12-17 18:19:43 +010030#include "qapi/qmp/qjson.h"
Markus Armbrusterbfb197e2014-10-07 13:59:11 +020031#include "sysemu/block-backend.h"
Paolo Bonzini9c17d612012-12-17 18:20:04 +010032#include "sysemu/sysemu.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010033#include "qemu/notify.h"
Paolo Bonzini737e1502012-12-17 18:19:44 +010034#include "block/coroutine.h"
Benoît Canetc13163f2014-01-23 21:31:34 +010035#include "block/qapi.h"
Luiz Capitulinob2023812011-09-21 17:16:47 -030036#include "qmp-commands.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010037#include "qemu/timer.h"
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +020038#include "qapi-event.h"
bellardfc01f7e2003-06-30 10:03:06 +000039
Juan Quintela71e72a12009-07-27 16:12:56 +020040#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000041#include <sys/types.h>
42#include <sys/stat.h>
43#include <sys/ioctl.h>
Blue Swirl72cf2d42009-09-12 07:36:22 +000044#include <sys/queue.h>
blueswir1c5e97232009-03-07 20:06:23 +000045#ifndef __DragonFly__
bellard7674e7b2005-04-26 21:59:26 +000046#include <sys/disk.h>
47#endif
blueswir1c5e97232009-03-07 20:06:23 +000048#endif
bellard7674e7b2005-04-26 21:59:26 +000049
aliguori49dc7682009-03-08 16:26:59 +000050#ifdef _WIN32
51#include <windows.h>
52#endif
53
John Snow9bd2b082015-04-17 19:49:57 -040054/**
55 * A BdrvDirtyBitmap can be in three possible states:
56 * (1) successor is NULL and disabled is false: full r/w mode
57 * (2) successor is NULL and disabled is true: read only mode ("disabled")
58 * (3) successor is set: frozen mode.
59 * A frozen bitmap cannot be renamed, deleted, anonymized, cleared, set,
60 * or enabled. A frozen bitmap can only abdicate() or reclaim().
61 */
Fam Zhenge4654d22013-11-13 18:29:43 +080062struct BdrvDirtyBitmap {
John Snowaa0c7ca2015-04-17 19:50:01 -040063 HBitmap *bitmap; /* Dirty sector bitmap implementation */
64 BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
65 char *name; /* Optional non-empty unique ID */
66 int64_t size; /* Size of the bitmap (Number of sectors) */
67 bool disabled; /* Bitmap is read-only */
Fam Zhenge4654d22013-11-13 18:29:43 +080068 QLIST_ENTRY(BdrvDirtyBitmap) list;
69};
70
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010071#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
72
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +010073static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
74 QTAILQ_HEAD_INITIALIZER(bdrv_states);
blueswir17ee930d2008-09-17 19:04:14 +000075
Benoît Canetdc364f42014-01-23 21:31:32 +010076static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
77 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
78
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010079static QLIST_HEAD(, BlockDriver) bdrv_drivers =
80 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000081
Kevin Wolff3930ed2015-04-08 13:43:47 +020082static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
83 const char *reference, QDict *options, int flags,
84 BlockDriverState *parent,
85 const BdrvChildRole *child_role,
86 BlockDriver *drv, Error **errp);
87
John Snowce1ffea2015-04-17 19:50:03 -040088static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
Markus Armbrustereb852012009-10-27 18:41:44 +010089/* If non-zero, use only whitelisted block drivers */
90static int use_bdrv_whitelist;
91
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000092#ifdef _WIN32
93static int is_windows_drive_prefix(const char *filename)
94{
95 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
96 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
97 filename[1] == ':');
98}
99
100int is_windows_drive(const char *filename)
101{
102 if (is_windows_drive_prefix(filename) &&
103 filename[2] == '\0')
104 return 1;
105 if (strstart(filename, "\\\\.\\", NULL) ||
106 strstart(filename, "//./", NULL))
107 return 1;
108 return 0;
109}
110#endif
111
Kevin Wolf339064d2013-11-28 10:23:32 +0100112size_t bdrv_opt_mem_align(BlockDriverState *bs)
113{
114 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300115 /* page size or 4k (hdd sector size) should be on the safe side */
116 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100117 }
118
119 return bs->bl.opt_mem_alignment;
120}
121
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300122size_t bdrv_min_mem_align(BlockDriverState *bs)
123{
124 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300125 /* page size or 4k (hdd sector size) should be on the safe side */
126 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300127 }
128
129 return bs->bl.min_mem_alignment;
130}
131
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000132/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100133int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000134{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200135 const char *p;
136
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000137#ifdef _WIN32
138 if (is_windows_drive(path) ||
139 is_windows_drive_prefix(path)) {
140 return 0;
141 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200142 p = path + strcspn(path, ":/\\");
143#else
144 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000145#endif
146
Paolo Bonzini947995c2012-05-08 16:51:48 +0200147 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000148}
149
bellard83f64092006-08-01 16:21:11 +0000150int path_is_absolute(const char *path)
151{
bellard21664422007-01-07 18:22:37 +0000152#ifdef _WIN32
153 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200154 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000155 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200156 }
157 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000158#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200159 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000160#endif
bellard83f64092006-08-01 16:21:11 +0000161}
162
163/* if filename is absolute, just copy it to dest. Otherwise, build a
164 path to it by considering it is relative to base_path. URL are
165 supported. */
166void path_combine(char *dest, int dest_size,
167 const char *base_path,
168 const char *filename)
169{
170 const char *p, *p1;
171 int len;
172
173 if (dest_size <= 0)
174 return;
175 if (path_is_absolute(filename)) {
176 pstrcpy(dest, dest_size, filename);
177 } else {
178 p = strchr(base_path, ':');
179 if (p)
180 p++;
181 else
182 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000183 p1 = strrchr(base_path, '/');
184#ifdef _WIN32
185 {
186 const char *p2;
187 p2 = strrchr(base_path, '\\');
188 if (!p1 || p2 > p1)
189 p1 = p2;
190 }
191#endif
bellard83f64092006-08-01 16:21:11 +0000192 if (p1)
193 p1++;
194 else
195 p1 = base_path;
196 if (p1 > p)
197 p = p1;
198 len = p - base_path;
199 if (len > dest_size - 1)
200 len = dest_size - 1;
201 memcpy(dest, base_path, len);
202 dest[len] = '\0';
203 pstrcat(dest, dest_size, filename);
204 }
205}
206
Max Reitz0a828552014-11-26 17:20:25 +0100207void bdrv_get_full_backing_filename_from_filename(const char *backed,
208 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100209 char *dest, size_t sz,
210 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100211{
Max Reitz9f074292014-11-26 17:20:26 +0100212 if (backing[0] == '\0' || path_has_protocol(backing) ||
213 path_is_absolute(backing))
214 {
Max Reitz0a828552014-11-26 17:20:25 +0100215 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100216 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
217 error_setg(errp, "Cannot use relative backing file names for '%s'",
218 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100219 } else {
220 path_combine(dest, sz, backed, backing);
221 }
222}
223
Max Reitz9f074292014-11-26 17:20:26 +0100224void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
225 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200226{
Max Reitz9f074292014-11-26 17:20:26 +0100227 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
228
229 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
230 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200231}
232
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100233void bdrv_register(BlockDriver *bdrv)
234{
235 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200236
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100237 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000238}
bellardb3380822004-03-14 21:38:54 +0000239
Markus Armbruster7f06d472014-10-07 13:59:12 +0200240BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000241{
Markus Armbruster7f06d472014-10-07 13:59:12 +0200242 BlockDriverState *bs = bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200243
Markus Armbrustere4e99862014-10-07 13:59:03 +0200244 QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
Markus Armbrustere4e99862014-10-07 13:59:03 +0200245 return bs;
246}
247
248BlockDriverState *bdrv_new(void)
249{
250 BlockDriverState *bs;
251 int i;
252
Markus Armbruster5839e532014-08-19 10:31:08 +0200253 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800254 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800255 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
256 QLIST_INIT(&bs->op_blockers[i]);
257 }
Luiz Capitulino28a72822011-09-26 17:43:50 -0300258 bdrv_iostatus_disable(bs);
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200259 notifier_list_init(&bs->close_notifiers);
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200260 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200261 qemu_co_queue_init(&bs->throttled_reqs[0]);
262 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800263 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200264 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200265
bellardb3380822004-03-14 21:38:54 +0000266 return bs;
267}
268
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200269void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
270{
271 notifier_list_add(&bs->close_notifiers, notify);
272}
273
bellardea2384d2004-08-01 21:59:26 +0000274BlockDriver *bdrv_find_format(const char *format_name)
275{
276 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100277 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
278 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000279 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100280 }
bellardea2384d2004-08-01 21:59:26 +0000281 }
282 return NULL;
283}
284
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800285static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100286{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800287 static const char *whitelist_rw[] = {
288 CONFIG_BDRV_RW_WHITELIST
289 };
290 static const char *whitelist_ro[] = {
291 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100292 };
293 const char **p;
294
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800295 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100296 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800297 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100298
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800299 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100300 if (!strcmp(drv->format_name, *p)) {
301 return 1;
302 }
303 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800304 if (read_only) {
305 for (p = whitelist_ro; *p; p++) {
306 if (!strcmp(drv->format_name, *p)) {
307 return 1;
308 }
309 }
310 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100311 return 0;
312}
313
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800314BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
315 bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100316{
317 BlockDriver *drv = bdrv_find_format(format_name);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800318 return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
Markus Armbrustereb852012009-10-27 18:41:44 +0100319}
320
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800321typedef struct CreateCo {
322 BlockDriver *drv;
323 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800324 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800325 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200326 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800327} CreateCo;
328
329static void coroutine_fn bdrv_create_co_entry(void *opaque)
330{
Max Reitzcc84d902013-09-06 17:14:26 +0200331 Error *local_err = NULL;
332 int ret;
333
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800334 CreateCo *cco = opaque;
335 assert(cco->drv);
336
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800337 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100338 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200339 error_propagate(&cco->err, local_err);
340 }
341 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800342}
343
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200344int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800345 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000346{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800347 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200348
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800349 Coroutine *co;
350 CreateCo cco = {
351 .drv = drv,
352 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800353 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800354 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200355 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800356 };
357
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800358 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200359 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300360 ret = -ENOTSUP;
361 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800362 }
363
364 if (qemu_in_coroutine()) {
365 /* Fast-path if already in coroutine context */
366 bdrv_create_co_entry(&cco);
367 } else {
368 co = qemu_coroutine_create(bdrv_create_co_entry);
369 qemu_coroutine_enter(co, &cco);
370 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200371 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800372 }
373 }
374
375 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200376 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100377 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200378 error_propagate(errp, cco.err);
379 } else {
380 error_setg_errno(errp, -ret, "Could not create image");
381 }
382 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800383
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300384out:
385 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800386 return ret;
bellardea2384d2004-08-01 21:59:26 +0000387}
388
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800389int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200390{
391 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200392 Error *local_err = NULL;
393 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200394
Max Reitzb65a5e12015-02-05 13:58:12 -0500395 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200396 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000397 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200398 }
399
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800400 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100401 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200402 error_propagate(errp, local_err);
403 }
404 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200405}
406
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100407/**
408 * Try to get @bs's logical and physical block size.
409 * On success, store them in @bsz struct and return 0.
410 * On failure return -errno.
411 * @bs must not be empty.
412 */
413int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
414{
415 BlockDriver *drv = bs->drv;
416
417 if (drv && drv->bdrv_probe_blocksizes) {
418 return drv->bdrv_probe_blocksizes(bs, bsz);
419 }
420
421 return -ENOTSUP;
422}
423
424/**
425 * Try to get @bs's geometry (cyls, heads, sectors).
426 * On success, store them in @geo struct and return 0.
427 * On failure return -errno.
428 * @bs must not be empty.
429 */
430int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
431{
432 BlockDriver *drv = bs->drv;
433
434 if (drv && drv->bdrv_probe_geometry) {
435 return drv->bdrv_probe_geometry(bs, geo);
436 }
437
438 return -ENOTSUP;
439}
440
Jim Meyeringeba25052012-05-28 09:27:54 +0200441/*
442 * Create a uniquely-named empty temporary file.
443 * Return 0 upon success, otherwise a negative errno value.
444 */
445int get_tmp_filename(char *filename, int size)
446{
bellardd5249392004-08-03 21:14:23 +0000447#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000448 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200449 /* GetTempFileName requires that its output buffer (4th param)
450 have length MAX_PATH or greater. */
451 assert(size >= MAX_PATH);
452 return (GetTempPath(MAX_PATH, temp_dir)
453 && GetTempFileName(temp_dir, "qem", 0, filename)
454 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000455#else
bellardea2384d2004-08-01 21:59:26 +0000456 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000457 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000458 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530459 if (!tmpdir) {
460 tmpdir = "/var/tmp";
461 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200462 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
463 return -EOVERFLOW;
464 }
bellardea2384d2004-08-01 21:59:26 +0000465 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800466 if (fd < 0) {
467 return -errno;
468 }
469 if (close(fd) != 0) {
470 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200471 return -errno;
472 }
473 return 0;
bellardd5249392004-08-03 21:14:23 +0000474#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200475}
bellardea2384d2004-08-01 21:59:26 +0000476
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200477/*
478 * Detect host devices. By convention, /dev/cdrom[N] is always
479 * recognized as a host CDROM.
480 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200481static BlockDriver *find_hdev_driver(const char *filename)
482{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200483 int score_max = 0, score;
484 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200485
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100486 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200487 if (d->bdrv_probe_device) {
488 score = d->bdrv_probe_device(filename);
489 if (score > score_max) {
490 score_max = score;
491 drv = d;
492 }
493 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200494 }
495
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200496 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200497}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200498
Kevin Wolf98289622013-07-10 15:47:39 +0200499BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500500 bool allow_protocol_prefix,
501 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200502{
503 BlockDriver *drv1;
504 char protocol[128];
505 int len;
506 const char *p;
507
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200508 /* TODO Drivers without bdrv_file_open must be specified explicitly */
509
Christoph Hellwig39508e72010-06-23 12:25:17 +0200510 /*
511 * XXX(hch): we really should not let host device detection
512 * override an explicit protocol specification, but moving this
513 * later breaks access to device names with colons in them.
514 * Thanks to the brain-dead persistent naming schemes on udev-
515 * based Linux systems those actually are quite common.
516 */
517 drv1 = find_hdev_driver(filename);
518 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200519 return drv1;
520 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200521
Kevin Wolf98289622013-07-10 15:47:39 +0200522 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100523 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200524 }
Kevin Wolf98289622013-07-10 15:47:39 +0200525
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000526 p = strchr(filename, ':');
527 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200528 len = p - filename;
529 if (len > sizeof(protocol) - 1)
530 len = sizeof(protocol) - 1;
531 memcpy(protocol, filename, len);
532 protocol[len] = '\0';
533 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
534 if (drv1->protocol_name &&
535 !strcmp(drv1->protocol_name, protocol)) {
536 return drv1;
537 }
538 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500539
540 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200541 return NULL;
542}
543
Markus Armbrusterc6684242014-11-20 16:27:10 +0100544/*
545 * Guess image format by probing its contents.
546 * This is not a good idea when your image is raw (CVE-2008-2004), but
547 * we do it anyway for backward compatibility.
548 *
549 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100550 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
551 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100552 * @filename is its filename.
553 *
554 * For all block drivers, call the bdrv_probe() method to get its
555 * probing score.
556 * Return the first block driver with the highest probing score.
557 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100558BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
559 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100560{
561 int score_max = 0, score;
562 BlockDriver *drv = NULL, *d;
563
564 QLIST_FOREACH(d, &bdrv_drivers, list) {
565 if (d->bdrv_probe) {
566 score = d->bdrv_probe(buf, buf_size, filename);
567 if (score > score_max) {
568 score_max = score;
569 drv = d;
570 }
571 }
572 }
573
574 return drv;
575}
576
Kevin Wolff500a6d2012-11-12 17:35:27 +0100577static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200578 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000579{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100580 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100581 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100582 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700583
Kevin Wolf08a00552010-06-01 18:37:31 +0200584 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Paolo Bonzini8e895592013-01-10 15:39:27 +0100585 if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100586 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200587 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700588 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700589
bellard83f64092006-08-01 16:21:11 +0000590 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000591 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200592 error_setg_errno(errp, -ret, "Could not read image for determining its "
593 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200594 *pdrv = NULL;
595 return ret;
bellard83f64092006-08-01 16:21:11 +0000596 }
597
Markus Armbrusterc6684242014-11-20 16:27:10 +0100598 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200599 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200600 error_setg(errp, "Could not determine image format: No compatible "
601 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200602 ret = -ENOENT;
603 }
604 *pdrv = drv;
605 return ret;
bellardea2384d2004-08-01 21:59:26 +0000606}
607
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100608/**
609 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200610 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100611 */
612static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
613{
614 BlockDriver *drv = bs->drv;
615
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700616 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
617 if (bs->sg)
618 return 0;
619
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100620 /* query actual device if possible, otherwise just trust the hint */
621 if (drv->bdrv_getlength) {
622 int64_t length = drv->bdrv_getlength(bs);
623 if (length < 0) {
624 return length;
625 }
Fam Zheng7e382002013-11-06 19:48:06 +0800626 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100627 }
628
629 bs->total_sectors = hint;
630 return 0;
631}
632
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100633/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100634 * Set open flags for a given discard mode
635 *
636 * Return 0 on success, -1 if the discard mode was invalid.
637 */
638int bdrv_parse_discard_flags(const char *mode, int *flags)
639{
640 *flags &= ~BDRV_O_UNMAP;
641
642 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
643 /* do nothing */
644 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
645 *flags |= BDRV_O_UNMAP;
646 } else {
647 return -1;
648 }
649
650 return 0;
651}
652
653/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100654 * Set open flags for a given cache mode
655 *
656 * Return 0 on success, -1 if the cache mode was invalid.
657 */
658int bdrv_parse_cache_flags(const char *mode, int *flags)
659{
660 *flags &= ~BDRV_O_CACHE_MASK;
661
662 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
663 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100664 } else if (!strcmp(mode, "directsync")) {
665 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100666 } else if (!strcmp(mode, "writeback")) {
667 *flags |= BDRV_O_CACHE_WB;
668 } else if (!strcmp(mode, "unsafe")) {
669 *flags |= BDRV_O_CACHE_WB;
670 *flags |= BDRV_O_NO_FLUSH;
671 } else if (!strcmp(mode, "writethrough")) {
672 /* this is the default */
673 } else {
674 return -1;
675 }
676
677 return 0;
678}
679
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200680/*
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200681 * Returns the flags that a temporary snapshot should get, based on the
682 * originally requested flags (the originally requested image will have flags
683 * like a backing file)
684 */
685static int bdrv_temp_snapshot_flags(int flags)
686{
687 return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
688}
689
690/*
Kevin Wolff3930ed2015-04-08 13:43:47 +0200691 * Returns the flags that bs->file should get if a protocol driver is expected,
692 * based on the given flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200693 */
694static int bdrv_inherited_flags(int flags)
695{
696 /* Enable protocol handling, disable format probing for bs->file */
697 flags |= BDRV_O_PROTOCOL;
698
699 /* Our block drivers take care to send flushes and respect unmap policy,
700 * so we can enable both unconditionally on lower layers. */
701 flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
702
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200703 /* Clear flags that only apply to the top layer */
Kevin Wolf5669b442014-04-11 21:36:45 +0200704 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200705
706 return flags;
707}
708
Kevin Wolff3930ed2015-04-08 13:43:47 +0200709const BdrvChildRole child_file = {
710 .inherit_flags = bdrv_inherited_flags,
711};
712
713/*
714 * Returns the flags that bs->file should get if the use of formats (and not
715 * only protocols) is permitted for it, based on the given flags for the parent
716 * BDS
717 */
718static int bdrv_inherited_fmt_flags(int parent_flags)
719{
720 int flags = child_file.inherit_flags(parent_flags);
721 return flags & ~BDRV_O_PROTOCOL;
722}
723
724const BdrvChildRole child_format = {
725 .inherit_flags = bdrv_inherited_fmt_flags,
726};
727
Kevin Wolf317fc442014-04-25 13:27:34 +0200728/*
729 * Returns the flags that bs->backing_hd should get, based on the given flags
730 * for the parent BDS
731 */
732static int bdrv_backing_flags(int flags)
733{
734 /* backing files always opened read-only */
735 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
736
737 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200738 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200739
740 return flags;
741}
742
Kevin Wolff3930ed2015-04-08 13:43:47 +0200743static const BdrvChildRole child_backing = {
744 .inherit_flags = bdrv_backing_flags,
745};
746
Kevin Wolf7b272452012-11-12 17:05:39 +0100747static int bdrv_open_flags(BlockDriverState *bs, int flags)
748{
749 int open_flags = flags | BDRV_O_CACHE_WB;
750
751 /*
752 * Clear flags that are internal to the block layer before opening the
753 * image.
754 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200755 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100756
757 /*
758 * Snapshots should be writable.
759 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200760 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100761 open_flags |= BDRV_O_RDWR;
762 }
763
764 return open_flags;
765}
766
Kevin Wolf636ea372014-01-24 14:11:52 +0100767static void bdrv_assign_node_name(BlockDriverState *bs,
768 const char *node_name,
769 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100770{
771 if (!node_name) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100772 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100773 }
774
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200775 /* Check for empty string or invalid characters */
Markus Armbrusterf5bebbb2014-09-30 13:59:30 +0200776 if (!id_wellformed(node_name)) {
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200777 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100778 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100779 }
780
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100781 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200782 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100783 error_setg(errp, "node-name=%s is conflicting with a device id",
784 node_name);
Kevin Wolf636ea372014-01-24 14:11:52 +0100785 return;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100786 }
787
Benoît Canet6913c0c2014-01-23 21:31:33 +0100788 /* takes care of avoiding duplicates node names */
789 if (bdrv_find_node(node_name)) {
790 error_setg(errp, "Duplicate node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100791 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100792 }
793
794 /* copy node name into the bs and insert it into the graph list */
795 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
796 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100797}
798
Kevin Wolf18edf282015-04-07 17:12:56 +0200799static QemuOptsList bdrv_runtime_opts = {
800 .name = "bdrv_common",
801 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
802 .desc = {
803 {
804 .name = "node-name",
805 .type = QEMU_OPT_STRING,
806 .help = "Node name of the block device node",
807 },
808 { /* end of list */ }
809 },
810};
811
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200812/*
Kevin Wolf57915332010-04-14 15:24:50 +0200813 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100814 *
815 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200816 */
Kevin Wolff500a6d2012-11-12 17:35:27 +0100817static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200818 QDict *options, int flags, BlockDriver *drv, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200819{
820 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200821 const char *filename;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100822 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200823 QemuOpts *opts;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200824 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200825
826 assert(drv != NULL);
Paolo Bonzini64058752012-05-08 16:51:49 +0200827 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100828 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200829
Kevin Wolf45673672013-04-22 17:48:40 +0200830 if (file != NULL) {
831 filename = file->filename;
832 } else {
833 filename = qdict_get_try_str(options, "filename");
834 }
835
Kevin Wolf765003d2014-02-03 14:49:42 +0100836 if (drv->bdrv_needs_filename && !filename) {
837 error_setg(errp, "The '%s' block driver requires a file name",
838 drv->format_name);
839 return -EINVAL;
840 }
841
Kevin Wolf45673672013-04-22 17:48:40 +0200842 trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
Stefan Hajnoczi28dcee12011-09-22 20:14:12 +0100843
Kevin Wolf18edf282015-04-07 17:12:56 +0200844 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
845 qemu_opts_absorb_qdict(opts, options, &local_err);
846 if (local_err) {
847 error_propagate(errp, local_err);
848 ret = -EINVAL;
849 goto fail_opts;
850 }
851
852 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100853 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200854 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100855 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200856 ret = -EINVAL;
857 goto fail_opts;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100858 }
Benoît Canet6913c0c2014-01-23 21:31:33 +0100859
Paolo Bonzini1b7fd722011-11-29 11:35:47 +0100860 bs->guest_block_size = 512;
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100861 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800862 bs->zero_beyond_eof = true;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800863 open_flags = bdrv_open_flags(bs, flags);
864 bs->read_only = !(open_flags & BDRV_O_RDWR);
865
866 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200867 error_setg(errp,
868 !bs->read_only && bdrv_is_whitelisted(drv, true)
869 ? "Driver '%s' can only be used for read-only devices"
870 : "Driver '%s' is not whitelisted",
871 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200872 ret = -ENOTSUP;
873 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800874 }
Kevin Wolf57915332010-04-14 15:24:50 +0200875
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000876 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200877 if (flags & BDRV_O_COPY_ON_READ) {
878 if (!bs->read_only) {
879 bdrv_enable_copy_on_read(bs);
880 } else {
881 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200882 ret = -EINVAL;
883 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200884 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000885 }
886
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100887 if (filename != NULL) {
888 pstrcpy(bs->filename, sizeof(bs->filename), filename);
889 } else {
890 bs->filename[0] = '\0';
891 }
Max Reitz91af7012014-07-18 20:24:56 +0200892 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200893
Kevin Wolf57915332010-04-14 15:24:50 +0200894 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500895 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200896
Stefan Hajnoczi03f541b2011-10-27 10:54:28 +0100897 bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100898
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200899 /* Open the image, either directly or using a protocol */
900 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100901 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200902 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200903 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100904 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200905 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200906 error_setg(errp, "Can't use '%s' as a block driver for the "
907 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200908 ret = -EINVAL;
909 goto free_and_fail;
910 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100911 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200912 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200913 }
914
Kevin Wolf57915332010-04-14 15:24:50 +0200915 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100916 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200917 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800918 } else if (bs->filename[0]) {
919 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200920 } else {
921 error_setg_errno(errp, -ret, "Could not open image");
922 }
Kevin Wolf57915332010-04-14 15:24:50 +0200923 goto free_and_fail;
924 }
925
Markus Armbrustera1f688f2015-03-13 21:09:40 +0100926 if (bs->encrypted) {
927 error_report("Encrypted images are deprecated");
928 error_printf("Support for them will be removed in a future release.\n"
929 "You can use 'qemu-img convert' to convert your image"
930 " to an unencrypted one.\n");
931 }
932
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100933 ret = refresh_total_sectors(bs, bs->total_sectors);
934 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200935 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100936 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +0200937 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100938
Kevin Wolf3baca892014-07-16 17:48:16 +0200939 bdrv_refresh_limits(bs, &local_err);
940 if (local_err) {
941 error_propagate(errp, local_err);
942 ret = -EINVAL;
943 goto free_and_fail;
944 }
945
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100946 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300947 assert(bdrv_min_mem_align(bs) != 0);
Kevin Wolf47ea2de2014-03-05 15:49:55 +0100948 assert((bs->request_alignment != 0) || bs->sg);
Kevin Wolf18edf282015-04-07 17:12:56 +0200949
950 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200951 return 0;
952
953free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +0100954 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -0500955 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +0200956 bs->opaque = NULL;
957 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200958fail_opts:
959 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200960 return ret;
961}
962
Kevin Wolf5e5c4f62014-05-26 11:45:08 +0200963static QDict *parse_json_filename(const char *filename, Error **errp)
964{
965 QObject *options_obj;
966 QDict *options;
967 int ret;
968
969 ret = strstart(filename, "json:", &filename);
970 assert(ret);
971
972 options_obj = qobject_from_json(filename);
973 if (!options_obj) {
974 error_setg(errp, "Could not parse the JSON options");
975 return NULL;
976 }
977
978 if (qobject_type(options_obj) != QTYPE_QDICT) {
979 qobject_decref(options_obj);
980 error_setg(errp, "Invalid JSON object given");
981 return NULL;
982 }
983
984 options = qobject_to_qdict(options_obj);
985 qdict_flatten(options);
986
987 return options;
988}
989
Kevin Wolf57915332010-04-14 15:24:50 +0200990/*
Kevin Wolff54120f2014-05-26 11:09:59 +0200991 * Fills in default options for opening images and converts the legacy
992 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -0400993 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
994 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +0200995 */
Max Reitz53a29512015-03-19 14:53:16 -0400996static int bdrv_fill_options(QDict **options, const char **pfilename,
997 int *flags, BlockDriver *drv, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +0200998{
Kevin Wolf5e5c4f62014-05-26 11:45:08 +0200999 const char *filename = *pfilename;
Kevin Wolff54120f2014-05-26 11:09:59 +02001000 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001001 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001002 bool parse_filename = false;
Max Reitz53a29512015-03-19 14:53:16 -04001003 BlockDriver *tmp_drv;
Kevin Wolff54120f2014-05-26 11:09:59 +02001004 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001005
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001006 /* Parse json: pseudo-protocol */
1007 if (filename && g_str_has_prefix(filename, "json:")) {
1008 QDict *json_options = parse_json_filename(filename, &local_err);
1009 if (local_err) {
1010 error_propagate(errp, local_err);
1011 return -EINVAL;
1012 }
1013
1014 /* Options given in the filename have lower priority than options
1015 * specified directly */
1016 qdict_join(*options, json_options, false);
1017 QDECREF(json_options);
1018 *pfilename = filename = NULL;
1019 }
1020
Max Reitz53a29512015-03-19 14:53:16 -04001021 drvname = qdict_get_try_str(*options, "driver");
1022
1023 /* If the user has explicitly specified the driver, this choice should
1024 * override the BDRV_O_PROTOCOL flag */
1025 tmp_drv = drv;
1026 if (!tmp_drv && drvname) {
1027 tmp_drv = bdrv_find_format(drvname);
1028 }
1029 if (tmp_drv) {
1030 protocol = tmp_drv->bdrv_file_open;
1031 }
1032
1033 if (protocol) {
1034 *flags |= BDRV_O_PROTOCOL;
1035 } else {
1036 *flags &= ~BDRV_O_PROTOCOL;
1037 }
1038
Kevin Wolff54120f2014-05-26 11:09:59 +02001039 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001040 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001041 if (!qdict_haskey(*options, "filename")) {
1042 qdict_put(*options, "filename", qstring_from_str(filename));
1043 parse_filename = true;
1044 } else {
1045 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1046 "the same time");
1047 return -EINVAL;
1048 }
1049 }
1050
1051 /* Find the right block driver */
1052 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001053
Kevin Wolf17b005f2014-05-27 10:50:29 +02001054 if (drv) {
1055 if (drvname) {
1056 error_setg(errp, "Driver specified twice");
1057 return -EINVAL;
1058 }
1059 drvname = drv->format_name;
1060 qdict_put(*options, "driver", qstring_from_str(drvname));
1061 } else {
1062 if (!drvname && protocol) {
1063 if (filename) {
Max Reitzb65a5e12015-02-05 13:58:12 -05001064 drv = bdrv_find_protocol(filename, parse_filename, errp);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001065 if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001066 return -EINVAL;
1067 }
1068
1069 drvname = drv->format_name;
1070 qdict_put(*options, "driver", qstring_from_str(drvname));
1071 } else {
1072 error_setg(errp, "Must specify either driver or file");
Kevin Wolff54120f2014-05-26 11:09:59 +02001073 return -EINVAL;
1074 }
Kevin Wolf17b005f2014-05-27 10:50:29 +02001075 } else if (drvname) {
1076 drv = bdrv_find_format(drvname);
1077 if (!drv) {
1078 error_setg(errp, "Unknown driver '%s'", drvname);
1079 return -ENOENT;
1080 }
Kevin Wolff54120f2014-05-26 11:09:59 +02001081 }
1082 }
1083
Kevin Wolf17b005f2014-05-27 10:50:29 +02001084 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001085
1086 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001087 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001088 drv->bdrv_parse_filename(filename, *options, &local_err);
1089 if (local_err) {
1090 error_propagate(errp, local_err);
1091 return -EINVAL;
1092 }
1093
1094 if (!drv->bdrv_needs_filename) {
1095 qdict_del(*options, "filename");
1096 }
1097 }
1098
1099 return 0;
1100}
1101
Fam Zheng8d24cce2014-05-23 21:29:45 +08001102void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1103{
1104
Fam Zheng826b6ca2014-05-23 21:29:47 +08001105 if (bs->backing_hd) {
1106 assert(bs->backing_blocker);
1107 bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
1108 } else if (backing_hd) {
1109 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001110 "node is used as backing hd of '%s'",
1111 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001112 }
1113
Fam Zheng8d24cce2014-05-23 21:29:45 +08001114 bs->backing_hd = backing_hd;
1115 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001116 error_free(bs->backing_blocker);
1117 bs->backing_blocker = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001118 goto out;
1119 }
1120 bs->open_flags &= ~BDRV_O_NO_BACKING;
1121 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1122 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1123 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001124
1125 bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1126 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Fam Zhengbb000212014-09-11 13:14:00 +08001127 bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001128 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001129out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001130 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001131}
1132
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001133/*
1134 * Opens the backing file for a BlockDriverState if not yet open
1135 *
1136 * options is a QDict of options to pass to the block drivers, or NULL for an
1137 * empty set of options. The reference to the QDict is transferred to this
1138 * function (even on failure), so if the caller intends to reuse the dictionary,
1139 * it needs to use QINCREF() before calling bdrv_file_open.
1140 */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001141int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001142{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001143 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolf317fc442014-04-25 13:27:34 +02001144 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001145 BlockDriverState *backing_hd;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001146 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001147
1148 if (bs->backing_hd != NULL) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001149 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001150 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001151 }
1152
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001153 /* NULL means an empty set of options */
1154 if (options == NULL) {
1155 options = qdict_new();
1156 }
1157
Paolo Bonzini9156df12012-10-18 16:49:17 +02001158 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001159 if (qdict_haskey(options, "file.filename")) {
1160 backing_filename[0] = '\0';
1161 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001162 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001163 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001164 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001165 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1166 &local_err);
1167 if (local_err) {
1168 ret = -EINVAL;
1169 error_propagate(errp, local_err);
1170 QDECREF(options);
1171 goto free_exit;
1172 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001173 }
1174
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001175 if (!bs->drv || !bs->drv->supports_backing) {
1176 ret = -EINVAL;
1177 error_setg(errp, "Driver doesn't support backing files");
1178 QDECREF(options);
1179 goto free_exit;
1180 }
1181
Markus Armbrustere4e99862014-10-07 13:59:03 +02001182 backing_hd = bdrv_new();
Fam Zheng8d24cce2014-05-23 21:29:45 +08001183
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001184 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1185 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001186 }
1187
Max Reitzf67503e2014-02-18 18:33:05 +01001188 assert(bs->backing_hd == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001189 ret = bdrv_open_inherit(&backing_hd,
1190 *backing_filename ? backing_filename : NULL,
1191 NULL, options, 0, bs, &child_backing,
1192 NULL, &local_err);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001193 if (ret < 0) {
Fam Zheng8d24cce2014-05-23 21:29:45 +08001194 bdrv_unref(backing_hd);
1195 backing_hd = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001196 bs->open_flags |= BDRV_O_NO_BACKING;
Fam Zhengb04b6b62013-11-08 11:26:49 +08001197 error_setg(errp, "Could not open backing file: %s",
1198 error_get_pretty(local_err));
1199 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001200 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001201 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001202 bdrv_set_backing_hd(bs, backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001203
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001204free_exit:
1205 g_free(backing_filename);
1206 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001207}
1208
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001209/*
Max Reitzda557aa2013-12-20 19:28:11 +01001210 * Opens a disk image whose options are given as BlockdevRef in another block
1211 * device's options.
1212 *
Max Reitzda557aa2013-12-20 19:28:11 +01001213 * If allow_none is true, no image will be opened if filename is false and no
1214 * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1215 *
1216 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1217 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1218 * itself, all options starting with "${bdref_key}." are considered part of the
1219 * BlockdevRef.
1220 *
1221 * The BlockdevRef will be removed from the options QDict.
Max Reitzf67503e2014-02-18 18:33:05 +01001222 *
1223 * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
Max Reitzda557aa2013-12-20 19:28:11 +01001224 */
1225int bdrv_open_image(BlockDriverState **pbs, const char *filename,
Kevin Wolff3930ed2015-04-08 13:43:47 +02001226 QDict *options, const char *bdref_key,
1227 BlockDriverState* parent, const BdrvChildRole *child_role,
Max Reitzf7d9fd82014-02-18 18:33:12 +01001228 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001229{
1230 QDict *image_options;
1231 int ret;
1232 char *bdref_key_dot;
1233 const char *reference;
1234
Max Reitzf67503e2014-02-18 18:33:05 +01001235 assert(pbs);
1236 assert(*pbs == NULL);
1237
Max Reitzda557aa2013-12-20 19:28:11 +01001238 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1239 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1240 g_free(bdref_key_dot);
1241
1242 reference = qdict_get_try_str(options, bdref_key);
1243 if (!filename && !reference && !qdict_size(image_options)) {
1244 if (allow_none) {
1245 ret = 0;
1246 } else {
1247 error_setg(errp, "A block device must be specified for \"%s\"",
1248 bdref_key);
1249 ret = -EINVAL;
1250 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001251 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001252 goto done;
1253 }
1254
Kevin Wolff3930ed2015-04-08 13:43:47 +02001255 ret = bdrv_open_inherit(pbs, filename, reference, image_options, 0,
1256 parent, child_role, NULL, errp);
Max Reitzda557aa2013-12-20 19:28:11 +01001257
1258done:
1259 qdict_del(options, bdref_key);
1260 return ret;
1261}
1262
Chen Gang6b8aeca2014-06-23 23:28:23 +08001263int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001264{
1265 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001266 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001267 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001268 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001269 QDict *snapshot_options;
1270 BlockDriverState *bs_snapshot;
1271 Error *local_err;
1272 int ret;
1273
1274 /* if snapshot, we create a temporary backing file and open it
1275 instead of opening 'filename' directly */
1276
1277 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001278 total_size = bdrv_getlength(bs);
1279 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001280 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001281 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001282 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001283 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001284
1285 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001286 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001287 if (ret < 0) {
1288 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001289 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001290 }
1291
Max Reitzef810432014-12-02 18:32:42 +01001292 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001293 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001294 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Max Reitzef810432014-12-02 18:32:42 +01001295 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08001296 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001297 if (ret < 0) {
1298 error_setg_errno(errp, -ret, "Could not create temporary overlay "
1299 "'%s': %s", tmp_filename,
1300 error_get_pretty(local_err));
1301 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001302 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001303 }
1304
1305 /* Prepare a new options QDict for the temporary file */
1306 snapshot_options = qdict_new();
1307 qdict_put(snapshot_options, "file.driver",
1308 qstring_from_str("file"));
1309 qdict_put(snapshot_options, "file.filename",
1310 qstring_from_str(tmp_filename));
1311
Markus Armbrustere4e99862014-10-07 13:59:03 +02001312 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001313
1314 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitzef810432014-12-02 18:32:42 +01001315 flags, &bdrv_qcow2, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001316 if (ret < 0) {
1317 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001318 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001319 }
1320
1321 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001322
1323out:
1324 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001325 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001326}
1327
Max Reitzda557aa2013-12-20 19:28:11 +01001328/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001329 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001330 *
1331 * options is a QDict of options to pass to the block drivers, or NULL for an
1332 * empty set of options. The reference to the QDict belongs to the block layer
1333 * after the call (even on failure), so if the caller intends to reuse the
1334 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001335 *
1336 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1337 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001338 *
1339 * The reference parameter may be used to specify an existing block device which
1340 * should be opened. If specified, neither options nor a filename may be given,
1341 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001342 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001343static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1344 const char *reference, QDict *options, int flags,
1345 BlockDriverState *parent,
1346 const BdrvChildRole *child_role,
1347 BlockDriver *drv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001348{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001349 int ret;
Max Reitzf67503e2014-02-18 18:33:05 +01001350 BlockDriverState *file = NULL, *bs;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001351 const char *drvname;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001352 Error *local_err = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001353 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001354
Max Reitzf67503e2014-02-18 18:33:05 +01001355 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001356 assert(!child_role || !flags);
1357 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001358
Max Reitzddf56362014-02-18 18:33:06 +01001359 if (reference) {
1360 bool options_non_empty = options ? qdict_size(options) : false;
1361 QDECREF(options);
1362
1363 if (*pbs) {
1364 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1365 "another block device");
1366 return -EINVAL;
1367 }
1368
1369 if (filename || options_non_empty) {
1370 error_setg(errp, "Cannot reference an existing block device with "
1371 "additional options or a new filename");
1372 return -EINVAL;
1373 }
1374
1375 bs = bdrv_lookup_bs(reference, reference, errp);
1376 if (!bs) {
1377 return -ENODEV;
1378 }
1379 bdrv_ref(bs);
1380 *pbs = bs;
1381 return 0;
1382 }
1383
Max Reitzf67503e2014-02-18 18:33:05 +01001384 if (*pbs) {
1385 bs = *pbs;
1386 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001387 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001388 }
1389
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001390 /* NULL means an empty set of options */
1391 if (options == NULL) {
1392 options = qdict_new();
1393 }
1394
Kevin Wolff3930ed2015-04-08 13:43:47 +02001395 if (child_role) {
1396 flags = child_role->inherit_flags(parent->open_flags);
1397 }
1398
Max Reitz53a29512015-03-19 14:53:16 -04001399 ret = bdrv_fill_options(&options, &filename, &flags, drv, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001400 if (local_err) {
1401 goto fail;
1402 }
1403
Kevin Wolf76c591b2014-06-04 14:19:44 +02001404 /* Find the right image format driver */
1405 drv = NULL;
1406 drvname = qdict_get_try_str(options, "driver");
1407 if (drvname) {
1408 drv = bdrv_find_format(drvname);
1409 qdict_del(options, "driver");
1410 if (!drv) {
1411 error_setg(errp, "Unknown driver: '%s'", drvname);
1412 ret = -EINVAL;
1413 goto fail;
1414 }
1415 }
1416
1417 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001418
Kevin Wolff3930ed2015-04-08 13:43:47 +02001419 bs->open_flags = flags;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001420 bs->options = options;
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001421 options = qdict_clone_shallow(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001422
Kevin Wolff4788ad2014-06-03 16:44:19 +02001423 /* Open image file without format layer */
1424 if ((flags & BDRV_O_PROTOCOL) == 0) {
1425 if (flags & BDRV_O_RDWR) {
1426 flags |= BDRV_O_ALLOW_RDWR;
1427 }
1428 if (flags & BDRV_O_SNAPSHOT) {
1429 snapshot_flags = bdrv_temp_snapshot_flags(flags);
1430 flags = bdrv_backing_flags(flags);
1431 }
1432
1433 assert(file == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001434 bs->open_flags = flags;
Kevin Wolff4788ad2014-06-03 16:44:19 +02001435 ret = bdrv_open_image(&file, filename, options, "file",
Kevin Wolff3930ed2015-04-08 13:43:47 +02001436 bs, &child_file, true, &local_err);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001437 if (ret < 0) {
Max Reitz5469a2a2014-02-18 18:33:10 +01001438 goto fail;
1439 }
1440 }
1441
Kevin Wolf76c591b2014-06-04 14:19:44 +02001442 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001443 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001444 if (!drv && file) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001445 ret = find_image_format(file, filename, &drv, &local_err);
1446 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001447 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001448 }
Kevin Wolf76c591b2014-06-04 14:19:44 +02001449 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001450 error_setg(errp, "Must specify either driver or file");
1451 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001452 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001453 }
1454
Max Reitz53a29512015-03-19 14:53:16 -04001455 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1456 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1457 /* file must be NULL if a protocol BDS is about to be created
1458 * (the inverse results in an error message from bdrv_open_common()) */
1459 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1460
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001461 /* Open the image */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001462 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001463 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001464 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001465 }
1466
Max Reitz2a05cbe2013-12-20 19:28:10 +01001467 if (file && (bs->file != file)) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001468 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001469 file = NULL;
1470 }
1471
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001472 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001473 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001474 QDict *backing_options;
1475
Benoît Canet5726d872013-09-25 13:30:01 +02001476 qdict_extract_subqdict(options, &backing_options, "backing.");
Max Reitz34b5d2c2013-09-05 14:45:29 +02001477 ret = bdrv_open_backing_file(bs, backing_options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001478 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001479 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001480 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001481 }
1482
Max Reitz91af7012014-07-18 20:24:56 +02001483 bdrv_refresh_filename(bs);
1484
Kevin Wolfb9988752014-04-03 12:09:34 +02001485 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1486 * temporary snapshot afterwards. */
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001487 if (snapshot_flags) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001488 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001489 if (local_err) {
Kevin Wolfb9988752014-04-03 12:09:34 +02001490 goto close_and_fail;
1491 }
1492 }
1493
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001494 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001495 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001496 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001497 if (flags & BDRV_O_PROTOCOL) {
1498 error_setg(errp, "Block protocol '%s' doesn't support the option "
1499 "'%s'", drv->format_name, entry->key);
1500 } else {
1501 error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1502 "support the option '%s'", drv->format_name,
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001503 bdrv_get_device_name(bs), entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001504 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001505
1506 ret = -EINVAL;
1507 goto close_and_fail;
1508 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001509
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001510 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001511 if (bs->blk) {
1512 blk_dev_change_media_cb(bs->blk, true);
1513 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001514 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1515 && !runstate_check(RUN_STATE_INMIGRATE)
1516 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1517 error_setg(errp,
1518 "Guest must be stopped for opening of encrypted image");
1519 ret = -EBUSY;
1520 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001521 }
1522
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001523 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001524 *pbs = bs;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001525 return 0;
1526
Kevin Wolf8bfea152014-04-11 19:16:36 +02001527fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001528 if (file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001529 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001530 }
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001531 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001532 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001533 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001534 if (!*pbs) {
1535 /* If *pbs is NULL, a new BDS has been created in this function and
1536 needs to be freed now. Otherwise, it does not need to be closed,
1537 since it has not really been opened yet. */
1538 bdrv_unref(bs);
1539 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001540 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001541 error_propagate(errp, local_err);
1542 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001543 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001544
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001545close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001546 /* See fail path, but now the BDS has to be always closed */
1547 if (*pbs) {
1548 bdrv_close(bs);
1549 } else {
1550 bdrv_unref(bs);
1551 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001552 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001553 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001554 error_propagate(errp, local_err);
1555 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001556 return ret;
1557}
1558
Kevin Wolff3930ed2015-04-08 13:43:47 +02001559int bdrv_open(BlockDriverState **pbs, const char *filename,
1560 const char *reference, QDict *options, int flags,
1561 BlockDriver *drv, Error **errp)
1562{
1563 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
1564 NULL, drv, errp);
1565}
1566
Jeff Codye971aa12012-09-20 15:13:19 -04001567typedef struct BlockReopenQueueEntry {
1568 bool prepared;
1569 BDRVReopenState state;
1570 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1571} BlockReopenQueueEntry;
1572
1573/*
1574 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1575 * reopen of multiple devices.
1576 *
1577 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1578 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1579 * be created and initialized. This newly created BlockReopenQueue should be
1580 * passed back in for subsequent calls that are intended to be of the same
1581 * atomic 'set'.
1582 *
1583 * bs is the BlockDriverState to add to the reopen queue.
1584 *
1585 * flags contains the open flags for the associated bs
1586 *
1587 * returns a pointer to bs_queue, which is either the newly allocated
1588 * bs_queue, or the existing bs_queue being used.
1589 *
1590 */
1591BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1592 BlockDriverState *bs, int flags)
1593{
1594 assert(bs != NULL);
1595
1596 BlockReopenQueueEntry *bs_entry;
1597 if (bs_queue == NULL) {
1598 bs_queue = g_new0(BlockReopenQueue, 1);
1599 QSIMPLEQ_INIT(bs_queue);
1600 }
1601
Kevin Wolff1f25a22014-04-25 19:04:55 +02001602 /* bdrv_open() masks this flag out */
1603 flags &= ~BDRV_O_PROTOCOL;
1604
Jeff Codye971aa12012-09-20 15:13:19 -04001605 if (bs->file) {
Kevin Wolff1f25a22014-04-25 19:04:55 +02001606 bdrv_reopen_queue(bs_queue, bs->file, bdrv_inherited_flags(flags));
Jeff Codye971aa12012-09-20 15:13:19 -04001607 }
1608
1609 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1610 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1611
1612 bs_entry->state.bs = bs;
1613 bs_entry->state.flags = flags;
1614
1615 return bs_queue;
1616}
1617
1618/*
1619 * Reopen multiple BlockDriverStates atomically & transactionally.
1620 *
1621 * The queue passed in (bs_queue) must have been built up previous
1622 * via bdrv_reopen_queue().
1623 *
1624 * Reopens all BDS specified in the queue, with the appropriate
1625 * flags. All devices are prepared for reopen, and failure of any
1626 * device will cause all device changes to be abandonded, and intermediate
1627 * data cleaned up.
1628 *
1629 * If all devices prepare successfully, then the changes are committed
1630 * to all devices.
1631 *
1632 */
1633int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1634{
1635 int ret = -1;
1636 BlockReopenQueueEntry *bs_entry, *next;
1637 Error *local_err = NULL;
1638
1639 assert(bs_queue != NULL);
1640
1641 bdrv_drain_all();
1642
1643 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1644 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1645 error_propagate(errp, local_err);
1646 goto cleanup;
1647 }
1648 bs_entry->prepared = true;
1649 }
1650
1651 /* If we reach this point, we have success and just need to apply the
1652 * changes
1653 */
1654 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1655 bdrv_reopen_commit(&bs_entry->state);
1656 }
1657
1658 ret = 0;
1659
1660cleanup:
1661 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1662 if (ret && bs_entry->prepared) {
1663 bdrv_reopen_abort(&bs_entry->state);
1664 }
1665 g_free(bs_entry);
1666 }
1667 g_free(bs_queue);
1668 return ret;
1669}
1670
1671
1672/* Reopen a single BlockDriverState with the specified flags. */
1673int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1674{
1675 int ret = -1;
1676 Error *local_err = NULL;
1677 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1678
1679 ret = bdrv_reopen_multiple(queue, &local_err);
1680 if (local_err != NULL) {
1681 error_propagate(errp, local_err);
1682 }
1683 return ret;
1684}
1685
1686
1687/*
1688 * Prepares a BlockDriverState for reopen. All changes are staged in the
1689 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1690 * the block driver layer .bdrv_reopen_prepare()
1691 *
1692 * bs is the BlockDriverState to reopen
1693 * flags are the new open flags
1694 * queue is the reopen queue
1695 *
1696 * Returns 0 on success, non-zero on error. On error errp will be set
1697 * as well.
1698 *
1699 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1700 * It is the responsibility of the caller to then call the abort() or
1701 * commit() for any other BDS that have been left in a prepare() state
1702 *
1703 */
1704int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1705 Error **errp)
1706{
1707 int ret = -1;
1708 Error *local_err = NULL;
1709 BlockDriver *drv;
1710
1711 assert(reopen_state != NULL);
1712 assert(reopen_state->bs->drv != NULL);
1713 drv = reopen_state->bs->drv;
1714
1715 /* if we are to stay read-only, do not allow permission change
1716 * to r/w */
1717 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1718 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03001719 error_setg(errp, "Node '%s' is read only",
1720 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001721 goto error;
1722 }
1723
1724
1725 ret = bdrv_flush(reopen_state->bs);
1726 if (ret) {
1727 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1728 strerror(-ret));
1729 goto error;
1730 }
1731
1732 if (drv->bdrv_reopen_prepare) {
1733 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1734 if (ret) {
1735 if (local_err != NULL) {
1736 error_propagate(errp, local_err);
1737 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04001738 error_setg(errp, "failed while preparing to reopen image '%s'",
1739 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04001740 }
1741 goto error;
1742 }
1743 } else {
1744 /* It is currently mandatory to have a bdrv_reopen_prepare()
1745 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03001746 error_setg(errp, "Block format '%s' used by node '%s' "
1747 "does not support reopening files", drv->format_name,
1748 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001749 ret = -1;
1750 goto error;
1751 }
1752
1753 ret = 0;
1754
1755error:
1756 return ret;
1757}
1758
1759/*
1760 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1761 * makes them final by swapping the staging BlockDriverState contents into
1762 * the active BlockDriverState contents.
1763 */
1764void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1765{
1766 BlockDriver *drv;
1767
1768 assert(reopen_state != NULL);
1769 drv = reopen_state->bs->drv;
1770 assert(drv != NULL);
1771
1772 /* If there are any driver level actions to take */
1773 if (drv->bdrv_reopen_commit) {
1774 drv->bdrv_reopen_commit(reopen_state);
1775 }
1776
1777 /* set BDS specific flags now */
1778 reopen_state->bs->open_flags = reopen_state->flags;
1779 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1780 BDRV_O_CACHE_WB);
1781 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01001782
Kevin Wolf3baca892014-07-16 17:48:16 +02001783 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04001784}
1785
1786/*
1787 * Abort the reopen, and delete and free the staged changes in
1788 * reopen_state
1789 */
1790void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1791{
1792 BlockDriver *drv;
1793
1794 assert(reopen_state != NULL);
1795 drv = reopen_state->bs->drv;
1796 assert(drv != NULL);
1797
1798 if (drv->bdrv_reopen_abort) {
1799 drv->bdrv_reopen_abort(reopen_state);
1800 }
1801}
1802
1803
bellardfc01f7e2003-06-30 10:03:06 +00001804void bdrv_close(BlockDriverState *bs)
1805{
Max Reitz33384422014-06-20 21:57:33 +02001806 BdrvAioNotifier *ban, *ban_next;
1807
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001808 if (bs->job) {
1809 block_job_cancel_sync(bs->job);
1810 }
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02001811 bdrv_drain_all(); /* complete I/O */
1812 bdrv_flush(bs);
1813 bdrv_drain_all(); /* in case flush left pending I/O */
Paolo Bonzinid7d512f2012-08-23 11:20:36 +02001814 notifier_list_notify(&bs->close_notifiers, bs);
Kevin Wolf7094f122012-04-11 11:06:37 +02001815
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001816 if (bs->drv) {
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001817 if (bs->backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001818 BlockDriverState *backing_hd = bs->backing_hd;
1819 bdrv_set_backing_hd(bs, NULL);
1820 bdrv_unref(backing_hd);
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001821 }
bellardea2384d2004-08-01 21:59:26 +00001822 bs->drv->bdrv_close(bs);
Anthony Liguori7267c092011-08-20 22:09:37 -05001823 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00001824 bs->opaque = NULL;
1825 bs->drv = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00001826 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02001827 bs->backing_file[0] = '\0';
1828 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02001829 bs->total_sectors = 0;
1830 bs->encrypted = 0;
1831 bs->valid_key = 0;
1832 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08001833 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001834 QDECREF(bs->options);
1835 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02001836 QDECREF(bs->full_open_options);
1837 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00001838
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001839 if (bs->file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001840 bdrv_unref(bs->file);
Paolo Bonzini0ac93772012-05-08 16:51:44 +02001841 bs->file = NULL;
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001842 }
bellardb3380822004-03-14 21:38:54 +00001843 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001844
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001845 if (bs->blk) {
1846 blk_dev_change_media_cb(bs->blk, false);
1847 }
Pavel Hrdina9ca11152012-08-09 12:44:48 +02001848
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001849 /*throttling disk I/O limits*/
1850 if (bs->io_limits_enabled) {
1851 bdrv_io_limits_disable(bs);
1852 }
Max Reitz33384422014-06-20 21:57:33 +02001853
1854 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1855 g_free(ban);
1856 }
1857 QLIST_INIT(&bs->aio_notifiers);
bellardb3380822004-03-14 21:38:54 +00001858}
1859
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001860void bdrv_close_all(void)
1861{
1862 BlockDriverState *bs;
1863
Benoît Canetdc364f42014-01-23 21:31:32 +01001864 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001865 AioContext *aio_context = bdrv_get_aio_context(bs);
1866
1867 aio_context_acquire(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001868 bdrv_close(bs);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001869 aio_context_release(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001870 }
1871}
1872
Benoît Canetdc364f42014-01-23 21:31:32 +01001873/* make a BlockDriverState anonymous by removing from bdrv_state and
1874 * graph_bdrv_state list.
Ryan Harperd22b2f42011-03-29 20:51:47 -05001875 Also, NULL terminate the device_name to prevent double remove */
1876void bdrv_make_anon(BlockDriverState *bs)
1877{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001878 /*
1879 * Take care to remove bs from bdrv_states only when it's actually
1880 * in it. Note that bs->device_list.tqe_prev is initially null,
1881 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1882 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1883 * resetting it to null on remove.
1884 */
1885 if (bs->device_list.tqe_prev) {
Benoît Canetdc364f42014-01-23 21:31:32 +01001886 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001887 bs->device_list.tqe_prev = NULL;
Ryan Harperd22b2f42011-03-29 20:51:47 -05001888 }
Benoît Canetdc364f42014-01-23 21:31:32 +01001889 if (bs->node_name[0] != '\0') {
1890 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1891 }
1892 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05001893}
1894
Paolo Bonzinie023b2e2012-05-08 16:51:41 +02001895static void bdrv_rebind(BlockDriverState *bs)
1896{
1897 if (bs->drv && bs->drv->bdrv_rebind) {
1898 bs->drv->bdrv_rebind(bs);
1899 }
1900}
1901
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001902static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
1903 BlockDriverState *bs_src)
1904{
1905 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001906
1907 /* dev info */
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01001908 bs_dest->guest_block_size = bs_src->guest_block_size;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001909 bs_dest->copy_on_read = bs_src->copy_on_read;
1910
1911 bs_dest->enable_write_cache = bs_src->enable_write_cache;
1912
Benoît Canetcc0681c2013-09-02 14:14:39 +02001913 /* i/o throttled req */
1914 memcpy(&bs_dest->throttle_state,
1915 &bs_src->throttle_state,
1916 sizeof(ThrottleState));
1917 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
1918 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001919 bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
1920
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001921 /* r/w error */
1922 bs_dest->on_read_error = bs_src->on_read_error;
1923 bs_dest->on_write_error = bs_src->on_write_error;
1924
1925 /* i/o status */
1926 bs_dest->iostatus_enabled = bs_src->iostatus_enabled;
1927 bs_dest->iostatus = bs_src->iostatus;
1928
1929 /* dirty bitmap */
Fam Zhenge4654d22013-11-13 18:29:43 +08001930 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001931
Fam Zheng9fcb0252013-08-23 09:14:46 +08001932 /* reference count */
1933 bs_dest->refcnt = bs_src->refcnt;
1934
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001935 /* job */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001936 bs_dest->job = bs_src->job;
1937
1938 /* keep the same entry in bdrv_states */
Benoît Canetdc364f42014-01-23 21:31:32 +01001939 bs_dest->device_list = bs_src->device_list;
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001940 bs_dest->blk = bs_src->blk;
1941
Fam Zhengfbe40ff2014-05-23 21:29:42 +08001942 memcpy(bs_dest->op_blockers, bs_src->op_blockers,
1943 sizeof(bs_dest->op_blockers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001944}
1945
1946/*
1947 * Swap bs contents for two image chains while they are live,
1948 * while keeping required fields on the BlockDriverState that is
1949 * actually attached to a device.
1950 *
1951 * This will modify the BlockDriverState fields, and swap contents
1952 * between bs_new and bs_old. Both bs_new and bs_old are modified.
1953 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001954 * bs_new must not be attached to a BlockBackend.
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001955 *
1956 * This function does not create any image files.
1957 */
1958void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
1959{
1960 BlockDriverState tmp;
1961
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02001962 bdrv_drain(bs_new);
1963 bdrv_drain(bs_old);
1964
Benoît Canet90ce8a02014-03-05 23:48:29 +01001965 /* The code needs to swap the node_name but simply swapping node_list won't
1966 * work so first remove the nodes from the graph list, do the swap then
1967 * insert them back if needed.
1968 */
1969 if (bs_new->node_name[0] != '\0') {
1970 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
1971 }
1972 if (bs_old->node_name[0] != '\0') {
1973 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
1974 }
1975
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001976 /* bs_new must be unattached and shouldn't have anything fancy enabled */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001977 assert(!bs_new->blk);
Fam Zhenge4654d22013-11-13 18:29:43 +08001978 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001979 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001980 assert(bs_new->io_limits_enabled == false);
Benoît Canetcc0681c2013-09-02 14:14:39 +02001981 assert(!throttle_have_timer(&bs_new->throttle_state));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001982
1983 tmp = *bs_new;
1984 *bs_new = *bs_old;
1985 *bs_old = tmp;
1986
1987 /* there are some fields that should not be swapped, move them back */
1988 bdrv_move_feature_fields(&tmp, bs_old);
1989 bdrv_move_feature_fields(bs_old, bs_new);
1990 bdrv_move_feature_fields(bs_new, &tmp);
1991
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001992 /* bs_new must remain unattached */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001993 assert(!bs_new->blk);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001994
1995 /* Check a few fields that should remain attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001996 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001997 assert(bs_new->io_limits_enabled == false);
Benoît Canetcc0681c2013-09-02 14:14:39 +02001998 assert(!throttle_have_timer(&bs_new->throttle_state));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001999
Benoît Canet90ce8a02014-03-05 23:48:29 +01002000 /* insert the nodes back into the graph node list if needed */
2001 if (bs_new->node_name[0] != '\0') {
2002 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2003 }
2004 if (bs_old->node_name[0] != '\0') {
2005 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2006 }
2007
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002008 assert(QLIST_EMPTY(&bs_old->tracked_requests));
2009 assert(QLIST_EMPTY(&bs_new->tracked_requests));
2010
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002011 bdrv_rebind(bs_new);
2012 bdrv_rebind(bs_old);
2013}
2014
Jeff Cody8802d1f2012-02-28 15:54:06 -05002015/*
2016 * Add new bs contents at the top of an image chain while the chain is
2017 * live, while keeping required fields on the top layer.
2018 *
2019 * This will modify the BlockDriverState fields, and swap contents
2020 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2021 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002022 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002023 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002024 * This function does not create any image files.
2025 */
2026void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2027{
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002028 bdrv_swap(bs_new, bs_top);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002029
2030 /* The contents of 'tmp' will become bs_top, as we are
2031 * swapping bs_new and bs_top contents. */
Fam Zheng8d24cce2014-05-23 21:29:45 +08002032 bdrv_set_backing_hd(bs_top, bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002033}
2034
Fam Zheng4f6fd342013-08-23 09:14:47 +08002035static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002036{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002037 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002038 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002039 assert(!bs->refcnt);
Fam Zhenge4654d22013-11-13 18:29:43 +08002040 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
Markus Armbruster18846de2010-06-29 16:58:30 +02002041
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002042 bdrv_close(bs);
2043
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002044 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002045 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002046
Anthony Liguori7267c092011-08-20 22:09:37 -05002047 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002048}
2049
aliguorie97fc192009-04-21 23:11:50 +00002050/*
2051 * Run consistency checks on an image
2052 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002053 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002054 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002055 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002056 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002057int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002058{
Max Reitz908bcd52014-08-07 22:47:55 +02002059 if (bs->drv == NULL) {
2060 return -ENOMEDIUM;
2061 }
aliguorie97fc192009-04-21 23:11:50 +00002062 if (bs->drv->bdrv_check == NULL) {
2063 return -ENOTSUP;
2064 }
2065
Kevin Wolfe076f332010-06-29 11:43:13 +02002066 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002067 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002068}
2069
Kevin Wolf8a426612010-07-16 17:17:01 +02002070#define COMMIT_BUF_SECTORS 2048
2071
bellard33e39632003-07-06 17:15:21 +00002072/* commit COW file into the raw image */
2073int bdrv_commit(BlockDriverState *bs)
2074{
bellard19cb3732006-08-19 11:45:59 +00002075 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002076 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002077 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002078 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002079 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002080
bellard19cb3732006-08-19 11:45:59 +00002081 if (!drv)
2082 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002083
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002084 if (!bs->backing_hd) {
2085 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002086 }
2087
Fam Zhengbb000212014-09-11 13:14:00 +08002088 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2089 bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002090 return -EBUSY;
2091 }
2092
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002093 ro = bs->backing_hd->read_only;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002094 open_flags = bs->backing_hd->open_flags;
2095
2096 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002097 if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2098 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002099 }
bellard33e39632003-07-06 17:15:21 +00002100 }
bellardea2384d2004-08-01 21:59:26 +00002101
Jeff Cody72706ea2014-01-24 09:02:35 -05002102 length = bdrv_getlength(bs);
2103 if (length < 0) {
2104 ret = length;
2105 goto ro_cleanup;
2106 }
2107
2108 backing_length = bdrv_getlength(bs->backing_hd);
2109 if (backing_length < 0) {
2110 ret = backing_length;
2111 goto ro_cleanup;
2112 }
2113
2114 /* If our top snapshot is larger than the backing file image,
2115 * grow the backing file image if possible. If not possible,
2116 * we must return an error */
2117 if (length > backing_length) {
2118 ret = bdrv_truncate(bs->backing_hd, length);
2119 if (ret < 0) {
2120 goto ro_cleanup;
2121 }
2122 }
2123
2124 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002125
2126 /* qemu_try_blockalign() for bs will choose an alignment that works for
2127 * bs->backing_hd as well, so no need to compare the alignment manually. */
2128 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2129 if (buf == NULL) {
2130 ret = -ENOMEM;
2131 goto ro_cleanup;
2132 }
bellardea2384d2004-08-01 21:59:26 +00002133
Kevin Wolf8a426612010-07-16 17:17:01 +02002134 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002135 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2136 if (ret < 0) {
2137 goto ro_cleanup;
2138 }
2139 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002140 ret = bdrv_read(bs, sector, buf, n);
2141 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002142 goto ro_cleanup;
2143 }
2144
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002145 ret = bdrv_write(bs->backing_hd, sector, buf, n);
2146 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002147 goto ro_cleanup;
2148 }
bellardea2384d2004-08-01 21:59:26 +00002149 }
2150 }
bellard95389c82005-12-18 18:28:15 +00002151
Christoph Hellwig1d449522010-01-17 12:32:30 +01002152 if (drv->bdrv_make_empty) {
2153 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002154 if (ret < 0) {
2155 goto ro_cleanup;
2156 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002157 bdrv_flush(bs);
2158 }
bellard95389c82005-12-18 18:28:15 +00002159
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002160 /*
2161 * Make sure all data we wrote to the backing device is actually
2162 * stable on disk.
2163 */
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002164 if (bs->backing_hd) {
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002165 bdrv_flush(bs->backing_hd);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002166 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002167
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002168 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002169ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002170 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002171
2172 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002173 /* ignoring error return here */
2174 bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002175 }
2176
Christoph Hellwig1d449522010-01-17 12:32:30 +01002177 return ret;
bellard33e39632003-07-06 17:15:21 +00002178}
2179
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002180int bdrv_commit_all(void)
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002181{
2182 BlockDriverState *bs;
2183
Benoît Canetdc364f42014-01-23 21:31:32 +01002184 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002185 AioContext *aio_context = bdrv_get_aio_context(bs);
2186
2187 aio_context_acquire(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002188 if (bs->drv && bs->backing_hd) {
2189 int ret = bdrv_commit(bs);
2190 if (ret < 0) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002191 aio_context_release(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002192 return ret;
2193 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002194 }
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002195 aio_context_release(aio_context);
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002196 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002197 return 0;
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002198}
2199
Kevin Wolf756e6732010-01-12 12:55:17 +01002200/*
2201 * Return values:
2202 * 0 - success
2203 * -EINVAL - backing format specified, but no file
2204 * -ENOSPC - can't update the backing file because no space is left in the
2205 * image file header
2206 * -ENOTSUP - format driver doesn't support changing the backing file
2207 */
2208int bdrv_change_backing_file(BlockDriverState *bs,
2209 const char *backing_file, const char *backing_fmt)
2210{
2211 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002212 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002213
Paolo Bonzini5f377792012-04-12 14:01:01 +02002214 /* Backing file format doesn't make sense without a backing file */
2215 if (backing_fmt && !backing_file) {
2216 return -EINVAL;
2217 }
2218
Kevin Wolf756e6732010-01-12 12:55:17 +01002219 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002220 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002221 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002222 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002223 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002224
2225 if (ret == 0) {
2226 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2227 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2228 }
2229 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002230}
2231
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002232/*
2233 * Finds the image layer in the chain that has 'bs' as its backing file.
2234 *
2235 * active is the current topmost image.
2236 *
2237 * Returns NULL if bs is not found in active's image chain,
2238 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002239 *
2240 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002241 */
2242BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2243 BlockDriverState *bs)
2244{
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002245 while (active && bs != active->backing_hd) {
2246 active = active->backing_hd;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002247 }
2248
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002249 return active;
2250}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002251
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002252/* Given a BDS, searches for the base layer. */
2253BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2254{
2255 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002256}
2257
2258typedef struct BlkIntermediateStates {
2259 BlockDriverState *bs;
2260 QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2261} BlkIntermediateStates;
2262
2263
2264/*
2265 * Drops images above 'base' up to and including 'top', and sets the image
2266 * above 'top' to have base as its backing file.
2267 *
2268 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2269 * information in 'bs' can be properly updated.
2270 *
2271 * E.g., this will convert the following chain:
2272 * bottom <- base <- intermediate <- top <- active
2273 *
2274 * to
2275 *
2276 * bottom <- base <- active
2277 *
2278 * It is allowed for bottom==base, in which case it converts:
2279 *
2280 * base <- intermediate <- top <- active
2281 *
2282 * to
2283 *
2284 * base <- active
2285 *
Jeff Cody54e26902014-06-25 15:40:10 -04002286 * If backing_file_str is non-NULL, it will be used when modifying top's
2287 * overlay image metadata.
2288 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002289 * Error conditions:
2290 * if active == top, that is considered an error
2291 *
2292 */
2293int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002294 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002295{
2296 BlockDriverState *intermediate;
2297 BlockDriverState *base_bs = NULL;
2298 BlockDriverState *new_top_bs = NULL;
2299 BlkIntermediateStates *intermediate_state, *next;
2300 int ret = -EIO;
2301
2302 QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2303 QSIMPLEQ_INIT(&states_to_delete);
2304
2305 if (!top->drv || !base->drv) {
2306 goto exit;
2307 }
2308
2309 new_top_bs = bdrv_find_overlay(active, top);
2310
2311 if (new_top_bs == NULL) {
2312 /* we could not find the image above 'top', this is an error */
2313 goto exit;
2314 }
2315
2316 /* special case of new_top_bs->backing_hd already pointing to base - nothing
2317 * to do, no intermediate images */
2318 if (new_top_bs->backing_hd == base) {
2319 ret = 0;
2320 goto exit;
2321 }
2322
2323 intermediate = top;
2324
2325 /* now we will go down through the list, and add each BDS we find
2326 * into our deletion queue, until we hit the 'base'
2327 */
2328 while (intermediate) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002329 intermediate_state = g_new0(BlkIntermediateStates, 1);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002330 intermediate_state->bs = intermediate;
2331 QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2332
2333 if (intermediate->backing_hd == base) {
2334 base_bs = intermediate->backing_hd;
2335 break;
2336 }
2337 intermediate = intermediate->backing_hd;
2338 }
2339 if (base_bs == NULL) {
2340 /* something went wrong, we did not end at the base. safely
2341 * unravel everything, and exit with error */
2342 goto exit;
2343 }
2344
2345 /* success - we can delete the intermediate states, and link top->base */
Jeff Cody54e26902014-06-25 15:40:10 -04002346 backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2347 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002348 base_bs->drv ? base_bs->drv->format_name : "");
2349 if (ret) {
2350 goto exit;
2351 }
Fam Zheng920beae2014-05-23 21:29:46 +08002352 bdrv_set_backing_hd(new_top_bs, base_bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002353
2354 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2355 /* so that bdrv_close() does not recursively close the chain */
Fam Zheng920beae2014-05-23 21:29:46 +08002356 bdrv_set_backing_hd(intermediate_state->bs, NULL);
Fam Zheng4f6fd342013-08-23 09:14:47 +08002357 bdrv_unref(intermediate_state->bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002358 }
2359 ret = 0;
2360
2361exit:
2362 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2363 g_free(intermediate_state);
2364 }
2365 return ret;
2366}
2367
bellard83f64092006-08-01 16:21:11 +00002368/**
bellard83f64092006-08-01 16:21:11 +00002369 * Truncate file to 'offset' bytes (needed only for file protocols)
2370 */
2371int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2372{
2373 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002374 int ret;
bellard83f64092006-08-01 16:21:11 +00002375 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002376 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002377 if (!drv->bdrv_truncate)
2378 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002379 if (bs->read_only)
2380 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002381
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002382 ret = drv->bdrv_truncate(bs, offset);
2383 if (ret == 0) {
2384 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002385 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002386 if (bs->blk) {
2387 blk_dev_resize_cb(bs->blk);
2388 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002389 }
2390 return ret;
bellard83f64092006-08-01 16:21:11 +00002391}
2392
2393/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002394 * Length of a allocated file in bytes. Sparse files are counted by actual
2395 * allocated space. Return < 0 if error or unknown.
2396 */
2397int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2398{
2399 BlockDriver *drv = bs->drv;
2400 if (!drv) {
2401 return -ENOMEDIUM;
2402 }
2403 if (drv->bdrv_get_allocated_file_size) {
2404 return drv->bdrv_get_allocated_file_size(bs);
2405 }
2406 if (bs->file) {
2407 return bdrv_get_allocated_file_size(bs->file);
2408 }
2409 return -ENOTSUP;
2410}
2411
2412/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002413 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002414 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002415int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002416{
2417 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002418
bellard83f64092006-08-01 16:21:11 +00002419 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002420 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002421
Kevin Wolfb94a2612013-10-29 12:18:58 +01002422 if (drv->has_variable_length) {
2423 int ret = refresh_total_sectors(bs, bs->total_sectors);
2424 if (ret < 0) {
2425 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002426 }
bellard83f64092006-08-01 16:21:11 +00002427 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002428 return bs->total_sectors;
2429}
2430
2431/**
2432 * Return length in bytes on success, -errno on error.
2433 * The length is always a multiple of BDRV_SECTOR_SIZE.
2434 */
2435int64_t bdrv_getlength(BlockDriverState *bs)
2436{
2437 int64_t ret = bdrv_nb_sectors(bs);
2438
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002439 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002440 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002441}
2442
bellard19cb3732006-08-19 11:45:59 +00002443/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002444void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002445{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002446 int64_t nb_sectors = bdrv_nb_sectors(bs);
2447
2448 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002449}
bellardcf989512004-02-16 21:56:36 +00002450
Paolo Bonziniff06f5f2012-09-28 17:22:54 +02002451void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
2452 BlockdevOnError on_write_error)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002453{
2454 bs->on_read_error = on_read_error;
2455 bs->on_write_error = on_write_error;
2456}
2457
Paolo Bonzini1ceee0d2012-09-28 17:22:56 +02002458BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002459{
2460 return is_read ? bs->on_read_error : bs->on_write_error;
2461}
2462
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002463BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
2464{
2465 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
2466
2467 switch (on_err) {
2468 case BLOCKDEV_ON_ERROR_ENOSPC:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002469 return (error == ENOSPC) ?
2470 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002471 case BLOCKDEV_ON_ERROR_STOP:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002472 return BLOCK_ERROR_ACTION_STOP;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002473 case BLOCKDEV_ON_ERROR_REPORT:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002474 return BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002475 case BLOCKDEV_ON_ERROR_IGNORE:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002476 return BLOCK_ERROR_ACTION_IGNORE;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002477 default:
2478 abort();
2479 }
2480}
2481
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002482static void send_qmp_error_event(BlockDriverState *bs,
2483 BlockErrorAction action,
2484 bool is_read, int error)
2485{
Peter Maydell573742a2014-10-10 20:33:03 +01002486 IoOperationType optype;
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002487
Peter Maydell573742a2014-10-10 20:33:03 +01002488 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
2489 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002490 bdrv_iostatus_is_enabled(bs),
Luiz Capitulino624ff572014-09-11 10:25:48 -04002491 error == ENOSPC, strerror(error),
2492 &error_abort);
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002493}
2494
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002495/* This is done by device models because, while the block layer knows
2496 * about the error, it does not know whether an operation comes from
2497 * the device or the block layer (from a job, for example).
2498 */
2499void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
2500 bool is_read, int error)
2501{
2502 assert(error >= 0);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002503
Wenchao Xiaa5895692014-06-18 08:43:30 +02002504 if (action == BLOCK_ERROR_ACTION_STOP) {
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002505 /* First set the iostatus, so that "info block" returns an iostatus
2506 * that matches the events raised so far (an additional error iostatus
2507 * is fine, but not a lost one).
2508 */
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002509 bdrv_iostatus_set_err(bs, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002510
2511 /* Then raise the request to stop the VM and the event.
2512 * qemu_system_vmstop_request_prepare has two effects. First,
2513 * it ensures that the STOP event always comes after the
2514 * BLOCK_IO_ERROR event. Second, it ensures that even if management
2515 * can observe the STOP event and do a "cont" before the STOP
2516 * event is issued, the VM will not stop. In this case, vm_start()
2517 * also ensures that the STOP/RESUME pair of events is emitted.
2518 */
2519 qemu_system_vmstop_request_prepare();
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002520 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002521 qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
2522 } else {
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002523 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002524 }
2525}
2526
bellardb3380822004-03-14 21:38:54 +00002527int bdrv_is_read_only(BlockDriverState *bs)
2528{
2529 return bs->read_only;
2530}
2531
ths985a03b2007-12-24 16:10:43 +00002532int bdrv_is_sg(BlockDriverState *bs)
2533{
2534 return bs->sg;
2535}
2536
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002537int bdrv_enable_write_cache(BlockDriverState *bs)
2538{
2539 return bs->enable_write_cache;
2540}
2541
Paolo Bonzini425b0142012-06-06 00:04:52 +02002542void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2543{
2544 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002545
2546 /* so a reopen() will preserve wce */
2547 if (wce) {
2548 bs->open_flags |= BDRV_O_CACHE_WB;
2549 } else {
2550 bs->open_flags &= ~BDRV_O_CACHE_WB;
2551 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002552}
2553
bellardea2384d2004-08-01 21:59:26 +00002554int bdrv_is_encrypted(BlockDriverState *bs)
2555{
2556 if (bs->backing_hd && bs->backing_hd->encrypted)
2557 return 1;
2558 return bs->encrypted;
2559}
2560
aliguoric0f4ce72009-03-05 23:01:01 +00002561int bdrv_key_required(BlockDriverState *bs)
2562{
2563 BlockDriverState *backing_hd = bs->backing_hd;
2564
2565 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
2566 return 1;
2567 return (bs->encrypted && !bs->valid_key);
2568}
2569
bellardea2384d2004-08-01 21:59:26 +00002570int bdrv_set_key(BlockDriverState *bs, const char *key)
2571{
2572 int ret;
2573 if (bs->backing_hd && bs->backing_hd->encrypted) {
2574 ret = bdrv_set_key(bs->backing_hd, key);
2575 if (ret < 0)
2576 return ret;
2577 if (!bs->encrypted)
2578 return 0;
2579 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002580 if (!bs->encrypted) {
2581 return -EINVAL;
2582 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2583 return -ENOMEDIUM;
2584 }
aliguoric0f4ce72009-03-05 23:01:01 +00002585 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002586 if (ret < 0) {
2587 bs->valid_key = 0;
2588 } else if (!bs->valid_key) {
2589 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002590 if (bs->blk) {
2591 /* call the change callback now, we skipped it on open */
2592 blk_dev_change_media_cb(bs->blk, true);
2593 }
aliguoribb5fc202009-03-05 23:01:15 +00002594 }
aliguoric0f4ce72009-03-05 23:01:01 +00002595 return ret;
bellardea2384d2004-08-01 21:59:26 +00002596}
2597
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002598/*
2599 * Provide an encryption key for @bs.
2600 * If @key is non-null:
2601 * If @bs is not encrypted, fail.
2602 * Else if the key is invalid, fail.
2603 * Else set @bs's key to @key, replacing the existing key, if any.
2604 * If @key is null:
2605 * If @bs is encrypted and still lacks a key, fail.
2606 * Else do nothing.
2607 * On failure, store an error object through @errp if non-null.
2608 */
2609void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2610{
2611 if (key) {
2612 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002613 error_setg(errp, "Node '%s' is not encrypted",
2614 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002615 } else if (bdrv_set_key(bs, key) < 0) {
2616 error_set(errp, QERR_INVALID_PASSWORD);
2617 }
2618 } else {
2619 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002620 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2621 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002622 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002623 bdrv_get_encrypted_filename(bs));
2624 }
2625 }
2626}
2627
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002628const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002629{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002630 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002631}
2632
Stefan Hajnocziada42402014-08-27 12:08:55 +01002633static int qsort_strcmp(const void *a, const void *b)
2634{
2635 return strcmp(a, b);
2636}
2637
ths5fafdf22007-09-16 21:08:06 +00002638void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002639 void *opaque)
2640{
2641 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002642 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002643 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002644 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002645
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002646 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002647 if (drv->format_name) {
2648 bool found = false;
2649 int i = count;
2650 while (formats && i && !found) {
2651 found = !strcmp(formats[--i], drv->format_name);
2652 }
2653
2654 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002655 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002656 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002657 }
2658 }
bellardea2384d2004-08-01 21:59:26 +00002659 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002660
2661 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2662
2663 for (i = 0; i < count; i++) {
2664 it(opaque, formats[i]);
2665 }
2666
Jeff Codye855e4f2014-04-28 18:29:54 -04002667 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002668}
2669
Benoît Canetdc364f42014-01-23 21:31:32 +01002670/* This function is to find a node in the bs graph */
2671BlockDriverState *bdrv_find_node(const char *node_name)
2672{
2673 BlockDriverState *bs;
2674
2675 assert(node_name);
2676
2677 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2678 if (!strcmp(node_name, bs->node_name)) {
2679 return bs;
2680 }
2681 }
2682 return NULL;
2683}
2684
Benoît Canetc13163f2014-01-23 21:31:34 +01002685/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002686BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002687{
2688 BlockDeviceInfoList *list, *entry;
2689 BlockDriverState *bs;
2690
2691 list = NULL;
2692 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002693 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2694 if (!info) {
2695 qapi_free_BlockDeviceInfoList(list);
2696 return NULL;
2697 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002698 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002699 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002700 entry->next = list;
2701 list = entry;
2702 }
2703
2704 return list;
2705}
2706
Benoît Canet12d3ba82014-01-23 21:31:35 +01002707BlockDriverState *bdrv_lookup_bs(const char *device,
2708 const char *node_name,
2709 Error **errp)
2710{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002711 BlockBackend *blk;
2712 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002713
Benoît Canet12d3ba82014-01-23 21:31:35 +01002714 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002715 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002716
Markus Armbruster7f06d472014-10-07 13:59:12 +02002717 if (blk) {
2718 return blk_bs(blk);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002719 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002720 }
2721
Benoît Canetdd67fa52014-02-12 17:15:06 +01002722 if (node_name) {
2723 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002724
Benoît Canetdd67fa52014-02-12 17:15:06 +01002725 if (bs) {
2726 return bs;
2727 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002728 }
2729
Benoît Canetdd67fa52014-02-12 17:15:06 +01002730 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2731 device ? device : "",
2732 node_name ? node_name : "");
2733 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002734}
2735
Jeff Cody5a6684d2014-06-25 15:40:09 -04002736/* If 'base' is in the same chain as 'top', return true. Otherwise,
2737 * return false. If either argument is NULL, return false. */
2738bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2739{
2740 while (top && top != base) {
2741 top = top->backing_hd;
2742 }
2743
2744 return top != NULL;
2745}
2746
Fam Zheng04df7652014-10-31 11:32:54 +08002747BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2748{
2749 if (!bs) {
2750 return QTAILQ_FIRST(&graph_bdrv_states);
2751 }
2752 return QTAILQ_NEXT(bs, node_list);
2753}
2754
Markus Armbruster2f399b02010-06-02 18:55:20 +02002755BlockDriverState *bdrv_next(BlockDriverState *bs)
2756{
2757 if (!bs) {
2758 return QTAILQ_FIRST(&bdrv_states);
2759 }
Benoît Canetdc364f42014-01-23 21:31:32 +01002760 return QTAILQ_NEXT(bs, device_list);
Markus Armbruster2f399b02010-06-02 18:55:20 +02002761}
2762
Fam Zheng20a9e772014-10-31 11:32:55 +08002763const char *bdrv_get_node_name(const BlockDriverState *bs)
2764{
2765 return bs->node_name;
2766}
2767
Markus Armbruster7f06d472014-10-07 13:59:12 +02002768/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002769const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002770{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002771 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002772}
2773
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002774/* This can be used to identify nodes that might not have a device
2775 * name associated. Since node and device names live in the same
2776 * namespace, the result is unambiguous. The exception is if both are
2777 * absent, then this returns an empty (non-null) string. */
2778const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2779{
2780 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2781}
2782
Markus Armbrusterc8433282012-06-05 16:49:24 +02002783int bdrv_get_flags(BlockDriverState *bs)
2784{
2785 return bs->open_flags;
2786}
2787
Peter Lieven3ac21622013-06-28 12:47:42 +02002788int bdrv_has_zero_init_1(BlockDriverState *bs)
2789{
2790 return 1;
2791}
2792
Kevin Wolff2feebb2010-04-14 17:30:35 +02002793int bdrv_has_zero_init(BlockDriverState *bs)
2794{
2795 assert(bs->drv);
2796
Paolo Bonzini11212d82013-09-04 19:00:27 +02002797 /* If BS is a copy on write image, it is initialized to
2798 the contents of the base image, which may not be zeroes. */
2799 if (bs->backing_hd) {
2800 return 0;
2801 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002802 if (bs->drv->bdrv_has_zero_init) {
2803 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002804 }
2805
Peter Lieven3ac21622013-06-28 12:47:42 +02002806 /* safe default */
2807 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002808}
2809
Peter Lieven4ce78692013-10-24 12:06:54 +02002810bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2811{
2812 BlockDriverInfo bdi;
2813
2814 if (bs->backing_hd) {
2815 return false;
2816 }
2817
2818 if (bdrv_get_info(bs, &bdi) == 0) {
2819 return bdi.unallocated_blocks_are_zero;
2820 }
2821
2822 return false;
2823}
2824
2825bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2826{
2827 BlockDriverInfo bdi;
2828
2829 if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
2830 return false;
2831 }
2832
2833 if (bdrv_get_info(bs, &bdi) == 0) {
2834 return bdi.can_write_zeroes_with_unmap;
2835 }
2836
2837 return false;
2838}
2839
aliguori045df332009-03-05 23:00:48 +00002840const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2841{
2842 if (bs->backing_hd && bs->backing_hd->encrypted)
2843 return bs->backing_file;
2844 else if (bs->encrypted)
2845 return bs->filename;
2846 else
2847 return NULL;
2848}
2849
ths5fafdf22007-09-16 21:08:06 +00002850void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002851 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002852{
Kevin Wolf3574c602011-10-26 11:02:11 +02002853 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002854}
2855
bellardfaea38e2006-08-05 21:31:00 +00002856int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2857{
2858 BlockDriver *drv = bs->drv;
2859 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002860 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00002861 if (!drv->bdrv_get_info)
2862 return -ENOTSUP;
2863 memset(bdi, 0, sizeof(*bdi));
2864 return drv->bdrv_get_info(bs, bdi);
2865}
2866
Max Reitzeae041f2013-10-09 10:46:16 +02002867ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2868{
2869 BlockDriver *drv = bs->drv;
2870 if (drv && drv->bdrv_get_specific_info) {
2871 return drv->bdrv_get_specific_info(bs);
2872 }
2873 return NULL;
2874}
2875
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002876void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
2877{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002878 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002879 return;
2880 }
2881
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002882 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01002883}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002884
Kevin Wolf41c695c2012-12-06 14:32:58 +01002885int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2886 const char *tag)
2887{
2888 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
2889 bs = bs->file;
2890 }
2891
2892 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2893 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2894 }
2895
2896 return -ENOTSUP;
2897}
2898
Fam Zheng4cc70e92013-11-20 10:01:54 +08002899int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
2900{
2901 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
2902 bs = bs->file;
2903 }
2904
2905 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2906 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2907 }
2908
2909 return -ENOTSUP;
2910}
2911
Kevin Wolf41c695c2012-12-06 14:32:58 +01002912int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
2913{
Max Reitz938789e2014-03-10 23:44:08 +01002914 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf41c695c2012-12-06 14:32:58 +01002915 bs = bs->file;
2916 }
2917
2918 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
2919 return bs->drv->bdrv_debug_resume(bs, tag);
2920 }
2921
2922 return -ENOTSUP;
2923}
2924
2925bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
2926{
2927 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
2928 bs = bs->file;
2929 }
2930
2931 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
2932 return bs->drv->bdrv_debug_is_suspended(bs, tag);
2933 }
2934
2935 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002936}
2937
Blue Swirl199630b2010-07-25 20:49:34 +00002938int bdrv_is_snapshot(BlockDriverState *bs)
2939{
2940 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
2941}
2942
Jeff Codyb1b1d782012-10-16 15:49:09 -04002943/* backing_file can either be relative, or absolute, or a protocol. If it is
2944 * relative, it must be relative to the chain. So, passing in bs->filename
2945 * from a BDS as backing_file should not be done, as that may be relative to
2946 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00002947BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
2948 const char *backing_file)
2949{
Jeff Codyb1b1d782012-10-16 15:49:09 -04002950 char *filename_full = NULL;
2951 char *backing_file_full = NULL;
2952 char *filename_tmp = NULL;
2953 int is_protocol = 0;
2954 BlockDriverState *curr_bs = NULL;
2955 BlockDriverState *retval = NULL;
2956
2957 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00002958 return NULL;
2959 }
2960
Jeff Codyb1b1d782012-10-16 15:49:09 -04002961 filename_full = g_malloc(PATH_MAX);
2962 backing_file_full = g_malloc(PATH_MAX);
2963 filename_tmp = g_malloc(PATH_MAX);
2964
2965 is_protocol = path_has_protocol(backing_file);
2966
2967 for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
2968
2969 /* If either of the filename paths is actually a protocol, then
2970 * compare unmodified paths; otherwise make paths relative */
2971 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
2972 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
2973 retval = curr_bs->backing_hd;
2974 break;
2975 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00002976 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04002977 /* If not an absolute filename path, make it relative to the current
2978 * image's filename path */
2979 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2980 backing_file);
2981
2982 /* We are going to compare absolute pathnames */
2983 if (!realpath(filename_tmp, filename_full)) {
2984 continue;
2985 }
2986
2987 /* We need to make sure the backing filename we are comparing against
2988 * is relative to the current image filename (or absolute) */
2989 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
2990 curr_bs->backing_file);
2991
2992 if (!realpath(filename_tmp, backing_file_full)) {
2993 continue;
2994 }
2995
2996 if (strcmp(backing_file_full, filename_full) == 0) {
2997 retval = curr_bs->backing_hd;
2998 break;
2999 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003000 }
3001 }
3002
Jeff Codyb1b1d782012-10-16 15:49:09 -04003003 g_free(filename_full);
3004 g_free(backing_file_full);
3005 g_free(filename_tmp);
3006 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003007}
3008
Benoît Canetf198fd12012-08-02 10:22:47 +02003009int bdrv_get_backing_file_depth(BlockDriverState *bs)
3010{
3011 if (!bs->drv) {
3012 return 0;
3013 }
3014
3015 if (!bs->backing_hd) {
3016 return 0;
3017 }
3018
3019 return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3020}
3021
bellardea2384d2004-08-01 21:59:26 +00003022void bdrv_init(void)
3023{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003024 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003025}
pbrookce1a14d2006-08-07 02:38:06 +00003026
Markus Armbrustereb852012009-10-27 18:41:44 +01003027void bdrv_init_with_whitelist(void)
3028{
3029 use_bdrv_whitelist = 1;
3030 bdrv_init();
3031}
3032
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003033void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003034{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003035 Error *local_err = NULL;
3036 int ret;
3037
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003038 if (!bs->drv) {
3039 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003040 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003041
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003042 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3043 return;
3044 }
3045 bs->open_flags &= ~BDRV_O_INCOMING;
3046
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003047 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003048 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003049 } else if (bs->file) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003050 bdrv_invalidate_cache(bs->file, &local_err);
3051 }
3052 if (local_err) {
3053 error_propagate(errp, local_err);
3054 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003055 }
3056
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003057 ret = refresh_total_sectors(bs, bs->total_sectors);
3058 if (ret < 0) {
3059 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3060 return;
3061 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003062}
3063
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003064void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003065{
3066 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003067 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003068
Benoît Canetdc364f42014-01-23 21:31:32 +01003069 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003070 AioContext *aio_context = bdrv_get_aio_context(bs);
3071
3072 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003073 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003074 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003075 if (local_err) {
3076 error_propagate(errp, local_err);
3077 return;
3078 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003079 }
3080}
3081
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003082/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003083/* removable device support */
3084
3085/**
3086 * Return TRUE if the media is present
3087 */
3088int bdrv_is_inserted(BlockDriverState *bs)
3089{
3090 BlockDriver *drv = bs->drv;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003091
bellard19cb3732006-08-19 11:45:59 +00003092 if (!drv)
3093 return 0;
3094 if (!drv->bdrv_is_inserted)
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003095 return 1;
3096 return drv->bdrv_is_inserted(bs);
bellard19cb3732006-08-19 11:45:59 +00003097}
3098
3099/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003100 * Return whether the media changed since the last call to this
3101 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003102 */
3103int bdrv_media_changed(BlockDriverState *bs)
3104{
3105 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003106
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003107 if (drv && drv->bdrv_media_changed) {
3108 return drv->bdrv_media_changed(bs);
3109 }
3110 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003111}
3112
3113/**
3114 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3115 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003116void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003117{
3118 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003119 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003120
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003121 if (drv && drv->bdrv_eject) {
3122 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003123 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003124
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003125 device_name = bdrv_get_device_name(bs);
3126 if (device_name[0] != '\0') {
3127 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003128 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003129 }
bellard19cb3732006-08-19 11:45:59 +00003130}
3131
bellard19cb3732006-08-19 11:45:59 +00003132/**
3133 * Lock or unlock the media (if it is locked, the user won't be able
3134 * to eject it manually).
3135 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003136void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003137{
3138 BlockDriver *drv = bs->drv;
3139
Markus Armbruster025e8492011-09-06 18:58:47 +02003140 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003141
Markus Armbruster025e8492011-09-06 18:58:47 +02003142 if (drv && drv->bdrv_lock_medium) {
3143 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003144 }
3145}
ths985a03b2007-12-24 16:10:43 +00003146
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003147void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003148{
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003149 bs->guest_block_size = align;
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003150}
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003151
Fam Zheng0db6e542015-04-17 19:49:50 -04003152BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3153{
3154 BdrvDirtyBitmap *bm;
3155
3156 assert(name);
3157 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3158 if (bm->name && !strcmp(name, bm->name)) {
3159 return bm;
3160 }
3161 }
3162 return NULL;
3163}
3164
John Snow20dca812015-04-17 19:50:02 -04003165void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
Fam Zheng0db6e542015-04-17 19:49:50 -04003166{
John Snow9bd2b082015-04-17 19:49:57 -04003167 assert(!bdrv_dirty_bitmap_frozen(bitmap));
Fam Zheng0db6e542015-04-17 19:49:50 -04003168 g_free(bitmap->name);
3169 bitmap->name = NULL;
3170}
3171
3172BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
John Snow5fba6c02015-04-17 19:49:51 -04003173 uint32_t granularity,
Fam Zheng0db6e542015-04-17 19:49:50 -04003174 const char *name,
Fam Zhengb8afb522014-04-16 09:34:30 +08003175 Error **errp)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003176{
3177 int64_t bitmap_size;
Fam Zhenge4654d22013-11-13 18:29:43 +08003178 BdrvDirtyBitmap *bitmap;
John Snow5fba6c02015-04-17 19:49:51 -04003179 uint32_t sector_granularity;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003180
Paolo Bonzini50717e92013-01-21 17:09:45 +01003181 assert((granularity & (granularity - 1)) == 0);
3182
Fam Zheng0db6e542015-04-17 19:49:50 -04003183 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3184 error_setg(errp, "Bitmap already exists: %s", name);
3185 return NULL;
3186 }
John Snow5fba6c02015-04-17 19:49:51 -04003187 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3188 assert(sector_granularity);
Markus Armbruster57322b72014-06-26 13:23:22 +02003189 bitmap_size = bdrv_nb_sectors(bs);
Fam Zhengb8afb522014-04-16 09:34:30 +08003190 if (bitmap_size < 0) {
3191 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3192 errno = -bitmap_size;
3193 return NULL;
3194 }
Markus Armbruster5839e532014-08-19 10:31:08 +02003195 bitmap = g_new0(BdrvDirtyBitmap, 1);
John Snow5fba6c02015-04-17 19:49:51 -04003196 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
John Snowe74e6b72015-04-17 19:49:59 -04003197 bitmap->size = bitmap_size;
Fam Zheng0db6e542015-04-17 19:49:50 -04003198 bitmap->name = g_strdup(name);
John Snowb8e6fb72015-04-17 19:49:56 -04003199 bitmap->disabled = false;
Fam Zhenge4654d22013-11-13 18:29:43 +08003200 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3201 return bitmap;
3202}
3203
John Snow9bd2b082015-04-17 19:49:57 -04003204bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3205{
3206 return bitmap->successor;
3207}
3208
John Snowb8e6fb72015-04-17 19:49:56 -04003209bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3210{
John Snow9bd2b082015-04-17 19:49:57 -04003211 return !(bitmap->disabled || bitmap->successor);
3212}
3213
John Snow9abe3bd2015-05-12 15:53:01 -04003214DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3215{
3216 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3217 return DIRTY_BITMAP_STATUS_FROZEN;
3218 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3219 return DIRTY_BITMAP_STATUS_DISABLED;
3220 } else {
3221 return DIRTY_BITMAP_STATUS_ACTIVE;
3222 }
3223}
3224
John Snow9bd2b082015-04-17 19:49:57 -04003225/**
3226 * Create a successor bitmap destined to replace this bitmap after an operation.
3227 * Requires that the bitmap is not frozen and has no successor.
3228 */
3229int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3230 BdrvDirtyBitmap *bitmap, Error **errp)
3231{
3232 uint64_t granularity;
3233 BdrvDirtyBitmap *child;
3234
3235 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3236 error_setg(errp, "Cannot create a successor for a bitmap that is "
3237 "currently frozen");
3238 return -1;
3239 }
3240 assert(!bitmap->successor);
3241
3242 /* Create an anonymous successor */
3243 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3244 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3245 if (!child) {
3246 return -1;
3247 }
3248
3249 /* Successor will be on or off based on our current state. */
3250 child->disabled = bitmap->disabled;
3251
3252 /* Install the successor and freeze the parent */
3253 bitmap->successor = child;
3254 return 0;
3255}
3256
3257/**
3258 * For a bitmap with a successor, yield our name to the successor,
3259 * delete the old bitmap, and return a handle to the new bitmap.
3260 */
3261BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3262 BdrvDirtyBitmap *bitmap,
3263 Error **errp)
3264{
3265 char *name;
3266 BdrvDirtyBitmap *successor = bitmap->successor;
3267
3268 if (successor == NULL) {
3269 error_setg(errp, "Cannot relinquish control if "
3270 "there's no successor present");
3271 return NULL;
3272 }
3273
3274 name = bitmap->name;
3275 bitmap->name = NULL;
3276 successor->name = name;
3277 bitmap->successor = NULL;
3278 bdrv_release_dirty_bitmap(bs, bitmap);
3279
3280 return successor;
3281}
3282
3283/**
3284 * In cases of failure where we can no longer safely delete the parent,
3285 * we may wish to re-join the parent and child/successor.
3286 * The merged parent will be un-frozen, but not explicitly re-enabled.
3287 */
3288BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3289 BdrvDirtyBitmap *parent,
3290 Error **errp)
3291{
3292 BdrvDirtyBitmap *successor = parent->successor;
3293
3294 if (!successor) {
3295 error_setg(errp, "Cannot reclaim a successor when none is present");
3296 return NULL;
3297 }
3298
3299 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3300 error_setg(errp, "Merging of parent and successor bitmap failed");
3301 return NULL;
3302 }
3303 bdrv_release_dirty_bitmap(bs, successor);
3304 parent->successor = NULL;
3305
3306 return parent;
John Snowb8e6fb72015-04-17 19:49:56 -04003307}
3308
John Snowce1ffea2015-04-17 19:50:03 -04003309/**
3310 * Truncates _all_ bitmaps attached to a BDS.
3311 */
3312static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3313{
3314 BdrvDirtyBitmap *bitmap;
3315 uint64_t size = bdrv_nb_sectors(bs);
3316
3317 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snow06207b02015-06-10 13:24:54 -04003318 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowce1ffea2015-04-17 19:50:03 -04003319 hbitmap_truncate(bitmap->bitmap, size);
John Snow5270b6a2015-06-08 16:49:15 -04003320 bitmap->size = size;
John Snowce1ffea2015-04-17 19:50:03 -04003321 }
3322}
3323
Fam Zhenge4654d22013-11-13 18:29:43 +08003324void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3325{
3326 BdrvDirtyBitmap *bm, *next;
3327 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3328 if (bm == bitmap) {
John Snow9bd2b082015-04-17 19:49:57 -04003329 assert(!bdrv_dirty_bitmap_frozen(bm));
Fam Zhenge4654d22013-11-13 18:29:43 +08003330 QLIST_REMOVE(bitmap, list);
3331 hbitmap_free(bitmap->bitmap);
Fam Zheng0db6e542015-04-17 19:49:50 -04003332 g_free(bitmap->name);
Fam Zhenge4654d22013-11-13 18:29:43 +08003333 g_free(bitmap);
3334 return;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003335 }
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003336 }
3337}
3338
John Snowb8e6fb72015-04-17 19:49:56 -04003339void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3340{
John Snow9bd2b082015-04-17 19:49:57 -04003341 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003342 bitmap->disabled = true;
3343}
3344
3345void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3346{
John Snow9bd2b082015-04-17 19:49:57 -04003347 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003348 bitmap->disabled = false;
3349}
3350
Fam Zheng21b56832013-11-13 18:29:44 +08003351BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3352{
3353 BdrvDirtyBitmap *bm;
3354 BlockDirtyInfoList *list = NULL;
3355 BlockDirtyInfoList **plist = &list;
3356
3357 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
Markus Armbruster5839e532014-08-19 10:31:08 +02003358 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3359 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
John Snow20dca812015-04-17 19:50:02 -04003360 info->count = bdrv_get_dirty_count(bm);
John Snow592fdd02015-04-17 19:49:53 -04003361 info->granularity = bdrv_dirty_bitmap_granularity(bm);
Fam Zheng0db6e542015-04-17 19:49:50 -04003362 info->has_name = !!bm->name;
3363 info->name = g_strdup(bm->name);
John Snow9abe3bd2015-05-12 15:53:01 -04003364 info->status = bdrv_dirty_bitmap_status(bm);
Fam Zheng21b56832013-11-13 18:29:44 +08003365 entry->value = info;
3366 *plist = entry;
3367 plist = &entry->next;
3368 }
3369
3370 return list;
3371}
3372
Fam Zhenge4654d22013-11-13 18:29:43 +08003373int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003374{
Fam Zhenge4654d22013-11-13 18:29:43 +08003375 if (bitmap) {
3376 return hbitmap_get(bitmap->bitmap, sector);
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003377 } else {
3378 return 0;
3379 }
3380}
3381
John Snow341ebc22015-04-17 19:49:52 -04003382/**
3383 * Chooses a default granularity based on the existing cluster size,
3384 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3385 * is no cluster size information available.
3386 */
3387uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3388{
3389 BlockDriverInfo bdi;
3390 uint32_t granularity;
3391
3392 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3393 granularity = MAX(4096, bdi.cluster_size);
3394 granularity = MIN(65536, granularity);
3395 } else {
3396 granularity = 65536;
3397 }
3398
3399 return granularity;
3400}
3401
John Snow592fdd02015-04-17 19:49:53 -04003402uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3403{
3404 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3405}
3406
John Snow20dca812015-04-17 19:50:02 -04003407void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003408{
Fam Zhenge4654d22013-11-13 18:29:43 +08003409 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
Paolo Bonzini1755da12012-10-18 16:49:18 +02003410}
3411
John Snow20dca812015-04-17 19:50:02 -04003412void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003413 int64_t cur_sector, int nr_sectors)
3414{
John Snowb8e6fb72015-04-17 19:49:56 -04003415 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003416 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3417}
3418
John Snow20dca812015-04-17 19:50:02 -04003419void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003420 int64_t cur_sector, int nr_sectors)
3421{
John Snowb8e6fb72015-04-17 19:49:56 -04003422 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003423 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3424}
3425
John Snowe74e6b72015-04-17 19:49:59 -04003426void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3427{
3428 assert(bdrv_dirty_bitmap_enabled(bitmap));
3429 hbitmap_reset(bitmap->bitmap, 0, bitmap->size);
3430}
3431
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003432void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3433 int nr_sectors)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003434{
Fam Zhenge4654d22013-11-13 18:29:43 +08003435 BdrvDirtyBitmap *bitmap;
3436 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003437 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3438 continue;
3439 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003440 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
Paolo Bonzini8f0720e2013-01-21 17:09:41 +01003441 }
Liran Schouraaa0eb72010-01-26 10:31:48 +02003442}
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003443
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003444void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
3445 int nr_sectors)
Fam Zhenge4654d22013-11-13 18:29:43 +08003446{
3447 BdrvDirtyBitmap *bitmap;
3448 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003449 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3450 continue;
3451 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003452 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3453 }
3454}
3455
John Snowd58d8452015-04-17 19:49:58 -04003456/**
3457 * Advance an HBitmapIter to an arbitrary offset.
3458 */
3459void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3460{
3461 assert(hbi->hb);
3462 hbitmap_iter_init(hbi, hbi->hb, offset);
3463}
3464
John Snow20dca812015-04-17 19:50:02 -04003465int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
Fam Zhenge4654d22013-11-13 18:29:43 +08003466{
3467 return hbitmap_count(bitmap->bitmap);
3468}
3469
Fam Zheng9fcb0252013-08-23 09:14:46 +08003470/* Get a reference to bs */
3471void bdrv_ref(BlockDriverState *bs)
3472{
3473 bs->refcnt++;
3474}
3475
3476/* Release a previously grabbed reference to bs.
3477 * If after releasing, reference count is zero, the BlockDriverState is
3478 * deleted. */
3479void bdrv_unref(BlockDriverState *bs)
3480{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003481 if (!bs) {
3482 return;
3483 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003484 assert(bs->refcnt > 0);
3485 if (--bs->refcnt == 0) {
3486 bdrv_delete(bs);
3487 }
3488}
3489
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003490struct BdrvOpBlocker {
3491 Error *reason;
3492 QLIST_ENTRY(BdrvOpBlocker) list;
3493};
3494
3495bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3496{
3497 BdrvOpBlocker *blocker;
3498 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3499 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3500 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3501 if (errp) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03003502 error_setg(errp, "Node '%s' is busy: %s",
3503 bdrv_get_device_or_node_name(bs),
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003504 error_get_pretty(blocker->reason));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003505 }
3506 return true;
3507 }
3508 return false;
3509}
3510
3511void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3512{
3513 BdrvOpBlocker *blocker;
3514 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3515
Markus Armbruster5839e532014-08-19 10:31:08 +02003516 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003517 blocker->reason = reason;
3518 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3519}
3520
3521void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3522{
3523 BdrvOpBlocker *blocker, *next;
3524 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3525 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3526 if (blocker->reason == reason) {
3527 QLIST_REMOVE(blocker, list);
3528 g_free(blocker);
3529 }
3530 }
3531}
3532
3533void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3534{
3535 int i;
3536 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3537 bdrv_op_block(bs, i, reason);
3538 }
3539}
3540
3541void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3542{
3543 int i;
3544 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3545 bdrv_op_unblock(bs, i, reason);
3546 }
3547}
3548
3549bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3550{
3551 int i;
3552
3553 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3554 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3555 return false;
3556 }
3557 }
3558 return true;
3559}
3560
Luiz Capitulino28a72822011-09-26 17:43:50 -03003561void bdrv_iostatus_enable(BlockDriverState *bs)
3562{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003563 bs->iostatus_enabled = true;
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003564 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003565}
3566
3567/* The I/O status is only enabled if the drive explicitly
3568 * enables it _and_ the VM is configured to stop on errors */
3569bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
3570{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003571 return (bs->iostatus_enabled &&
Paolo Bonzini92aa5c62012-09-28 17:22:55 +02003572 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
3573 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP ||
3574 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
Luiz Capitulino28a72822011-09-26 17:43:50 -03003575}
3576
3577void bdrv_iostatus_disable(BlockDriverState *bs)
3578{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003579 bs->iostatus_enabled = false;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003580}
3581
3582void bdrv_iostatus_reset(BlockDriverState *bs)
3583{
3584 if (bdrv_iostatus_is_enabled(bs)) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003585 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Paolo Bonzini3bd293c2012-10-18 16:49:27 +02003586 if (bs->job) {
3587 block_job_iostatus_reset(bs->job);
3588 }
Luiz Capitulino28a72822011-09-26 17:43:50 -03003589 }
3590}
3591
Luiz Capitulino28a72822011-09-26 17:43:50 -03003592void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
3593{
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02003594 assert(bdrv_iostatus_is_enabled(bs));
3595 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003596 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
3597 BLOCK_DEVICE_IO_STATUS_FAILED;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003598 }
3599}
3600
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003601void bdrv_img_create(const char *filename, const char *fmt,
3602 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003603 char *options, uint64_t img_size, int flags,
3604 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003605{
Chunyan Liu83d05212014-06-05 17:20:51 +08003606 QemuOptsList *create_opts = NULL;
3607 QemuOpts *opts = NULL;
3608 const char *backing_fmt, *backing_file;
3609 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003610 BlockDriver *drv, *proto_drv;
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003611 BlockDriver *backing_drv = NULL;
Max Reitzcc84d902013-09-06 17:14:26 +02003612 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003613 int ret = 0;
3614
3615 /* Find driver and parse its options */
3616 drv = bdrv_find_format(fmt);
3617 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003618 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003619 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003620 }
3621
Max Reitzb65a5e12015-02-05 13:58:12 -05003622 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003623 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003624 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003625 }
3626
Max Reitzc6149722014-12-02 18:32:45 +01003627 if (!drv->create_opts) {
3628 error_setg(errp, "Format driver '%s' does not support image creation",
3629 drv->format_name);
3630 return;
3631 }
3632
3633 if (!proto_drv->create_opts) {
3634 error_setg(errp, "Protocol driver '%s' does not support image creation",
3635 proto_drv->format_name);
3636 return;
3637 }
3638
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003639 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3640 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003641
3642 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003643 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003644 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003645
3646 /* Parse -o options */
3647 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003648 qemu_opts_do_parse(opts, options, NULL, &local_err);
3649 if (local_err) {
3650 error_report_err(local_err);
3651 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003652 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003653 goto out;
3654 }
3655 }
3656
3657 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003658 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003659 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003660 error_setg(errp, "Backing file not supported for file format '%s'",
3661 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003662 goto out;
3663 }
3664 }
3665
3666 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003667 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003668 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003669 error_setg(errp, "Backing file format not supported for file "
3670 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003671 goto out;
3672 }
3673 }
3674
Chunyan Liu83d05212014-06-05 17:20:51 +08003675 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3676 if (backing_file) {
3677 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003678 error_setg(errp, "Error: Trying to create an image with the "
3679 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003680 goto out;
3681 }
3682 }
3683
Chunyan Liu83d05212014-06-05 17:20:51 +08003684 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3685 if (backing_fmt) {
3686 backing_drv = bdrv_find_format(backing_fmt);
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003687 if (!backing_drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003688 error_setg(errp, "Unknown backing file format '%s'",
Chunyan Liu83d05212014-06-05 17:20:51 +08003689 backing_fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003690 goto out;
3691 }
3692 }
3693
3694 // The size for the image must always be specified, with one exception:
3695 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003696 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3697 if (size == -1) {
3698 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003699 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003700 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003701 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003702 int back_flags;
3703
Max Reitz29168012014-11-26 17:20:27 +01003704 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3705 full_backing, PATH_MAX,
3706 &local_err);
3707 if (local_err) {
3708 g_free(full_backing);
3709 goto out;
3710 }
3711
Paolo Bonzini63090da2012-04-12 14:01:03 +02003712 /* backing files always opened read-only */
3713 back_flags =
3714 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003715
Max Reitzf67503e2014-02-18 18:33:05 +01003716 bs = NULL;
Max Reitz29168012014-11-26 17:20:27 +01003717 ret = bdrv_open(&bs, full_backing, NULL, NULL, back_flags,
Max Reitzcc84d902013-09-06 17:14:26 +02003718 backing_drv, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003719 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003720 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003721 goto out;
3722 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003723 size = bdrv_getlength(bs);
3724 if (size < 0) {
3725 error_setg_errno(errp, -size, "Could not get size of '%s'",
3726 backing_file);
3727 bdrv_unref(bs);
3728 goto out;
3729 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003730
Markus Armbruster39101f22015-02-12 16:46:36 +01003731 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003732
3733 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003734 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003735 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003736 goto out;
3737 }
3738 }
3739
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003740 if (!quiet) {
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003741 printf("Formatting '%s', fmt=%s", filename, fmt);
3742 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003743 puts("");
3744 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003745
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003746 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003747
Max Reitzcc84d902013-09-06 17:14:26 +02003748 if (ret == -EFBIG) {
3749 /* This is generally a better message than whatever the driver would
3750 * deliver (especially because of the cluster_size_hint), since that
3751 * is most probably not much different from "image too large". */
3752 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003753 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003754 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003755 }
Max Reitzcc84d902013-09-06 17:14:26 +02003756 error_setg(errp, "The image size is too large for file format '%s'"
3757 "%s", fmt, cluster_size_hint);
3758 error_free(local_err);
3759 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003760 }
3761
3762out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003763 qemu_opts_del(opts);
3764 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003765 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003766 error_propagate(errp, local_err);
3767 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003768}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003769
3770AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3771{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003772 return bs->aio_context;
3773}
3774
3775void bdrv_detach_aio_context(BlockDriverState *bs)
3776{
Max Reitz33384422014-06-20 21:57:33 +02003777 BdrvAioNotifier *baf;
3778
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003779 if (!bs->drv) {
3780 return;
3781 }
3782
Max Reitz33384422014-06-20 21:57:33 +02003783 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3784 baf->detach_aio_context(baf->opaque);
3785 }
3786
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003787 if (bs->io_limits_enabled) {
3788 throttle_detach_aio_context(&bs->throttle_state);
3789 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003790 if (bs->drv->bdrv_detach_aio_context) {
3791 bs->drv->bdrv_detach_aio_context(bs);
3792 }
3793 if (bs->file) {
3794 bdrv_detach_aio_context(bs->file);
3795 }
3796 if (bs->backing_hd) {
3797 bdrv_detach_aio_context(bs->backing_hd);
3798 }
3799
3800 bs->aio_context = NULL;
3801}
3802
3803void bdrv_attach_aio_context(BlockDriverState *bs,
3804 AioContext *new_context)
3805{
Max Reitz33384422014-06-20 21:57:33 +02003806 BdrvAioNotifier *ban;
3807
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003808 if (!bs->drv) {
3809 return;
3810 }
3811
3812 bs->aio_context = new_context;
3813
3814 if (bs->backing_hd) {
3815 bdrv_attach_aio_context(bs->backing_hd, new_context);
3816 }
3817 if (bs->file) {
3818 bdrv_attach_aio_context(bs->file, new_context);
3819 }
3820 if (bs->drv->bdrv_attach_aio_context) {
3821 bs->drv->bdrv_attach_aio_context(bs, new_context);
3822 }
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003823 if (bs->io_limits_enabled) {
3824 throttle_attach_aio_context(&bs->throttle_state, new_context);
3825 }
Max Reitz33384422014-06-20 21:57:33 +02003826
3827 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3828 ban->attached_aio_context(new_context, ban->opaque);
3829 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003830}
3831
3832void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3833{
3834 bdrv_drain_all(); /* ensure there are no in-flight requests */
3835
3836 bdrv_detach_aio_context(bs);
3837
3838 /* This function executes in the old AioContext so acquire the new one in
3839 * case it runs in a different thread.
3840 */
3841 aio_context_acquire(new_context);
3842 bdrv_attach_aio_context(bs, new_context);
3843 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003844}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003845
Max Reitz33384422014-06-20 21:57:33 +02003846void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3847 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3848 void (*detach_aio_context)(void *opaque), void *opaque)
3849{
3850 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3851 *ban = (BdrvAioNotifier){
3852 .attached_aio_context = attached_aio_context,
3853 .detach_aio_context = detach_aio_context,
3854 .opaque = opaque
3855 };
3856
3857 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3858}
3859
3860void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3861 void (*attached_aio_context)(AioContext *,
3862 void *),
3863 void (*detach_aio_context)(void *),
3864 void *opaque)
3865{
3866 BdrvAioNotifier *ban, *ban_next;
3867
3868 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3869 if (ban->attached_aio_context == attached_aio_context &&
3870 ban->detach_aio_context == detach_aio_context &&
3871 ban->opaque == opaque)
3872 {
3873 QLIST_REMOVE(ban, list);
3874 g_free(ban);
3875
3876 return;
3877 }
3878 }
3879
3880 abort();
3881}
3882
Max Reitz77485432014-10-27 11:12:50 +01003883int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3884 BlockDriverAmendStatusCB *status_cb)
Max Reitz6f176b42013-09-03 10:09:50 +02003885{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003886 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003887 return -ENOTSUP;
3888 }
Max Reitz77485432014-10-27 11:12:50 +01003889 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
Max Reitz6f176b42013-09-03 10:09:50 +02003890}
Benoît Canetf6186f42013-10-02 14:33:48 +02003891
Benoît Canetb5042a32014-03-03 19:11:34 +01003892/* This function will be called by the bdrv_recurse_is_first_non_filter method
3893 * of block filter and by bdrv_is_first_non_filter.
3894 * It is used to test if the given bs is the candidate or recurse more in the
3895 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003896 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003897bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3898 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003899{
Benoît Canetb5042a32014-03-03 19:11:34 +01003900 /* return false if basic checks fails */
3901 if (!bs || !bs->drv) {
3902 return false;
3903 }
3904
3905 /* the code reached a non block filter driver -> check if the bs is
3906 * the same as the candidate. It's the recursion termination condition.
3907 */
3908 if (!bs->drv->is_filter) {
3909 return bs == candidate;
3910 }
3911 /* Down this path the driver is a block filter driver */
3912
3913 /* If the block filter recursion method is defined use it to recurse down
3914 * the node graph.
3915 */
3916 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003917 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3918 }
3919
Benoît Canetb5042a32014-03-03 19:11:34 +01003920 /* the driver is a block filter but don't allow to recurse -> return false
3921 */
3922 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003923}
3924
3925/* This function checks if the candidate is the first non filter bs down it's
3926 * bs chain. Since we don't have pointers to parents it explore all bs chains
3927 * from the top. Some filters can choose not to pass down the recursion.
3928 */
3929bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3930{
3931 BlockDriverState *bs;
3932
3933 /* walk down the bs forest recursively */
3934 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3935 bool perm;
3936
Benoît Canetb5042a32014-03-03 19:11:34 +01003937 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003938 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003939
3940 /* candidate is the first non filter */
3941 if (perm) {
3942 return true;
3943 }
3944 }
3945
3946 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02003947}
Benoît Canet09158f02014-06-27 18:25:25 +02003948
3949BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
3950{
3951 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003952 AioContext *aio_context;
3953
Benoît Canet09158f02014-06-27 18:25:25 +02003954 if (!to_replace_bs) {
3955 error_setg(errp, "Node name '%s' not found", node_name);
3956 return NULL;
3957 }
3958
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003959 aio_context = bdrv_get_aio_context(to_replace_bs);
3960 aio_context_acquire(aio_context);
3961
Benoît Canet09158f02014-06-27 18:25:25 +02003962 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003963 to_replace_bs = NULL;
3964 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003965 }
3966
3967 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3968 * most non filter in order to prevent data corruption.
3969 * Another benefit is that this tests exclude backing files which are
3970 * blocked by the backing blockers.
3971 */
3972 if (!bdrv_is_first_non_filter(to_replace_bs)) {
3973 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003974 to_replace_bs = NULL;
3975 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003976 }
3977
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003978out:
3979 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02003980 return to_replace_bs;
3981}
Ming Lei448ad912014-07-04 18:04:33 +08003982
Max Reitz91af7012014-07-18 20:24:56 +02003983static bool append_open_options(QDict *d, BlockDriverState *bs)
3984{
3985 const QDictEntry *entry;
3986 bool found_any = false;
3987
3988 for (entry = qdict_first(bs->options); entry;
3989 entry = qdict_next(bs->options, entry))
3990 {
3991 /* Only take options for this level and exclude all non-driver-specific
3992 * options */
3993 if (!strchr(qdict_entry_key(entry), '.') &&
3994 strcmp(qdict_entry_key(entry), "node-name"))
3995 {
3996 qobject_incref(qdict_entry_value(entry));
3997 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3998 found_any = true;
3999 }
4000 }
4001
4002 return found_any;
4003}
4004
4005/* Updates the following BDS fields:
4006 * - exact_filename: A filename which may be used for opening a block device
4007 * which (mostly) equals the given BDS (even without any
4008 * other options; so reading and writing must return the same
4009 * results, but caching etc. may be different)
4010 * - full_open_options: Options which, when given when opening a block device
4011 * (without a filename), result in a BDS (mostly)
4012 * equalling the given one
4013 * - filename: If exact_filename is set, it is copied here. Otherwise,
4014 * full_open_options is converted to a JSON object, prefixed with
4015 * "json:" (for use through the JSON pseudo protocol) and put here.
4016 */
4017void bdrv_refresh_filename(BlockDriverState *bs)
4018{
4019 BlockDriver *drv = bs->drv;
4020 QDict *opts;
4021
4022 if (!drv) {
4023 return;
4024 }
4025
4026 /* This BDS's file name will most probably depend on its file's name, so
4027 * refresh that first */
4028 if (bs->file) {
4029 bdrv_refresh_filename(bs->file);
4030 }
4031
4032 if (drv->bdrv_refresh_filename) {
4033 /* Obsolete information is of no use here, so drop the old file name
4034 * information before refreshing it */
4035 bs->exact_filename[0] = '\0';
4036 if (bs->full_open_options) {
4037 QDECREF(bs->full_open_options);
4038 bs->full_open_options = NULL;
4039 }
4040
4041 drv->bdrv_refresh_filename(bs);
4042 } else if (bs->file) {
4043 /* Try to reconstruct valid information from the underlying file */
4044 bool has_open_options;
4045
4046 bs->exact_filename[0] = '\0';
4047 if (bs->full_open_options) {
4048 QDECREF(bs->full_open_options);
4049 bs->full_open_options = NULL;
4050 }
4051
4052 opts = qdict_new();
4053 has_open_options = append_open_options(opts, bs);
4054
4055 /* If no specific options have been given for this BDS, the filename of
4056 * the underlying file should suffice for this one as well */
4057 if (bs->file->exact_filename[0] && !has_open_options) {
4058 strcpy(bs->exact_filename, bs->file->exact_filename);
4059 }
4060 /* Reconstructing the full options QDict is simple for most format block
4061 * drivers, as long as the full options are known for the underlying
4062 * file BDS. The full options QDict of that file BDS should somehow
4063 * contain a representation of the filename, therefore the following
4064 * suffices without querying the (exact_)filename of this BDS. */
4065 if (bs->file->full_open_options) {
4066 qdict_put_obj(opts, "driver",
4067 QOBJECT(qstring_from_str(drv->format_name)));
4068 QINCREF(bs->file->full_open_options);
4069 qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
4070
4071 bs->full_open_options = opts;
4072 } else {
4073 QDECREF(opts);
4074 }
4075 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4076 /* There is no underlying file BDS (at least referenced by BDS.file),
4077 * so the full options QDict should be equal to the options given
4078 * specifically for this block device when it was opened (plus the
4079 * driver specification).
4080 * Because those options don't change, there is no need to update
4081 * full_open_options when it's already set. */
4082
4083 opts = qdict_new();
4084 append_open_options(opts, bs);
4085 qdict_put_obj(opts, "driver",
4086 QOBJECT(qstring_from_str(drv->format_name)));
4087
4088 if (bs->exact_filename[0]) {
4089 /* This may not work for all block protocol drivers (some may
4090 * require this filename to be parsed), but we have to find some
4091 * default solution here, so just include it. If some block driver
4092 * does not support pure options without any filename at all or
4093 * needs some special format of the options QDict, it needs to
4094 * implement the driver-specific bdrv_refresh_filename() function.
4095 */
4096 qdict_put_obj(opts, "filename",
4097 QOBJECT(qstring_from_str(bs->exact_filename)));
4098 }
4099
4100 bs->full_open_options = opts;
4101 }
4102
4103 if (bs->exact_filename[0]) {
4104 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4105 } else if (bs->full_open_options) {
4106 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4107 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4108 qstring_get_str(json));
4109 QDECREF(json);
4110 }
4111}
Benoît Canet5366d0c2014-09-05 15:46:18 +02004112
4113/* This accessor function purpose is to allow the device models to access the
4114 * BlockAcctStats structure embedded inside a BlockDriverState without being
4115 * aware of the BlockDriverState structure layout.
4116 * It will go away when the BlockAcctStats structure will be moved inside
4117 * the device models.
4118 */
4119BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
4120{
4121 return &bs->stats;
4122}