blob: 3bdc995d403708cfea8136b17392cb69361002f2 [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"
Alberto Garciadb628332015-06-08 18:17:45 +020039#include "block/throttle-groups.h"
bellardfc01f7e2003-06-30 10:03:06 +000040
Juan Quintela71e72a12009-07-27 16:12:56 +020041#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000042#include <sys/types.h>
43#include <sys/stat.h>
44#include <sys/ioctl.h>
Blue Swirl72cf2d42009-09-12 07:36:22 +000045#include <sys/queue.h>
blueswir1c5e97232009-03-07 20:06:23 +000046#ifndef __DragonFly__
bellard7674e7b2005-04-26 21:59:26 +000047#include <sys/disk.h>
48#endif
blueswir1c5e97232009-03-07 20:06:23 +000049#endif
bellard7674e7b2005-04-26 21:59:26 +000050
aliguori49dc7682009-03-08 16:26:59 +000051#ifdef _WIN32
52#include <windows.h>
53#endif
54
John Snow9bd2b082015-04-17 19:49:57 -040055/**
56 * A BdrvDirtyBitmap can be in three possible states:
57 * (1) successor is NULL and disabled is false: full r/w mode
58 * (2) successor is NULL and disabled is true: read only mode ("disabled")
59 * (3) successor is set: frozen mode.
60 * A frozen bitmap cannot be renamed, deleted, anonymized, cleared, set,
61 * or enabled. A frozen bitmap can only abdicate() or reclaim().
62 */
Fam Zhenge4654d22013-11-13 18:29:43 +080063struct BdrvDirtyBitmap {
John Snowaa0c7ca2015-04-17 19:50:01 -040064 HBitmap *bitmap; /* Dirty sector bitmap implementation */
65 BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
66 char *name; /* Optional non-empty unique ID */
67 int64_t size; /* Size of the bitmap (Number of sectors) */
68 bool disabled; /* Bitmap is read-only */
Fam Zhenge4654d22013-11-13 18:29:43 +080069 QLIST_ENTRY(BdrvDirtyBitmap) list;
70};
71
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010072#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
73
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +010074static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
75 QTAILQ_HEAD_INITIALIZER(bdrv_states);
blueswir17ee930d2008-09-17 19:04:14 +000076
Benoît Canetdc364f42014-01-23 21:31:32 +010077static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
78 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
79
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010080static QLIST_HEAD(, BlockDriver) bdrv_drivers =
81 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000082
Kevin Wolff3930ed2015-04-08 13:43:47 +020083static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
84 const char *reference, QDict *options, int flags,
85 BlockDriverState *parent,
86 const BdrvChildRole *child_role,
87 BlockDriver *drv, Error **errp);
88
John Snowce1ffea2015-04-17 19:50:03 -040089static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
Markus Armbrustereb852012009-10-27 18:41:44 +010090/* If non-zero, use only whitelisted block drivers */
91static int use_bdrv_whitelist;
92
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000093#ifdef _WIN32
94static int is_windows_drive_prefix(const char *filename)
95{
96 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
97 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
98 filename[1] == ':');
99}
100
101int is_windows_drive(const char *filename)
102{
103 if (is_windows_drive_prefix(filename) &&
104 filename[2] == '\0')
105 return 1;
106 if (strstart(filename, "\\\\.\\", NULL) ||
107 strstart(filename, "//./", NULL))
108 return 1;
109 return 0;
110}
111#endif
112
Kevin Wolf339064d2013-11-28 10:23:32 +0100113size_t bdrv_opt_mem_align(BlockDriverState *bs)
114{
115 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300116 /* page size or 4k (hdd sector size) should be on the safe side */
117 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100118 }
119
120 return bs->bl.opt_mem_alignment;
121}
122
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300123size_t bdrv_min_mem_align(BlockDriverState *bs)
124{
125 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300126 /* page size or 4k (hdd sector size) should be on the safe side */
127 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300128 }
129
130 return bs->bl.min_mem_alignment;
131}
132
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000133/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100134int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000135{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200136 const char *p;
137
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000138#ifdef _WIN32
139 if (is_windows_drive(path) ||
140 is_windows_drive_prefix(path)) {
141 return 0;
142 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200143 p = path + strcspn(path, ":/\\");
144#else
145 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000146#endif
147
Paolo Bonzini947995c2012-05-08 16:51:48 +0200148 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000149}
150
bellard83f64092006-08-01 16:21:11 +0000151int path_is_absolute(const char *path)
152{
bellard21664422007-01-07 18:22:37 +0000153#ifdef _WIN32
154 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200155 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000156 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200157 }
158 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000159#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200160 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000161#endif
bellard83f64092006-08-01 16:21:11 +0000162}
163
164/* if filename is absolute, just copy it to dest. Otherwise, build a
165 path to it by considering it is relative to base_path. URL are
166 supported. */
167void path_combine(char *dest, int dest_size,
168 const char *base_path,
169 const char *filename)
170{
171 const char *p, *p1;
172 int len;
173
174 if (dest_size <= 0)
175 return;
176 if (path_is_absolute(filename)) {
177 pstrcpy(dest, dest_size, filename);
178 } else {
179 p = strchr(base_path, ':');
180 if (p)
181 p++;
182 else
183 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000184 p1 = strrchr(base_path, '/');
185#ifdef _WIN32
186 {
187 const char *p2;
188 p2 = strrchr(base_path, '\\');
189 if (!p1 || p2 > p1)
190 p1 = p2;
191 }
192#endif
bellard83f64092006-08-01 16:21:11 +0000193 if (p1)
194 p1++;
195 else
196 p1 = base_path;
197 if (p1 > p)
198 p = p1;
199 len = p - base_path;
200 if (len > dest_size - 1)
201 len = dest_size - 1;
202 memcpy(dest, base_path, len);
203 dest[len] = '\0';
204 pstrcat(dest, dest_size, filename);
205 }
206}
207
Max Reitz0a828552014-11-26 17:20:25 +0100208void bdrv_get_full_backing_filename_from_filename(const char *backed,
209 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100210 char *dest, size_t sz,
211 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100212{
Max Reitz9f074292014-11-26 17:20:26 +0100213 if (backing[0] == '\0' || path_has_protocol(backing) ||
214 path_is_absolute(backing))
215 {
Max Reitz0a828552014-11-26 17:20:25 +0100216 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100217 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
218 error_setg(errp, "Cannot use relative backing file names for '%s'",
219 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100220 } else {
221 path_combine(dest, sz, backed, backing);
222 }
223}
224
Max Reitz9f074292014-11-26 17:20:26 +0100225void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
226 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200227{
Max Reitz9f074292014-11-26 17:20:26 +0100228 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
229
230 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
231 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200232}
233
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100234void bdrv_register(BlockDriver *bdrv)
235{
236 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200237
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100238 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000239}
bellardb3380822004-03-14 21:38:54 +0000240
Markus Armbruster7f06d472014-10-07 13:59:12 +0200241BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000242{
Markus Armbruster7f06d472014-10-07 13:59:12 +0200243 BlockDriverState *bs = bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200244
Markus Armbrustere4e99862014-10-07 13:59:03 +0200245 QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
Markus Armbrustere4e99862014-10-07 13:59:03 +0200246 return bs;
247}
248
249BlockDriverState *bdrv_new(void)
250{
251 BlockDriverState *bs;
252 int i;
253
Markus Armbruster5839e532014-08-19 10:31:08 +0200254 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800255 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800256 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
257 QLIST_INIT(&bs->op_blockers[i]);
258 }
Luiz Capitulino28a72822011-09-26 17:43:50 -0300259 bdrv_iostatus_disable(bs);
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200260 notifier_list_init(&bs->close_notifiers);
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200261 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200262 qemu_co_queue_init(&bs->throttled_reqs[0]);
263 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800264 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200265 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200266
bellardb3380822004-03-14 21:38:54 +0000267 return bs;
268}
269
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200270void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
271{
272 notifier_list_add(&bs->close_notifiers, notify);
273}
274
bellardea2384d2004-08-01 21:59:26 +0000275BlockDriver *bdrv_find_format(const char *format_name)
276{
277 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100278 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
279 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000280 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100281 }
bellardea2384d2004-08-01 21:59:26 +0000282 }
283 return NULL;
284}
285
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800286static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100287{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800288 static const char *whitelist_rw[] = {
289 CONFIG_BDRV_RW_WHITELIST
290 };
291 static const char *whitelist_ro[] = {
292 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100293 };
294 const char **p;
295
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800296 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100297 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800298 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100299
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800300 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100301 if (!strcmp(drv->format_name, *p)) {
302 return 1;
303 }
304 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800305 if (read_only) {
306 for (p = whitelist_ro; *p; p++) {
307 if (!strcmp(drv->format_name, *p)) {
308 return 1;
309 }
310 }
311 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100312 return 0;
313}
314
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800315BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
316 bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100317{
318 BlockDriver *drv = bdrv_find_format(format_name);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800319 return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
Markus Armbrustereb852012009-10-27 18:41:44 +0100320}
321
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800322typedef struct CreateCo {
323 BlockDriver *drv;
324 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800325 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800326 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200327 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800328} CreateCo;
329
330static void coroutine_fn bdrv_create_co_entry(void *opaque)
331{
Max Reitzcc84d902013-09-06 17:14:26 +0200332 Error *local_err = NULL;
333 int ret;
334
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800335 CreateCo *cco = opaque;
336 assert(cco->drv);
337
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800338 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100339 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200340 error_propagate(&cco->err, local_err);
341 }
342 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800343}
344
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200345int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800346 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000347{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800348 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200349
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800350 Coroutine *co;
351 CreateCo cco = {
352 .drv = drv,
353 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800354 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800355 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200356 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800357 };
358
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800359 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200360 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300361 ret = -ENOTSUP;
362 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800363 }
364
365 if (qemu_in_coroutine()) {
366 /* Fast-path if already in coroutine context */
367 bdrv_create_co_entry(&cco);
368 } else {
369 co = qemu_coroutine_create(bdrv_create_co_entry);
370 qemu_coroutine_enter(co, &cco);
371 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200372 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800373 }
374 }
375
376 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200377 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100378 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200379 error_propagate(errp, cco.err);
380 } else {
381 error_setg_errno(errp, -ret, "Could not create image");
382 }
383 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800384
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300385out:
386 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800387 return ret;
bellardea2384d2004-08-01 21:59:26 +0000388}
389
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800390int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200391{
392 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200393 Error *local_err = NULL;
394 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200395
Max Reitzb65a5e12015-02-05 13:58:12 -0500396 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200397 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000398 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200399 }
400
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800401 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100402 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200403 error_propagate(errp, local_err);
404 }
405 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200406}
407
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100408/**
409 * Try to get @bs's logical and physical block size.
410 * On success, store them in @bsz struct and return 0.
411 * On failure return -errno.
412 * @bs must not be empty.
413 */
414int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
415{
416 BlockDriver *drv = bs->drv;
417
418 if (drv && drv->bdrv_probe_blocksizes) {
419 return drv->bdrv_probe_blocksizes(bs, bsz);
420 }
421
422 return -ENOTSUP;
423}
424
425/**
426 * Try to get @bs's geometry (cyls, heads, sectors).
427 * On success, store them in @geo struct and return 0.
428 * On failure return -errno.
429 * @bs must not be empty.
430 */
431int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
432{
433 BlockDriver *drv = bs->drv;
434
435 if (drv && drv->bdrv_probe_geometry) {
436 return drv->bdrv_probe_geometry(bs, geo);
437 }
438
439 return -ENOTSUP;
440}
441
Jim Meyeringeba25052012-05-28 09:27:54 +0200442/*
443 * Create a uniquely-named empty temporary file.
444 * Return 0 upon success, otherwise a negative errno value.
445 */
446int get_tmp_filename(char *filename, int size)
447{
bellardd5249392004-08-03 21:14:23 +0000448#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000449 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200450 /* GetTempFileName requires that its output buffer (4th param)
451 have length MAX_PATH or greater. */
452 assert(size >= MAX_PATH);
453 return (GetTempPath(MAX_PATH, temp_dir)
454 && GetTempFileName(temp_dir, "qem", 0, filename)
455 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000456#else
bellardea2384d2004-08-01 21:59:26 +0000457 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000458 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000459 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530460 if (!tmpdir) {
461 tmpdir = "/var/tmp";
462 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200463 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
464 return -EOVERFLOW;
465 }
bellardea2384d2004-08-01 21:59:26 +0000466 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800467 if (fd < 0) {
468 return -errno;
469 }
470 if (close(fd) != 0) {
471 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200472 return -errno;
473 }
474 return 0;
bellardd5249392004-08-03 21:14:23 +0000475#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200476}
bellardea2384d2004-08-01 21:59:26 +0000477
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200478/*
479 * Detect host devices. By convention, /dev/cdrom[N] is always
480 * recognized as a host CDROM.
481 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200482static BlockDriver *find_hdev_driver(const char *filename)
483{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200484 int score_max = 0, score;
485 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200486
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100487 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200488 if (d->bdrv_probe_device) {
489 score = d->bdrv_probe_device(filename);
490 if (score > score_max) {
491 score_max = score;
492 drv = d;
493 }
494 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200495 }
496
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200497 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200498}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200499
Kevin Wolf98289622013-07-10 15:47:39 +0200500BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500501 bool allow_protocol_prefix,
502 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200503{
504 BlockDriver *drv1;
505 char protocol[128];
506 int len;
507 const char *p;
508
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200509 /* TODO Drivers without bdrv_file_open must be specified explicitly */
510
Christoph Hellwig39508e72010-06-23 12:25:17 +0200511 /*
512 * XXX(hch): we really should not let host device detection
513 * override an explicit protocol specification, but moving this
514 * later breaks access to device names with colons in them.
515 * Thanks to the brain-dead persistent naming schemes on udev-
516 * based Linux systems those actually are quite common.
517 */
518 drv1 = find_hdev_driver(filename);
519 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200520 return drv1;
521 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200522
Kevin Wolf98289622013-07-10 15:47:39 +0200523 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100524 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200525 }
Kevin Wolf98289622013-07-10 15:47:39 +0200526
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000527 p = strchr(filename, ':');
528 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200529 len = p - filename;
530 if (len > sizeof(protocol) - 1)
531 len = sizeof(protocol) - 1;
532 memcpy(protocol, filename, len);
533 protocol[len] = '\0';
534 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
535 if (drv1->protocol_name &&
536 !strcmp(drv1->protocol_name, protocol)) {
537 return drv1;
538 }
539 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500540
541 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200542 return NULL;
543}
544
Markus Armbrusterc6684242014-11-20 16:27:10 +0100545/*
546 * Guess image format by probing its contents.
547 * This is not a good idea when your image is raw (CVE-2008-2004), but
548 * we do it anyway for backward compatibility.
549 *
550 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100551 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
552 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100553 * @filename is its filename.
554 *
555 * For all block drivers, call the bdrv_probe() method to get its
556 * probing score.
557 * Return the first block driver with the highest probing score.
558 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100559BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
560 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100561{
562 int score_max = 0, score;
563 BlockDriver *drv = NULL, *d;
564
565 QLIST_FOREACH(d, &bdrv_drivers, list) {
566 if (d->bdrv_probe) {
567 score = d->bdrv_probe(buf, buf_size, filename);
568 if (score > score_max) {
569 score_max = score;
570 drv = d;
571 }
572 }
573 }
574
575 return drv;
576}
577
Kevin Wolff500a6d2012-11-12 17:35:27 +0100578static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200579 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000580{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100581 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100582 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100583 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700584
Kevin Wolf08a00552010-06-01 18:37:31 +0200585 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Paolo Bonzini8e895592013-01-10 15:39:27 +0100586 if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100587 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200588 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700589 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700590
bellard83f64092006-08-01 16:21:11 +0000591 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000592 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200593 error_setg_errno(errp, -ret, "Could not read image for determining its "
594 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200595 *pdrv = NULL;
596 return ret;
bellard83f64092006-08-01 16:21:11 +0000597 }
598
Markus Armbrusterc6684242014-11-20 16:27:10 +0100599 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200600 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200601 error_setg(errp, "Could not determine image format: No compatible "
602 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200603 ret = -ENOENT;
604 }
605 *pdrv = drv;
606 return ret;
bellardea2384d2004-08-01 21:59:26 +0000607}
608
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100609/**
610 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200611 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100612 */
613static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
614{
615 BlockDriver *drv = bs->drv;
616
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700617 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
618 if (bs->sg)
619 return 0;
620
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100621 /* query actual device if possible, otherwise just trust the hint */
622 if (drv->bdrv_getlength) {
623 int64_t length = drv->bdrv_getlength(bs);
624 if (length < 0) {
625 return length;
626 }
Fam Zheng7e382002013-11-06 19:48:06 +0800627 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100628 }
629
630 bs->total_sectors = hint;
631 return 0;
632}
633
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100634/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100635 * Set open flags for a given discard mode
636 *
637 * Return 0 on success, -1 if the discard mode was invalid.
638 */
639int bdrv_parse_discard_flags(const char *mode, int *flags)
640{
641 *flags &= ~BDRV_O_UNMAP;
642
643 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
644 /* do nothing */
645 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
646 *flags |= BDRV_O_UNMAP;
647 } else {
648 return -1;
649 }
650
651 return 0;
652}
653
654/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100655 * Set open flags for a given cache mode
656 *
657 * Return 0 on success, -1 if the cache mode was invalid.
658 */
659int bdrv_parse_cache_flags(const char *mode, int *flags)
660{
661 *flags &= ~BDRV_O_CACHE_MASK;
662
663 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
664 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100665 } else if (!strcmp(mode, "directsync")) {
666 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100667 } else if (!strcmp(mode, "writeback")) {
668 *flags |= BDRV_O_CACHE_WB;
669 } else if (!strcmp(mode, "unsafe")) {
670 *flags |= BDRV_O_CACHE_WB;
671 *flags |= BDRV_O_NO_FLUSH;
672 } else if (!strcmp(mode, "writethrough")) {
673 /* this is the default */
674 } else {
675 return -1;
676 }
677
678 return 0;
679}
680
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200681/*
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200682 * Returns the flags that a temporary snapshot should get, based on the
683 * originally requested flags (the originally requested image will have flags
684 * like a backing file)
685 */
686static int bdrv_temp_snapshot_flags(int flags)
687{
688 return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
689}
690
691/*
Kevin Wolff3930ed2015-04-08 13:43:47 +0200692 * Returns the flags that bs->file should get if a protocol driver is expected,
693 * based on the given flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200694 */
695static int bdrv_inherited_flags(int flags)
696{
697 /* Enable protocol handling, disable format probing for bs->file */
698 flags |= BDRV_O_PROTOCOL;
699
700 /* Our block drivers take care to send flushes and respect unmap policy,
701 * so we can enable both unconditionally on lower layers. */
702 flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
703
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200704 /* Clear flags that only apply to the top layer */
Kevin Wolf5669b442014-04-11 21:36:45 +0200705 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200706
707 return flags;
708}
709
Kevin Wolff3930ed2015-04-08 13:43:47 +0200710const BdrvChildRole child_file = {
711 .inherit_flags = bdrv_inherited_flags,
712};
713
714/*
715 * Returns the flags that bs->file should get if the use of formats (and not
716 * only protocols) is permitted for it, based on the given flags for the parent
717 * BDS
718 */
719static int bdrv_inherited_fmt_flags(int parent_flags)
720{
721 int flags = child_file.inherit_flags(parent_flags);
722 return flags & ~BDRV_O_PROTOCOL;
723}
724
725const BdrvChildRole child_format = {
726 .inherit_flags = bdrv_inherited_fmt_flags,
727};
728
Kevin Wolf317fc442014-04-25 13:27:34 +0200729/*
730 * Returns the flags that bs->backing_hd should get, based on the given flags
731 * for the parent BDS
732 */
733static int bdrv_backing_flags(int flags)
734{
735 /* backing files always opened read-only */
736 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
737
738 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200739 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200740
741 return flags;
742}
743
Kevin Wolff3930ed2015-04-08 13:43:47 +0200744static const BdrvChildRole child_backing = {
745 .inherit_flags = bdrv_backing_flags,
746};
747
Kevin Wolf7b272452012-11-12 17:05:39 +0100748static int bdrv_open_flags(BlockDriverState *bs, int flags)
749{
750 int open_flags = flags | BDRV_O_CACHE_WB;
751
752 /*
753 * Clear flags that are internal to the block layer before opening the
754 * image.
755 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200756 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100757
758 /*
759 * Snapshots should be writable.
760 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200761 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100762 open_flags |= BDRV_O_RDWR;
763 }
764
765 return open_flags;
766}
767
Kevin Wolf636ea372014-01-24 14:11:52 +0100768static void bdrv_assign_node_name(BlockDriverState *bs,
769 const char *node_name,
770 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100771{
772 if (!node_name) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100773 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100774 }
775
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200776 /* Check for empty string or invalid characters */
Markus Armbrusterf5bebbb2014-09-30 13:59:30 +0200777 if (!id_wellformed(node_name)) {
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200778 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100779 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100780 }
781
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100782 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200783 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100784 error_setg(errp, "node-name=%s is conflicting with a device id",
785 node_name);
Kevin Wolf636ea372014-01-24 14:11:52 +0100786 return;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100787 }
788
Benoît Canet6913c0c2014-01-23 21:31:33 +0100789 /* takes care of avoiding duplicates node names */
790 if (bdrv_find_node(node_name)) {
791 error_setg(errp, "Duplicate node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100792 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100793 }
794
795 /* copy node name into the bs and insert it into the graph list */
796 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
797 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100798}
799
Kevin Wolf18edf282015-04-07 17:12:56 +0200800static QemuOptsList bdrv_runtime_opts = {
801 .name = "bdrv_common",
802 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
803 .desc = {
804 {
805 .name = "node-name",
806 .type = QEMU_OPT_STRING,
807 .help = "Node name of the block device node",
808 },
809 { /* end of list */ }
810 },
811};
812
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200813/*
Kevin Wolf57915332010-04-14 15:24:50 +0200814 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100815 *
816 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200817 */
Kevin Wolff500a6d2012-11-12 17:35:27 +0100818static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200819 QDict *options, int flags, BlockDriver *drv, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200820{
821 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200822 const char *filename;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100823 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200824 QemuOpts *opts;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200825 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200826
827 assert(drv != NULL);
Paolo Bonzini64058752012-05-08 16:51:49 +0200828 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100829 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200830
Kevin Wolf45673672013-04-22 17:48:40 +0200831 if (file != NULL) {
832 filename = file->filename;
833 } else {
834 filename = qdict_get_try_str(options, "filename");
835 }
836
Kevin Wolf765003d2014-02-03 14:49:42 +0100837 if (drv->bdrv_needs_filename && !filename) {
838 error_setg(errp, "The '%s' block driver requires a file name",
839 drv->format_name);
840 return -EINVAL;
841 }
842
Kevin Wolf45673672013-04-22 17:48:40 +0200843 trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
Stefan Hajnoczi28dcee12011-09-22 20:14:12 +0100844
Kevin Wolf18edf282015-04-07 17:12:56 +0200845 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
846 qemu_opts_absorb_qdict(opts, options, &local_err);
847 if (local_err) {
848 error_propagate(errp, local_err);
849 ret = -EINVAL;
850 goto fail_opts;
851 }
852
853 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100854 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200855 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100856 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200857 ret = -EINVAL;
858 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100859 }
860
Paolo Bonzini1b7fd722011-11-29 11:35:47 +0100861 bs->guest_block_size = 512;
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100862 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800863 bs->zero_beyond_eof = true;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800864 open_flags = bdrv_open_flags(bs, flags);
865 bs->read_only = !(open_flags & BDRV_O_RDWR);
866
867 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200868 error_setg(errp,
869 !bs->read_only && bdrv_is_whitelisted(drv, true)
870 ? "Driver '%s' can only be used for read-only devices"
871 : "Driver '%s' is not whitelisted",
872 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200873 ret = -ENOTSUP;
874 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800875 }
Kevin Wolf57915332010-04-14 15:24:50 +0200876
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000877 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200878 if (flags & BDRV_O_COPY_ON_READ) {
879 if (!bs->read_only) {
880 bdrv_enable_copy_on_read(bs);
881 } else {
882 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200883 ret = -EINVAL;
884 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200885 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000886 }
887
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100888 if (filename != NULL) {
889 pstrcpy(bs->filename, sizeof(bs->filename), filename);
890 } else {
891 bs->filename[0] = '\0';
892 }
Max Reitz91af7012014-07-18 20:24:56 +0200893 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200894
Kevin Wolf57915332010-04-14 15:24:50 +0200895 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500896 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200897
Stefan Hajnoczi03f541b2011-10-27 10:54:28 +0100898 bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100899
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200900 /* Open the image, either directly or using a protocol */
901 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100902 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200903 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200904 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100905 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200906 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200907 error_setg(errp, "Can't use '%s' as a block driver for the "
908 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200909 ret = -EINVAL;
910 goto free_and_fail;
911 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100912 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200913 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200914 }
915
Kevin Wolf57915332010-04-14 15:24:50 +0200916 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100917 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200918 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800919 } else if (bs->filename[0]) {
920 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200921 } else {
922 error_setg_errno(errp, -ret, "Could not open image");
923 }
Kevin Wolf57915332010-04-14 15:24:50 +0200924 goto free_and_fail;
925 }
926
Markus Armbrustera1f688f2015-03-13 21:09:40 +0100927 if (bs->encrypted) {
928 error_report("Encrypted images are deprecated");
929 error_printf("Support for them will be removed in a future release.\n"
930 "You can use 'qemu-img convert' to convert your image"
931 " to an unencrypted one.\n");
932 }
933
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100934 ret = refresh_total_sectors(bs, bs->total_sectors);
935 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200936 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100937 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +0200938 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100939
Kevin Wolf3baca892014-07-16 17:48:16 +0200940 bdrv_refresh_limits(bs, &local_err);
941 if (local_err) {
942 error_propagate(errp, local_err);
943 ret = -EINVAL;
944 goto free_and_fail;
945 }
946
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100947 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300948 assert(bdrv_min_mem_align(bs) != 0);
Kevin Wolf47ea2de2014-03-05 15:49:55 +0100949 assert((bs->request_alignment != 0) || bs->sg);
Kevin Wolf18edf282015-04-07 17:12:56 +0200950
951 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200952 return 0;
953
954free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +0100955 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -0500956 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +0200957 bs->opaque = NULL;
958 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200959fail_opts:
960 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200961 return ret;
962}
963
Kevin Wolf5e5c4f62014-05-26 11:45:08 +0200964static QDict *parse_json_filename(const char *filename, Error **errp)
965{
966 QObject *options_obj;
967 QDict *options;
968 int ret;
969
970 ret = strstart(filename, "json:", &filename);
971 assert(ret);
972
973 options_obj = qobject_from_json(filename);
974 if (!options_obj) {
975 error_setg(errp, "Could not parse the JSON options");
976 return NULL;
977 }
978
979 if (qobject_type(options_obj) != QTYPE_QDICT) {
980 qobject_decref(options_obj);
981 error_setg(errp, "Invalid JSON object given");
982 return NULL;
983 }
984
985 options = qobject_to_qdict(options_obj);
986 qdict_flatten(options);
987
988 return options;
989}
990
Kevin Wolf57915332010-04-14 15:24:50 +0200991/*
Kevin Wolff54120f2014-05-26 11:09:59 +0200992 * Fills in default options for opening images and converts the legacy
993 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -0400994 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
995 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +0200996 */
Max Reitz53a29512015-03-19 14:53:16 -0400997static int bdrv_fill_options(QDict **options, const char **pfilename,
998 int *flags, BlockDriver *drv, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +0200999{
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001000 const char *filename = *pfilename;
Kevin Wolff54120f2014-05-26 11:09:59 +02001001 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001002 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001003 bool parse_filename = false;
Max Reitz53a29512015-03-19 14:53:16 -04001004 BlockDriver *tmp_drv;
Kevin Wolff54120f2014-05-26 11:09:59 +02001005 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001006
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001007 /* Parse json: pseudo-protocol */
1008 if (filename && g_str_has_prefix(filename, "json:")) {
1009 QDict *json_options = parse_json_filename(filename, &local_err);
1010 if (local_err) {
1011 error_propagate(errp, local_err);
1012 return -EINVAL;
1013 }
1014
1015 /* Options given in the filename have lower priority than options
1016 * specified directly */
1017 qdict_join(*options, json_options, false);
1018 QDECREF(json_options);
1019 *pfilename = filename = NULL;
1020 }
1021
Max Reitz53a29512015-03-19 14:53:16 -04001022 drvname = qdict_get_try_str(*options, "driver");
1023
1024 /* If the user has explicitly specified the driver, this choice should
1025 * override the BDRV_O_PROTOCOL flag */
1026 tmp_drv = drv;
1027 if (!tmp_drv && drvname) {
1028 tmp_drv = bdrv_find_format(drvname);
1029 }
1030 if (tmp_drv) {
1031 protocol = tmp_drv->bdrv_file_open;
1032 }
1033
1034 if (protocol) {
1035 *flags |= BDRV_O_PROTOCOL;
1036 } else {
1037 *flags &= ~BDRV_O_PROTOCOL;
1038 }
1039
Kevin Wolff54120f2014-05-26 11:09:59 +02001040 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001041 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001042 if (!qdict_haskey(*options, "filename")) {
1043 qdict_put(*options, "filename", qstring_from_str(filename));
1044 parse_filename = true;
1045 } else {
1046 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1047 "the same time");
1048 return -EINVAL;
1049 }
1050 }
1051
1052 /* Find the right block driver */
1053 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001054
Kevin Wolf17b005f2014-05-27 10:50:29 +02001055 if (drv) {
1056 if (drvname) {
1057 error_setg(errp, "Driver specified twice");
1058 return -EINVAL;
1059 }
1060 drvname = drv->format_name;
1061 qdict_put(*options, "driver", qstring_from_str(drvname));
1062 } else {
1063 if (!drvname && protocol) {
1064 if (filename) {
Max Reitzb65a5e12015-02-05 13:58:12 -05001065 drv = bdrv_find_protocol(filename, parse_filename, errp);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001066 if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001067 return -EINVAL;
1068 }
1069
1070 drvname = drv->format_name;
1071 qdict_put(*options, "driver", qstring_from_str(drvname));
1072 } else {
1073 error_setg(errp, "Must specify either driver or file");
Kevin Wolff54120f2014-05-26 11:09:59 +02001074 return -EINVAL;
1075 }
Kevin Wolf17b005f2014-05-27 10:50:29 +02001076 } else if (drvname) {
1077 drv = bdrv_find_format(drvname);
1078 if (!drv) {
1079 error_setg(errp, "Unknown driver '%s'", drvname);
1080 return -ENOENT;
1081 }
Kevin Wolff54120f2014-05-26 11:09:59 +02001082 }
1083 }
1084
Kevin Wolf17b005f2014-05-27 10:50:29 +02001085 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001086
1087 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001088 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001089 drv->bdrv_parse_filename(filename, *options, &local_err);
1090 if (local_err) {
1091 error_propagate(errp, local_err);
1092 return -EINVAL;
1093 }
1094
1095 if (!drv->bdrv_needs_filename) {
1096 qdict_del(*options, "filename");
1097 }
1098 }
1099
1100 return 0;
1101}
1102
Fam Zheng8d24cce2014-05-23 21:29:45 +08001103void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1104{
1105
Fam Zheng826b6ca2014-05-23 21:29:47 +08001106 if (bs->backing_hd) {
1107 assert(bs->backing_blocker);
1108 bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
1109 } else if (backing_hd) {
1110 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001111 "node is used as backing hd of '%s'",
1112 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001113 }
1114
Fam Zheng8d24cce2014-05-23 21:29:45 +08001115 bs->backing_hd = backing_hd;
1116 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001117 error_free(bs->backing_blocker);
1118 bs->backing_blocker = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001119 goto out;
1120 }
1121 bs->open_flags &= ~BDRV_O_NO_BACKING;
1122 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1123 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1124 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001125
1126 bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1127 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Fam Zhengbb000212014-09-11 13:14:00 +08001128 bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001129 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001130out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001131 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001132}
1133
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001134/*
1135 * Opens the backing file for a BlockDriverState if not yet open
1136 *
1137 * options is a QDict of options to pass to the block drivers, or NULL for an
1138 * empty set of options. The reference to the QDict is transferred to this
1139 * function (even on failure), so if the caller intends to reuse the dictionary,
1140 * it needs to use QINCREF() before calling bdrv_file_open.
1141 */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001142int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001143{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001144 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolf317fc442014-04-25 13:27:34 +02001145 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001146 BlockDriverState *backing_hd;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001147 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001148
1149 if (bs->backing_hd != NULL) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001150 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001151 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001152 }
1153
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001154 /* NULL means an empty set of options */
1155 if (options == NULL) {
1156 options = qdict_new();
1157 }
1158
Paolo Bonzini9156df12012-10-18 16:49:17 +02001159 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001160 if (qdict_haskey(options, "file.filename")) {
1161 backing_filename[0] = '\0';
1162 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001163 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001164 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001165 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001166 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1167 &local_err);
1168 if (local_err) {
1169 ret = -EINVAL;
1170 error_propagate(errp, local_err);
1171 QDECREF(options);
1172 goto free_exit;
1173 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001174 }
1175
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001176 if (!bs->drv || !bs->drv->supports_backing) {
1177 ret = -EINVAL;
1178 error_setg(errp, "Driver doesn't support backing files");
1179 QDECREF(options);
1180 goto free_exit;
1181 }
1182
Markus Armbrustere4e99862014-10-07 13:59:03 +02001183 backing_hd = bdrv_new();
Fam Zheng8d24cce2014-05-23 21:29:45 +08001184
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001185 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1186 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001187 }
1188
Max Reitzf67503e2014-02-18 18:33:05 +01001189 assert(bs->backing_hd == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001190 ret = bdrv_open_inherit(&backing_hd,
1191 *backing_filename ? backing_filename : NULL,
1192 NULL, options, 0, bs, &child_backing,
1193 NULL, &local_err);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001194 if (ret < 0) {
Fam Zheng8d24cce2014-05-23 21:29:45 +08001195 bdrv_unref(backing_hd);
1196 backing_hd = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001197 bs->open_flags |= BDRV_O_NO_BACKING;
Fam Zhengb04b6b62013-11-08 11:26:49 +08001198 error_setg(errp, "Could not open backing file: %s",
1199 error_get_pretty(local_err));
1200 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001201 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001202 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001203 bdrv_set_backing_hd(bs, backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001204
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001205free_exit:
1206 g_free(backing_filename);
1207 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001208}
1209
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001210/*
Max Reitzda557aa2013-12-20 19:28:11 +01001211 * Opens a disk image whose options are given as BlockdevRef in another block
1212 * device's options.
1213 *
Max Reitzda557aa2013-12-20 19:28:11 +01001214 * If allow_none is true, no image will be opened if filename is false and no
1215 * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1216 *
1217 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1218 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1219 * itself, all options starting with "${bdref_key}." are considered part of the
1220 * BlockdevRef.
1221 *
1222 * The BlockdevRef will be removed from the options QDict.
Max Reitzf67503e2014-02-18 18:33:05 +01001223 *
1224 * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
Max Reitzda557aa2013-12-20 19:28:11 +01001225 */
1226int bdrv_open_image(BlockDriverState **pbs, const char *filename,
Kevin Wolff3930ed2015-04-08 13:43:47 +02001227 QDict *options, const char *bdref_key,
1228 BlockDriverState* parent, const BdrvChildRole *child_role,
Max Reitzf7d9fd82014-02-18 18:33:12 +01001229 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001230{
1231 QDict *image_options;
1232 int ret;
1233 char *bdref_key_dot;
1234 const char *reference;
1235
Max Reitzf67503e2014-02-18 18:33:05 +01001236 assert(pbs);
1237 assert(*pbs == NULL);
1238
Max Reitzda557aa2013-12-20 19:28:11 +01001239 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1240 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1241 g_free(bdref_key_dot);
1242
1243 reference = qdict_get_try_str(options, bdref_key);
1244 if (!filename && !reference && !qdict_size(image_options)) {
1245 if (allow_none) {
1246 ret = 0;
1247 } else {
1248 error_setg(errp, "A block device must be specified for \"%s\"",
1249 bdref_key);
1250 ret = -EINVAL;
1251 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001252 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001253 goto done;
1254 }
1255
Kevin Wolff3930ed2015-04-08 13:43:47 +02001256 ret = bdrv_open_inherit(pbs, filename, reference, image_options, 0,
1257 parent, child_role, NULL, errp);
Max Reitzda557aa2013-12-20 19:28:11 +01001258
1259done:
1260 qdict_del(options, bdref_key);
1261 return ret;
1262}
1263
Chen Gang6b8aeca2014-06-23 23:28:23 +08001264int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001265{
1266 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001267 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001268 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001269 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001270 QDict *snapshot_options;
1271 BlockDriverState *bs_snapshot;
1272 Error *local_err;
1273 int ret;
1274
1275 /* if snapshot, we create a temporary backing file and open it
1276 instead of opening 'filename' directly */
1277
1278 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001279 total_size = bdrv_getlength(bs);
1280 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001281 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001282 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001283 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001284 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001285
1286 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001287 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001288 if (ret < 0) {
1289 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001290 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001291 }
1292
Max Reitzef810432014-12-02 18:32:42 +01001293 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001294 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001295 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Max Reitzef810432014-12-02 18:32:42 +01001296 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08001297 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001298 if (ret < 0) {
1299 error_setg_errno(errp, -ret, "Could not create temporary overlay "
1300 "'%s': %s", tmp_filename,
1301 error_get_pretty(local_err));
1302 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001303 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001304 }
1305
1306 /* Prepare a new options QDict for the temporary file */
1307 snapshot_options = qdict_new();
1308 qdict_put(snapshot_options, "file.driver",
1309 qstring_from_str("file"));
1310 qdict_put(snapshot_options, "file.filename",
1311 qstring_from_str(tmp_filename));
1312
Markus Armbrustere4e99862014-10-07 13:59:03 +02001313 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001314
1315 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitzef810432014-12-02 18:32:42 +01001316 flags, &bdrv_qcow2, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001317 if (ret < 0) {
1318 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001319 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001320 }
1321
1322 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001323
1324out:
1325 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001326 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001327}
1328
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001329static void bdrv_attach_child(BlockDriverState *parent_bs,
1330 BlockDriverState *child_bs,
1331 const BdrvChildRole *child_role)
1332{
1333 BdrvChild *child = g_new(BdrvChild, 1);
1334 *child = (BdrvChild) {
1335 .bs = child_bs,
1336 .role = child_role,
1337 };
1338
1339 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1340}
1341
Max Reitzda557aa2013-12-20 19:28:11 +01001342/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001343 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001344 *
1345 * options is a QDict of options to pass to the block drivers, or NULL for an
1346 * empty set of options. The reference to the QDict belongs to the block layer
1347 * after the call (even on failure), so if the caller intends to reuse the
1348 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001349 *
1350 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1351 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001352 *
1353 * The reference parameter may be used to specify an existing block device which
1354 * should be opened. If specified, neither options nor a filename may be given,
1355 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001356 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001357static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1358 const char *reference, QDict *options, int flags,
1359 BlockDriverState *parent,
1360 const BdrvChildRole *child_role,
1361 BlockDriver *drv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001362{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001363 int ret;
Max Reitzf67503e2014-02-18 18:33:05 +01001364 BlockDriverState *file = NULL, *bs;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001365 const char *drvname;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001366 Error *local_err = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001367 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001368
Max Reitzf67503e2014-02-18 18:33:05 +01001369 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001370 assert(!child_role || !flags);
1371 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001372
Max Reitzddf56362014-02-18 18:33:06 +01001373 if (reference) {
1374 bool options_non_empty = options ? qdict_size(options) : false;
1375 QDECREF(options);
1376
1377 if (*pbs) {
1378 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1379 "another block device");
1380 return -EINVAL;
1381 }
1382
1383 if (filename || options_non_empty) {
1384 error_setg(errp, "Cannot reference an existing block device with "
1385 "additional options or a new filename");
1386 return -EINVAL;
1387 }
1388
1389 bs = bdrv_lookup_bs(reference, reference, errp);
1390 if (!bs) {
1391 return -ENODEV;
1392 }
1393 bdrv_ref(bs);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001394 if (child_role) {
1395 bdrv_attach_child(parent, bs, child_role);
1396 }
Max Reitzddf56362014-02-18 18:33:06 +01001397 *pbs = bs;
1398 return 0;
1399 }
1400
Max Reitzf67503e2014-02-18 18:33:05 +01001401 if (*pbs) {
1402 bs = *pbs;
1403 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001404 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001405 }
1406
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001407 /* NULL means an empty set of options */
1408 if (options == NULL) {
1409 options = qdict_new();
1410 }
1411
Kevin Wolff3930ed2015-04-08 13:43:47 +02001412 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001413 bs->inherits_from = parent;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001414 flags = child_role->inherit_flags(parent->open_flags);
1415 }
1416
Max Reitz53a29512015-03-19 14:53:16 -04001417 ret = bdrv_fill_options(&options, &filename, &flags, drv, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001418 if (local_err) {
1419 goto fail;
1420 }
1421
Kevin Wolf76c591b2014-06-04 14:19:44 +02001422 /* Find the right image format driver */
1423 drv = NULL;
1424 drvname = qdict_get_try_str(options, "driver");
1425 if (drvname) {
1426 drv = bdrv_find_format(drvname);
1427 qdict_del(options, "driver");
1428 if (!drv) {
1429 error_setg(errp, "Unknown driver: '%s'", drvname);
1430 ret = -EINVAL;
1431 goto fail;
1432 }
1433 }
1434
1435 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001436
Kevin Wolff3930ed2015-04-08 13:43:47 +02001437 bs->open_flags = flags;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001438 bs->options = options;
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001439 options = qdict_clone_shallow(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001440
Kevin Wolff4788ad2014-06-03 16:44:19 +02001441 /* Open image file without format layer */
1442 if ((flags & BDRV_O_PROTOCOL) == 0) {
1443 if (flags & BDRV_O_RDWR) {
1444 flags |= BDRV_O_ALLOW_RDWR;
1445 }
1446 if (flags & BDRV_O_SNAPSHOT) {
1447 snapshot_flags = bdrv_temp_snapshot_flags(flags);
1448 flags = bdrv_backing_flags(flags);
1449 }
1450
1451 assert(file == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001452 bs->open_flags = flags;
Kevin Wolff4788ad2014-06-03 16:44:19 +02001453 ret = bdrv_open_image(&file, filename, options, "file",
Kevin Wolff3930ed2015-04-08 13:43:47 +02001454 bs, &child_file, true, &local_err);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001455 if (ret < 0) {
Max Reitz5469a2a2014-02-18 18:33:10 +01001456 goto fail;
1457 }
1458 }
1459
Kevin Wolf76c591b2014-06-04 14:19:44 +02001460 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001461 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001462 if (!drv && file) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001463 ret = find_image_format(file, filename, &drv, &local_err);
1464 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001465 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001466 }
Kevin Wolf76c591b2014-06-04 14:19:44 +02001467 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001468 error_setg(errp, "Must specify either driver or file");
1469 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001470 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001471 }
1472
Max Reitz53a29512015-03-19 14:53:16 -04001473 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1474 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1475 /* file must be NULL if a protocol BDS is about to be created
1476 * (the inverse results in an error message from bdrv_open_common()) */
1477 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1478
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001479 /* Open the image */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001480 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001481 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001482 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001483 }
1484
Max Reitz2a05cbe2013-12-20 19:28:10 +01001485 if (file && (bs->file != file)) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001486 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001487 file = NULL;
1488 }
1489
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001490 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001491 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001492 QDict *backing_options;
1493
Benoît Canet5726d872013-09-25 13:30:01 +02001494 qdict_extract_subqdict(options, &backing_options, "backing.");
Max Reitz34b5d2c2013-09-05 14:45:29 +02001495 ret = bdrv_open_backing_file(bs, backing_options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001496 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001497 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001498 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001499 }
1500
Max Reitz91af7012014-07-18 20:24:56 +02001501 bdrv_refresh_filename(bs);
1502
Kevin Wolfb9988752014-04-03 12:09:34 +02001503 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1504 * temporary snapshot afterwards. */
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001505 if (snapshot_flags) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001506 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001507 if (local_err) {
Kevin Wolfb9988752014-04-03 12:09:34 +02001508 goto close_and_fail;
1509 }
1510 }
1511
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001512 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001513 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001514 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001515 if (flags & BDRV_O_PROTOCOL) {
1516 error_setg(errp, "Block protocol '%s' doesn't support the option "
1517 "'%s'", drv->format_name, entry->key);
1518 } else {
1519 error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1520 "support the option '%s'", drv->format_name,
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001521 bdrv_get_device_name(bs), entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001522 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001523
1524 ret = -EINVAL;
1525 goto close_and_fail;
1526 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001527
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001528 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001529 if (bs->blk) {
1530 blk_dev_change_media_cb(bs->blk, true);
1531 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001532 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1533 && !runstate_check(RUN_STATE_INMIGRATE)
1534 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1535 error_setg(errp,
1536 "Guest must be stopped for opening of encrypted image");
1537 ret = -EBUSY;
1538 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001539 }
1540
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001541 if (child_role) {
1542 bdrv_attach_child(parent, bs, child_role);
1543 }
1544
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001545 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001546 *pbs = bs;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001547 return 0;
1548
Kevin Wolf8bfea152014-04-11 19:16:36 +02001549fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001550 if (file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001551 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001552 }
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001553 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001554 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001555 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001556 if (!*pbs) {
1557 /* If *pbs is NULL, a new BDS has been created in this function and
1558 needs to be freed now. Otherwise, it does not need to be closed,
1559 since it has not really been opened yet. */
1560 bdrv_unref(bs);
1561 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001562 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001563 error_propagate(errp, local_err);
1564 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001565 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001566
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001567close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001568 /* See fail path, but now the BDS has to be always closed */
1569 if (*pbs) {
1570 bdrv_close(bs);
1571 } else {
1572 bdrv_unref(bs);
1573 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001574 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001575 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001576 error_propagate(errp, local_err);
1577 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001578 return ret;
1579}
1580
Kevin Wolff3930ed2015-04-08 13:43:47 +02001581int bdrv_open(BlockDriverState **pbs, const char *filename,
1582 const char *reference, QDict *options, int flags,
1583 BlockDriver *drv, Error **errp)
1584{
1585 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
1586 NULL, drv, errp);
1587}
1588
Jeff Codye971aa12012-09-20 15:13:19 -04001589typedef struct BlockReopenQueueEntry {
1590 bool prepared;
1591 BDRVReopenState state;
1592 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1593} BlockReopenQueueEntry;
1594
1595/*
1596 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1597 * reopen of multiple devices.
1598 *
1599 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1600 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1601 * be created and initialized. This newly created BlockReopenQueue should be
1602 * passed back in for subsequent calls that are intended to be of the same
1603 * atomic 'set'.
1604 *
1605 * bs is the BlockDriverState to add to the reopen queue.
1606 *
1607 * flags contains the open flags for the associated bs
1608 *
1609 * returns a pointer to bs_queue, which is either the newly allocated
1610 * bs_queue, or the existing bs_queue being used.
1611 *
1612 */
1613BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1614 BlockDriverState *bs, int flags)
1615{
1616 assert(bs != NULL);
1617
1618 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001619 BdrvChild *child;
1620
Jeff Codye971aa12012-09-20 15:13:19 -04001621 if (bs_queue == NULL) {
1622 bs_queue = g_new0(BlockReopenQueue, 1);
1623 QSIMPLEQ_INIT(bs_queue);
1624 }
1625
Kevin Wolff1f25a22014-04-25 19:04:55 +02001626 /* bdrv_open() masks this flag out */
1627 flags &= ~BDRV_O_PROTOCOL;
1628
Kevin Wolf67251a32015-04-09 18:54:04 +02001629 QLIST_FOREACH(child, &bs->children, next) {
1630 int child_flags;
1631
1632 if (child->bs->inherits_from != bs) {
1633 continue;
1634 }
1635
1636 child_flags = child->role->inherit_flags(flags);
1637 bdrv_reopen_queue(bs_queue, child->bs, child_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001638 }
1639
1640 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1641 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1642
1643 bs_entry->state.bs = bs;
1644 bs_entry->state.flags = flags;
1645
1646 return bs_queue;
1647}
1648
1649/*
1650 * Reopen multiple BlockDriverStates atomically & transactionally.
1651 *
1652 * The queue passed in (bs_queue) must have been built up previous
1653 * via bdrv_reopen_queue().
1654 *
1655 * Reopens all BDS specified in the queue, with the appropriate
1656 * flags. All devices are prepared for reopen, and failure of any
1657 * device will cause all device changes to be abandonded, and intermediate
1658 * data cleaned up.
1659 *
1660 * If all devices prepare successfully, then the changes are committed
1661 * to all devices.
1662 *
1663 */
1664int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1665{
1666 int ret = -1;
1667 BlockReopenQueueEntry *bs_entry, *next;
1668 Error *local_err = NULL;
1669
1670 assert(bs_queue != NULL);
1671
1672 bdrv_drain_all();
1673
1674 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1675 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1676 error_propagate(errp, local_err);
1677 goto cleanup;
1678 }
1679 bs_entry->prepared = true;
1680 }
1681
1682 /* If we reach this point, we have success and just need to apply the
1683 * changes
1684 */
1685 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1686 bdrv_reopen_commit(&bs_entry->state);
1687 }
1688
1689 ret = 0;
1690
1691cleanup:
1692 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1693 if (ret && bs_entry->prepared) {
1694 bdrv_reopen_abort(&bs_entry->state);
1695 }
1696 g_free(bs_entry);
1697 }
1698 g_free(bs_queue);
1699 return ret;
1700}
1701
1702
1703/* Reopen a single BlockDriverState with the specified flags. */
1704int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1705{
1706 int ret = -1;
1707 Error *local_err = NULL;
1708 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1709
1710 ret = bdrv_reopen_multiple(queue, &local_err);
1711 if (local_err != NULL) {
1712 error_propagate(errp, local_err);
1713 }
1714 return ret;
1715}
1716
1717
1718/*
1719 * Prepares a BlockDriverState for reopen. All changes are staged in the
1720 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1721 * the block driver layer .bdrv_reopen_prepare()
1722 *
1723 * bs is the BlockDriverState to reopen
1724 * flags are the new open flags
1725 * queue is the reopen queue
1726 *
1727 * Returns 0 on success, non-zero on error. On error errp will be set
1728 * as well.
1729 *
1730 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1731 * It is the responsibility of the caller to then call the abort() or
1732 * commit() for any other BDS that have been left in a prepare() state
1733 *
1734 */
1735int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1736 Error **errp)
1737{
1738 int ret = -1;
1739 Error *local_err = NULL;
1740 BlockDriver *drv;
1741
1742 assert(reopen_state != NULL);
1743 assert(reopen_state->bs->drv != NULL);
1744 drv = reopen_state->bs->drv;
1745
1746 /* if we are to stay read-only, do not allow permission change
1747 * to r/w */
1748 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1749 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03001750 error_setg(errp, "Node '%s' is read only",
1751 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001752 goto error;
1753 }
1754
1755
1756 ret = bdrv_flush(reopen_state->bs);
1757 if (ret) {
1758 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1759 strerror(-ret));
1760 goto error;
1761 }
1762
1763 if (drv->bdrv_reopen_prepare) {
1764 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1765 if (ret) {
1766 if (local_err != NULL) {
1767 error_propagate(errp, local_err);
1768 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04001769 error_setg(errp, "failed while preparing to reopen image '%s'",
1770 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04001771 }
1772 goto error;
1773 }
1774 } else {
1775 /* It is currently mandatory to have a bdrv_reopen_prepare()
1776 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03001777 error_setg(errp, "Block format '%s' used by node '%s' "
1778 "does not support reopening files", drv->format_name,
1779 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001780 ret = -1;
1781 goto error;
1782 }
1783
1784 ret = 0;
1785
1786error:
1787 return ret;
1788}
1789
1790/*
1791 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1792 * makes them final by swapping the staging BlockDriverState contents into
1793 * the active BlockDriverState contents.
1794 */
1795void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1796{
1797 BlockDriver *drv;
1798
1799 assert(reopen_state != NULL);
1800 drv = reopen_state->bs->drv;
1801 assert(drv != NULL);
1802
1803 /* If there are any driver level actions to take */
1804 if (drv->bdrv_reopen_commit) {
1805 drv->bdrv_reopen_commit(reopen_state);
1806 }
1807
1808 /* set BDS specific flags now */
1809 reopen_state->bs->open_flags = reopen_state->flags;
1810 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1811 BDRV_O_CACHE_WB);
1812 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01001813
Kevin Wolf3baca892014-07-16 17:48:16 +02001814 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04001815}
1816
1817/*
1818 * Abort the reopen, and delete and free the staged changes in
1819 * reopen_state
1820 */
1821void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1822{
1823 BlockDriver *drv;
1824
1825 assert(reopen_state != NULL);
1826 drv = reopen_state->bs->drv;
1827 assert(drv != NULL);
1828
1829 if (drv->bdrv_reopen_abort) {
1830 drv->bdrv_reopen_abort(reopen_state);
1831 }
1832}
1833
1834
bellardfc01f7e2003-06-30 10:03:06 +00001835void bdrv_close(BlockDriverState *bs)
1836{
Max Reitz33384422014-06-20 21:57:33 +02001837 BdrvAioNotifier *ban, *ban_next;
1838
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001839 if (bs->job) {
1840 block_job_cancel_sync(bs->job);
1841 }
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02001842 bdrv_drain_all(); /* complete I/O */
1843 bdrv_flush(bs);
1844 bdrv_drain_all(); /* in case flush left pending I/O */
Paolo Bonzinid7d512f2012-08-23 11:20:36 +02001845 notifier_list_notify(&bs->close_notifiers, bs);
Kevin Wolf7094f122012-04-11 11:06:37 +02001846
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001847 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001848 BdrvChild *child, *next;
1849
1850 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001851 if (child->bs->inherits_from == bs) {
1852 child->bs->inherits_from = NULL;
1853 }
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001854 QLIST_REMOVE(child, next);
1855 g_free(child);
1856 }
1857
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001858 if (bs->backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001859 BlockDriverState *backing_hd = bs->backing_hd;
1860 bdrv_set_backing_hd(bs, NULL);
1861 bdrv_unref(backing_hd);
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001862 }
bellardea2384d2004-08-01 21:59:26 +00001863 bs->drv->bdrv_close(bs);
Anthony Liguori7267c092011-08-20 22:09:37 -05001864 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00001865 bs->opaque = NULL;
1866 bs->drv = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00001867 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02001868 bs->backing_file[0] = '\0';
1869 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02001870 bs->total_sectors = 0;
1871 bs->encrypted = 0;
1872 bs->valid_key = 0;
1873 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08001874 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001875 QDECREF(bs->options);
1876 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02001877 QDECREF(bs->full_open_options);
1878 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00001879
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001880 if (bs->file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001881 bdrv_unref(bs->file);
Paolo Bonzini0ac93772012-05-08 16:51:44 +02001882 bs->file = NULL;
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001883 }
bellardb3380822004-03-14 21:38:54 +00001884 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001885
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001886 if (bs->blk) {
1887 blk_dev_change_media_cb(bs->blk, false);
1888 }
Pavel Hrdina9ca11152012-08-09 12:44:48 +02001889
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001890 /*throttling disk I/O limits*/
1891 if (bs->io_limits_enabled) {
1892 bdrv_io_limits_disable(bs);
1893 }
Max Reitz33384422014-06-20 21:57:33 +02001894
1895 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1896 g_free(ban);
1897 }
1898 QLIST_INIT(&bs->aio_notifiers);
bellardb3380822004-03-14 21:38:54 +00001899}
1900
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001901void bdrv_close_all(void)
1902{
1903 BlockDriverState *bs;
1904
Benoît Canetdc364f42014-01-23 21:31:32 +01001905 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001906 AioContext *aio_context = bdrv_get_aio_context(bs);
1907
1908 aio_context_acquire(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001909 bdrv_close(bs);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001910 aio_context_release(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001911 }
1912}
1913
Benoît Canetdc364f42014-01-23 21:31:32 +01001914/* make a BlockDriverState anonymous by removing from bdrv_state and
1915 * graph_bdrv_state list.
Ryan Harperd22b2f42011-03-29 20:51:47 -05001916 Also, NULL terminate the device_name to prevent double remove */
1917void bdrv_make_anon(BlockDriverState *bs)
1918{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001919 /*
1920 * Take care to remove bs from bdrv_states only when it's actually
1921 * in it. Note that bs->device_list.tqe_prev is initially null,
1922 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1923 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1924 * resetting it to null on remove.
1925 */
1926 if (bs->device_list.tqe_prev) {
Benoît Canetdc364f42014-01-23 21:31:32 +01001927 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001928 bs->device_list.tqe_prev = NULL;
Ryan Harperd22b2f42011-03-29 20:51:47 -05001929 }
Benoît Canetdc364f42014-01-23 21:31:32 +01001930 if (bs->node_name[0] != '\0') {
1931 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1932 }
1933 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05001934}
1935
Paolo Bonzinie023b2e2012-05-08 16:51:41 +02001936static void bdrv_rebind(BlockDriverState *bs)
1937{
1938 if (bs->drv && bs->drv->bdrv_rebind) {
1939 bs->drv->bdrv_rebind(bs);
1940 }
1941}
1942
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001943static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
1944 BlockDriverState *bs_src)
1945{
1946 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001947
1948 /* dev info */
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01001949 bs_dest->guest_block_size = bs_src->guest_block_size;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001950 bs_dest->copy_on_read = bs_src->copy_on_read;
1951
1952 bs_dest->enable_write_cache = bs_src->enable_write_cache;
1953
Benoît Canetcc0681c2013-09-02 14:14:39 +02001954 /* i/o throttled req */
Alberto Garcia76f4afb2015-06-08 18:17:44 +02001955 bs_dest->throttle_state = bs_src->throttle_state,
1956 bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
1957 bs_dest->pending_reqs[0] = bs_src->pending_reqs[0];
1958 bs_dest->pending_reqs[1] = bs_src->pending_reqs[1];
1959 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
1960 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
1961 memcpy(&bs_dest->round_robin,
1962 &bs_src->round_robin,
1963 sizeof(bs_dest->round_robin));
Benoît Canet0e5b0a22015-06-08 18:17:41 +02001964 memcpy(&bs_dest->throttle_timers,
1965 &bs_src->throttle_timers,
1966 sizeof(ThrottleTimers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001967
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001968 /* r/w error */
1969 bs_dest->on_read_error = bs_src->on_read_error;
1970 bs_dest->on_write_error = bs_src->on_write_error;
1971
1972 /* i/o status */
1973 bs_dest->iostatus_enabled = bs_src->iostatus_enabled;
1974 bs_dest->iostatus = bs_src->iostatus;
1975
1976 /* dirty bitmap */
Fam Zhenge4654d22013-11-13 18:29:43 +08001977 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001978
Fam Zheng9fcb0252013-08-23 09:14:46 +08001979 /* reference count */
1980 bs_dest->refcnt = bs_src->refcnt;
1981
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001982 /* job */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001983 bs_dest->job = bs_src->job;
1984
1985 /* keep the same entry in bdrv_states */
Benoît Canetdc364f42014-01-23 21:31:32 +01001986 bs_dest->device_list = bs_src->device_list;
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001987 bs_dest->blk = bs_src->blk;
1988
Fam Zhengfbe40ff2014-05-23 21:29:42 +08001989 memcpy(bs_dest->op_blockers, bs_src->op_blockers,
1990 sizeof(bs_dest->op_blockers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001991}
1992
1993/*
1994 * Swap bs contents for two image chains while they are live,
1995 * while keeping required fields on the BlockDriverState that is
1996 * actually attached to a device.
1997 *
1998 * This will modify the BlockDriverState fields, and swap contents
1999 * between bs_new and bs_old. Both bs_new and bs_old are modified.
2000 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002001 * bs_new must not be attached to a BlockBackend.
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002002 *
2003 * This function does not create any image files.
2004 */
2005void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
2006{
2007 BlockDriverState tmp;
Kevin Wolfbddcec32015-04-09 18:47:50 +02002008 BdrvChild *child;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002009
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002010 bdrv_drain(bs_new);
2011 bdrv_drain(bs_old);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002012
Benoît Canet90ce8a02014-03-05 23:48:29 +01002013 /* The code needs to swap the node_name but simply swapping node_list won't
2014 * work so first remove the nodes from the graph list, do the swap then
2015 * insert them back if needed.
2016 */
2017 if (bs_new->node_name[0] != '\0') {
2018 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2019 }
2020 if (bs_old->node_name[0] != '\0') {
2021 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2022 }
2023
Alberto Garciadb628332015-06-08 18:17:45 +02002024 /* If the BlockDriverState is part of a throttling group acquire
2025 * its lock since we're going to mess with the protected fields.
2026 * Otherwise there's no need to worry since no one else can touch
2027 * them. */
2028 if (bs_old->throttle_state) {
2029 throttle_group_lock(bs_old);
2030 }
2031
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002032 /* bs_new must be unattached and shouldn't have anything fancy enabled */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002033 assert(!bs_new->blk);
Fam Zhenge4654d22013-11-13 18:29:43 +08002034 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002035 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002036 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002037 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002038 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002039
2040 tmp = *bs_new;
2041 *bs_new = *bs_old;
2042 *bs_old = tmp;
2043
2044 /* there are some fields that should not be swapped, move them back */
2045 bdrv_move_feature_fields(&tmp, bs_old);
2046 bdrv_move_feature_fields(bs_old, bs_new);
2047 bdrv_move_feature_fields(bs_new, &tmp);
2048
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002049 /* bs_new must remain unattached */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002050 assert(!bs_new->blk);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002051
2052 /* Check a few fields that should remain attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002053 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002054 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002055 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002056 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002057
Alberto Garciadb628332015-06-08 18:17:45 +02002058 /* Release the ThrottleGroup lock */
2059 if (bs_old->throttle_state) {
2060 throttle_group_unlock(bs_old);
2061 }
2062
Benoît Canet90ce8a02014-03-05 23:48:29 +01002063 /* insert the nodes back into the graph node list if needed */
2064 if (bs_new->node_name[0] != '\0') {
2065 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2066 }
2067 if (bs_old->node_name[0] != '\0') {
2068 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2069 }
2070
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002071 /*
2072 * Update lh_first.le_prev for non-empty lists.
2073 *
2074 * The head of the op blocker list doesn't change because it is moved back
2075 * in bdrv_move_feature_fields().
2076 */
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002077 assert(QLIST_EMPTY(&bs_old->tracked_requests));
2078 assert(QLIST_EMPTY(&bs_new->tracked_requests));
2079
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002080 QLIST_FIX_HEAD_PTR(&bs_new->children, next);
2081 QLIST_FIX_HEAD_PTR(&bs_old->children, next);
2082
Kevin Wolfbddcec32015-04-09 18:47:50 +02002083 /* Update references in bs->opaque and children */
2084 QLIST_FOREACH(child, &bs_old->children, next) {
2085 if (child->bs->inherits_from == bs_new) {
2086 child->bs->inherits_from = bs_old;
2087 }
2088 }
2089 QLIST_FOREACH(child, &bs_new->children, next) {
2090 if (child->bs->inherits_from == bs_old) {
2091 child->bs->inherits_from = bs_new;
2092 }
2093 }
2094
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002095 bdrv_rebind(bs_new);
2096 bdrv_rebind(bs_old);
2097}
2098
Jeff Cody8802d1f2012-02-28 15:54:06 -05002099/*
2100 * Add new bs contents at the top of an image chain while the chain is
2101 * live, while keeping required fields on the top layer.
2102 *
2103 * This will modify the BlockDriverState fields, and swap contents
2104 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2105 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002106 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002107 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002108 * This function does not create any image files.
2109 */
2110void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2111{
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002112 bdrv_swap(bs_new, bs_top);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002113
2114 /* The contents of 'tmp' will become bs_top, as we are
2115 * swapping bs_new and bs_top contents. */
Fam Zheng8d24cce2014-05-23 21:29:45 +08002116 bdrv_set_backing_hd(bs_top, bs_new);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002117 bdrv_attach_child(bs_top, bs_new, &child_backing);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002118}
2119
Fam Zheng4f6fd342013-08-23 09:14:47 +08002120static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002121{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002122 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002123 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002124 assert(!bs->refcnt);
Fam Zhenge4654d22013-11-13 18:29:43 +08002125 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
Markus Armbruster18846de2010-06-29 16:58:30 +02002126
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002127 bdrv_close(bs);
2128
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002129 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002130 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002131
Anthony Liguori7267c092011-08-20 22:09:37 -05002132 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002133}
2134
aliguorie97fc192009-04-21 23:11:50 +00002135/*
2136 * Run consistency checks on an image
2137 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002138 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002139 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002140 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002141 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002142int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002143{
Max Reitz908bcd52014-08-07 22:47:55 +02002144 if (bs->drv == NULL) {
2145 return -ENOMEDIUM;
2146 }
aliguorie97fc192009-04-21 23:11:50 +00002147 if (bs->drv->bdrv_check == NULL) {
2148 return -ENOTSUP;
2149 }
2150
Kevin Wolfe076f332010-06-29 11:43:13 +02002151 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002152 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002153}
2154
Kevin Wolf8a426612010-07-16 17:17:01 +02002155#define COMMIT_BUF_SECTORS 2048
2156
bellard33e39632003-07-06 17:15:21 +00002157/* commit COW file into the raw image */
2158int bdrv_commit(BlockDriverState *bs)
2159{
bellard19cb3732006-08-19 11:45:59 +00002160 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002161 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002162 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002163 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002164 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002165
bellard19cb3732006-08-19 11:45:59 +00002166 if (!drv)
2167 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002168
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002169 if (!bs->backing_hd) {
2170 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002171 }
2172
Fam Zhengbb000212014-09-11 13:14:00 +08002173 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2174 bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002175 return -EBUSY;
2176 }
2177
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002178 ro = bs->backing_hd->read_only;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002179 open_flags = bs->backing_hd->open_flags;
2180
2181 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002182 if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2183 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002184 }
bellard33e39632003-07-06 17:15:21 +00002185 }
bellardea2384d2004-08-01 21:59:26 +00002186
Jeff Cody72706ea2014-01-24 09:02:35 -05002187 length = bdrv_getlength(bs);
2188 if (length < 0) {
2189 ret = length;
2190 goto ro_cleanup;
2191 }
2192
2193 backing_length = bdrv_getlength(bs->backing_hd);
2194 if (backing_length < 0) {
2195 ret = backing_length;
2196 goto ro_cleanup;
2197 }
2198
2199 /* If our top snapshot is larger than the backing file image,
2200 * grow the backing file image if possible. If not possible,
2201 * we must return an error */
2202 if (length > backing_length) {
2203 ret = bdrv_truncate(bs->backing_hd, length);
2204 if (ret < 0) {
2205 goto ro_cleanup;
2206 }
2207 }
2208
2209 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002210
2211 /* qemu_try_blockalign() for bs will choose an alignment that works for
2212 * bs->backing_hd as well, so no need to compare the alignment manually. */
2213 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2214 if (buf == NULL) {
2215 ret = -ENOMEM;
2216 goto ro_cleanup;
2217 }
bellardea2384d2004-08-01 21:59:26 +00002218
Kevin Wolf8a426612010-07-16 17:17:01 +02002219 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002220 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2221 if (ret < 0) {
2222 goto ro_cleanup;
2223 }
2224 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002225 ret = bdrv_read(bs, sector, buf, n);
2226 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002227 goto ro_cleanup;
2228 }
2229
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002230 ret = bdrv_write(bs->backing_hd, sector, buf, n);
2231 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002232 goto ro_cleanup;
2233 }
bellardea2384d2004-08-01 21:59:26 +00002234 }
2235 }
bellard95389c82005-12-18 18:28:15 +00002236
Christoph Hellwig1d449522010-01-17 12:32:30 +01002237 if (drv->bdrv_make_empty) {
2238 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002239 if (ret < 0) {
2240 goto ro_cleanup;
2241 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002242 bdrv_flush(bs);
2243 }
bellard95389c82005-12-18 18:28:15 +00002244
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002245 /*
2246 * Make sure all data we wrote to the backing device is actually
2247 * stable on disk.
2248 */
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002249 if (bs->backing_hd) {
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002250 bdrv_flush(bs->backing_hd);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002251 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002252
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002253 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002254ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002255 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002256
2257 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002258 /* ignoring error return here */
2259 bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002260 }
2261
Christoph Hellwig1d449522010-01-17 12:32:30 +01002262 return ret;
bellard33e39632003-07-06 17:15:21 +00002263}
2264
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002265int bdrv_commit_all(void)
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002266{
2267 BlockDriverState *bs;
2268
Benoît Canetdc364f42014-01-23 21:31:32 +01002269 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002270 AioContext *aio_context = bdrv_get_aio_context(bs);
2271
2272 aio_context_acquire(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002273 if (bs->drv && bs->backing_hd) {
2274 int ret = bdrv_commit(bs);
2275 if (ret < 0) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002276 aio_context_release(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002277 return ret;
2278 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002279 }
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002280 aio_context_release(aio_context);
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002281 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002282 return 0;
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002283}
2284
Kevin Wolf756e6732010-01-12 12:55:17 +01002285/*
2286 * Return values:
2287 * 0 - success
2288 * -EINVAL - backing format specified, but no file
2289 * -ENOSPC - can't update the backing file because no space is left in the
2290 * image file header
2291 * -ENOTSUP - format driver doesn't support changing the backing file
2292 */
2293int bdrv_change_backing_file(BlockDriverState *bs,
2294 const char *backing_file, const char *backing_fmt)
2295{
2296 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002297 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002298
Paolo Bonzini5f377792012-04-12 14:01:01 +02002299 /* Backing file format doesn't make sense without a backing file */
2300 if (backing_fmt && !backing_file) {
2301 return -EINVAL;
2302 }
2303
Kevin Wolf756e6732010-01-12 12:55:17 +01002304 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002305 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002306 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002307 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002308 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002309
2310 if (ret == 0) {
2311 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2312 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2313 }
2314 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002315}
2316
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002317/*
2318 * Finds the image layer in the chain that has 'bs' as its backing file.
2319 *
2320 * active is the current topmost image.
2321 *
2322 * Returns NULL if bs is not found in active's image chain,
2323 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002324 *
2325 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002326 */
2327BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2328 BlockDriverState *bs)
2329{
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002330 while (active && bs != active->backing_hd) {
2331 active = active->backing_hd;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002332 }
2333
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002334 return active;
2335}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002336
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002337/* Given a BDS, searches for the base layer. */
2338BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2339{
2340 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002341}
2342
2343typedef struct BlkIntermediateStates {
2344 BlockDriverState *bs;
2345 QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2346} BlkIntermediateStates;
2347
2348
2349/*
2350 * Drops images above 'base' up to and including 'top', and sets the image
2351 * above 'top' to have base as its backing file.
2352 *
2353 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2354 * information in 'bs' can be properly updated.
2355 *
2356 * E.g., this will convert the following chain:
2357 * bottom <- base <- intermediate <- top <- active
2358 *
2359 * to
2360 *
2361 * bottom <- base <- active
2362 *
2363 * It is allowed for bottom==base, in which case it converts:
2364 *
2365 * base <- intermediate <- top <- active
2366 *
2367 * to
2368 *
2369 * base <- active
2370 *
Jeff Cody54e26902014-06-25 15:40:10 -04002371 * If backing_file_str is non-NULL, it will be used when modifying top's
2372 * overlay image metadata.
2373 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002374 * Error conditions:
2375 * if active == top, that is considered an error
2376 *
2377 */
2378int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002379 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002380{
2381 BlockDriverState *intermediate;
2382 BlockDriverState *base_bs = NULL;
2383 BlockDriverState *new_top_bs = NULL;
2384 BlkIntermediateStates *intermediate_state, *next;
2385 int ret = -EIO;
2386
2387 QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2388 QSIMPLEQ_INIT(&states_to_delete);
2389
2390 if (!top->drv || !base->drv) {
2391 goto exit;
2392 }
2393
2394 new_top_bs = bdrv_find_overlay(active, top);
2395
2396 if (new_top_bs == NULL) {
2397 /* we could not find the image above 'top', this is an error */
2398 goto exit;
2399 }
2400
2401 /* special case of new_top_bs->backing_hd already pointing to base - nothing
2402 * to do, no intermediate images */
2403 if (new_top_bs->backing_hd == base) {
2404 ret = 0;
2405 goto exit;
2406 }
2407
2408 intermediate = top;
2409
2410 /* now we will go down through the list, and add each BDS we find
2411 * into our deletion queue, until we hit the 'base'
2412 */
2413 while (intermediate) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002414 intermediate_state = g_new0(BlkIntermediateStates, 1);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002415 intermediate_state->bs = intermediate;
2416 QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2417
2418 if (intermediate->backing_hd == base) {
2419 base_bs = intermediate->backing_hd;
2420 break;
2421 }
2422 intermediate = intermediate->backing_hd;
2423 }
2424 if (base_bs == NULL) {
2425 /* something went wrong, we did not end at the base. safely
2426 * unravel everything, and exit with error */
2427 goto exit;
2428 }
2429
2430 /* success - we can delete the intermediate states, and link top->base */
Jeff Cody54e26902014-06-25 15:40:10 -04002431 backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2432 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002433 base_bs->drv ? base_bs->drv->format_name : "");
2434 if (ret) {
2435 goto exit;
2436 }
Fam Zheng920beae2014-05-23 21:29:46 +08002437 bdrv_set_backing_hd(new_top_bs, base_bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002438
2439 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2440 /* so that bdrv_close() does not recursively close the chain */
Fam Zheng920beae2014-05-23 21:29:46 +08002441 bdrv_set_backing_hd(intermediate_state->bs, NULL);
Fam Zheng4f6fd342013-08-23 09:14:47 +08002442 bdrv_unref(intermediate_state->bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002443 }
2444 ret = 0;
2445
2446exit:
2447 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2448 g_free(intermediate_state);
2449 }
2450 return ret;
2451}
2452
bellard83f64092006-08-01 16:21:11 +00002453/**
bellard83f64092006-08-01 16:21:11 +00002454 * Truncate file to 'offset' bytes (needed only for file protocols)
2455 */
2456int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2457{
2458 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002459 int ret;
bellard83f64092006-08-01 16:21:11 +00002460 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002461 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002462 if (!drv->bdrv_truncate)
2463 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002464 if (bs->read_only)
2465 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002466
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002467 ret = drv->bdrv_truncate(bs, offset);
2468 if (ret == 0) {
2469 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002470 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002471 if (bs->blk) {
2472 blk_dev_resize_cb(bs->blk);
2473 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002474 }
2475 return ret;
bellard83f64092006-08-01 16:21:11 +00002476}
2477
2478/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002479 * Length of a allocated file in bytes. Sparse files are counted by actual
2480 * allocated space. Return < 0 if error or unknown.
2481 */
2482int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2483{
2484 BlockDriver *drv = bs->drv;
2485 if (!drv) {
2486 return -ENOMEDIUM;
2487 }
2488 if (drv->bdrv_get_allocated_file_size) {
2489 return drv->bdrv_get_allocated_file_size(bs);
2490 }
2491 if (bs->file) {
2492 return bdrv_get_allocated_file_size(bs->file);
2493 }
2494 return -ENOTSUP;
2495}
2496
2497/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002498 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002499 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002500int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002501{
2502 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002503
bellard83f64092006-08-01 16:21:11 +00002504 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002505 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002506
Kevin Wolfb94a2612013-10-29 12:18:58 +01002507 if (drv->has_variable_length) {
2508 int ret = refresh_total_sectors(bs, bs->total_sectors);
2509 if (ret < 0) {
2510 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002511 }
bellard83f64092006-08-01 16:21:11 +00002512 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002513 return bs->total_sectors;
2514}
2515
2516/**
2517 * Return length in bytes on success, -errno on error.
2518 * The length is always a multiple of BDRV_SECTOR_SIZE.
2519 */
2520int64_t bdrv_getlength(BlockDriverState *bs)
2521{
2522 int64_t ret = bdrv_nb_sectors(bs);
2523
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002524 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002525 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002526}
2527
bellard19cb3732006-08-19 11:45:59 +00002528/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002529void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002530{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002531 int64_t nb_sectors = bdrv_nb_sectors(bs);
2532
2533 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002534}
bellardcf989512004-02-16 21:56:36 +00002535
Paolo Bonziniff06f5f2012-09-28 17:22:54 +02002536void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
2537 BlockdevOnError on_write_error)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002538{
2539 bs->on_read_error = on_read_error;
2540 bs->on_write_error = on_write_error;
2541}
2542
Paolo Bonzini1ceee0d2012-09-28 17:22:56 +02002543BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002544{
2545 return is_read ? bs->on_read_error : bs->on_write_error;
2546}
2547
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002548BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
2549{
2550 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
2551
2552 switch (on_err) {
2553 case BLOCKDEV_ON_ERROR_ENOSPC:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002554 return (error == ENOSPC) ?
2555 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002556 case BLOCKDEV_ON_ERROR_STOP:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002557 return BLOCK_ERROR_ACTION_STOP;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002558 case BLOCKDEV_ON_ERROR_REPORT:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002559 return BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002560 case BLOCKDEV_ON_ERROR_IGNORE:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002561 return BLOCK_ERROR_ACTION_IGNORE;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002562 default:
2563 abort();
2564 }
2565}
2566
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002567static void send_qmp_error_event(BlockDriverState *bs,
2568 BlockErrorAction action,
2569 bool is_read, int error)
2570{
Peter Maydell573742a2014-10-10 20:33:03 +01002571 IoOperationType optype;
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002572
Peter Maydell573742a2014-10-10 20:33:03 +01002573 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
2574 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002575 bdrv_iostatus_is_enabled(bs),
Luiz Capitulino624ff572014-09-11 10:25:48 -04002576 error == ENOSPC, strerror(error),
2577 &error_abort);
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002578}
2579
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002580/* This is done by device models because, while the block layer knows
2581 * about the error, it does not know whether an operation comes from
2582 * the device or the block layer (from a job, for example).
2583 */
2584void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
2585 bool is_read, int error)
2586{
2587 assert(error >= 0);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002588
Wenchao Xiaa5895692014-06-18 08:43:30 +02002589 if (action == BLOCK_ERROR_ACTION_STOP) {
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002590 /* First set the iostatus, so that "info block" returns an iostatus
2591 * that matches the events raised so far (an additional error iostatus
2592 * is fine, but not a lost one).
2593 */
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002594 bdrv_iostatus_set_err(bs, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002595
2596 /* Then raise the request to stop the VM and the event.
2597 * qemu_system_vmstop_request_prepare has two effects. First,
2598 * it ensures that the STOP event always comes after the
2599 * BLOCK_IO_ERROR event. Second, it ensures that even if management
2600 * can observe the STOP event and do a "cont" before the STOP
2601 * event is issued, the VM will not stop. In this case, vm_start()
2602 * also ensures that the STOP/RESUME pair of events is emitted.
2603 */
2604 qemu_system_vmstop_request_prepare();
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002605 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002606 qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
2607 } else {
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002608 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002609 }
2610}
2611
bellardb3380822004-03-14 21:38:54 +00002612int bdrv_is_read_only(BlockDriverState *bs)
2613{
2614 return bs->read_only;
2615}
2616
ths985a03b2007-12-24 16:10:43 +00002617int bdrv_is_sg(BlockDriverState *bs)
2618{
2619 return bs->sg;
2620}
2621
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002622int bdrv_enable_write_cache(BlockDriverState *bs)
2623{
2624 return bs->enable_write_cache;
2625}
2626
Paolo Bonzini425b0142012-06-06 00:04:52 +02002627void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2628{
2629 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002630
2631 /* so a reopen() will preserve wce */
2632 if (wce) {
2633 bs->open_flags |= BDRV_O_CACHE_WB;
2634 } else {
2635 bs->open_flags &= ~BDRV_O_CACHE_WB;
2636 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002637}
2638
bellardea2384d2004-08-01 21:59:26 +00002639int bdrv_is_encrypted(BlockDriverState *bs)
2640{
2641 if (bs->backing_hd && bs->backing_hd->encrypted)
2642 return 1;
2643 return bs->encrypted;
2644}
2645
aliguoric0f4ce72009-03-05 23:01:01 +00002646int bdrv_key_required(BlockDriverState *bs)
2647{
2648 BlockDriverState *backing_hd = bs->backing_hd;
2649
2650 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
2651 return 1;
2652 return (bs->encrypted && !bs->valid_key);
2653}
2654
bellardea2384d2004-08-01 21:59:26 +00002655int bdrv_set_key(BlockDriverState *bs, const char *key)
2656{
2657 int ret;
2658 if (bs->backing_hd && bs->backing_hd->encrypted) {
2659 ret = bdrv_set_key(bs->backing_hd, key);
2660 if (ret < 0)
2661 return ret;
2662 if (!bs->encrypted)
2663 return 0;
2664 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002665 if (!bs->encrypted) {
2666 return -EINVAL;
2667 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2668 return -ENOMEDIUM;
2669 }
aliguoric0f4ce72009-03-05 23:01:01 +00002670 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002671 if (ret < 0) {
2672 bs->valid_key = 0;
2673 } else if (!bs->valid_key) {
2674 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002675 if (bs->blk) {
2676 /* call the change callback now, we skipped it on open */
2677 blk_dev_change_media_cb(bs->blk, true);
2678 }
aliguoribb5fc202009-03-05 23:01:15 +00002679 }
aliguoric0f4ce72009-03-05 23:01:01 +00002680 return ret;
bellardea2384d2004-08-01 21:59:26 +00002681}
2682
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002683/*
2684 * Provide an encryption key for @bs.
2685 * If @key is non-null:
2686 * If @bs is not encrypted, fail.
2687 * Else if the key is invalid, fail.
2688 * Else set @bs's key to @key, replacing the existing key, if any.
2689 * If @key is null:
2690 * If @bs is encrypted and still lacks a key, fail.
2691 * Else do nothing.
2692 * On failure, store an error object through @errp if non-null.
2693 */
2694void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2695{
2696 if (key) {
2697 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002698 error_setg(errp, "Node '%s' is not encrypted",
2699 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002700 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002701 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002702 }
2703 } else {
2704 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002705 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2706 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002707 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002708 bdrv_get_encrypted_filename(bs));
2709 }
2710 }
2711}
2712
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002713const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002714{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002715 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002716}
2717
Stefan Hajnocziada42402014-08-27 12:08:55 +01002718static int qsort_strcmp(const void *a, const void *b)
2719{
2720 return strcmp(a, b);
2721}
2722
ths5fafdf22007-09-16 21:08:06 +00002723void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002724 void *opaque)
2725{
2726 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002727 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002728 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002729 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002730
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002731 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002732 if (drv->format_name) {
2733 bool found = false;
2734 int i = count;
2735 while (formats && i && !found) {
2736 found = !strcmp(formats[--i], drv->format_name);
2737 }
2738
2739 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002740 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002741 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002742 }
2743 }
bellardea2384d2004-08-01 21:59:26 +00002744 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002745
2746 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2747
2748 for (i = 0; i < count; i++) {
2749 it(opaque, formats[i]);
2750 }
2751
Jeff Codye855e4f2014-04-28 18:29:54 -04002752 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002753}
2754
Benoît Canetdc364f42014-01-23 21:31:32 +01002755/* This function is to find a node in the bs graph */
2756BlockDriverState *bdrv_find_node(const char *node_name)
2757{
2758 BlockDriverState *bs;
2759
2760 assert(node_name);
2761
2762 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2763 if (!strcmp(node_name, bs->node_name)) {
2764 return bs;
2765 }
2766 }
2767 return NULL;
2768}
2769
Benoît Canetc13163f2014-01-23 21:31:34 +01002770/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002771BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002772{
2773 BlockDeviceInfoList *list, *entry;
2774 BlockDriverState *bs;
2775
2776 list = NULL;
2777 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002778 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2779 if (!info) {
2780 qapi_free_BlockDeviceInfoList(list);
2781 return NULL;
2782 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002783 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002784 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002785 entry->next = list;
2786 list = entry;
2787 }
2788
2789 return list;
2790}
2791
Benoît Canet12d3ba82014-01-23 21:31:35 +01002792BlockDriverState *bdrv_lookup_bs(const char *device,
2793 const char *node_name,
2794 Error **errp)
2795{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002796 BlockBackend *blk;
2797 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002798
Benoît Canet12d3ba82014-01-23 21:31:35 +01002799 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002800 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002801
Markus Armbruster7f06d472014-10-07 13:59:12 +02002802 if (blk) {
2803 return blk_bs(blk);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002804 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002805 }
2806
Benoît Canetdd67fa52014-02-12 17:15:06 +01002807 if (node_name) {
2808 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002809
Benoît Canetdd67fa52014-02-12 17:15:06 +01002810 if (bs) {
2811 return bs;
2812 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002813 }
2814
Benoît Canetdd67fa52014-02-12 17:15:06 +01002815 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2816 device ? device : "",
2817 node_name ? node_name : "");
2818 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002819}
2820
Jeff Cody5a6684d2014-06-25 15:40:09 -04002821/* If 'base' is in the same chain as 'top', return true. Otherwise,
2822 * return false. If either argument is NULL, return false. */
2823bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2824{
2825 while (top && top != base) {
2826 top = top->backing_hd;
2827 }
2828
2829 return top != NULL;
2830}
2831
Fam Zheng04df7652014-10-31 11:32:54 +08002832BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2833{
2834 if (!bs) {
2835 return QTAILQ_FIRST(&graph_bdrv_states);
2836 }
2837 return QTAILQ_NEXT(bs, node_list);
2838}
2839
Markus Armbruster2f399b02010-06-02 18:55:20 +02002840BlockDriverState *bdrv_next(BlockDriverState *bs)
2841{
2842 if (!bs) {
2843 return QTAILQ_FIRST(&bdrv_states);
2844 }
Benoît Canetdc364f42014-01-23 21:31:32 +01002845 return QTAILQ_NEXT(bs, device_list);
Markus Armbruster2f399b02010-06-02 18:55:20 +02002846}
2847
Fam Zheng20a9e772014-10-31 11:32:55 +08002848const char *bdrv_get_node_name(const BlockDriverState *bs)
2849{
2850 return bs->node_name;
2851}
2852
Markus Armbruster7f06d472014-10-07 13:59:12 +02002853/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002854const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002855{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002856 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002857}
2858
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002859/* This can be used to identify nodes that might not have a device
2860 * name associated. Since node and device names live in the same
2861 * namespace, the result is unambiguous. The exception is if both are
2862 * absent, then this returns an empty (non-null) string. */
2863const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2864{
2865 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2866}
2867
Markus Armbrusterc8433282012-06-05 16:49:24 +02002868int bdrv_get_flags(BlockDriverState *bs)
2869{
2870 return bs->open_flags;
2871}
2872
Peter Lieven3ac21622013-06-28 12:47:42 +02002873int bdrv_has_zero_init_1(BlockDriverState *bs)
2874{
2875 return 1;
2876}
2877
Kevin Wolff2feebb2010-04-14 17:30:35 +02002878int bdrv_has_zero_init(BlockDriverState *bs)
2879{
2880 assert(bs->drv);
2881
Paolo Bonzini11212d82013-09-04 19:00:27 +02002882 /* If BS is a copy on write image, it is initialized to
2883 the contents of the base image, which may not be zeroes. */
2884 if (bs->backing_hd) {
2885 return 0;
2886 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002887 if (bs->drv->bdrv_has_zero_init) {
2888 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002889 }
2890
Peter Lieven3ac21622013-06-28 12:47:42 +02002891 /* safe default */
2892 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002893}
2894
Peter Lieven4ce78692013-10-24 12:06:54 +02002895bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2896{
2897 BlockDriverInfo bdi;
2898
2899 if (bs->backing_hd) {
2900 return false;
2901 }
2902
2903 if (bdrv_get_info(bs, &bdi) == 0) {
2904 return bdi.unallocated_blocks_are_zero;
2905 }
2906
2907 return false;
2908}
2909
2910bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2911{
2912 BlockDriverInfo bdi;
2913
2914 if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
2915 return false;
2916 }
2917
2918 if (bdrv_get_info(bs, &bdi) == 0) {
2919 return bdi.can_write_zeroes_with_unmap;
2920 }
2921
2922 return false;
2923}
2924
aliguori045df332009-03-05 23:00:48 +00002925const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2926{
2927 if (bs->backing_hd && bs->backing_hd->encrypted)
2928 return bs->backing_file;
2929 else if (bs->encrypted)
2930 return bs->filename;
2931 else
2932 return NULL;
2933}
2934
ths5fafdf22007-09-16 21:08:06 +00002935void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002936 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002937{
Kevin Wolf3574c602011-10-26 11:02:11 +02002938 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002939}
2940
bellardfaea38e2006-08-05 21:31:00 +00002941int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2942{
2943 BlockDriver *drv = bs->drv;
2944 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002945 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00002946 if (!drv->bdrv_get_info)
2947 return -ENOTSUP;
2948 memset(bdi, 0, sizeof(*bdi));
2949 return drv->bdrv_get_info(bs, bdi);
2950}
2951
Max Reitzeae041f2013-10-09 10:46:16 +02002952ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2953{
2954 BlockDriver *drv = bs->drv;
2955 if (drv && drv->bdrv_get_specific_info) {
2956 return drv->bdrv_get_specific_info(bs);
2957 }
2958 return NULL;
2959}
2960
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002961void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
2962{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002963 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002964 return;
2965 }
2966
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002967 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01002968}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002969
Kevin Wolf41c695c2012-12-06 14:32:58 +01002970int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2971 const char *tag)
2972{
2973 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
2974 bs = bs->file;
2975 }
2976
2977 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2978 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2979 }
2980
2981 return -ENOTSUP;
2982}
2983
Fam Zheng4cc70e92013-11-20 10:01:54 +08002984int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
2985{
2986 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
2987 bs = bs->file;
2988 }
2989
2990 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2991 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2992 }
2993
2994 return -ENOTSUP;
2995}
2996
Kevin Wolf41c695c2012-12-06 14:32:58 +01002997int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
2998{
Max Reitz938789e2014-03-10 23:44:08 +01002999 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf41c695c2012-12-06 14:32:58 +01003000 bs = bs->file;
3001 }
3002
3003 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3004 return bs->drv->bdrv_debug_resume(bs, tag);
3005 }
3006
3007 return -ENOTSUP;
3008}
3009
3010bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3011{
3012 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3013 bs = bs->file;
3014 }
3015
3016 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3017 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3018 }
3019
3020 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003021}
3022
Blue Swirl199630b2010-07-25 20:49:34 +00003023int bdrv_is_snapshot(BlockDriverState *bs)
3024{
3025 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3026}
3027
Jeff Codyb1b1d782012-10-16 15:49:09 -04003028/* backing_file can either be relative, or absolute, or a protocol. If it is
3029 * relative, it must be relative to the chain. So, passing in bs->filename
3030 * from a BDS as backing_file should not be done, as that may be relative to
3031 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003032BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3033 const char *backing_file)
3034{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003035 char *filename_full = NULL;
3036 char *backing_file_full = NULL;
3037 char *filename_tmp = NULL;
3038 int is_protocol = 0;
3039 BlockDriverState *curr_bs = NULL;
3040 BlockDriverState *retval = NULL;
3041
3042 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003043 return NULL;
3044 }
3045
Jeff Codyb1b1d782012-10-16 15:49:09 -04003046 filename_full = g_malloc(PATH_MAX);
3047 backing_file_full = g_malloc(PATH_MAX);
3048 filename_tmp = g_malloc(PATH_MAX);
3049
3050 is_protocol = path_has_protocol(backing_file);
3051
3052 for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
3053
3054 /* If either of the filename paths is actually a protocol, then
3055 * compare unmodified paths; otherwise make paths relative */
3056 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3057 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3058 retval = curr_bs->backing_hd;
3059 break;
3060 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003061 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003062 /* If not an absolute filename path, make it relative to the current
3063 * image's filename path */
3064 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3065 backing_file);
3066
3067 /* We are going to compare absolute pathnames */
3068 if (!realpath(filename_tmp, filename_full)) {
3069 continue;
3070 }
3071
3072 /* We need to make sure the backing filename we are comparing against
3073 * is relative to the current image filename (or absolute) */
3074 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3075 curr_bs->backing_file);
3076
3077 if (!realpath(filename_tmp, backing_file_full)) {
3078 continue;
3079 }
3080
3081 if (strcmp(backing_file_full, filename_full) == 0) {
3082 retval = curr_bs->backing_hd;
3083 break;
3084 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003085 }
3086 }
3087
Jeff Codyb1b1d782012-10-16 15:49:09 -04003088 g_free(filename_full);
3089 g_free(backing_file_full);
3090 g_free(filename_tmp);
3091 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003092}
3093
Benoît Canetf198fd12012-08-02 10:22:47 +02003094int bdrv_get_backing_file_depth(BlockDriverState *bs)
3095{
3096 if (!bs->drv) {
3097 return 0;
3098 }
3099
3100 if (!bs->backing_hd) {
3101 return 0;
3102 }
3103
3104 return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3105}
3106
bellardea2384d2004-08-01 21:59:26 +00003107void bdrv_init(void)
3108{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003109 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003110}
pbrookce1a14d2006-08-07 02:38:06 +00003111
Markus Armbrustereb852012009-10-27 18:41:44 +01003112void bdrv_init_with_whitelist(void)
3113{
3114 use_bdrv_whitelist = 1;
3115 bdrv_init();
3116}
3117
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003118void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003119{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003120 Error *local_err = NULL;
3121 int ret;
3122
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003123 if (!bs->drv) {
3124 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003125 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003126
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003127 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3128 return;
3129 }
3130 bs->open_flags &= ~BDRV_O_INCOMING;
3131
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003132 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003133 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003134 } else if (bs->file) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003135 bdrv_invalidate_cache(bs->file, &local_err);
3136 }
3137 if (local_err) {
3138 error_propagate(errp, local_err);
3139 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003140 }
3141
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003142 ret = refresh_total_sectors(bs, bs->total_sectors);
3143 if (ret < 0) {
3144 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3145 return;
3146 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003147}
3148
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003149void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003150{
3151 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003152 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003153
Benoît Canetdc364f42014-01-23 21:31:32 +01003154 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003155 AioContext *aio_context = bdrv_get_aio_context(bs);
3156
3157 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003158 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003159 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003160 if (local_err) {
3161 error_propagate(errp, local_err);
3162 return;
3163 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003164 }
3165}
3166
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003167/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003168/* removable device support */
3169
3170/**
3171 * Return TRUE if the media is present
3172 */
3173int bdrv_is_inserted(BlockDriverState *bs)
3174{
3175 BlockDriver *drv = bs->drv;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003176
bellard19cb3732006-08-19 11:45:59 +00003177 if (!drv)
3178 return 0;
3179 if (!drv->bdrv_is_inserted)
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003180 return 1;
3181 return drv->bdrv_is_inserted(bs);
bellard19cb3732006-08-19 11:45:59 +00003182}
3183
3184/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003185 * Return whether the media changed since the last call to this
3186 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003187 */
3188int bdrv_media_changed(BlockDriverState *bs)
3189{
3190 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003191
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003192 if (drv && drv->bdrv_media_changed) {
3193 return drv->bdrv_media_changed(bs);
3194 }
3195 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003196}
3197
3198/**
3199 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3200 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003201void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003202{
3203 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003204 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003205
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003206 if (drv && drv->bdrv_eject) {
3207 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003208 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003209
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003210 device_name = bdrv_get_device_name(bs);
3211 if (device_name[0] != '\0') {
3212 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003213 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003214 }
bellard19cb3732006-08-19 11:45:59 +00003215}
3216
bellard19cb3732006-08-19 11:45:59 +00003217/**
3218 * Lock or unlock the media (if it is locked, the user won't be able
3219 * to eject it manually).
3220 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003221void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003222{
3223 BlockDriver *drv = bs->drv;
3224
Markus Armbruster025e8492011-09-06 18:58:47 +02003225 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003226
Markus Armbruster025e8492011-09-06 18:58:47 +02003227 if (drv && drv->bdrv_lock_medium) {
3228 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003229 }
3230}
ths985a03b2007-12-24 16:10:43 +00003231
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003232void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003233{
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003234 bs->guest_block_size = align;
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003235}
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003236
Fam Zheng0db6e542015-04-17 19:49:50 -04003237BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3238{
3239 BdrvDirtyBitmap *bm;
3240
3241 assert(name);
3242 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3243 if (bm->name && !strcmp(name, bm->name)) {
3244 return bm;
3245 }
3246 }
3247 return NULL;
3248}
3249
John Snow20dca812015-04-17 19:50:02 -04003250void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
Fam Zheng0db6e542015-04-17 19:49:50 -04003251{
John Snow9bd2b082015-04-17 19:49:57 -04003252 assert(!bdrv_dirty_bitmap_frozen(bitmap));
Fam Zheng0db6e542015-04-17 19:49:50 -04003253 g_free(bitmap->name);
3254 bitmap->name = NULL;
3255}
3256
3257BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
John Snow5fba6c02015-04-17 19:49:51 -04003258 uint32_t granularity,
Fam Zheng0db6e542015-04-17 19:49:50 -04003259 const char *name,
Fam Zhengb8afb522014-04-16 09:34:30 +08003260 Error **errp)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003261{
3262 int64_t bitmap_size;
Fam Zhenge4654d22013-11-13 18:29:43 +08003263 BdrvDirtyBitmap *bitmap;
John Snow5fba6c02015-04-17 19:49:51 -04003264 uint32_t sector_granularity;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003265
Paolo Bonzini50717e92013-01-21 17:09:45 +01003266 assert((granularity & (granularity - 1)) == 0);
3267
Fam Zheng0db6e542015-04-17 19:49:50 -04003268 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3269 error_setg(errp, "Bitmap already exists: %s", name);
3270 return NULL;
3271 }
John Snow5fba6c02015-04-17 19:49:51 -04003272 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3273 assert(sector_granularity);
Markus Armbruster57322b72014-06-26 13:23:22 +02003274 bitmap_size = bdrv_nb_sectors(bs);
Fam Zhengb8afb522014-04-16 09:34:30 +08003275 if (bitmap_size < 0) {
3276 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3277 errno = -bitmap_size;
3278 return NULL;
3279 }
Markus Armbruster5839e532014-08-19 10:31:08 +02003280 bitmap = g_new0(BdrvDirtyBitmap, 1);
John Snow5fba6c02015-04-17 19:49:51 -04003281 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
John Snowe74e6b72015-04-17 19:49:59 -04003282 bitmap->size = bitmap_size;
Fam Zheng0db6e542015-04-17 19:49:50 -04003283 bitmap->name = g_strdup(name);
John Snowb8e6fb72015-04-17 19:49:56 -04003284 bitmap->disabled = false;
Fam Zhenge4654d22013-11-13 18:29:43 +08003285 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3286 return bitmap;
3287}
3288
John Snow9bd2b082015-04-17 19:49:57 -04003289bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3290{
3291 return bitmap->successor;
3292}
3293
John Snowb8e6fb72015-04-17 19:49:56 -04003294bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3295{
John Snow9bd2b082015-04-17 19:49:57 -04003296 return !(bitmap->disabled || bitmap->successor);
3297}
3298
John Snow9abe3bd2015-05-12 15:53:01 -04003299DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3300{
3301 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3302 return DIRTY_BITMAP_STATUS_FROZEN;
3303 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3304 return DIRTY_BITMAP_STATUS_DISABLED;
3305 } else {
3306 return DIRTY_BITMAP_STATUS_ACTIVE;
3307 }
3308}
3309
John Snow9bd2b082015-04-17 19:49:57 -04003310/**
3311 * Create a successor bitmap destined to replace this bitmap after an operation.
3312 * Requires that the bitmap is not frozen and has no successor.
3313 */
3314int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3315 BdrvDirtyBitmap *bitmap, Error **errp)
3316{
3317 uint64_t granularity;
3318 BdrvDirtyBitmap *child;
3319
3320 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3321 error_setg(errp, "Cannot create a successor for a bitmap that is "
3322 "currently frozen");
3323 return -1;
3324 }
3325 assert(!bitmap->successor);
3326
3327 /* Create an anonymous successor */
3328 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3329 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3330 if (!child) {
3331 return -1;
3332 }
3333
3334 /* Successor will be on or off based on our current state. */
3335 child->disabled = bitmap->disabled;
3336
3337 /* Install the successor and freeze the parent */
3338 bitmap->successor = child;
3339 return 0;
3340}
3341
3342/**
3343 * For a bitmap with a successor, yield our name to the successor,
3344 * delete the old bitmap, and return a handle to the new bitmap.
3345 */
3346BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3347 BdrvDirtyBitmap *bitmap,
3348 Error **errp)
3349{
3350 char *name;
3351 BdrvDirtyBitmap *successor = bitmap->successor;
3352
3353 if (successor == NULL) {
3354 error_setg(errp, "Cannot relinquish control if "
3355 "there's no successor present");
3356 return NULL;
3357 }
3358
3359 name = bitmap->name;
3360 bitmap->name = NULL;
3361 successor->name = name;
3362 bitmap->successor = NULL;
3363 bdrv_release_dirty_bitmap(bs, bitmap);
3364
3365 return successor;
3366}
3367
3368/**
3369 * In cases of failure where we can no longer safely delete the parent,
3370 * we may wish to re-join the parent and child/successor.
3371 * The merged parent will be un-frozen, but not explicitly re-enabled.
3372 */
3373BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3374 BdrvDirtyBitmap *parent,
3375 Error **errp)
3376{
3377 BdrvDirtyBitmap *successor = parent->successor;
3378
3379 if (!successor) {
3380 error_setg(errp, "Cannot reclaim a successor when none is present");
3381 return NULL;
3382 }
3383
3384 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3385 error_setg(errp, "Merging of parent and successor bitmap failed");
3386 return NULL;
3387 }
3388 bdrv_release_dirty_bitmap(bs, successor);
3389 parent->successor = NULL;
3390
3391 return parent;
John Snowb8e6fb72015-04-17 19:49:56 -04003392}
3393
John Snowce1ffea2015-04-17 19:50:03 -04003394/**
3395 * Truncates _all_ bitmaps attached to a BDS.
3396 */
3397static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3398{
3399 BdrvDirtyBitmap *bitmap;
3400 uint64_t size = bdrv_nb_sectors(bs);
3401
3402 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snow06207b02015-06-10 13:24:54 -04003403 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowce1ffea2015-04-17 19:50:03 -04003404 hbitmap_truncate(bitmap->bitmap, size);
John Snow5270b6a2015-06-08 16:49:15 -04003405 bitmap->size = size;
John Snowce1ffea2015-04-17 19:50:03 -04003406 }
3407}
3408
Fam Zhenge4654d22013-11-13 18:29:43 +08003409void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3410{
3411 BdrvDirtyBitmap *bm, *next;
3412 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3413 if (bm == bitmap) {
John Snow9bd2b082015-04-17 19:49:57 -04003414 assert(!bdrv_dirty_bitmap_frozen(bm));
Fam Zhenge4654d22013-11-13 18:29:43 +08003415 QLIST_REMOVE(bitmap, list);
3416 hbitmap_free(bitmap->bitmap);
Fam Zheng0db6e542015-04-17 19:49:50 -04003417 g_free(bitmap->name);
Fam Zhenge4654d22013-11-13 18:29:43 +08003418 g_free(bitmap);
3419 return;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003420 }
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003421 }
3422}
3423
John Snowb8e6fb72015-04-17 19:49:56 -04003424void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3425{
John Snow9bd2b082015-04-17 19:49:57 -04003426 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003427 bitmap->disabled = true;
3428}
3429
3430void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3431{
John Snow9bd2b082015-04-17 19:49:57 -04003432 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003433 bitmap->disabled = false;
3434}
3435
Fam Zheng21b56832013-11-13 18:29:44 +08003436BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3437{
3438 BdrvDirtyBitmap *bm;
3439 BlockDirtyInfoList *list = NULL;
3440 BlockDirtyInfoList **plist = &list;
3441
3442 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
Markus Armbruster5839e532014-08-19 10:31:08 +02003443 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3444 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
John Snow20dca812015-04-17 19:50:02 -04003445 info->count = bdrv_get_dirty_count(bm);
John Snow592fdd02015-04-17 19:49:53 -04003446 info->granularity = bdrv_dirty_bitmap_granularity(bm);
Fam Zheng0db6e542015-04-17 19:49:50 -04003447 info->has_name = !!bm->name;
3448 info->name = g_strdup(bm->name);
John Snow9abe3bd2015-05-12 15:53:01 -04003449 info->status = bdrv_dirty_bitmap_status(bm);
Fam Zheng21b56832013-11-13 18:29:44 +08003450 entry->value = info;
3451 *plist = entry;
3452 plist = &entry->next;
3453 }
3454
3455 return list;
3456}
3457
Fam Zhenge4654d22013-11-13 18:29:43 +08003458int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003459{
Fam Zhenge4654d22013-11-13 18:29:43 +08003460 if (bitmap) {
3461 return hbitmap_get(bitmap->bitmap, sector);
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003462 } else {
3463 return 0;
3464 }
3465}
3466
John Snow341ebc22015-04-17 19:49:52 -04003467/**
3468 * Chooses a default granularity based on the existing cluster size,
3469 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3470 * is no cluster size information available.
3471 */
3472uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3473{
3474 BlockDriverInfo bdi;
3475 uint32_t granularity;
3476
3477 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3478 granularity = MAX(4096, bdi.cluster_size);
3479 granularity = MIN(65536, granularity);
3480 } else {
3481 granularity = 65536;
3482 }
3483
3484 return granularity;
3485}
3486
John Snow592fdd02015-04-17 19:49:53 -04003487uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3488{
3489 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3490}
3491
John Snow20dca812015-04-17 19:50:02 -04003492void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003493{
Fam Zhenge4654d22013-11-13 18:29:43 +08003494 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
Paolo Bonzini1755da12012-10-18 16:49:18 +02003495}
3496
John Snow20dca812015-04-17 19:50:02 -04003497void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003498 int64_t cur_sector, int nr_sectors)
3499{
John Snowb8e6fb72015-04-17 19:49:56 -04003500 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003501 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3502}
3503
John Snow20dca812015-04-17 19:50:02 -04003504void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003505 int64_t cur_sector, int nr_sectors)
3506{
John Snowb8e6fb72015-04-17 19:49:56 -04003507 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003508 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3509}
3510
John Snowe74e6b72015-04-17 19:49:59 -04003511void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3512{
3513 assert(bdrv_dirty_bitmap_enabled(bitmap));
3514 hbitmap_reset(bitmap->bitmap, 0, bitmap->size);
3515}
3516
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003517void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3518 int nr_sectors)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003519{
Fam Zhenge4654d22013-11-13 18:29:43 +08003520 BdrvDirtyBitmap *bitmap;
3521 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003522 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3523 continue;
3524 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003525 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
Paolo Bonzini8f0720e2013-01-21 17:09:41 +01003526 }
Liran Schouraaa0eb72010-01-26 10:31:48 +02003527}
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003528
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003529void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
3530 int nr_sectors)
Fam Zhenge4654d22013-11-13 18:29:43 +08003531{
3532 BdrvDirtyBitmap *bitmap;
3533 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003534 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3535 continue;
3536 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003537 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3538 }
3539}
3540
John Snowd58d8452015-04-17 19:49:58 -04003541/**
3542 * Advance an HBitmapIter to an arbitrary offset.
3543 */
3544void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3545{
3546 assert(hbi->hb);
3547 hbitmap_iter_init(hbi, hbi->hb, offset);
3548}
3549
John Snow20dca812015-04-17 19:50:02 -04003550int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
Fam Zhenge4654d22013-11-13 18:29:43 +08003551{
3552 return hbitmap_count(bitmap->bitmap);
3553}
3554
Fam Zheng9fcb0252013-08-23 09:14:46 +08003555/* Get a reference to bs */
3556void bdrv_ref(BlockDriverState *bs)
3557{
3558 bs->refcnt++;
3559}
3560
3561/* Release a previously grabbed reference to bs.
3562 * If after releasing, reference count is zero, the BlockDriverState is
3563 * deleted. */
3564void bdrv_unref(BlockDriverState *bs)
3565{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003566 if (!bs) {
3567 return;
3568 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003569 assert(bs->refcnt > 0);
3570 if (--bs->refcnt == 0) {
3571 bdrv_delete(bs);
3572 }
3573}
3574
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003575struct BdrvOpBlocker {
3576 Error *reason;
3577 QLIST_ENTRY(BdrvOpBlocker) list;
3578};
3579
3580bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3581{
3582 BdrvOpBlocker *blocker;
3583 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3584 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3585 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3586 if (errp) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03003587 error_setg(errp, "Node '%s' is busy: %s",
3588 bdrv_get_device_or_node_name(bs),
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003589 error_get_pretty(blocker->reason));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003590 }
3591 return true;
3592 }
3593 return false;
3594}
3595
3596void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3597{
3598 BdrvOpBlocker *blocker;
3599 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3600
Markus Armbruster5839e532014-08-19 10:31:08 +02003601 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003602 blocker->reason = reason;
3603 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3604}
3605
3606void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3607{
3608 BdrvOpBlocker *blocker, *next;
3609 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3610 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3611 if (blocker->reason == reason) {
3612 QLIST_REMOVE(blocker, list);
3613 g_free(blocker);
3614 }
3615 }
3616}
3617
3618void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3619{
3620 int i;
3621 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3622 bdrv_op_block(bs, i, reason);
3623 }
3624}
3625
3626void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3627{
3628 int i;
3629 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3630 bdrv_op_unblock(bs, i, reason);
3631 }
3632}
3633
3634bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3635{
3636 int i;
3637
3638 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3639 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3640 return false;
3641 }
3642 }
3643 return true;
3644}
3645
Luiz Capitulino28a72822011-09-26 17:43:50 -03003646void bdrv_iostatus_enable(BlockDriverState *bs)
3647{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003648 bs->iostatus_enabled = true;
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003649 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003650}
3651
3652/* The I/O status is only enabled if the drive explicitly
3653 * enables it _and_ the VM is configured to stop on errors */
3654bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
3655{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003656 return (bs->iostatus_enabled &&
Paolo Bonzini92aa5c62012-09-28 17:22:55 +02003657 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
3658 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP ||
3659 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
Luiz Capitulino28a72822011-09-26 17:43:50 -03003660}
3661
3662void bdrv_iostatus_disable(BlockDriverState *bs)
3663{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003664 bs->iostatus_enabled = false;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003665}
3666
3667void bdrv_iostatus_reset(BlockDriverState *bs)
3668{
3669 if (bdrv_iostatus_is_enabled(bs)) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003670 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Paolo Bonzini3bd293c2012-10-18 16:49:27 +02003671 if (bs->job) {
3672 block_job_iostatus_reset(bs->job);
3673 }
Luiz Capitulino28a72822011-09-26 17:43:50 -03003674 }
3675}
3676
Luiz Capitulino28a72822011-09-26 17:43:50 -03003677void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
3678{
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02003679 assert(bdrv_iostatus_is_enabled(bs));
3680 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003681 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
3682 BLOCK_DEVICE_IO_STATUS_FAILED;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003683 }
3684}
3685
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003686void bdrv_img_create(const char *filename, const char *fmt,
3687 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003688 char *options, uint64_t img_size, int flags,
3689 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003690{
Chunyan Liu83d05212014-06-05 17:20:51 +08003691 QemuOptsList *create_opts = NULL;
3692 QemuOpts *opts = NULL;
3693 const char *backing_fmt, *backing_file;
3694 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003695 BlockDriver *drv, *proto_drv;
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003696 BlockDriver *backing_drv = NULL;
Max Reitzcc84d902013-09-06 17:14:26 +02003697 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003698 int ret = 0;
3699
3700 /* Find driver and parse its options */
3701 drv = bdrv_find_format(fmt);
3702 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003703 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003704 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003705 }
3706
Max Reitzb65a5e12015-02-05 13:58:12 -05003707 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003708 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003709 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003710 }
3711
Max Reitzc6149722014-12-02 18:32:45 +01003712 if (!drv->create_opts) {
3713 error_setg(errp, "Format driver '%s' does not support image creation",
3714 drv->format_name);
3715 return;
3716 }
3717
3718 if (!proto_drv->create_opts) {
3719 error_setg(errp, "Protocol driver '%s' does not support image creation",
3720 proto_drv->format_name);
3721 return;
3722 }
3723
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003724 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3725 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003726
3727 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003728 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003729 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003730
3731 /* Parse -o options */
3732 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003733 qemu_opts_do_parse(opts, options, NULL, &local_err);
3734 if (local_err) {
3735 error_report_err(local_err);
3736 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003737 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003738 goto out;
3739 }
3740 }
3741
3742 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003743 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003744 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003745 error_setg(errp, "Backing file not supported for file format '%s'",
3746 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003747 goto out;
3748 }
3749 }
3750
3751 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003752 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003753 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003754 error_setg(errp, "Backing file format not supported for file "
3755 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003756 goto out;
3757 }
3758 }
3759
Chunyan Liu83d05212014-06-05 17:20:51 +08003760 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3761 if (backing_file) {
3762 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003763 error_setg(errp, "Error: Trying to create an image with the "
3764 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003765 goto out;
3766 }
3767 }
3768
Chunyan Liu83d05212014-06-05 17:20:51 +08003769 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3770 if (backing_fmt) {
3771 backing_drv = bdrv_find_format(backing_fmt);
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003772 if (!backing_drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003773 error_setg(errp, "Unknown backing file format '%s'",
Chunyan Liu83d05212014-06-05 17:20:51 +08003774 backing_fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003775 goto out;
3776 }
3777 }
3778
3779 // The size for the image must always be specified, with one exception:
3780 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003781 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3782 if (size == -1) {
3783 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003784 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003785 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003786 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003787 int back_flags;
3788
Max Reitz29168012014-11-26 17:20:27 +01003789 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3790 full_backing, PATH_MAX,
3791 &local_err);
3792 if (local_err) {
3793 g_free(full_backing);
3794 goto out;
3795 }
3796
Paolo Bonzini63090da2012-04-12 14:01:03 +02003797 /* backing files always opened read-only */
3798 back_flags =
3799 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003800
Max Reitzf67503e2014-02-18 18:33:05 +01003801 bs = NULL;
Max Reitz29168012014-11-26 17:20:27 +01003802 ret = bdrv_open(&bs, full_backing, NULL, NULL, back_flags,
Max Reitzcc84d902013-09-06 17:14:26 +02003803 backing_drv, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003804 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003805 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003806 goto out;
3807 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003808 size = bdrv_getlength(bs);
3809 if (size < 0) {
3810 error_setg_errno(errp, -size, "Could not get size of '%s'",
3811 backing_file);
3812 bdrv_unref(bs);
3813 goto out;
3814 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003815
Markus Armbruster39101f22015-02-12 16:46:36 +01003816 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003817
3818 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003819 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003820 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003821 goto out;
3822 }
3823 }
3824
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003825 if (!quiet) {
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003826 printf("Formatting '%s', fmt=%s", filename, fmt);
3827 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003828 puts("");
3829 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003830
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003831 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003832
Max Reitzcc84d902013-09-06 17:14:26 +02003833 if (ret == -EFBIG) {
3834 /* This is generally a better message than whatever the driver would
3835 * deliver (especially because of the cluster_size_hint), since that
3836 * is most probably not much different from "image too large". */
3837 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003838 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003839 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003840 }
Max Reitzcc84d902013-09-06 17:14:26 +02003841 error_setg(errp, "The image size is too large for file format '%s'"
3842 "%s", fmt, cluster_size_hint);
3843 error_free(local_err);
3844 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003845 }
3846
3847out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003848 qemu_opts_del(opts);
3849 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003850 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003851 error_propagate(errp, local_err);
3852 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003853}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003854
3855AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3856{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003857 return bs->aio_context;
3858}
3859
3860void bdrv_detach_aio_context(BlockDriverState *bs)
3861{
Max Reitz33384422014-06-20 21:57:33 +02003862 BdrvAioNotifier *baf;
3863
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003864 if (!bs->drv) {
3865 return;
3866 }
3867
Max Reitz33384422014-06-20 21:57:33 +02003868 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3869 baf->detach_aio_context(baf->opaque);
3870 }
3871
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003872 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003873 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003874 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003875 if (bs->drv->bdrv_detach_aio_context) {
3876 bs->drv->bdrv_detach_aio_context(bs);
3877 }
3878 if (bs->file) {
3879 bdrv_detach_aio_context(bs->file);
3880 }
3881 if (bs->backing_hd) {
3882 bdrv_detach_aio_context(bs->backing_hd);
3883 }
3884
3885 bs->aio_context = NULL;
3886}
3887
3888void bdrv_attach_aio_context(BlockDriverState *bs,
3889 AioContext *new_context)
3890{
Max Reitz33384422014-06-20 21:57:33 +02003891 BdrvAioNotifier *ban;
3892
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003893 if (!bs->drv) {
3894 return;
3895 }
3896
3897 bs->aio_context = new_context;
3898
3899 if (bs->backing_hd) {
3900 bdrv_attach_aio_context(bs->backing_hd, new_context);
3901 }
3902 if (bs->file) {
3903 bdrv_attach_aio_context(bs->file, new_context);
3904 }
3905 if (bs->drv->bdrv_attach_aio_context) {
3906 bs->drv->bdrv_attach_aio_context(bs, new_context);
3907 }
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003908 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003909 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003910 }
Max Reitz33384422014-06-20 21:57:33 +02003911
3912 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3913 ban->attached_aio_context(new_context, ban->opaque);
3914 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003915}
3916
3917void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3918{
3919 bdrv_drain_all(); /* ensure there are no in-flight requests */
3920
3921 bdrv_detach_aio_context(bs);
3922
3923 /* This function executes in the old AioContext so acquire the new one in
3924 * case it runs in a different thread.
3925 */
3926 aio_context_acquire(new_context);
3927 bdrv_attach_aio_context(bs, new_context);
3928 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003929}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003930
Max Reitz33384422014-06-20 21:57:33 +02003931void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3932 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3933 void (*detach_aio_context)(void *opaque), void *opaque)
3934{
3935 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3936 *ban = (BdrvAioNotifier){
3937 .attached_aio_context = attached_aio_context,
3938 .detach_aio_context = detach_aio_context,
3939 .opaque = opaque
3940 };
3941
3942 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3943}
3944
3945void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3946 void (*attached_aio_context)(AioContext *,
3947 void *),
3948 void (*detach_aio_context)(void *),
3949 void *opaque)
3950{
3951 BdrvAioNotifier *ban, *ban_next;
3952
3953 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3954 if (ban->attached_aio_context == attached_aio_context &&
3955 ban->detach_aio_context == detach_aio_context &&
3956 ban->opaque == opaque)
3957 {
3958 QLIST_REMOVE(ban, list);
3959 g_free(ban);
3960
3961 return;
3962 }
3963 }
3964
3965 abort();
3966}
3967
Max Reitz77485432014-10-27 11:12:50 +01003968int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3969 BlockDriverAmendStatusCB *status_cb)
Max Reitz6f176b42013-09-03 10:09:50 +02003970{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003971 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003972 return -ENOTSUP;
3973 }
Max Reitz77485432014-10-27 11:12:50 +01003974 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
Max Reitz6f176b42013-09-03 10:09:50 +02003975}
Benoît Canetf6186f42013-10-02 14:33:48 +02003976
Benoît Canetb5042a32014-03-03 19:11:34 +01003977/* This function will be called by the bdrv_recurse_is_first_non_filter method
3978 * of block filter and by bdrv_is_first_non_filter.
3979 * It is used to test if the given bs is the candidate or recurse more in the
3980 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003981 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003982bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3983 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003984{
Benoît Canetb5042a32014-03-03 19:11:34 +01003985 /* return false if basic checks fails */
3986 if (!bs || !bs->drv) {
3987 return false;
3988 }
3989
3990 /* the code reached a non block filter driver -> check if the bs is
3991 * the same as the candidate. It's the recursion termination condition.
3992 */
3993 if (!bs->drv->is_filter) {
3994 return bs == candidate;
3995 }
3996 /* Down this path the driver is a block filter driver */
3997
3998 /* If the block filter recursion method is defined use it to recurse down
3999 * the node graph.
4000 */
4001 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01004002 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
4003 }
4004
Benoît Canetb5042a32014-03-03 19:11:34 +01004005 /* the driver is a block filter but don't allow to recurse -> return false
4006 */
4007 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01004008}
4009
4010/* This function checks if the candidate is the first non filter bs down it's
4011 * bs chain. Since we don't have pointers to parents it explore all bs chains
4012 * from the top. Some filters can choose not to pass down the recursion.
4013 */
4014bool bdrv_is_first_non_filter(BlockDriverState *candidate)
4015{
4016 BlockDriverState *bs;
4017
4018 /* walk down the bs forest recursively */
4019 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4020 bool perm;
4021
Benoît Canetb5042a32014-03-03 19:11:34 +01004022 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01004023 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01004024
4025 /* candidate is the first non filter */
4026 if (perm) {
4027 return true;
4028 }
4029 }
4030
4031 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02004032}
Benoît Canet09158f02014-06-27 18:25:25 +02004033
4034BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
4035{
4036 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004037 AioContext *aio_context;
4038
Benoît Canet09158f02014-06-27 18:25:25 +02004039 if (!to_replace_bs) {
4040 error_setg(errp, "Node name '%s' not found", node_name);
4041 return NULL;
4042 }
4043
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004044 aio_context = bdrv_get_aio_context(to_replace_bs);
4045 aio_context_acquire(aio_context);
4046
Benoît Canet09158f02014-06-27 18:25:25 +02004047 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004048 to_replace_bs = NULL;
4049 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004050 }
4051
4052 /* We don't want arbitrary node of the BDS chain to be replaced only the top
4053 * most non filter in order to prevent data corruption.
4054 * Another benefit is that this tests exclude backing files which are
4055 * blocked by the backing blockers.
4056 */
4057 if (!bdrv_is_first_non_filter(to_replace_bs)) {
4058 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004059 to_replace_bs = NULL;
4060 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004061 }
4062
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004063out:
4064 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02004065 return to_replace_bs;
4066}
Ming Lei448ad912014-07-04 18:04:33 +08004067
Max Reitz91af7012014-07-18 20:24:56 +02004068static bool append_open_options(QDict *d, BlockDriverState *bs)
4069{
4070 const QDictEntry *entry;
4071 bool found_any = false;
4072
4073 for (entry = qdict_first(bs->options); entry;
4074 entry = qdict_next(bs->options, entry))
4075 {
4076 /* Only take options for this level and exclude all non-driver-specific
4077 * options */
4078 if (!strchr(qdict_entry_key(entry), '.') &&
4079 strcmp(qdict_entry_key(entry), "node-name"))
4080 {
4081 qobject_incref(qdict_entry_value(entry));
4082 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
4083 found_any = true;
4084 }
4085 }
4086
4087 return found_any;
4088}
4089
4090/* Updates the following BDS fields:
4091 * - exact_filename: A filename which may be used for opening a block device
4092 * which (mostly) equals the given BDS (even without any
4093 * other options; so reading and writing must return the same
4094 * results, but caching etc. may be different)
4095 * - full_open_options: Options which, when given when opening a block device
4096 * (without a filename), result in a BDS (mostly)
4097 * equalling the given one
4098 * - filename: If exact_filename is set, it is copied here. Otherwise,
4099 * full_open_options is converted to a JSON object, prefixed with
4100 * "json:" (for use through the JSON pseudo protocol) and put here.
4101 */
4102void bdrv_refresh_filename(BlockDriverState *bs)
4103{
4104 BlockDriver *drv = bs->drv;
4105 QDict *opts;
4106
4107 if (!drv) {
4108 return;
4109 }
4110
4111 /* This BDS's file name will most probably depend on its file's name, so
4112 * refresh that first */
4113 if (bs->file) {
4114 bdrv_refresh_filename(bs->file);
4115 }
4116
4117 if (drv->bdrv_refresh_filename) {
4118 /* Obsolete information is of no use here, so drop the old file name
4119 * information before refreshing it */
4120 bs->exact_filename[0] = '\0';
4121 if (bs->full_open_options) {
4122 QDECREF(bs->full_open_options);
4123 bs->full_open_options = NULL;
4124 }
4125
4126 drv->bdrv_refresh_filename(bs);
4127 } else if (bs->file) {
4128 /* Try to reconstruct valid information from the underlying file */
4129 bool has_open_options;
4130
4131 bs->exact_filename[0] = '\0';
4132 if (bs->full_open_options) {
4133 QDECREF(bs->full_open_options);
4134 bs->full_open_options = NULL;
4135 }
4136
4137 opts = qdict_new();
4138 has_open_options = append_open_options(opts, bs);
4139
4140 /* If no specific options have been given for this BDS, the filename of
4141 * the underlying file should suffice for this one as well */
4142 if (bs->file->exact_filename[0] && !has_open_options) {
4143 strcpy(bs->exact_filename, bs->file->exact_filename);
4144 }
4145 /* Reconstructing the full options QDict is simple for most format block
4146 * drivers, as long as the full options are known for the underlying
4147 * file BDS. The full options QDict of that file BDS should somehow
4148 * contain a representation of the filename, therefore the following
4149 * suffices without querying the (exact_)filename of this BDS. */
4150 if (bs->file->full_open_options) {
4151 qdict_put_obj(opts, "driver",
4152 QOBJECT(qstring_from_str(drv->format_name)));
4153 QINCREF(bs->file->full_open_options);
4154 qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
4155
4156 bs->full_open_options = opts;
4157 } else {
4158 QDECREF(opts);
4159 }
4160 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4161 /* There is no underlying file BDS (at least referenced by BDS.file),
4162 * so the full options QDict should be equal to the options given
4163 * specifically for this block device when it was opened (plus the
4164 * driver specification).
4165 * Because those options don't change, there is no need to update
4166 * full_open_options when it's already set. */
4167
4168 opts = qdict_new();
4169 append_open_options(opts, bs);
4170 qdict_put_obj(opts, "driver",
4171 QOBJECT(qstring_from_str(drv->format_name)));
4172
4173 if (bs->exact_filename[0]) {
4174 /* This may not work for all block protocol drivers (some may
4175 * require this filename to be parsed), but we have to find some
4176 * default solution here, so just include it. If some block driver
4177 * does not support pure options without any filename at all or
4178 * needs some special format of the options QDict, it needs to
4179 * implement the driver-specific bdrv_refresh_filename() function.
4180 */
4181 qdict_put_obj(opts, "filename",
4182 QOBJECT(qstring_from_str(bs->exact_filename)));
4183 }
4184
4185 bs->full_open_options = opts;
4186 }
4187
4188 if (bs->exact_filename[0]) {
4189 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4190 } else if (bs->full_open_options) {
4191 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4192 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4193 qstring_get_str(json));
4194 QDECREF(json);
4195 }
4196}
Benoît Canet5366d0c2014-09-05 15:46:18 +02004197
4198/* This accessor function purpose is to allow the device models to access the
4199 * BlockAcctStats structure embedded inside a BlockDriverState without being
4200 * aware of the BlockDriverState structure layout.
4201 * It will go away when the BlockAcctStats structure will be moved inside
4202 * the device models.
4203 */
4204BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
4205{
4206 return &bs->stats;
4207}