blob: 58d12c029d9013f9c5380cf97ed350f755530ff4 [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
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001328static void bdrv_attach_child(BlockDriverState *parent_bs,
1329 BlockDriverState *child_bs,
1330 const BdrvChildRole *child_role)
1331{
1332 BdrvChild *child = g_new(BdrvChild, 1);
1333 *child = (BdrvChild) {
1334 .bs = child_bs,
1335 .role = child_role,
1336 };
1337
1338 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1339}
1340
Max Reitzda557aa2013-12-20 19:28:11 +01001341/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001342 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001343 *
1344 * options is a QDict of options to pass to the block drivers, or NULL for an
1345 * empty set of options. The reference to the QDict belongs to the block layer
1346 * after the call (even on failure), so if the caller intends to reuse the
1347 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001348 *
1349 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1350 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001351 *
1352 * The reference parameter may be used to specify an existing block device which
1353 * should be opened. If specified, neither options nor a filename may be given,
1354 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001355 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001356static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1357 const char *reference, QDict *options, int flags,
1358 BlockDriverState *parent,
1359 const BdrvChildRole *child_role,
1360 BlockDriver *drv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001361{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001362 int ret;
Max Reitzf67503e2014-02-18 18:33:05 +01001363 BlockDriverState *file = NULL, *bs;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001364 const char *drvname;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001365 Error *local_err = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001366 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001367
Max Reitzf67503e2014-02-18 18:33:05 +01001368 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001369 assert(!child_role || !flags);
1370 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001371
Max Reitzddf56362014-02-18 18:33:06 +01001372 if (reference) {
1373 bool options_non_empty = options ? qdict_size(options) : false;
1374 QDECREF(options);
1375
1376 if (*pbs) {
1377 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1378 "another block device");
1379 return -EINVAL;
1380 }
1381
1382 if (filename || options_non_empty) {
1383 error_setg(errp, "Cannot reference an existing block device with "
1384 "additional options or a new filename");
1385 return -EINVAL;
1386 }
1387
1388 bs = bdrv_lookup_bs(reference, reference, errp);
1389 if (!bs) {
1390 return -ENODEV;
1391 }
1392 bdrv_ref(bs);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001393 if (child_role) {
1394 bdrv_attach_child(parent, bs, child_role);
1395 }
Max Reitzddf56362014-02-18 18:33:06 +01001396 *pbs = bs;
1397 return 0;
1398 }
1399
Max Reitzf67503e2014-02-18 18:33:05 +01001400 if (*pbs) {
1401 bs = *pbs;
1402 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001403 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001404 }
1405
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001406 /* NULL means an empty set of options */
1407 if (options == NULL) {
1408 options = qdict_new();
1409 }
1410
Kevin Wolff3930ed2015-04-08 13:43:47 +02001411 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001412 bs->inherits_from = parent;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001413 flags = child_role->inherit_flags(parent->open_flags);
1414 }
1415
Max Reitz53a29512015-03-19 14:53:16 -04001416 ret = bdrv_fill_options(&options, &filename, &flags, drv, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001417 if (local_err) {
1418 goto fail;
1419 }
1420
Kevin Wolf76c591b2014-06-04 14:19:44 +02001421 /* Find the right image format driver */
1422 drv = NULL;
1423 drvname = qdict_get_try_str(options, "driver");
1424 if (drvname) {
1425 drv = bdrv_find_format(drvname);
1426 qdict_del(options, "driver");
1427 if (!drv) {
1428 error_setg(errp, "Unknown driver: '%s'", drvname);
1429 ret = -EINVAL;
1430 goto fail;
1431 }
1432 }
1433
1434 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001435
Kevin Wolff3930ed2015-04-08 13:43:47 +02001436 bs->open_flags = flags;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001437 bs->options = options;
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001438 options = qdict_clone_shallow(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001439
Kevin Wolff4788ad2014-06-03 16:44:19 +02001440 /* Open image file without format layer */
1441 if ((flags & BDRV_O_PROTOCOL) == 0) {
1442 if (flags & BDRV_O_RDWR) {
1443 flags |= BDRV_O_ALLOW_RDWR;
1444 }
1445 if (flags & BDRV_O_SNAPSHOT) {
1446 snapshot_flags = bdrv_temp_snapshot_flags(flags);
1447 flags = bdrv_backing_flags(flags);
1448 }
1449
1450 assert(file == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001451 bs->open_flags = flags;
Kevin Wolff4788ad2014-06-03 16:44:19 +02001452 ret = bdrv_open_image(&file, filename, options, "file",
Kevin Wolff3930ed2015-04-08 13:43:47 +02001453 bs, &child_file, true, &local_err);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001454 if (ret < 0) {
Max Reitz5469a2a2014-02-18 18:33:10 +01001455 goto fail;
1456 }
1457 }
1458
Kevin Wolf76c591b2014-06-04 14:19:44 +02001459 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001460 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001461 if (!drv && file) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001462 ret = find_image_format(file, filename, &drv, &local_err);
1463 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001464 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001465 }
Kevin Wolf76c591b2014-06-04 14:19:44 +02001466 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001467 error_setg(errp, "Must specify either driver or file");
1468 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001469 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001470 }
1471
Max Reitz53a29512015-03-19 14:53:16 -04001472 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1473 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1474 /* file must be NULL if a protocol BDS is about to be created
1475 * (the inverse results in an error message from bdrv_open_common()) */
1476 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1477
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001478 /* Open the image */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001479 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001480 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001481 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001482 }
1483
Max Reitz2a05cbe2013-12-20 19:28:10 +01001484 if (file && (bs->file != file)) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001485 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001486 file = NULL;
1487 }
1488
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001489 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001490 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001491 QDict *backing_options;
1492
Benoît Canet5726d872013-09-25 13:30:01 +02001493 qdict_extract_subqdict(options, &backing_options, "backing.");
Max Reitz34b5d2c2013-09-05 14:45:29 +02001494 ret = bdrv_open_backing_file(bs, backing_options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001495 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001496 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001497 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001498 }
1499
Max Reitz91af7012014-07-18 20:24:56 +02001500 bdrv_refresh_filename(bs);
1501
Kevin Wolfb9988752014-04-03 12:09:34 +02001502 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1503 * temporary snapshot afterwards. */
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001504 if (snapshot_flags) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001505 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001506 if (local_err) {
Kevin Wolfb9988752014-04-03 12:09:34 +02001507 goto close_and_fail;
1508 }
1509 }
1510
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001511 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001512 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001513 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001514 if (flags & BDRV_O_PROTOCOL) {
1515 error_setg(errp, "Block protocol '%s' doesn't support the option "
1516 "'%s'", drv->format_name, entry->key);
1517 } else {
1518 error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1519 "support the option '%s'", drv->format_name,
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001520 bdrv_get_device_name(bs), entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001521 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001522
1523 ret = -EINVAL;
1524 goto close_and_fail;
1525 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001526
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001527 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001528 if (bs->blk) {
1529 blk_dev_change_media_cb(bs->blk, true);
1530 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001531 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1532 && !runstate_check(RUN_STATE_INMIGRATE)
1533 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1534 error_setg(errp,
1535 "Guest must be stopped for opening of encrypted image");
1536 ret = -EBUSY;
1537 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001538 }
1539
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001540 if (child_role) {
1541 bdrv_attach_child(parent, bs, child_role);
1542 }
1543
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001544 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001545 *pbs = bs;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001546 return 0;
1547
Kevin Wolf8bfea152014-04-11 19:16:36 +02001548fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001549 if (file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001550 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001551 }
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001552 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001553 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001554 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001555 if (!*pbs) {
1556 /* If *pbs is NULL, a new BDS has been created in this function and
1557 needs to be freed now. Otherwise, it does not need to be closed,
1558 since it has not really been opened yet. */
1559 bdrv_unref(bs);
1560 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001561 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001562 error_propagate(errp, local_err);
1563 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001564 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001565
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001566close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001567 /* See fail path, but now the BDS has to be always closed */
1568 if (*pbs) {
1569 bdrv_close(bs);
1570 } else {
1571 bdrv_unref(bs);
1572 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001573 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001574 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001575 error_propagate(errp, local_err);
1576 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001577 return ret;
1578}
1579
Kevin Wolff3930ed2015-04-08 13:43:47 +02001580int bdrv_open(BlockDriverState **pbs, const char *filename,
1581 const char *reference, QDict *options, int flags,
1582 BlockDriver *drv, Error **errp)
1583{
1584 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
1585 NULL, drv, errp);
1586}
1587
Jeff Codye971aa12012-09-20 15:13:19 -04001588typedef struct BlockReopenQueueEntry {
1589 bool prepared;
1590 BDRVReopenState state;
1591 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1592} BlockReopenQueueEntry;
1593
1594/*
1595 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1596 * reopen of multiple devices.
1597 *
1598 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1599 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1600 * be created and initialized. This newly created BlockReopenQueue should be
1601 * passed back in for subsequent calls that are intended to be of the same
1602 * atomic 'set'.
1603 *
1604 * bs is the BlockDriverState to add to the reopen queue.
1605 *
1606 * flags contains the open flags for the associated bs
1607 *
1608 * returns a pointer to bs_queue, which is either the newly allocated
1609 * bs_queue, or the existing bs_queue being used.
1610 *
1611 */
1612BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1613 BlockDriverState *bs, int flags)
1614{
1615 assert(bs != NULL);
1616
1617 BlockReopenQueueEntry *bs_entry;
1618 if (bs_queue == NULL) {
1619 bs_queue = g_new0(BlockReopenQueue, 1);
1620 QSIMPLEQ_INIT(bs_queue);
1621 }
1622
Kevin Wolff1f25a22014-04-25 19:04:55 +02001623 /* bdrv_open() masks this flag out */
1624 flags &= ~BDRV_O_PROTOCOL;
1625
Jeff Codye971aa12012-09-20 15:13:19 -04001626 if (bs->file) {
Kevin Wolff1f25a22014-04-25 19:04:55 +02001627 bdrv_reopen_queue(bs_queue, bs->file, bdrv_inherited_flags(flags));
Jeff Codye971aa12012-09-20 15:13:19 -04001628 }
1629
1630 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1631 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1632
1633 bs_entry->state.bs = bs;
1634 bs_entry->state.flags = flags;
1635
1636 return bs_queue;
1637}
1638
1639/*
1640 * Reopen multiple BlockDriverStates atomically & transactionally.
1641 *
1642 * The queue passed in (bs_queue) must have been built up previous
1643 * via bdrv_reopen_queue().
1644 *
1645 * Reopens all BDS specified in the queue, with the appropriate
1646 * flags. All devices are prepared for reopen, and failure of any
1647 * device will cause all device changes to be abandonded, and intermediate
1648 * data cleaned up.
1649 *
1650 * If all devices prepare successfully, then the changes are committed
1651 * to all devices.
1652 *
1653 */
1654int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1655{
1656 int ret = -1;
1657 BlockReopenQueueEntry *bs_entry, *next;
1658 Error *local_err = NULL;
1659
1660 assert(bs_queue != NULL);
1661
1662 bdrv_drain_all();
1663
1664 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1665 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1666 error_propagate(errp, local_err);
1667 goto cleanup;
1668 }
1669 bs_entry->prepared = true;
1670 }
1671
1672 /* If we reach this point, we have success and just need to apply the
1673 * changes
1674 */
1675 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1676 bdrv_reopen_commit(&bs_entry->state);
1677 }
1678
1679 ret = 0;
1680
1681cleanup:
1682 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1683 if (ret && bs_entry->prepared) {
1684 bdrv_reopen_abort(&bs_entry->state);
1685 }
1686 g_free(bs_entry);
1687 }
1688 g_free(bs_queue);
1689 return ret;
1690}
1691
1692
1693/* Reopen a single BlockDriverState with the specified flags. */
1694int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1695{
1696 int ret = -1;
1697 Error *local_err = NULL;
1698 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1699
1700 ret = bdrv_reopen_multiple(queue, &local_err);
1701 if (local_err != NULL) {
1702 error_propagate(errp, local_err);
1703 }
1704 return ret;
1705}
1706
1707
1708/*
1709 * Prepares a BlockDriverState for reopen. All changes are staged in the
1710 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1711 * the block driver layer .bdrv_reopen_prepare()
1712 *
1713 * bs is the BlockDriverState to reopen
1714 * flags are the new open flags
1715 * queue is the reopen queue
1716 *
1717 * Returns 0 on success, non-zero on error. On error errp will be set
1718 * as well.
1719 *
1720 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1721 * It is the responsibility of the caller to then call the abort() or
1722 * commit() for any other BDS that have been left in a prepare() state
1723 *
1724 */
1725int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1726 Error **errp)
1727{
1728 int ret = -1;
1729 Error *local_err = NULL;
1730 BlockDriver *drv;
1731
1732 assert(reopen_state != NULL);
1733 assert(reopen_state->bs->drv != NULL);
1734 drv = reopen_state->bs->drv;
1735
1736 /* if we are to stay read-only, do not allow permission change
1737 * to r/w */
1738 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1739 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03001740 error_setg(errp, "Node '%s' is read only",
1741 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001742 goto error;
1743 }
1744
1745
1746 ret = bdrv_flush(reopen_state->bs);
1747 if (ret) {
1748 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1749 strerror(-ret));
1750 goto error;
1751 }
1752
1753 if (drv->bdrv_reopen_prepare) {
1754 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1755 if (ret) {
1756 if (local_err != NULL) {
1757 error_propagate(errp, local_err);
1758 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04001759 error_setg(errp, "failed while preparing to reopen image '%s'",
1760 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04001761 }
1762 goto error;
1763 }
1764 } else {
1765 /* It is currently mandatory to have a bdrv_reopen_prepare()
1766 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03001767 error_setg(errp, "Block format '%s' used by node '%s' "
1768 "does not support reopening files", drv->format_name,
1769 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001770 ret = -1;
1771 goto error;
1772 }
1773
1774 ret = 0;
1775
1776error:
1777 return ret;
1778}
1779
1780/*
1781 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1782 * makes them final by swapping the staging BlockDriverState contents into
1783 * the active BlockDriverState contents.
1784 */
1785void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1786{
1787 BlockDriver *drv;
1788
1789 assert(reopen_state != NULL);
1790 drv = reopen_state->bs->drv;
1791 assert(drv != NULL);
1792
1793 /* If there are any driver level actions to take */
1794 if (drv->bdrv_reopen_commit) {
1795 drv->bdrv_reopen_commit(reopen_state);
1796 }
1797
1798 /* set BDS specific flags now */
1799 reopen_state->bs->open_flags = reopen_state->flags;
1800 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1801 BDRV_O_CACHE_WB);
1802 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01001803
Kevin Wolf3baca892014-07-16 17:48:16 +02001804 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04001805}
1806
1807/*
1808 * Abort the reopen, and delete and free the staged changes in
1809 * reopen_state
1810 */
1811void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1812{
1813 BlockDriver *drv;
1814
1815 assert(reopen_state != NULL);
1816 drv = reopen_state->bs->drv;
1817 assert(drv != NULL);
1818
1819 if (drv->bdrv_reopen_abort) {
1820 drv->bdrv_reopen_abort(reopen_state);
1821 }
1822}
1823
1824
bellardfc01f7e2003-06-30 10:03:06 +00001825void bdrv_close(BlockDriverState *bs)
1826{
Max Reitz33384422014-06-20 21:57:33 +02001827 BdrvAioNotifier *ban, *ban_next;
1828
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001829 if (bs->job) {
1830 block_job_cancel_sync(bs->job);
1831 }
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02001832 bdrv_drain_all(); /* complete I/O */
1833 bdrv_flush(bs);
1834 bdrv_drain_all(); /* in case flush left pending I/O */
Paolo Bonzinid7d512f2012-08-23 11:20:36 +02001835 notifier_list_notify(&bs->close_notifiers, bs);
Kevin Wolf7094f122012-04-11 11:06:37 +02001836
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001837 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001838 BdrvChild *child, *next;
1839
1840 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001841 if (child->bs->inherits_from == bs) {
1842 child->bs->inherits_from = NULL;
1843 }
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001844 QLIST_REMOVE(child, next);
1845 g_free(child);
1846 }
1847
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001848 if (bs->backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001849 BlockDriverState *backing_hd = bs->backing_hd;
1850 bdrv_set_backing_hd(bs, NULL);
1851 bdrv_unref(backing_hd);
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001852 }
bellardea2384d2004-08-01 21:59:26 +00001853 bs->drv->bdrv_close(bs);
Anthony Liguori7267c092011-08-20 22:09:37 -05001854 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00001855 bs->opaque = NULL;
1856 bs->drv = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00001857 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02001858 bs->backing_file[0] = '\0';
1859 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02001860 bs->total_sectors = 0;
1861 bs->encrypted = 0;
1862 bs->valid_key = 0;
1863 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08001864 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001865 QDECREF(bs->options);
1866 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02001867 QDECREF(bs->full_open_options);
1868 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00001869
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001870 if (bs->file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001871 bdrv_unref(bs->file);
Paolo Bonzini0ac93772012-05-08 16:51:44 +02001872 bs->file = NULL;
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001873 }
bellardb3380822004-03-14 21:38:54 +00001874 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001875
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001876 if (bs->blk) {
1877 blk_dev_change_media_cb(bs->blk, false);
1878 }
Pavel Hrdina9ca11152012-08-09 12:44:48 +02001879
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001880 /*throttling disk I/O limits*/
1881 if (bs->io_limits_enabled) {
1882 bdrv_io_limits_disable(bs);
1883 }
Max Reitz33384422014-06-20 21:57:33 +02001884
1885 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1886 g_free(ban);
1887 }
1888 QLIST_INIT(&bs->aio_notifiers);
bellardb3380822004-03-14 21:38:54 +00001889}
1890
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001891void bdrv_close_all(void)
1892{
1893 BlockDriverState *bs;
1894
Benoît Canetdc364f42014-01-23 21:31:32 +01001895 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001896 AioContext *aio_context = bdrv_get_aio_context(bs);
1897
1898 aio_context_acquire(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001899 bdrv_close(bs);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001900 aio_context_release(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001901 }
1902}
1903
Benoît Canetdc364f42014-01-23 21:31:32 +01001904/* make a BlockDriverState anonymous by removing from bdrv_state and
1905 * graph_bdrv_state list.
Ryan Harperd22b2f42011-03-29 20:51:47 -05001906 Also, NULL terminate the device_name to prevent double remove */
1907void bdrv_make_anon(BlockDriverState *bs)
1908{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001909 /*
1910 * Take care to remove bs from bdrv_states only when it's actually
1911 * in it. Note that bs->device_list.tqe_prev is initially null,
1912 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1913 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1914 * resetting it to null on remove.
1915 */
1916 if (bs->device_list.tqe_prev) {
Benoît Canetdc364f42014-01-23 21:31:32 +01001917 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001918 bs->device_list.tqe_prev = NULL;
Ryan Harperd22b2f42011-03-29 20:51:47 -05001919 }
Benoît Canetdc364f42014-01-23 21:31:32 +01001920 if (bs->node_name[0] != '\0') {
1921 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1922 }
1923 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05001924}
1925
Paolo Bonzinie023b2e2012-05-08 16:51:41 +02001926static void bdrv_rebind(BlockDriverState *bs)
1927{
1928 if (bs->drv && bs->drv->bdrv_rebind) {
1929 bs->drv->bdrv_rebind(bs);
1930 }
1931}
1932
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001933static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
1934 BlockDriverState *bs_src)
1935{
1936 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001937
1938 /* dev info */
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01001939 bs_dest->guest_block_size = bs_src->guest_block_size;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001940 bs_dest->copy_on_read = bs_src->copy_on_read;
1941
1942 bs_dest->enable_write_cache = bs_src->enable_write_cache;
1943
Benoît Canetcc0681c2013-09-02 14:14:39 +02001944 /* i/o throttled req */
1945 memcpy(&bs_dest->throttle_state,
1946 &bs_src->throttle_state,
1947 sizeof(ThrottleState));
1948 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
1949 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001950 bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
1951
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001952 /* r/w error */
1953 bs_dest->on_read_error = bs_src->on_read_error;
1954 bs_dest->on_write_error = bs_src->on_write_error;
1955
1956 /* i/o status */
1957 bs_dest->iostatus_enabled = bs_src->iostatus_enabled;
1958 bs_dest->iostatus = bs_src->iostatus;
1959
1960 /* dirty bitmap */
Fam Zhenge4654d22013-11-13 18:29:43 +08001961 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001962
Fam Zheng9fcb0252013-08-23 09:14:46 +08001963 /* reference count */
1964 bs_dest->refcnt = bs_src->refcnt;
1965
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001966 /* job */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001967 bs_dest->job = bs_src->job;
1968
1969 /* keep the same entry in bdrv_states */
Benoît Canetdc364f42014-01-23 21:31:32 +01001970 bs_dest->device_list = bs_src->device_list;
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001971 bs_dest->blk = bs_src->blk;
1972
Fam Zhengfbe40ff2014-05-23 21:29:42 +08001973 memcpy(bs_dest->op_blockers, bs_src->op_blockers,
1974 sizeof(bs_dest->op_blockers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001975}
1976
1977/*
1978 * Swap bs contents for two image chains while they are live,
1979 * while keeping required fields on the BlockDriverState that is
1980 * actually attached to a device.
1981 *
1982 * This will modify the BlockDriverState fields, and swap contents
1983 * between bs_new and bs_old. Both bs_new and bs_old are modified.
1984 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001985 * bs_new must not be attached to a BlockBackend.
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001986 *
1987 * This function does not create any image files.
1988 */
1989void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
1990{
1991 BlockDriverState tmp;
Kevin Wolfbddcec32015-04-09 18:47:50 +02001992 BdrvChild *child;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001993
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02001994 bdrv_drain(bs_new);
1995 bdrv_drain(bs_old);
1996
Benoît Canet90ce8a02014-03-05 23:48:29 +01001997 /* The code needs to swap the node_name but simply swapping node_list won't
1998 * work so first remove the nodes from the graph list, do the swap then
1999 * insert them back if needed.
2000 */
2001 if (bs_new->node_name[0] != '\0') {
2002 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2003 }
2004 if (bs_old->node_name[0] != '\0') {
2005 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2006 }
2007
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002008 /* bs_new must be unattached and shouldn't have anything fancy enabled */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002009 assert(!bs_new->blk);
Fam Zhenge4654d22013-11-13 18:29:43 +08002010 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002011 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002012 assert(bs_new->io_limits_enabled == false);
Benoît Canetcc0681c2013-09-02 14:14:39 +02002013 assert(!throttle_have_timer(&bs_new->throttle_state));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002014
2015 tmp = *bs_new;
2016 *bs_new = *bs_old;
2017 *bs_old = tmp;
2018
2019 /* there are some fields that should not be swapped, move them back */
2020 bdrv_move_feature_fields(&tmp, bs_old);
2021 bdrv_move_feature_fields(bs_old, bs_new);
2022 bdrv_move_feature_fields(bs_new, &tmp);
2023
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002024 /* bs_new must remain unattached */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002025 assert(!bs_new->blk);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002026
2027 /* Check a few fields that should remain attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002028 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002029 assert(bs_new->io_limits_enabled == false);
Benoît Canetcc0681c2013-09-02 14:14:39 +02002030 assert(!throttle_have_timer(&bs_new->throttle_state));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002031
Benoît Canet90ce8a02014-03-05 23:48:29 +01002032 /* insert the nodes back into the graph node list if needed */
2033 if (bs_new->node_name[0] != '\0') {
2034 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2035 }
2036 if (bs_old->node_name[0] != '\0') {
2037 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2038 }
2039
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002040 /*
2041 * Update lh_first.le_prev for non-empty lists.
2042 *
2043 * The head of the op blocker list doesn't change because it is moved back
2044 * in bdrv_move_feature_fields().
2045 */
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002046 assert(QLIST_EMPTY(&bs_old->tracked_requests));
2047 assert(QLIST_EMPTY(&bs_new->tracked_requests));
2048
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002049 QLIST_FIX_HEAD_PTR(&bs_new->children, next);
2050 QLIST_FIX_HEAD_PTR(&bs_old->children, next);
2051
Kevin Wolfbddcec32015-04-09 18:47:50 +02002052 /* Update references in bs->opaque and children */
2053 QLIST_FOREACH(child, &bs_old->children, next) {
2054 if (child->bs->inherits_from == bs_new) {
2055 child->bs->inherits_from = bs_old;
2056 }
2057 }
2058 QLIST_FOREACH(child, &bs_new->children, next) {
2059 if (child->bs->inherits_from == bs_old) {
2060 child->bs->inherits_from = bs_new;
2061 }
2062 }
2063
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002064 bdrv_rebind(bs_new);
2065 bdrv_rebind(bs_old);
2066}
2067
Jeff Cody8802d1f2012-02-28 15:54:06 -05002068/*
2069 * Add new bs contents at the top of an image chain while the chain is
2070 * live, while keeping required fields on the top layer.
2071 *
2072 * This will modify the BlockDriverState fields, and swap contents
2073 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2074 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002075 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002076 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002077 * This function does not create any image files.
2078 */
2079void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2080{
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002081 bdrv_swap(bs_new, bs_top);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002082
2083 /* The contents of 'tmp' will become bs_top, as we are
2084 * swapping bs_new and bs_top contents. */
Fam Zheng8d24cce2014-05-23 21:29:45 +08002085 bdrv_set_backing_hd(bs_top, bs_new);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002086 bdrv_attach_child(bs_top, bs_new, &child_backing);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002087}
2088
Fam Zheng4f6fd342013-08-23 09:14:47 +08002089static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002090{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002091 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002092 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002093 assert(!bs->refcnt);
Fam Zhenge4654d22013-11-13 18:29:43 +08002094 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
Markus Armbruster18846de2010-06-29 16:58:30 +02002095
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002096 bdrv_close(bs);
2097
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002098 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002099 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002100
Anthony Liguori7267c092011-08-20 22:09:37 -05002101 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002102}
2103
aliguorie97fc192009-04-21 23:11:50 +00002104/*
2105 * Run consistency checks on an image
2106 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002107 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002108 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002109 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002110 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002111int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002112{
Max Reitz908bcd52014-08-07 22:47:55 +02002113 if (bs->drv == NULL) {
2114 return -ENOMEDIUM;
2115 }
aliguorie97fc192009-04-21 23:11:50 +00002116 if (bs->drv->bdrv_check == NULL) {
2117 return -ENOTSUP;
2118 }
2119
Kevin Wolfe076f332010-06-29 11:43:13 +02002120 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002121 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002122}
2123
Kevin Wolf8a426612010-07-16 17:17:01 +02002124#define COMMIT_BUF_SECTORS 2048
2125
bellard33e39632003-07-06 17:15:21 +00002126/* commit COW file into the raw image */
2127int bdrv_commit(BlockDriverState *bs)
2128{
bellard19cb3732006-08-19 11:45:59 +00002129 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002130 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002131 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002132 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002133 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002134
bellard19cb3732006-08-19 11:45:59 +00002135 if (!drv)
2136 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002137
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002138 if (!bs->backing_hd) {
2139 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002140 }
2141
Fam Zhengbb000212014-09-11 13:14:00 +08002142 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2143 bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002144 return -EBUSY;
2145 }
2146
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002147 ro = bs->backing_hd->read_only;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002148 open_flags = bs->backing_hd->open_flags;
2149
2150 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002151 if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2152 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002153 }
bellard33e39632003-07-06 17:15:21 +00002154 }
bellardea2384d2004-08-01 21:59:26 +00002155
Jeff Cody72706ea2014-01-24 09:02:35 -05002156 length = bdrv_getlength(bs);
2157 if (length < 0) {
2158 ret = length;
2159 goto ro_cleanup;
2160 }
2161
2162 backing_length = bdrv_getlength(bs->backing_hd);
2163 if (backing_length < 0) {
2164 ret = backing_length;
2165 goto ro_cleanup;
2166 }
2167
2168 /* If our top snapshot is larger than the backing file image,
2169 * grow the backing file image if possible. If not possible,
2170 * we must return an error */
2171 if (length > backing_length) {
2172 ret = bdrv_truncate(bs->backing_hd, length);
2173 if (ret < 0) {
2174 goto ro_cleanup;
2175 }
2176 }
2177
2178 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002179
2180 /* qemu_try_blockalign() for bs will choose an alignment that works for
2181 * bs->backing_hd as well, so no need to compare the alignment manually. */
2182 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2183 if (buf == NULL) {
2184 ret = -ENOMEM;
2185 goto ro_cleanup;
2186 }
bellardea2384d2004-08-01 21:59:26 +00002187
Kevin Wolf8a426612010-07-16 17:17:01 +02002188 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002189 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2190 if (ret < 0) {
2191 goto ro_cleanup;
2192 }
2193 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002194 ret = bdrv_read(bs, sector, buf, n);
2195 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002196 goto ro_cleanup;
2197 }
2198
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002199 ret = bdrv_write(bs->backing_hd, sector, buf, n);
2200 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002201 goto ro_cleanup;
2202 }
bellardea2384d2004-08-01 21:59:26 +00002203 }
2204 }
bellard95389c82005-12-18 18:28:15 +00002205
Christoph Hellwig1d449522010-01-17 12:32:30 +01002206 if (drv->bdrv_make_empty) {
2207 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002208 if (ret < 0) {
2209 goto ro_cleanup;
2210 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002211 bdrv_flush(bs);
2212 }
bellard95389c82005-12-18 18:28:15 +00002213
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002214 /*
2215 * Make sure all data we wrote to the backing device is actually
2216 * stable on disk.
2217 */
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002218 if (bs->backing_hd) {
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002219 bdrv_flush(bs->backing_hd);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002220 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002221
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002222 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002223ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002224 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002225
2226 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002227 /* ignoring error return here */
2228 bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002229 }
2230
Christoph Hellwig1d449522010-01-17 12:32:30 +01002231 return ret;
bellard33e39632003-07-06 17:15:21 +00002232}
2233
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002234int bdrv_commit_all(void)
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002235{
2236 BlockDriverState *bs;
2237
Benoît Canetdc364f42014-01-23 21:31:32 +01002238 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002239 AioContext *aio_context = bdrv_get_aio_context(bs);
2240
2241 aio_context_acquire(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002242 if (bs->drv && bs->backing_hd) {
2243 int ret = bdrv_commit(bs);
2244 if (ret < 0) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002245 aio_context_release(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002246 return ret;
2247 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002248 }
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002249 aio_context_release(aio_context);
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002250 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002251 return 0;
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002252}
2253
Kevin Wolf756e6732010-01-12 12:55:17 +01002254/*
2255 * Return values:
2256 * 0 - success
2257 * -EINVAL - backing format specified, but no file
2258 * -ENOSPC - can't update the backing file because no space is left in the
2259 * image file header
2260 * -ENOTSUP - format driver doesn't support changing the backing file
2261 */
2262int bdrv_change_backing_file(BlockDriverState *bs,
2263 const char *backing_file, const char *backing_fmt)
2264{
2265 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002266 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002267
Paolo Bonzini5f377792012-04-12 14:01:01 +02002268 /* Backing file format doesn't make sense without a backing file */
2269 if (backing_fmt && !backing_file) {
2270 return -EINVAL;
2271 }
2272
Kevin Wolf756e6732010-01-12 12:55:17 +01002273 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002274 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002275 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002276 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002277 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002278
2279 if (ret == 0) {
2280 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2281 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2282 }
2283 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002284}
2285
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002286/*
2287 * Finds the image layer in the chain that has 'bs' as its backing file.
2288 *
2289 * active is the current topmost image.
2290 *
2291 * Returns NULL if bs is not found in active's image chain,
2292 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002293 *
2294 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002295 */
2296BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2297 BlockDriverState *bs)
2298{
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002299 while (active && bs != active->backing_hd) {
2300 active = active->backing_hd;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002301 }
2302
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002303 return active;
2304}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002305
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002306/* Given a BDS, searches for the base layer. */
2307BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2308{
2309 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002310}
2311
2312typedef struct BlkIntermediateStates {
2313 BlockDriverState *bs;
2314 QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2315} BlkIntermediateStates;
2316
2317
2318/*
2319 * Drops images above 'base' up to and including 'top', and sets the image
2320 * above 'top' to have base as its backing file.
2321 *
2322 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2323 * information in 'bs' can be properly updated.
2324 *
2325 * E.g., this will convert the following chain:
2326 * bottom <- base <- intermediate <- top <- active
2327 *
2328 * to
2329 *
2330 * bottom <- base <- active
2331 *
2332 * It is allowed for bottom==base, in which case it converts:
2333 *
2334 * base <- intermediate <- top <- active
2335 *
2336 * to
2337 *
2338 * base <- active
2339 *
Jeff Cody54e26902014-06-25 15:40:10 -04002340 * If backing_file_str is non-NULL, it will be used when modifying top's
2341 * overlay image metadata.
2342 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002343 * Error conditions:
2344 * if active == top, that is considered an error
2345 *
2346 */
2347int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002348 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002349{
2350 BlockDriverState *intermediate;
2351 BlockDriverState *base_bs = NULL;
2352 BlockDriverState *new_top_bs = NULL;
2353 BlkIntermediateStates *intermediate_state, *next;
2354 int ret = -EIO;
2355
2356 QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2357 QSIMPLEQ_INIT(&states_to_delete);
2358
2359 if (!top->drv || !base->drv) {
2360 goto exit;
2361 }
2362
2363 new_top_bs = bdrv_find_overlay(active, top);
2364
2365 if (new_top_bs == NULL) {
2366 /* we could not find the image above 'top', this is an error */
2367 goto exit;
2368 }
2369
2370 /* special case of new_top_bs->backing_hd already pointing to base - nothing
2371 * to do, no intermediate images */
2372 if (new_top_bs->backing_hd == base) {
2373 ret = 0;
2374 goto exit;
2375 }
2376
2377 intermediate = top;
2378
2379 /* now we will go down through the list, and add each BDS we find
2380 * into our deletion queue, until we hit the 'base'
2381 */
2382 while (intermediate) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002383 intermediate_state = g_new0(BlkIntermediateStates, 1);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002384 intermediate_state->bs = intermediate;
2385 QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2386
2387 if (intermediate->backing_hd == base) {
2388 base_bs = intermediate->backing_hd;
2389 break;
2390 }
2391 intermediate = intermediate->backing_hd;
2392 }
2393 if (base_bs == NULL) {
2394 /* something went wrong, we did not end at the base. safely
2395 * unravel everything, and exit with error */
2396 goto exit;
2397 }
2398
2399 /* success - we can delete the intermediate states, and link top->base */
Jeff Cody54e26902014-06-25 15:40:10 -04002400 backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2401 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002402 base_bs->drv ? base_bs->drv->format_name : "");
2403 if (ret) {
2404 goto exit;
2405 }
Fam Zheng920beae2014-05-23 21:29:46 +08002406 bdrv_set_backing_hd(new_top_bs, base_bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002407
2408 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2409 /* so that bdrv_close() does not recursively close the chain */
Fam Zheng920beae2014-05-23 21:29:46 +08002410 bdrv_set_backing_hd(intermediate_state->bs, NULL);
Fam Zheng4f6fd342013-08-23 09:14:47 +08002411 bdrv_unref(intermediate_state->bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002412 }
2413 ret = 0;
2414
2415exit:
2416 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2417 g_free(intermediate_state);
2418 }
2419 return ret;
2420}
2421
bellard83f64092006-08-01 16:21:11 +00002422/**
bellard83f64092006-08-01 16:21:11 +00002423 * Truncate file to 'offset' bytes (needed only for file protocols)
2424 */
2425int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2426{
2427 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002428 int ret;
bellard83f64092006-08-01 16:21:11 +00002429 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002430 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002431 if (!drv->bdrv_truncate)
2432 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002433 if (bs->read_only)
2434 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002435
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002436 ret = drv->bdrv_truncate(bs, offset);
2437 if (ret == 0) {
2438 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002439 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002440 if (bs->blk) {
2441 blk_dev_resize_cb(bs->blk);
2442 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002443 }
2444 return ret;
bellard83f64092006-08-01 16:21:11 +00002445}
2446
2447/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002448 * Length of a allocated file in bytes. Sparse files are counted by actual
2449 * allocated space. Return < 0 if error or unknown.
2450 */
2451int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2452{
2453 BlockDriver *drv = bs->drv;
2454 if (!drv) {
2455 return -ENOMEDIUM;
2456 }
2457 if (drv->bdrv_get_allocated_file_size) {
2458 return drv->bdrv_get_allocated_file_size(bs);
2459 }
2460 if (bs->file) {
2461 return bdrv_get_allocated_file_size(bs->file);
2462 }
2463 return -ENOTSUP;
2464}
2465
2466/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002467 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002468 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002469int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002470{
2471 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002472
bellard83f64092006-08-01 16:21:11 +00002473 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002474 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002475
Kevin Wolfb94a2612013-10-29 12:18:58 +01002476 if (drv->has_variable_length) {
2477 int ret = refresh_total_sectors(bs, bs->total_sectors);
2478 if (ret < 0) {
2479 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002480 }
bellard83f64092006-08-01 16:21:11 +00002481 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002482 return bs->total_sectors;
2483}
2484
2485/**
2486 * Return length in bytes on success, -errno on error.
2487 * The length is always a multiple of BDRV_SECTOR_SIZE.
2488 */
2489int64_t bdrv_getlength(BlockDriverState *bs)
2490{
2491 int64_t ret = bdrv_nb_sectors(bs);
2492
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002493 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002494 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002495}
2496
bellard19cb3732006-08-19 11:45:59 +00002497/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002498void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002499{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002500 int64_t nb_sectors = bdrv_nb_sectors(bs);
2501
2502 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002503}
bellardcf989512004-02-16 21:56:36 +00002504
Paolo Bonziniff06f5f2012-09-28 17:22:54 +02002505void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
2506 BlockdevOnError on_write_error)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002507{
2508 bs->on_read_error = on_read_error;
2509 bs->on_write_error = on_write_error;
2510}
2511
Paolo Bonzini1ceee0d2012-09-28 17:22:56 +02002512BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002513{
2514 return is_read ? bs->on_read_error : bs->on_write_error;
2515}
2516
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002517BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
2518{
2519 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
2520
2521 switch (on_err) {
2522 case BLOCKDEV_ON_ERROR_ENOSPC:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002523 return (error == ENOSPC) ?
2524 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002525 case BLOCKDEV_ON_ERROR_STOP:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002526 return BLOCK_ERROR_ACTION_STOP;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002527 case BLOCKDEV_ON_ERROR_REPORT:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002528 return BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002529 case BLOCKDEV_ON_ERROR_IGNORE:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002530 return BLOCK_ERROR_ACTION_IGNORE;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002531 default:
2532 abort();
2533 }
2534}
2535
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002536static void send_qmp_error_event(BlockDriverState *bs,
2537 BlockErrorAction action,
2538 bool is_read, int error)
2539{
Peter Maydell573742a2014-10-10 20:33:03 +01002540 IoOperationType optype;
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002541
Peter Maydell573742a2014-10-10 20:33:03 +01002542 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
2543 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002544 bdrv_iostatus_is_enabled(bs),
Luiz Capitulino624ff572014-09-11 10:25:48 -04002545 error == ENOSPC, strerror(error),
2546 &error_abort);
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002547}
2548
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002549/* This is done by device models because, while the block layer knows
2550 * about the error, it does not know whether an operation comes from
2551 * the device or the block layer (from a job, for example).
2552 */
2553void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
2554 bool is_read, int error)
2555{
2556 assert(error >= 0);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002557
Wenchao Xiaa5895692014-06-18 08:43:30 +02002558 if (action == BLOCK_ERROR_ACTION_STOP) {
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002559 /* First set the iostatus, so that "info block" returns an iostatus
2560 * that matches the events raised so far (an additional error iostatus
2561 * is fine, but not a lost one).
2562 */
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002563 bdrv_iostatus_set_err(bs, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002564
2565 /* Then raise the request to stop the VM and the event.
2566 * qemu_system_vmstop_request_prepare has two effects. First,
2567 * it ensures that the STOP event always comes after the
2568 * BLOCK_IO_ERROR event. Second, it ensures that even if management
2569 * can observe the STOP event and do a "cont" before the STOP
2570 * event is issued, the VM will not stop. In this case, vm_start()
2571 * also ensures that the STOP/RESUME pair of events is emitted.
2572 */
2573 qemu_system_vmstop_request_prepare();
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002574 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002575 qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
2576 } else {
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002577 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002578 }
2579}
2580
bellardb3380822004-03-14 21:38:54 +00002581int bdrv_is_read_only(BlockDriverState *bs)
2582{
2583 return bs->read_only;
2584}
2585
ths985a03b2007-12-24 16:10:43 +00002586int bdrv_is_sg(BlockDriverState *bs)
2587{
2588 return bs->sg;
2589}
2590
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002591int bdrv_enable_write_cache(BlockDriverState *bs)
2592{
2593 return bs->enable_write_cache;
2594}
2595
Paolo Bonzini425b0142012-06-06 00:04:52 +02002596void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2597{
2598 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002599
2600 /* so a reopen() will preserve wce */
2601 if (wce) {
2602 bs->open_flags |= BDRV_O_CACHE_WB;
2603 } else {
2604 bs->open_flags &= ~BDRV_O_CACHE_WB;
2605 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002606}
2607
bellardea2384d2004-08-01 21:59:26 +00002608int bdrv_is_encrypted(BlockDriverState *bs)
2609{
2610 if (bs->backing_hd && bs->backing_hd->encrypted)
2611 return 1;
2612 return bs->encrypted;
2613}
2614
aliguoric0f4ce72009-03-05 23:01:01 +00002615int bdrv_key_required(BlockDriverState *bs)
2616{
2617 BlockDriverState *backing_hd = bs->backing_hd;
2618
2619 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
2620 return 1;
2621 return (bs->encrypted && !bs->valid_key);
2622}
2623
bellardea2384d2004-08-01 21:59:26 +00002624int bdrv_set_key(BlockDriverState *bs, const char *key)
2625{
2626 int ret;
2627 if (bs->backing_hd && bs->backing_hd->encrypted) {
2628 ret = bdrv_set_key(bs->backing_hd, key);
2629 if (ret < 0)
2630 return ret;
2631 if (!bs->encrypted)
2632 return 0;
2633 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002634 if (!bs->encrypted) {
2635 return -EINVAL;
2636 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2637 return -ENOMEDIUM;
2638 }
aliguoric0f4ce72009-03-05 23:01:01 +00002639 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002640 if (ret < 0) {
2641 bs->valid_key = 0;
2642 } else if (!bs->valid_key) {
2643 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002644 if (bs->blk) {
2645 /* call the change callback now, we skipped it on open */
2646 blk_dev_change_media_cb(bs->blk, true);
2647 }
aliguoribb5fc202009-03-05 23:01:15 +00002648 }
aliguoric0f4ce72009-03-05 23:01:01 +00002649 return ret;
bellardea2384d2004-08-01 21:59:26 +00002650}
2651
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002652/*
2653 * Provide an encryption key for @bs.
2654 * If @key is non-null:
2655 * If @bs is not encrypted, fail.
2656 * Else if the key is invalid, fail.
2657 * Else set @bs's key to @key, replacing the existing key, if any.
2658 * If @key is null:
2659 * If @bs is encrypted and still lacks a key, fail.
2660 * Else do nothing.
2661 * On failure, store an error object through @errp if non-null.
2662 */
2663void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2664{
2665 if (key) {
2666 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002667 error_setg(errp, "Node '%s' is not encrypted",
2668 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002669 } else if (bdrv_set_key(bs, key) < 0) {
2670 error_set(errp, QERR_INVALID_PASSWORD);
2671 }
2672 } else {
2673 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002674 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2675 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002676 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002677 bdrv_get_encrypted_filename(bs));
2678 }
2679 }
2680}
2681
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002682const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002683{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002684 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002685}
2686
Stefan Hajnocziada42402014-08-27 12:08:55 +01002687static int qsort_strcmp(const void *a, const void *b)
2688{
2689 return strcmp(a, b);
2690}
2691
ths5fafdf22007-09-16 21:08:06 +00002692void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002693 void *opaque)
2694{
2695 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002696 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002697 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002698 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002699
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002700 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002701 if (drv->format_name) {
2702 bool found = false;
2703 int i = count;
2704 while (formats && i && !found) {
2705 found = !strcmp(formats[--i], drv->format_name);
2706 }
2707
2708 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002709 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002710 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002711 }
2712 }
bellardea2384d2004-08-01 21:59:26 +00002713 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002714
2715 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2716
2717 for (i = 0; i < count; i++) {
2718 it(opaque, formats[i]);
2719 }
2720
Jeff Codye855e4f2014-04-28 18:29:54 -04002721 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002722}
2723
Benoît Canetdc364f42014-01-23 21:31:32 +01002724/* This function is to find a node in the bs graph */
2725BlockDriverState *bdrv_find_node(const char *node_name)
2726{
2727 BlockDriverState *bs;
2728
2729 assert(node_name);
2730
2731 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2732 if (!strcmp(node_name, bs->node_name)) {
2733 return bs;
2734 }
2735 }
2736 return NULL;
2737}
2738
Benoît Canetc13163f2014-01-23 21:31:34 +01002739/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002740BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002741{
2742 BlockDeviceInfoList *list, *entry;
2743 BlockDriverState *bs;
2744
2745 list = NULL;
2746 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002747 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2748 if (!info) {
2749 qapi_free_BlockDeviceInfoList(list);
2750 return NULL;
2751 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002752 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002753 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002754 entry->next = list;
2755 list = entry;
2756 }
2757
2758 return list;
2759}
2760
Benoît Canet12d3ba82014-01-23 21:31:35 +01002761BlockDriverState *bdrv_lookup_bs(const char *device,
2762 const char *node_name,
2763 Error **errp)
2764{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002765 BlockBackend *blk;
2766 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002767
Benoît Canet12d3ba82014-01-23 21:31:35 +01002768 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002769 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002770
Markus Armbruster7f06d472014-10-07 13:59:12 +02002771 if (blk) {
2772 return blk_bs(blk);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002773 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002774 }
2775
Benoît Canetdd67fa52014-02-12 17:15:06 +01002776 if (node_name) {
2777 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002778
Benoît Canetdd67fa52014-02-12 17:15:06 +01002779 if (bs) {
2780 return bs;
2781 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002782 }
2783
Benoît Canetdd67fa52014-02-12 17:15:06 +01002784 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2785 device ? device : "",
2786 node_name ? node_name : "");
2787 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002788}
2789
Jeff Cody5a6684d2014-06-25 15:40:09 -04002790/* If 'base' is in the same chain as 'top', return true. Otherwise,
2791 * return false. If either argument is NULL, return false. */
2792bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2793{
2794 while (top && top != base) {
2795 top = top->backing_hd;
2796 }
2797
2798 return top != NULL;
2799}
2800
Fam Zheng04df7652014-10-31 11:32:54 +08002801BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2802{
2803 if (!bs) {
2804 return QTAILQ_FIRST(&graph_bdrv_states);
2805 }
2806 return QTAILQ_NEXT(bs, node_list);
2807}
2808
Markus Armbruster2f399b02010-06-02 18:55:20 +02002809BlockDriverState *bdrv_next(BlockDriverState *bs)
2810{
2811 if (!bs) {
2812 return QTAILQ_FIRST(&bdrv_states);
2813 }
Benoît Canetdc364f42014-01-23 21:31:32 +01002814 return QTAILQ_NEXT(bs, device_list);
Markus Armbruster2f399b02010-06-02 18:55:20 +02002815}
2816
Fam Zheng20a9e772014-10-31 11:32:55 +08002817const char *bdrv_get_node_name(const BlockDriverState *bs)
2818{
2819 return bs->node_name;
2820}
2821
Markus Armbruster7f06d472014-10-07 13:59:12 +02002822/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002823const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002824{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002825 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002826}
2827
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002828/* This can be used to identify nodes that might not have a device
2829 * name associated. Since node and device names live in the same
2830 * namespace, the result is unambiguous. The exception is if both are
2831 * absent, then this returns an empty (non-null) string. */
2832const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2833{
2834 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2835}
2836
Markus Armbrusterc8433282012-06-05 16:49:24 +02002837int bdrv_get_flags(BlockDriverState *bs)
2838{
2839 return bs->open_flags;
2840}
2841
Peter Lieven3ac21622013-06-28 12:47:42 +02002842int bdrv_has_zero_init_1(BlockDriverState *bs)
2843{
2844 return 1;
2845}
2846
Kevin Wolff2feebb2010-04-14 17:30:35 +02002847int bdrv_has_zero_init(BlockDriverState *bs)
2848{
2849 assert(bs->drv);
2850
Paolo Bonzini11212d82013-09-04 19:00:27 +02002851 /* If BS is a copy on write image, it is initialized to
2852 the contents of the base image, which may not be zeroes. */
2853 if (bs->backing_hd) {
2854 return 0;
2855 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002856 if (bs->drv->bdrv_has_zero_init) {
2857 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002858 }
2859
Peter Lieven3ac21622013-06-28 12:47:42 +02002860 /* safe default */
2861 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002862}
2863
Peter Lieven4ce78692013-10-24 12:06:54 +02002864bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2865{
2866 BlockDriverInfo bdi;
2867
2868 if (bs->backing_hd) {
2869 return false;
2870 }
2871
2872 if (bdrv_get_info(bs, &bdi) == 0) {
2873 return bdi.unallocated_blocks_are_zero;
2874 }
2875
2876 return false;
2877}
2878
2879bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2880{
2881 BlockDriverInfo bdi;
2882
2883 if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
2884 return false;
2885 }
2886
2887 if (bdrv_get_info(bs, &bdi) == 0) {
2888 return bdi.can_write_zeroes_with_unmap;
2889 }
2890
2891 return false;
2892}
2893
aliguori045df332009-03-05 23:00:48 +00002894const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2895{
2896 if (bs->backing_hd && bs->backing_hd->encrypted)
2897 return bs->backing_file;
2898 else if (bs->encrypted)
2899 return bs->filename;
2900 else
2901 return NULL;
2902}
2903
ths5fafdf22007-09-16 21:08:06 +00002904void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002905 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002906{
Kevin Wolf3574c602011-10-26 11:02:11 +02002907 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002908}
2909
bellardfaea38e2006-08-05 21:31:00 +00002910int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2911{
2912 BlockDriver *drv = bs->drv;
2913 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002914 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00002915 if (!drv->bdrv_get_info)
2916 return -ENOTSUP;
2917 memset(bdi, 0, sizeof(*bdi));
2918 return drv->bdrv_get_info(bs, bdi);
2919}
2920
Max Reitzeae041f2013-10-09 10:46:16 +02002921ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2922{
2923 BlockDriver *drv = bs->drv;
2924 if (drv && drv->bdrv_get_specific_info) {
2925 return drv->bdrv_get_specific_info(bs);
2926 }
2927 return NULL;
2928}
2929
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002930void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
2931{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002932 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002933 return;
2934 }
2935
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002936 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01002937}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002938
Kevin Wolf41c695c2012-12-06 14:32:58 +01002939int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2940 const char *tag)
2941{
2942 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
2943 bs = bs->file;
2944 }
2945
2946 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2947 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2948 }
2949
2950 return -ENOTSUP;
2951}
2952
Fam Zheng4cc70e92013-11-20 10:01:54 +08002953int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
2954{
2955 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
2956 bs = bs->file;
2957 }
2958
2959 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2960 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2961 }
2962
2963 return -ENOTSUP;
2964}
2965
Kevin Wolf41c695c2012-12-06 14:32:58 +01002966int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
2967{
Max Reitz938789e2014-03-10 23:44:08 +01002968 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf41c695c2012-12-06 14:32:58 +01002969 bs = bs->file;
2970 }
2971
2972 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
2973 return bs->drv->bdrv_debug_resume(bs, tag);
2974 }
2975
2976 return -ENOTSUP;
2977}
2978
2979bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
2980{
2981 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
2982 bs = bs->file;
2983 }
2984
2985 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
2986 return bs->drv->bdrv_debug_is_suspended(bs, tag);
2987 }
2988
2989 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002990}
2991
Blue Swirl199630b2010-07-25 20:49:34 +00002992int bdrv_is_snapshot(BlockDriverState *bs)
2993{
2994 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
2995}
2996
Jeff Codyb1b1d782012-10-16 15:49:09 -04002997/* backing_file can either be relative, or absolute, or a protocol. If it is
2998 * relative, it must be relative to the chain. So, passing in bs->filename
2999 * from a BDS as backing_file should not be done, as that may be relative to
3000 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003001BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3002 const char *backing_file)
3003{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003004 char *filename_full = NULL;
3005 char *backing_file_full = NULL;
3006 char *filename_tmp = NULL;
3007 int is_protocol = 0;
3008 BlockDriverState *curr_bs = NULL;
3009 BlockDriverState *retval = NULL;
3010
3011 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003012 return NULL;
3013 }
3014
Jeff Codyb1b1d782012-10-16 15:49:09 -04003015 filename_full = g_malloc(PATH_MAX);
3016 backing_file_full = g_malloc(PATH_MAX);
3017 filename_tmp = g_malloc(PATH_MAX);
3018
3019 is_protocol = path_has_protocol(backing_file);
3020
3021 for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
3022
3023 /* If either of the filename paths is actually a protocol, then
3024 * compare unmodified paths; otherwise make paths relative */
3025 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3026 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3027 retval = curr_bs->backing_hd;
3028 break;
3029 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003030 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003031 /* If not an absolute filename path, make it relative to the current
3032 * image's filename path */
3033 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3034 backing_file);
3035
3036 /* We are going to compare absolute pathnames */
3037 if (!realpath(filename_tmp, filename_full)) {
3038 continue;
3039 }
3040
3041 /* We need to make sure the backing filename we are comparing against
3042 * is relative to the current image filename (or absolute) */
3043 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3044 curr_bs->backing_file);
3045
3046 if (!realpath(filename_tmp, backing_file_full)) {
3047 continue;
3048 }
3049
3050 if (strcmp(backing_file_full, filename_full) == 0) {
3051 retval = curr_bs->backing_hd;
3052 break;
3053 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003054 }
3055 }
3056
Jeff Codyb1b1d782012-10-16 15:49:09 -04003057 g_free(filename_full);
3058 g_free(backing_file_full);
3059 g_free(filename_tmp);
3060 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003061}
3062
Benoît Canetf198fd12012-08-02 10:22:47 +02003063int bdrv_get_backing_file_depth(BlockDriverState *bs)
3064{
3065 if (!bs->drv) {
3066 return 0;
3067 }
3068
3069 if (!bs->backing_hd) {
3070 return 0;
3071 }
3072
3073 return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3074}
3075
bellardea2384d2004-08-01 21:59:26 +00003076void bdrv_init(void)
3077{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003078 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003079}
pbrookce1a14d2006-08-07 02:38:06 +00003080
Markus Armbrustereb852012009-10-27 18:41:44 +01003081void bdrv_init_with_whitelist(void)
3082{
3083 use_bdrv_whitelist = 1;
3084 bdrv_init();
3085}
3086
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003087void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003088{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003089 Error *local_err = NULL;
3090 int ret;
3091
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003092 if (!bs->drv) {
3093 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003094 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003095
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003096 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3097 return;
3098 }
3099 bs->open_flags &= ~BDRV_O_INCOMING;
3100
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003101 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003102 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003103 } else if (bs->file) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003104 bdrv_invalidate_cache(bs->file, &local_err);
3105 }
3106 if (local_err) {
3107 error_propagate(errp, local_err);
3108 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003109 }
3110
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003111 ret = refresh_total_sectors(bs, bs->total_sectors);
3112 if (ret < 0) {
3113 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3114 return;
3115 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003116}
3117
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003118void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003119{
3120 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003121 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003122
Benoît Canetdc364f42014-01-23 21:31:32 +01003123 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003124 AioContext *aio_context = bdrv_get_aio_context(bs);
3125
3126 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003127 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003128 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003129 if (local_err) {
3130 error_propagate(errp, local_err);
3131 return;
3132 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003133 }
3134}
3135
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003136/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003137/* removable device support */
3138
3139/**
3140 * Return TRUE if the media is present
3141 */
3142int bdrv_is_inserted(BlockDriverState *bs)
3143{
3144 BlockDriver *drv = bs->drv;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003145
bellard19cb3732006-08-19 11:45:59 +00003146 if (!drv)
3147 return 0;
3148 if (!drv->bdrv_is_inserted)
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003149 return 1;
3150 return drv->bdrv_is_inserted(bs);
bellard19cb3732006-08-19 11:45:59 +00003151}
3152
3153/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003154 * Return whether the media changed since the last call to this
3155 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003156 */
3157int bdrv_media_changed(BlockDriverState *bs)
3158{
3159 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003160
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003161 if (drv && drv->bdrv_media_changed) {
3162 return drv->bdrv_media_changed(bs);
3163 }
3164 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003165}
3166
3167/**
3168 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3169 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003170void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003171{
3172 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003173 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003174
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003175 if (drv && drv->bdrv_eject) {
3176 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003177 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003178
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003179 device_name = bdrv_get_device_name(bs);
3180 if (device_name[0] != '\0') {
3181 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003182 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003183 }
bellard19cb3732006-08-19 11:45:59 +00003184}
3185
bellard19cb3732006-08-19 11:45:59 +00003186/**
3187 * Lock or unlock the media (if it is locked, the user won't be able
3188 * to eject it manually).
3189 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003190void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003191{
3192 BlockDriver *drv = bs->drv;
3193
Markus Armbruster025e8492011-09-06 18:58:47 +02003194 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003195
Markus Armbruster025e8492011-09-06 18:58:47 +02003196 if (drv && drv->bdrv_lock_medium) {
3197 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003198 }
3199}
ths985a03b2007-12-24 16:10:43 +00003200
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003201void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003202{
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003203 bs->guest_block_size = align;
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003204}
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003205
Fam Zheng0db6e542015-04-17 19:49:50 -04003206BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3207{
3208 BdrvDirtyBitmap *bm;
3209
3210 assert(name);
3211 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3212 if (bm->name && !strcmp(name, bm->name)) {
3213 return bm;
3214 }
3215 }
3216 return NULL;
3217}
3218
John Snow20dca812015-04-17 19:50:02 -04003219void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
Fam Zheng0db6e542015-04-17 19:49:50 -04003220{
John Snow9bd2b082015-04-17 19:49:57 -04003221 assert(!bdrv_dirty_bitmap_frozen(bitmap));
Fam Zheng0db6e542015-04-17 19:49:50 -04003222 g_free(bitmap->name);
3223 bitmap->name = NULL;
3224}
3225
3226BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
John Snow5fba6c02015-04-17 19:49:51 -04003227 uint32_t granularity,
Fam Zheng0db6e542015-04-17 19:49:50 -04003228 const char *name,
Fam Zhengb8afb522014-04-16 09:34:30 +08003229 Error **errp)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003230{
3231 int64_t bitmap_size;
Fam Zhenge4654d22013-11-13 18:29:43 +08003232 BdrvDirtyBitmap *bitmap;
John Snow5fba6c02015-04-17 19:49:51 -04003233 uint32_t sector_granularity;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003234
Paolo Bonzini50717e92013-01-21 17:09:45 +01003235 assert((granularity & (granularity - 1)) == 0);
3236
Fam Zheng0db6e542015-04-17 19:49:50 -04003237 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3238 error_setg(errp, "Bitmap already exists: %s", name);
3239 return NULL;
3240 }
John Snow5fba6c02015-04-17 19:49:51 -04003241 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3242 assert(sector_granularity);
Markus Armbruster57322b72014-06-26 13:23:22 +02003243 bitmap_size = bdrv_nb_sectors(bs);
Fam Zhengb8afb522014-04-16 09:34:30 +08003244 if (bitmap_size < 0) {
3245 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3246 errno = -bitmap_size;
3247 return NULL;
3248 }
Markus Armbruster5839e532014-08-19 10:31:08 +02003249 bitmap = g_new0(BdrvDirtyBitmap, 1);
John Snow5fba6c02015-04-17 19:49:51 -04003250 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
John Snowe74e6b72015-04-17 19:49:59 -04003251 bitmap->size = bitmap_size;
Fam Zheng0db6e542015-04-17 19:49:50 -04003252 bitmap->name = g_strdup(name);
John Snowb8e6fb72015-04-17 19:49:56 -04003253 bitmap->disabled = false;
Fam Zhenge4654d22013-11-13 18:29:43 +08003254 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3255 return bitmap;
3256}
3257
John Snow9bd2b082015-04-17 19:49:57 -04003258bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3259{
3260 return bitmap->successor;
3261}
3262
John Snowb8e6fb72015-04-17 19:49:56 -04003263bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3264{
John Snow9bd2b082015-04-17 19:49:57 -04003265 return !(bitmap->disabled || bitmap->successor);
3266}
3267
John Snow9abe3bd2015-05-12 15:53:01 -04003268DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3269{
3270 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3271 return DIRTY_BITMAP_STATUS_FROZEN;
3272 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3273 return DIRTY_BITMAP_STATUS_DISABLED;
3274 } else {
3275 return DIRTY_BITMAP_STATUS_ACTIVE;
3276 }
3277}
3278
John Snow9bd2b082015-04-17 19:49:57 -04003279/**
3280 * Create a successor bitmap destined to replace this bitmap after an operation.
3281 * Requires that the bitmap is not frozen and has no successor.
3282 */
3283int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3284 BdrvDirtyBitmap *bitmap, Error **errp)
3285{
3286 uint64_t granularity;
3287 BdrvDirtyBitmap *child;
3288
3289 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3290 error_setg(errp, "Cannot create a successor for a bitmap that is "
3291 "currently frozen");
3292 return -1;
3293 }
3294 assert(!bitmap->successor);
3295
3296 /* Create an anonymous successor */
3297 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3298 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3299 if (!child) {
3300 return -1;
3301 }
3302
3303 /* Successor will be on or off based on our current state. */
3304 child->disabled = bitmap->disabled;
3305
3306 /* Install the successor and freeze the parent */
3307 bitmap->successor = child;
3308 return 0;
3309}
3310
3311/**
3312 * For a bitmap with a successor, yield our name to the successor,
3313 * delete the old bitmap, and return a handle to the new bitmap.
3314 */
3315BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3316 BdrvDirtyBitmap *bitmap,
3317 Error **errp)
3318{
3319 char *name;
3320 BdrvDirtyBitmap *successor = bitmap->successor;
3321
3322 if (successor == NULL) {
3323 error_setg(errp, "Cannot relinquish control if "
3324 "there's no successor present");
3325 return NULL;
3326 }
3327
3328 name = bitmap->name;
3329 bitmap->name = NULL;
3330 successor->name = name;
3331 bitmap->successor = NULL;
3332 bdrv_release_dirty_bitmap(bs, bitmap);
3333
3334 return successor;
3335}
3336
3337/**
3338 * In cases of failure where we can no longer safely delete the parent,
3339 * we may wish to re-join the parent and child/successor.
3340 * The merged parent will be un-frozen, but not explicitly re-enabled.
3341 */
3342BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3343 BdrvDirtyBitmap *parent,
3344 Error **errp)
3345{
3346 BdrvDirtyBitmap *successor = parent->successor;
3347
3348 if (!successor) {
3349 error_setg(errp, "Cannot reclaim a successor when none is present");
3350 return NULL;
3351 }
3352
3353 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3354 error_setg(errp, "Merging of parent and successor bitmap failed");
3355 return NULL;
3356 }
3357 bdrv_release_dirty_bitmap(bs, successor);
3358 parent->successor = NULL;
3359
3360 return parent;
John Snowb8e6fb72015-04-17 19:49:56 -04003361}
3362
John Snowce1ffea2015-04-17 19:50:03 -04003363/**
3364 * Truncates _all_ bitmaps attached to a BDS.
3365 */
3366static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3367{
3368 BdrvDirtyBitmap *bitmap;
3369 uint64_t size = bdrv_nb_sectors(bs);
3370
3371 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snow06207b02015-06-10 13:24:54 -04003372 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowce1ffea2015-04-17 19:50:03 -04003373 hbitmap_truncate(bitmap->bitmap, size);
John Snow5270b6a2015-06-08 16:49:15 -04003374 bitmap->size = size;
John Snowce1ffea2015-04-17 19:50:03 -04003375 }
3376}
3377
Fam Zhenge4654d22013-11-13 18:29:43 +08003378void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3379{
3380 BdrvDirtyBitmap *bm, *next;
3381 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3382 if (bm == bitmap) {
John Snow9bd2b082015-04-17 19:49:57 -04003383 assert(!bdrv_dirty_bitmap_frozen(bm));
Fam Zhenge4654d22013-11-13 18:29:43 +08003384 QLIST_REMOVE(bitmap, list);
3385 hbitmap_free(bitmap->bitmap);
Fam Zheng0db6e542015-04-17 19:49:50 -04003386 g_free(bitmap->name);
Fam Zhenge4654d22013-11-13 18:29:43 +08003387 g_free(bitmap);
3388 return;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003389 }
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003390 }
3391}
3392
John Snowb8e6fb72015-04-17 19:49:56 -04003393void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3394{
John Snow9bd2b082015-04-17 19:49:57 -04003395 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003396 bitmap->disabled = true;
3397}
3398
3399void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3400{
John Snow9bd2b082015-04-17 19:49:57 -04003401 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003402 bitmap->disabled = false;
3403}
3404
Fam Zheng21b56832013-11-13 18:29:44 +08003405BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3406{
3407 BdrvDirtyBitmap *bm;
3408 BlockDirtyInfoList *list = NULL;
3409 BlockDirtyInfoList **plist = &list;
3410
3411 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
Markus Armbruster5839e532014-08-19 10:31:08 +02003412 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3413 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
John Snow20dca812015-04-17 19:50:02 -04003414 info->count = bdrv_get_dirty_count(bm);
John Snow592fdd02015-04-17 19:49:53 -04003415 info->granularity = bdrv_dirty_bitmap_granularity(bm);
Fam Zheng0db6e542015-04-17 19:49:50 -04003416 info->has_name = !!bm->name;
3417 info->name = g_strdup(bm->name);
John Snow9abe3bd2015-05-12 15:53:01 -04003418 info->status = bdrv_dirty_bitmap_status(bm);
Fam Zheng21b56832013-11-13 18:29:44 +08003419 entry->value = info;
3420 *plist = entry;
3421 plist = &entry->next;
3422 }
3423
3424 return list;
3425}
3426
Fam Zhenge4654d22013-11-13 18:29:43 +08003427int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003428{
Fam Zhenge4654d22013-11-13 18:29:43 +08003429 if (bitmap) {
3430 return hbitmap_get(bitmap->bitmap, sector);
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003431 } else {
3432 return 0;
3433 }
3434}
3435
John Snow341ebc22015-04-17 19:49:52 -04003436/**
3437 * Chooses a default granularity based on the existing cluster size,
3438 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3439 * is no cluster size information available.
3440 */
3441uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3442{
3443 BlockDriverInfo bdi;
3444 uint32_t granularity;
3445
3446 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3447 granularity = MAX(4096, bdi.cluster_size);
3448 granularity = MIN(65536, granularity);
3449 } else {
3450 granularity = 65536;
3451 }
3452
3453 return granularity;
3454}
3455
John Snow592fdd02015-04-17 19:49:53 -04003456uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3457{
3458 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3459}
3460
John Snow20dca812015-04-17 19:50:02 -04003461void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003462{
Fam Zhenge4654d22013-11-13 18:29:43 +08003463 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
Paolo Bonzini1755da12012-10-18 16:49:18 +02003464}
3465
John Snow20dca812015-04-17 19:50:02 -04003466void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003467 int64_t cur_sector, int nr_sectors)
3468{
John Snowb8e6fb72015-04-17 19:49:56 -04003469 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003470 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3471}
3472
John Snow20dca812015-04-17 19:50:02 -04003473void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003474 int64_t cur_sector, int nr_sectors)
3475{
John Snowb8e6fb72015-04-17 19:49:56 -04003476 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003477 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3478}
3479
John Snowe74e6b72015-04-17 19:49:59 -04003480void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3481{
3482 assert(bdrv_dirty_bitmap_enabled(bitmap));
3483 hbitmap_reset(bitmap->bitmap, 0, bitmap->size);
3484}
3485
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003486void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3487 int nr_sectors)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003488{
Fam Zhenge4654d22013-11-13 18:29:43 +08003489 BdrvDirtyBitmap *bitmap;
3490 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003491 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3492 continue;
3493 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003494 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
Paolo Bonzini8f0720e2013-01-21 17:09:41 +01003495 }
Liran Schouraaa0eb72010-01-26 10:31:48 +02003496}
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003497
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003498void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
3499 int nr_sectors)
Fam Zhenge4654d22013-11-13 18:29:43 +08003500{
3501 BdrvDirtyBitmap *bitmap;
3502 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003503 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3504 continue;
3505 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003506 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3507 }
3508}
3509
John Snowd58d8452015-04-17 19:49:58 -04003510/**
3511 * Advance an HBitmapIter to an arbitrary offset.
3512 */
3513void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3514{
3515 assert(hbi->hb);
3516 hbitmap_iter_init(hbi, hbi->hb, offset);
3517}
3518
John Snow20dca812015-04-17 19:50:02 -04003519int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
Fam Zhenge4654d22013-11-13 18:29:43 +08003520{
3521 return hbitmap_count(bitmap->bitmap);
3522}
3523
Fam Zheng9fcb0252013-08-23 09:14:46 +08003524/* Get a reference to bs */
3525void bdrv_ref(BlockDriverState *bs)
3526{
3527 bs->refcnt++;
3528}
3529
3530/* Release a previously grabbed reference to bs.
3531 * If after releasing, reference count is zero, the BlockDriverState is
3532 * deleted. */
3533void bdrv_unref(BlockDriverState *bs)
3534{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003535 if (!bs) {
3536 return;
3537 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003538 assert(bs->refcnt > 0);
3539 if (--bs->refcnt == 0) {
3540 bdrv_delete(bs);
3541 }
3542}
3543
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003544struct BdrvOpBlocker {
3545 Error *reason;
3546 QLIST_ENTRY(BdrvOpBlocker) list;
3547};
3548
3549bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3550{
3551 BdrvOpBlocker *blocker;
3552 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3553 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3554 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3555 if (errp) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03003556 error_setg(errp, "Node '%s' is busy: %s",
3557 bdrv_get_device_or_node_name(bs),
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003558 error_get_pretty(blocker->reason));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003559 }
3560 return true;
3561 }
3562 return false;
3563}
3564
3565void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3566{
3567 BdrvOpBlocker *blocker;
3568 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3569
Markus Armbruster5839e532014-08-19 10:31:08 +02003570 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003571 blocker->reason = reason;
3572 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3573}
3574
3575void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3576{
3577 BdrvOpBlocker *blocker, *next;
3578 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3579 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3580 if (blocker->reason == reason) {
3581 QLIST_REMOVE(blocker, list);
3582 g_free(blocker);
3583 }
3584 }
3585}
3586
3587void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3588{
3589 int i;
3590 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3591 bdrv_op_block(bs, i, reason);
3592 }
3593}
3594
3595void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3596{
3597 int i;
3598 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3599 bdrv_op_unblock(bs, i, reason);
3600 }
3601}
3602
3603bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3604{
3605 int i;
3606
3607 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3608 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3609 return false;
3610 }
3611 }
3612 return true;
3613}
3614
Luiz Capitulino28a72822011-09-26 17:43:50 -03003615void bdrv_iostatus_enable(BlockDriverState *bs)
3616{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003617 bs->iostatus_enabled = true;
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003618 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003619}
3620
3621/* The I/O status is only enabled if the drive explicitly
3622 * enables it _and_ the VM is configured to stop on errors */
3623bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
3624{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003625 return (bs->iostatus_enabled &&
Paolo Bonzini92aa5c62012-09-28 17:22:55 +02003626 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
3627 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP ||
3628 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
Luiz Capitulino28a72822011-09-26 17:43:50 -03003629}
3630
3631void bdrv_iostatus_disable(BlockDriverState *bs)
3632{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003633 bs->iostatus_enabled = false;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003634}
3635
3636void bdrv_iostatus_reset(BlockDriverState *bs)
3637{
3638 if (bdrv_iostatus_is_enabled(bs)) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003639 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Paolo Bonzini3bd293c2012-10-18 16:49:27 +02003640 if (bs->job) {
3641 block_job_iostatus_reset(bs->job);
3642 }
Luiz Capitulino28a72822011-09-26 17:43:50 -03003643 }
3644}
3645
Luiz Capitulino28a72822011-09-26 17:43:50 -03003646void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
3647{
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02003648 assert(bdrv_iostatus_is_enabled(bs));
3649 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003650 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
3651 BLOCK_DEVICE_IO_STATUS_FAILED;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003652 }
3653}
3654
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003655void bdrv_img_create(const char *filename, const char *fmt,
3656 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003657 char *options, uint64_t img_size, int flags,
3658 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003659{
Chunyan Liu83d05212014-06-05 17:20:51 +08003660 QemuOptsList *create_opts = NULL;
3661 QemuOpts *opts = NULL;
3662 const char *backing_fmt, *backing_file;
3663 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003664 BlockDriver *drv, *proto_drv;
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003665 BlockDriver *backing_drv = NULL;
Max Reitzcc84d902013-09-06 17:14:26 +02003666 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003667 int ret = 0;
3668
3669 /* Find driver and parse its options */
3670 drv = bdrv_find_format(fmt);
3671 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003672 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003673 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003674 }
3675
Max Reitzb65a5e12015-02-05 13:58:12 -05003676 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003677 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003678 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003679 }
3680
Max Reitzc6149722014-12-02 18:32:45 +01003681 if (!drv->create_opts) {
3682 error_setg(errp, "Format driver '%s' does not support image creation",
3683 drv->format_name);
3684 return;
3685 }
3686
3687 if (!proto_drv->create_opts) {
3688 error_setg(errp, "Protocol driver '%s' does not support image creation",
3689 proto_drv->format_name);
3690 return;
3691 }
3692
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003693 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3694 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003695
3696 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003697 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003698 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003699
3700 /* Parse -o options */
3701 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003702 qemu_opts_do_parse(opts, options, NULL, &local_err);
3703 if (local_err) {
3704 error_report_err(local_err);
3705 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003706 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003707 goto out;
3708 }
3709 }
3710
3711 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003712 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003713 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003714 error_setg(errp, "Backing file not supported for file format '%s'",
3715 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003716 goto out;
3717 }
3718 }
3719
3720 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003721 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003722 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003723 error_setg(errp, "Backing file format not supported for file "
3724 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003725 goto out;
3726 }
3727 }
3728
Chunyan Liu83d05212014-06-05 17:20:51 +08003729 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3730 if (backing_file) {
3731 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003732 error_setg(errp, "Error: Trying to create an image with the "
3733 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003734 goto out;
3735 }
3736 }
3737
Chunyan Liu83d05212014-06-05 17:20:51 +08003738 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3739 if (backing_fmt) {
3740 backing_drv = bdrv_find_format(backing_fmt);
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003741 if (!backing_drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003742 error_setg(errp, "Unknown backing file format '%s'",
Chunyan Liu83d05212014-06-05 17:20:51 +08003743 backing_fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003744 goto out;
3745 }
3746 }
3747
3748 // The size for the image must always be specified, with one exception:
3749 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003750 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3751 if (size == -1) {
3752 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003753 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003754 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003755 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003756 int back_flags;
3757
Max Reitz29168012014-11-26 17:20:27 +01003758 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3759 full_backing, PATH_MAX,
3760 &local_err);
3761 if (local_err) {
3762 g_free(full_backing);
3763 goto out;
3764 }
3765
Paolo Bonzini63090da2012-04-12 14:01:03 +02003766 /* backing files always opened read-only */
3767 back_flags =
3768 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003769
Max Reitzf67503e2014-02-18 18:33:05 +01003770 bs = NULL;
Max Reitz29168012014-11-26 17:20:27 +01003771 ret = bdrv_open(&bs, full_backing, NULL, NULL, back_flags,
Max Reitzcc84d902013-09-06 17:14:26 +02003772 backing_drv, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003773 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003774 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003775 goto out;
3776 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003777 size = bdrv_getlength(bs);
3778 if (size < 0) {
3779 error_setg_errno(errp, -size, "Could not get size of '%s'",
3780 backing_file);
3781 bdrv_unref(bs);
3782 goto out;
3783 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003784
Markus Armbruster39101f22015-02-12 16:46:36 +01003785 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003786
3787 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003788 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003789 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003790 goto out;
3791 }
3792 }
3793
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003794 if (!quiet) {
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003795 printf("Formatting '%s', fmt=%s", filename, fmt);
3796 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003797 puts("");
3798 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003799
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003800 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003801
Max Reitzcc84d902013-09-06 17:14:26 +02003802 if (ret == -EFBIG) {
3803 /* This is generally a better message than whatever the driver would
3804 * deliver (especially because of the cluster_size_hint), since that
3805 * is most probably not much different from "image too large". */
3806 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003807 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003808 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003809 }
Max Reitzcc84d902013-09-06 17:14:26 +02003810 error_setg(errp, "The image size is too large for file format '%s'"
3811 "%s", fmt, cluster_size_hint);
3812 error_free(local_err);
3813 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003814 }
3815
3816out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003817 qemu_opts_del(opts);
3818 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003819 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003820 error_propagate(errp, local_err);
3821 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003822}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003823
3824AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3825{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003826 return bs->aio_context;
3827}
3828
3829void bdrv_detach_aio_context(BlockDriverState *bs)
3830{
Max Reitz33384422014-06-20 21:57:33 +02003831 BdrvAioNotifier *baf;
3832
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003833 if (!bs->drv) {
3834 return;
3835 }
3836
Max Reitz33384422014-06-20 21:57:33 +02003837 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3838 baf->detach_aio_context(baf->opaque);
3839 }
3840
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003841 if (bs->io_limits_enabled) {
3842 throttle_detach_aio_context(&bs->throttle_state);
3843 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003844 if (bs->drv->bdrv_detach_aio_context) {
3845 bs->drv->bdrv_detach_aio_context(bs);
3846 }
3847 if (bs->file) {
3848 bdrv_detach_aio_context(bs->file);
3849 }
3850 if (bs->backing_hd) {
3851 bdrv_detach_aio_context(bs->backing_hd);
3852 }
3853
3854 bs->aio_context = NULL;
3855}
3856
3857void bdrv_attach_aio_context(BlockDriverState *bs,
3858 AioContext *new_context)
3859{
Max Reitz33384422014-06-20 21:57:33 +02003860 BdrvAioNotifier *ban;
3861
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003862 if (!bs->drv) {
3863 return;
3864 }
3865
3866 bs->aio_context = new_context;
3867
3868 if (bs->backing_hd) {
3869 bdrv_attach_aio_context(bs->backing_hd, new_context);
3870 }
3871 if (bs->file) {
3872 bdrv_attach_aio_context(bs->file, new_context);
3873 }
3874 if (bs->drv->bdrv_attach_aio_context) {
3875 bs->drv->bdrv_attach_aio_context(bs, new_context);
3876 }
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003877 if (bs->io_limits_enabled) {
3878 throttle_attach_aio_context(&bs->throttle_state, new_context);
3879 }
Max Reitz33384422014-06-20 21:57:33 +02003880
3881 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3882 ban->attached_aio_context(new_context, ban->opaque);
3883 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003884}
3885
3886void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3887{
3888 bdrv_drain_all(); /* ensure there are no in-flight requests */
3889
3890 bdrv_detach_aio_context(bs);
3891
3892 /* This function executes in the old AioContext so acquire the new one in
3893 * case it runs in a different thread.
3894 */
3895 aio_context_acquire(new_context);
3896 bdrv_attach_aio_context(bs, new_context);
3897 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003898}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003899
Max Reitz33384422014-06-20 21:57:33 +02003900void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3901 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3902 void (*detach_aio_context)(void *opaque), void *opaque)
3903{
3904 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3905 *ban = (BdrvAioNotifier){
3906 .attached_aio_context = attached_aio_context,
3907 .detach_aio_context = detach_aio_context,
3908 .opaque = opaque
3909 };
3910
3911 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3912}
3913
3914void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3915 void (*attached_aio_context)(AioContext *,
3916 void *),
3917 void (*detach_aio_context)(void *),
3918 void *opaque)
3919{
3920 BdrvAioNotifier *ban, *ban_next;
3921
3922 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3923 if (ban->attached_aio_context == attached_aio_context &&
3924 ban->detach_aio_context == detach_aio_context &&
3925 ban->opaque == opaque)
3926 {
3927 QLIST_REMOVE(ban, list);
3928 g_free(ban);
3929
3930 return;
3931 }
3932 }
3933
3934 abort();
3935}
3936
Max Reitz77485432014-10-27 11:12:50 +01003937int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3938 BlockDriverAmendStatusCB *status_cb)
Max Reitz6f176b42013-09-03 10:09:50 +02003939{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003940 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003941 return -ENOTSUP;
3942 }
Max Reitz77485432014-10-27 11:12:50 +01003943 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
Max Reitz6f176b42013-09-03 10:09:50 +02003944}
Benoît Canetf6186f42013-10-02 14:33:48 +02003945
Benoît Canetb5042a32014-03-03 19:11:34 +01003946/* This function will be called by the bdrv_recurse_is_first_non_filter method
3947 * of block filter and by bdrv_is_first_non_filter.
3948 * It is used to test if the given bs is the candidate or recurse more in the
3949 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003950 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003951bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3952 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003953{
Benoît Canetb5042a32014-03-03 19:11:34 +01003954 /* return false if basic checks fails */
3955 if (!bs || !bs->drv) {
3956 return false;
3957 }
3958
3959 /* the code reached a non block filter driver -> check if the bs is
3960 * the same as the candidate. It's the recursion termination condition.
3961 */
3962 if (!bs->drv->is_filter) {
3963 return bs == candidate;
3964 }
3965 /* Down this path the driver is a block filter driver */
3966
3967 /* If the block filter recursion method is defined use it to recurse down
3968 * the node graph.
3969 */
3970 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003971 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3972 }
3973
Benoît Canetb5042a32014-03-03 19:11:34 +01003974 /* the driver is a block filter but don't allow to recurse -> return false
3975 */
3976 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003977}
3978
3979/* This function checks if the candidate is the first non filter bs down it's
3980 * bs chain. Since we don't have pointers to parents it explore all bs chains
3981 * from the top. Some filters can choose not to pass down the recursion.
3982 */
3983bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3984{
3985 BlockDriverState *bs;
3986
3987 /* walk down the bs forest recursively */
3988 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3989 bool perm;
3990
Benoît Canetb5042a32014-03-03 19:11:34 +01003991 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003992 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003993
3994 /* candidate is the first non filter */
3995 if (perm) {
3996 return true;
3997 }
3998 }
3999
4000 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02004001}
Benoît Canet09158f02014-06-27 18:25:25 +02004002
4003BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
4004{
4005 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004006 AioContext *aio_context;
4007
Benoît Canet09158f02014-06-27 18:25:25 +02004008 if (!to_replace_bs) {
4009 error_setg(errp, "Node name '%s' not found", node_name);
4010 return NULL;
4011 }
4012
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004013 aio_context = bdrv_get_aio_context(to_replace_bs);
4014 aio_context_acquire(aio_context);
4015
Benoît Canet09158f02014-06-27 18:25:25 +02004016 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004017 to_replace_bs = NULL;
4018 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004019 }
4020
4021 /* We don't want arbitrary node of the BDS chain to be replaced only the top
4022 * most non filter in order to prevent data corruption.
4023 * Another benefit is that this tests exclude backing files which are
4024 * blocked by the backing blockers.
4025 */
4026 if (!bdrv_is_first_non_filter(to_replace_bs)) {
4027 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004028 to_replace_bs = NULL;
4029 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004030 }
4031
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004032out:
4033 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02004034 return to_replace_bs;
4035}
Ming Lei448ad912014-07-04 18:04:33 +08004036
Max Reitz91af7012014-07-18 20:24:56 +02004037static bool append_open_options(QDict *d, BlockDriverState *bs)
4038{
4039 const QDictEntry *entry;
4040 bool found_any = false;
4041
4042 for (entry = qdict_first(bs->options); entry;
4043 entry = qdict_next(bs->options, entry))
4044 {
4045 /* Only take options for this level and exclude all non-driver-specific
4046 * options */
4047 if (!strchr(qdict_entry_key(entry), '.') &&
4048 strcmp(qdict_entry_key(entry), "node-name"))
4049 {
4050 qobject_incref(qdict_entry_value(entry));
4051 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
4052 found_any = true;
4053 }
4054 }
4055
4056 return found_any;
4057}
4058
4059/* Updates the following BDS fields:
4060 * - exact_filename: A filename which may be used for opening a block device
4061 * which (mostly) equals the given BDS (even without any
4062 * other options; so reading and writing must return the same
4063 * results, but caching etc. may be different)
4064 * - full_open_options: Options which, when given when opening a block device
4065 * (without a filename), result in a BDS (mostly)
4066 * equalling the given one
4067 * - filename: If exact_filename is set, it is copied here. Otherwise,
4068 * full_open_options is converted to a JSON object, prefixed with
4069 * "json:" (for use through the JSON pseudo protocol) and put here.
4070 */
4071void bdrv_refresh_filename(BlockDriverState *bs)
4072{
4073 BlockDriver *drv = bs->drv;
4074 QDict *opts;
4075
4076 if (!drv) {
4077 return;
4078 }
4079
4080 /* This BDS's file name will most probably depend on its file's name, so
4081 * refresh that first */
4082 if (bs->file) {
4083 bdrv_refresh_filename(bs->file);
4084 }
4085
4086 if (drv->bdrv_refresh_filename) {
4087 /* Obsolete information is of no use here, so drop the old file name
4088 * information before refreshing it */
4089 bs->exact_filename[0] = '\0';
4090 if (bs->full_open_options) {
4091 QDECREF(bs->full_open_options);
4092 bs->full_open_options = NULL;
4093 }
4094
4095 drv->bdrv_refresh_filename(bs);
4096 } else if (bs->file) {
4097 /* Try to reconstruct valid information from the underlying file */
4098 bool has_open_options;
4099
4100 bs->exact_filename[0] = '\0';
4101 if (bs->full_open_options) {
4102 QDECREF(bs->full_open_options);
4103 bs->full_open_options = NULL;
4104 }
4105
4106 opts = qdict_new();
4107 has_open_options = append_open_options(opts, bs);
4108
4109 /* If no specific options have been given for this BDS, the filename of
4110 * the underlying file should suffice for this one as well */
4111 if (bs->file->exact_filename[0] && !has_open_options) {
4112 strcpy(bs->exact_filename, bs->file->exact_filename);
4113 }
4114 /* Reconstructing the full options QDict is simple for most format block
4115 * drivers, as long as the full options are known for the underlying
4116 * file BDS. The full options QDict of that file BDS should somehow
4117 * contain a representation of the filename, therefore the following
4118 * suffices without querying the (exact_)filename of this BDS. */
4119 if (bs->file->full_open_options) {
4120 qdict_put_obj(opts, "driver",
4121 QOBJECT(qstring_from_str(drv->format_name)));
4122 QINCREF(bs->file->full_open_options);
4123 qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
4124
4125 bs->full_open_options = opts;
4126 } else {
4127 QDECREF(opts);
4128 }
4129 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4130 /* There is no underlying file BDS (at least referenced by BDS.file),
4131 * so the full options QDict should be equal to the options given
4132 * specifically for this block device when it was opened (plus the
4133 * driver specification).
4134 * Because those options don't change, there is no need to update
4135 * full_open_options when it's already set. */
4136
4137 opts = qdict_new();
4138 append_open_options(opts, bs);
4139 qdict_put_obj(opts, "driver",
4140 QOBJECT(qstring_from_str(drv->format_name)));
4141
4142 if (bs->exact_filename[0]) {
4143 /* This may not work for all block protocol drivers (some may
4144 * require this filename to be parsed), but we have to find some
4145 * default solution here, so just include it. If some block driver
4146 * does not support pure options without any filename at all or
4147 * needs some special format of the options QDict, it needs to
4148 * implement the driver-specific bdrv_refresh_filename() function.
4149 */
4150 qdict_put_obj(opts, "filename",
4151 QOBJECT(qstring_from_str(bs->exact_filename)));
4152 }
4153
4154 bs->full_open_options = opts;
4155 }
4156
4157 if (bs->exact_filename[0]) {
4158 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4159 } else if (bs->full_open_options) {
4160 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4161 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4162 qstring_get_str(json));
4163 QDECREF(json);
4164 }
4165}
Benoît Canet5366d0c2014-09-05 15:46:18 +02004166
4167/* This accessor function purpose is to allow the device models to access the
4168 * BlockAcctStats structure embedded inside a BlockDriverState without being
4169 * aware of the BlockDriverState structure layout.
4170 * It will go away when the BlockAcctStats structure will be moved inside
4171 * the device models.
4172 */
4173BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
4174{
4175 return &bs->stats;
4176}