blob: e2e33fd085f4fb08f7efb2d836ac3917ef0dfbed [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"
Markus Armbrusterd49b6832015-03-17 18:29:20 +010029#include "qemu/error-report.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010030#include "qemu/module.h"
Markus Armbrustercc7a8ea2015-03-17 17:22:46 +010031#include "qapi/qmp/qerror.h"
Paolo Bonzini7b1b5d12012-12-17 18:19:43 +010032#include "qapi/qmp/qjson.h"
Markus Armbrusterbfb197e2014-10-07 13:59:11 +020033#include "sysemu/block-backend.h"
Paolo Bonzini9c17d612012-12-17 18:20:04 +010034#include "sysemu/sysemu.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010035#include "qemu/notify.h"
Paolo Bonzini737e1502012-12-17 18:19:44 +010036#include "block/coroutine.h"
Benoît Canetc13163f2014-01-23 21:31:34 +010037#include "block/qapi.h"
Luiz Capitulinob2023812011-09-21 17:16:47 -030038#include "qmp-commands.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010039#include "qemu/timer.h"
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +020040#include "qapi-event.h"
Alberto Garciadb628332015-06-08 18:17:45 +020041#include "block/throttle-groups.h"
bellardfc01f7e2003-06-30 10:03:06 +000042
Juan Quintela71e72a12009-07-27 16:12:56 +020043#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000044#include <sys/types.h>
45#include <sys/stat.h>
46#include <sys/ioctl.h>
Blue Swirl72cf2d42009-09-12 07:36:22 +000047#include <sys/queue.h>
blueswir1c5e97232009-03-07 20:06:23 +000048#ifndef __DragonFly__
bellard7674e7b2005-04-26 21:59:26 +000049#include <sys/disk.h>
50#endif
blueswir1c5e97232009-03-07 20:06:23 +000051#endif
bellard7674e7b2005-04-26 21:59:26 +000052
aliguori49dc7682009-03-08 16:26:59 +000053#ifdef _WIN32
54#include <windows.h>
55#endif
56
John Snow9bd2b082015-04-17 19:49:57 -040057/**
58 * A BdrvDirtyBitmap can be in three possible states:
59 * (1) successor is NULL and disabled is false: full r/w mode
60 * (2) successor is NULL and disabled is true: read only mode ("disabled")
61 * (3) successor is set: frozen mode.
62 * A frozen bitmap cannot be renamed, deleted, anonymized, cleared, set,
63 * or enabled. A frozen bitmap can only abdicate() or reclaim().
64 */
Fam Zhenge4654d22013-11-13 18:29:43 +080065struct BdrvDirtyBitmap {
John Snowaa0c7ca2015-04-17 19:50:01 -040066 HBitmap *bitmap; /* Dirty sector bitmap implementation */
67 BdrvDirtyBitmap *successor; /* Anonymous child; implies frozen status */
68 char *name; /* Optional non-empty unique ID */
69 int64_t size; /* Size of the bitmap (Number of sectors) */
70 bool disabled; /* Bitmap is read-only */
Fam Zhenge4654d22013-11-13 18:29:43 +080071 QLIST_ENTRY(BdrvDirtyBitmap) list;
72};
73
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010074#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
75
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +010076static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
77 QTAILQ_HEAD_INITIALIZER(bdrv_states);
blueswir17ee930d2008-09-17 19:04:14 +000078
Benoît Canetdc364f42014-01-23 21:31:32 +010079static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
80 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
81
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010082static QLIST_HEAD(, BlockDriver) bdrv_drivers =
83 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000084
Kevin Wolff3930ed2015-04-08 13:43:47 +020085static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
86 const char *reference, QDict *options, int flags,
87 BlockDriverState *parent,
88 const BdrvChildRole *child_role,
89 BlockDriver *drv, Error **errp);
90
John Snowce1ffea2015-04-17 19:50:03 -040091static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
Markus Armbrustereb852012009-10-27 18:41:44 +010092/* If non-zero, use only whitelisted block drivers */
93static int use_bdrv_whitelist;
94
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000095#ifdef _WIN32
96static int is_windows_drive_prefix(const char *filename)
97{
98 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
99 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
100 filename[1] == ':');
101}
102
103int is_windows_drive(const char *filename)
104{
105 if (is_windows_drive_prefix(filename) &&
106 filename[2] == '\0')
107 return 1;
108 if (strstart(filename, "\\\\.\\", NULL) ||
109 strstart(filename, "//./", NULL))
110 return 1;
111 return 0;
112}
113#endif
114
Kevin Wolf339064d2013-11-28 10:23:32 +0100115size_t bdrv_opt_mem_align(BlockDriverState *bs)
116{
117 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300118 /* page size or 4k (hdd sector size) should be on the safe side */
119 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100120 }
121
122 return bs->bl.opt_mem_alignment;
123}
124
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300125size_t bdrv_min_mem_align(BlockDriverState *bs)
126{
127 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300128 /* page size or 4k (hdd sector size) should be on the safe side */
129 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300130 }
131
132 return bs->bl.min_mem_alignment;
133}
134
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000135/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100136int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000137{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200138 const char *p;
139
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000140#ifdef _WIN32
141 if (is_windows_drive(path) ||
142 is_windows_drive_prefix(path)) {
143 return 0;
144 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200145 p = path + strcspn(path, ":/\\");
146#else
147 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000148#endif
149
Paolo Bonzini947995c2012-05-08 16:51:48 +0200150 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000151}
152
bellard83f64092006-08-01 16:21:11 +0000153int path_is_absolute(const char *path)
154{
bellard21664422007-01-07 18:22:37 +0000155#ifdef _WIN32
156 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200157 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000158 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200159 }
160 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000161#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200162 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000163#endif
bellard83f64092006-08-01 16:21:11 +0000164}
165
166/* if filename is absolute, just copy it to dest. Otherwise, build a
167 path to it by considering it is relative to base_path. URL are
168 supported. */
169void path_combine(char *dest, int dest_size,
170 const char *base_path,
171 const char *filename)
172{
173 const char *p, *p1;
174 int len;
175
176 if (dest_size <= 0)
177 return;
178 if (path_is_absolute(filename)) {
179 pstrcpy(dest, dest_size, filename);
180 } else {
181 p = strchr(base_path, ':');
182 if (p)
183 p++;
184 else
185 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000186 p1 = strrchr(base_path, '/');
187#ifdef _WIN32
188 {
189 const char *p2;
190 p2 = strrchr(base_path, '\\');
191 if (!p1 || p2 > p1)
192 p1 = p2;
193 }
194#endif
bellard83f64092006-08-01 16:21:11 +0000195 if (p1)
196 p1++;
197 else
198 p1 = base_path;
199 if (p1 > p)
200 p = p1;
201 len = p - base_path;
202 if (len > dest_size - 1)
203 len = dest_size - 1;
204 memcpy(dest, base_path, len);
205 dest[len] = '\0';
206 pstrcat(dest, dest_size, filename);
207 }
208}
209
Max Reitz0a828552014-11-26 17:20:25 +0100210void bdrv_get_full_backing_filename_from_filename(const char *backed,
211 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100212 char *dest, size_t sz,
213 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100214{
Max Reitz9f074292014-11-26 17:20:26 +0100215 if (backing[0] == '\0' || path_has_protocol(backing) ||
216 path_is_absolute(backing))
217 {
Max Reitz0a828552014-11-26 17:20:25 +0100218 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100219 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
220 error_setg(errp, "Cannot use relative backing file names for '%s'",
221 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100222 } else {
223 path_combine(dest, sz, backed, backing);
224 }
225}
226
Max Reitz9f074292014-11-26 17:20:26 +0100227void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
228 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200229{
Max Reitz9f074292014-11-26 17:20:26 +0100230 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
231
232 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
233 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200234}
235
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100236void bdrv_register(BlockDriver *bdrv)
237{
238 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200239
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100240 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000241}
bellardb3380822004-03-14 21:38:54 +0000242
Markus Armbruster7f06d472014-10-07 13:59:12 +0200243BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000244{
Markus Armbruster7f06d472014-10-07 13:59:12 +0200245 BlockDriverState *bs = bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200246
Markus Armbrustere4e99862014-10-07 13:59:03 +0200247 QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
Markus Armbrustere4e99862014-10-07 13:59:03 +0200248 return bs;
249}
250
251BlockDriverState *bdrv_new(void)
252{
253 BlockDriverState *bs;
254 int i;
255
Markus Armbruster5839e532014-08-19 10:31:08 +0200256 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800257 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800258 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
259 QLIST_INIT(&bs->op_blockers[i]);
260 }
Luiz Capitulino28a72822011-09-26 17:43:50 -0300261 bdrv_iostatus_disable(bs);
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200262 notifier_list_init(&bs->close_notifiers);
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200263 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200264 qemu_co_queue_init(&bs->throttled_reqs[0]);
265 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800266 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200267 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200268
bellardb3380822004-03-14 21:38:54 +0000269 return bs;
270}
271
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200272void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
273{
274 notifier_list_add(&bs->close_notifiers, notify);
275}
276
bellardea2384d2004-08-01 21:59:26 +0000277BlockDriver *bdrv_find_format(const char *format_name)
278{
279 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100280 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
281 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000282 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100283 }
bellardea2384d2004-08-01 21:59:26 +0000284 }
285 return NULL;
286}
287
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800288static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100289{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800290 static const char *whitelist_rw[] = {
291 CONFIG_BDRV_RW_WHITELIST
292 };
293 static const char *whitelist_ro[] = {
294 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100295 };
296 const char **p;
297
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800298 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100299 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800300 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100301
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800302 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100303 if (!strcmp(drv->format_name, *p)) {
304 return 1;
305 }
306 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800307 if (read_only) {
308 for (p = whitelist_ro; *p; p++) {
309 if (!strcmp(drv->format_name, *p)) {
310 return 1;
311 }
312 }
313 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100314 return 0;
315}
316
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800317BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
318 bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100319{
320 BlockDriver *drv = bdrv_find_format(format_name);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800321 return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
Markus Armbrustereb852012009-10-27 18:41:44 +0100322}
323
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800324typedef struct CreateCo {
325 BlockDriver *drv;
326 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800327 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800328 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200329 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800330} CreateCo;
331
332static void coroutine_fn bdrv_create_co_entry(void *opaque)
333{
Max Reitzcc84d902013-09-06 17:14:26 +0200334 Error *local_err = NULL;
335 int ret;
336
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800337 CreateCo *cco = opaque;
338 assert(cco->drv);
339
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800340 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100341 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200342 error_propagate(&cco->err, local_err);
343 }
344 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800345}
346
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200347int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800348 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000349{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800350 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200351
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800352 Coroutine *co;
353 CreateCo cco = {
354 .drv = drv,
355 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800356 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800357 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200358 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800359 };
360
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800361 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200362 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300363 ret = -ENOTSUP;
364 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800365 }
366
367 if (qemu_in_coroutine()) {
368 /* Fast-path if already in coroutine context */
369 bdrv_create_co_entry(&cco);
370 } else {
371 co = qemu_coroutine_create(bdrv_create_co_entry);
372 qemu_coroutine_enter(co, &cco);
373 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200374 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800375 }
376 }
377
378 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200379 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100380 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200381 error_propagate(errp, cco.err);
382 } else {
383 error_setg_errno(errp, -ret, "Could not create image");
384 }
385 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800386
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300387out:
388 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800389 return ret;
bellardea2384d2004-08-01 21:59:26 +0000390}
391
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800392int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200393{
394 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200395 Error *local_err = NULL;
396 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200397
Max Reitzb65a5e12015-02-05 13:58:12 -0500398 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200399 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000400 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200401 }
402
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800403 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100404 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200405 error_propagate(errp, local_err);
406 }
407 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200408}
409
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100410/**
411 * Try to get @bs's logical and physical block size.
412 * On success, store them in @bsz struct and return 0.
413 * On failure return -errno.
414 * @bs must not be empty.
415 */
416int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
417{
418 BlockDriver *drv = bs->drv;
419
420 if (drv && drv->bdrv_probe_blocksizes) {
421 return drv->bdrv_probe_blocksizes(bs, bsz);
422 }
423
424 return -ENOTSUP;
425}
426
427/**
428 * Try to get @bs's geometry (cyls, heads, sectors).
429 * On success, store them in @geo struct and return 0.
430 * On failure return -errno.
431 * @bs must not be empty.
432 */
433int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
434{
435 BlockDriver *drv = bs->drv;
436
437 if (drv && drv->bdrv_probe_geometry) {
438 return drv->bdrv_probe_geometry(bs, geo);
439 }
440
441 return -ENOTSUP;
442}
443
Jim Meyeringeba25052012-05-28 09:27:54 +0200444/*
445 * Create a uniquely-named empty temporary file.
446 * Return 0 upon success, otherwise a negative errno value.
447 */
448int get_tmp_filename(char *filename, int size)
449{
bellardd5249392004-08-03 21:14:23 +0000450#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000451 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200452 /* GetTempFileName requires that its output buffer (4th param)
453 have length MAX_PATH or greater. */
454 assert(size >= MAX_PATH);
455 return (GetTempPath(MAX_PATH, temp_dir)
456 && GetTempFileName(temp_dir, "qem", 0, filename)
457 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000458#else
bellardea2384d2004-08-01 21:59:26 +0000459 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000460 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000461 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530462 if (!tmpdir) {
463 tmpdir = "/var/tmp";
464 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200465 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
466 return -EOVERFLOW;
467 }
bellardea2384d2004-08-01 21:59:26 +0000468 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800469 if (fd < 0) {
470 return -errno;
471 }
472 if (close(fd) != 0) {
473 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200474 return -errno;
475 }
476 return 0;
bellardd5249392004-08-03 21:14:23 +0000477#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200478}
bellardea2384d2004-08-01 21:59:26 +0000479
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200480/*
481 * Detect host devices. By convention, /dev/cdrom[N] is always
482 * recognized as a host CDROM.
483 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200484static BlockDriver *find_hdev_driver(const char *filename)
485{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200486 int score_max = 0, score;
487 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200488
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100489 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200490 if (d->bdrv_probe_device) {
491 score = d->bdrv_probe_device(filename);
492 if (score > score_max) {
493 score_max = score;
494 drv = d;
495 }
496 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200497 }
498
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200499 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200500}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200501
Kevin Wolf98289622013-07-10 15:47:39 +0200502BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500503 bool allow_protocol_prefix,
504 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200505{
506 BlockDriver *drv1;
507 char protocol[128];
508 int len;
509 const char *p;
510
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200511 /* TODO Drivers without bdrv_file_open must be specified explicitly */
512
Christoph Hellwig39508e72010-06-23 12:25:17 +0200513 /*
514 * XXX(hch): we really should not let host device detection
515 * override an explicit protocol specification, but moving this
516 * later breaks access to device names with colons in them.
517 * Thanks to the brain-dead persistent naming schemes on udev-
518 * based Linux systems those actually are quite common.
519 */
520 drv1 = find_hdev_driver(filename);
521 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200522 return drv1;
523 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200524
Kevin Wolf98289622013-07-10 15:47:39 +0200525 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100526 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200527 }
Kevin Wolf98289622013-07-10 15:47:39 +0200528
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000529 p = strchr(filename, ':');
530 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200531 len = p - filename;
532 if (len > sizeof(protocol) - 1)
533 len = sizeof(protocol) - 1;
534 memcpy(protocol, filename, len);
535 protocol[len] = '\0';
536 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
537 if (drv1->protocol_name &&
538 !strcmp(drv1->protocol_name, protocol)) {
539 return drv1;
540 }
541 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500542
543 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200544 return NULL;
545}
546
Markus Armbrusterc6684242014-11-20 16:27:10 +0100547/*
548 * Guess image format by probing its contents.
549 * This is not a good idea when your image is raw (CVE-2008-2004), but
550 * we do it anyway for backward compatibility.
551 *
552 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100553 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
554 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100555 * @filename is its filename.
556 *
557 * For all block drivers, call the bdrv_probe() method to get its
558 * probing score.
559 * Return the first block driver with the highest probing score.
560 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100561BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
562 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100563{
564 int score_max = 0, score;
565 BlockDriver *drv = NULL, *d;
566
567 QLIST_FOREACH(d, &bdrv_drivers, list) {
568 if (d->bdrv_probe) {
569 score = d->bdrv_probe(buf, buf_size, filename);
570 if (score > score_max) {
571 score_max = score;
572 drv = d;
573 }
574 }
575 }
576
577 return drv;
578}
579
Kevin Wolff500a6d2012-11-12 17:35:27 +0100580static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200581 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000582{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100583 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100584 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100585 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700586
Kevin Wolf08a00552010-06-01 18:37:31 +0200587 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Paolo Bonzini8e895592013-01-10 15:39:27 +0100588 if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100589 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200590 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700591 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700592
bellard83f64092006-08-01 16:21:11 +0000593 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000594 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200595 error_setg_errno(errp, -ret, "Could not read image for determining its "
596 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200597 *pdrv = NULL;
598 return ret;
bellard83f64092006-08-01 16:21:11 +0000599 }
600
Markus Armbrusterc6684242014-11-20 16:27:10 +0100601 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200602 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200603 error_setg(errp, "Could not determine image format: No compatible "
604 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200605 ret = -ENOENT;
606 }
607 *pdrv = drv;
608 return ret;
bellardea2384d2004-08-01 21:59:26 +0000609}
610
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100611/**
612 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200613 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100614 */
615static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
616{
617 BlockDriver *drv = bs->drv;
618
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700619 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
620 if (bs->sg)
621 return 0;
622
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100623 /* query actual device if possible, otherwise just trust the hint */
624 if (drv->bdrv_getlength) {
625 int64_t length = drv->bdrv_getlength(bs);
626 if (length < 0) {
627 return length;
628 }
Fam Zheng7e382002013-11-06 19:48:06 +0800629 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100630 }
631
632 bs->total_sectors = hint;
633 return 0;
634}
635
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100636/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100637 * Set open flags for a given discard mode
638 *
639 * Return 0 on success, -1 if the discard mode was invalid.
640 */
641int bdrv_parse_discard_flags(const char *mode, int *flags)
642{
643 *flags &= ~BDRV_O_UNMAP;
644
645 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
646 /* do nothing */
647 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
648 *flags |= BDRV_O_UNMAP;
649 } else {
650 return -1;
651 }
652
653 return 0;
654}
655
656/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100657 * Set open flags for a given cache mode
658 *
659 * Return 0 on success, -1 if the cache mode was invalid.
660 */
661int bdrv_parse_cache_flags(const char *mode, int *flags)
662{
663 *flags &= ~BDRV_O_CACHE_MASK;
664
665 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
666 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100667 } else if (!strcmp(mode, "directsync")) {
668 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100669 } else if (!strcmp(mode, "writeback")) {
670 *flags |= BDRV_O_CACHE_WB;
671 } else if (!strcmp(mode, "unsafe")) {
672 *flags |= BDRV_O_CACHE_WB;
673 *flags |= BDRV_O_NO_FLUSH;
674 } else if (!strcmp(mode, "writethrough")) {
675 /* this is the default */
676 } else {
677 return -1;
678 }
679
680 return 0;
681}
682
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200683/*
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200684 * Returns the flags that a temporary snapshot should get, based on the
685 * originally requested flags (the originally requested image will have flags
686 * like a backing file)
687 */
688static int bdrv_temp_snapshot_flags(int flags)
689{
690 return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
691}
692
693/*
Kevin Wolff3930ed2015-04-08 13:43:47 +0200694 * Returns the flags that bs->file should get if a protocol driver is expected,
695 * based on the given flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200696 */
697static int bdrv_inherited_flags(int flags)
698{
699 /* Enable protocol handling, disable format probing for bs->file */
700 flags |= BDRV_O_PROTOCOL;
701
702 /* Our block drivers take care to send flushes and respect unmap policy,
703 * so we can enable both unconditionally on lower layers. */
704 flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
705
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200706 /* Clear flags that only apply to the top layer */
Kevin Wolf5669b442014-04-11 21:36:45 +0200707 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200708
709 return flags;
710}
711
Kevin Wolff3930ed2015-04-08 13:43:47 +0200712const BdrvChildRole child_file = {
713 .inherit_flags = bdrv_inherited_flags,
714};
715
716/*
717 * Returns the flags that bs->file should get if the use of formats (and not
718 * only protocols) is permitted for it, based on the given flags for the parent
719 * BDS
720 */
721static int bdrv_inherited_fmt_flags(int parent_flags)
722{
723 int flags = child_file.inherit_flags(parent_flags);
724 return flags & ~BDRV_O_PROTOCOL;
725}
726
727const BdrvChildRole child_format = {
728 .inherit_flags = bdrv_inherited_fmt_flags,
729};
730
Kevin Wolf317fc442014-04-25 13:27:34 +0200731/*
732 * Returns the flags that bs->backing_hd should get, based on the given flags
733 * for the parent BDS
734 */
735static int bdrv_backing_flags(int flags)
736{
737 /* backing files always opened read-only */
738 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
739
740 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200741 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200742
743 return flags;
744}
745
Kevin Wolff3930ed2015-04-08 13:43:47 +0200746static const BdrvChildRole child_backing = {
747 .inherit_flags = bdrv_backing_flags,
748};
749
Kevin Wolf7b272452012-11-12 17:05:39 +0100750static int bdrv_open_flags(BlockDriverState *bs, int flags)
751{
752 int open_flags = flags | BDRV_O_CACHE_WB;
753
754 /*
755 * Clear flags that are internal to the block layer before opening the
756 * image.
757 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200758 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100759
760 /*
761 * Snapshots should be writable.
762 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200763 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100764 open_flags |= BDRV_O_RDWR;
765 }
766
767 return open_flags;
768}
769
Kevin Wolf636ea372014-01-24 14:11:52 +0100770static void bdrv_assign_node_name(BlockDriverState *bs,
771 const char *node_name,
772 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100773{
774 if (!node_name) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100775 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100776 }
777
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200778 /* Check for empty string or invalid characters */
Markus Armbrusterf5bebbb2014-09-30 13:59:30 +0200779 if (!id_wellformed(node_name)) {
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200780 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100781 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100782 }
783
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100784 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200785 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100786 error_setg(errp, "node-name=%s is conflicting with a device id",
787 node_name);
Kevin Wolf636ea372014-01-24 14:11:52 +0100788 return;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100789 }
790
Benoît Canet6913c0c2014-01-23 21:31:33 +0100791 /* takes care of avoiding duplicates node names */
792 if (bdrv_find_node(node_name)) {
793 error_setg(errp, "Duplicate node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100794 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100795 }
796
797 /* copy node name into the bs and insert it into the graph list */
798 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
799 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100800}
801
Kevin Wolf18edf282015-04-07 17:12:56 +0200802static QemuOptsList bdrv_runtime_opts = {
803 .name = "bdrv_common",
804 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
805 .desc = {
806 {
807 .name = "node-name",
808 .type = QEMU_OPT_STRING,
809 .help = "Node name of the block device node",
810 },
811 { /* end of list */ }
812 },
813};
814
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200815/*
Kevin Wolf57915332010-04-14 15:24:50 +0200816 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100817 *
818 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200819 */
Kevin Wolff500a6d2012-11-12 17:35:27 +0100820static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200821 QDict *options, int flags, BlockDriver *drv, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200822{
823 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200824 const char *filename;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100825 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200826 QemuOpts *opts;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200827 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200828
829 assert(drv != NULL);
Paolo Bonzini64058752012-05-08 16:51:49 +0200830 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100831 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200832
Kevin Wolf45673672013-04-22 17:48:40 +0200833 if (file != NULL) {
834 filename = file->filename;
835 } else {
836 filename = qdict_get_try_str(options, "filename");
837 }
838
Kevin Wolf765003d2014-02-03 14:49:42 +0100839 if (drv->bdrv_needs_filename && !filename) {
840 error_setg(errp, "The '%s' block driver requires a file name",
841 drv->format_name);
842 return -EINVAL;
843 }
844
Kevin Wolf45673672013-04-22 17:48:40 +0200845 trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
Stefan Hajnoczi28dcee12011-09-22 20:14:12 +0100846
Kevin Wolf18edf282015-04-07 17:12:56 +0200847 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
848 qemu_opts_absorb_qdict(opts, options, &local_err);
849 if (local_err) {
850 error_propagate(errp, local_err);
851 ret = -EINVAL;
852 goto fail_opts;
853 }
854
855 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100856 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200857 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100858 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200859 ret = -EINVAL;
860 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100861 }
862
Paolo Bonzini1b7fd722011-11-29 11:35:47 +0100863 bs->guest_block_size = 512;
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100864 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800865 bs->zero_beyond_eof = true;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800866 open_flags = bdrv_open_flags(bs, flags);
867 bs->read_only = !(open_flags & BDRV_O_RDWR);
868
869 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200870 error_setg(errp,
871 !bs->read_only && bdrv_is_whitelisted(drv, true)
872 ? "Driver '%s' can only be used for read-only devices"
873 : "Driver '%s' is not whitelisted",
874 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200875 ret = -ENOTSUP;
876 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800877 }
Kevin Wolf57915332010-04-14 15:24:50 +0200878
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000879 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200880 if (flags & BDRV_O_COPY_ON_READ) {
881 if (!bs->read_only) {
882 bdrv_enable_copy_on_read(bs);
883 } else {
884 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200885 ret = -EINVAL;
886 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200887 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000888 }
889
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100890 if (filename != NULL) {
891 pstrcpy(bs->filename, sizeof(bs->filename), filename);
892 } else {
893 bs->filename[0] = '\0';
894 }
Max Reitz91af7012014-07-18 20:24:56 +0200895 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200896
Kevin Wolf57915332010-04-14 15:24:50 +0200897 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500898 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200899
Stefan Hajnoczi03f541b2011-10-27 10:54:28 +0100900 bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100901
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200902 /* Open the image, either directly or using a protocol */
903 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100904 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200905 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200906 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100907 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200908 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200909 error_setg(errp, "Can't use '%s' as a block driver for the "
910 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200911 ret = -EINVAL;
912 goto free_and_fail;
913 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100914 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200915 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200916 }
917
Kevin Wolf57915332010-04-14 15:24:50 +0200918 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100919 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200920 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800921 } else if (bs->filename[0]) {
922 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200923 } else {
924 error_setg_errno(errp, -ret, "Could not open image");
925 }
Kevin Wolf57915332010-04-14 15:24:50 +0200926 goto free_and_fail;
927 }
928
Markus Armbrustera1f688f2015-03-13 21:09:40 +0100929 if (bs->encrypted) {
930 error_report("Encrypted images are deprecated");
931 error_printf("Support for them will be removed in a future release.\n"
932 "You can use 'qemu-img convert' to convert your image"
933 " to an unencrypted one.\n");
934 }
935
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100936 ret = refresh_total_sectors(bs, bs->total_sectors);
937 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200938 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100939 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +0200940 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100941
Kevin Wolf3baca892014-07-16 17:48:16 +0200942 bdrv_refresh_limits(bs, &local_err);
943 if (local_err) {
944 error_propagate(errp, local_err);
945 ret = -EINVAL;
946 goto free_and_fail;
947 }
948
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100949 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300950 assert(bdrv_min_mem_align(bs) != 0);
Kevin Wolf47ea2de2014-03-05 15:49:55 +0100951 assert((bs->request_alignment != 0) || bs->sg);
Kevin Wolf18edf282015-04-07 17:12:56 +0200952
953 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200954 return 0;
955
956free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +0100957 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -0500958 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +0200959 bs->opaque = NULL;
960 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200961fail_opts:
962 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200963 return ret;
964}
965
Kevin Wolf5e5c4f62014-05-26 11:45:08 +0200966static QDict *parse_json_filename(const char *filename, Error **errp)
967{
968 QObject *options_obj;
969 QDict *options;
970 int ret;
971
972 ret = strstart(filename, "json:", &filename);
973 assert(ret);
974
975 options_obj = qobject_from_json(filename);
976 if (!options_obj) {
977 error_setg(errp, "Could not parse the JSON options");
978 return NULL;
979 }
980
981 if (qobject_type(options_obj) != QTYPE_QDICT) {
982 qobject_decref(options_obj);
983 error_setg(errp, "Invalid JSON object given");
984 return NULL;
985 }
986
987 options = qobject_to_qdict(options_obj);
988 qdict_flatten(options);
989
990 return options;
991}
992
Kevin Wolf57915332010-04-14 15:24:50 +0200993/*
Kevin Wolff54120f2014-05-26 11:09:59 +0200994 * Fills in default options for opening images and converts the legacy
995 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -0400996 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
997 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +0200998 */
Max Reitz53a29512015-03-19 14:53:16 -0400999static int bdrv_fill_options(QDict **options, const char **pfilename,
1000 int *flags, BlockDriver *drv, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001001{
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001002 const char *filename = *pfilename;
Kevin Wolff54120f2014-05-26 11:09:59 +02001003 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001004 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001005 bool parse_filename = false;
Max Reitz53a29512015-03-19 14:53:16 -04001006 BlockDriver *tmp_drv;
Kevin Wolff54120f2014-05-26 11:09:59 +02001007 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001008
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001009 /* Parse json: pseudo-protocol */
1010 if (filename && g_str_has_prefix(filename, "json:")) {
1011 QDict *json_options = parse_json_filename(filename, &local_err);
1012 if (local_err) {
1013 error_propagate(errp, local_err);
1014 return -EINVAL;
1015 }
1016
1017 /* Options given in the filename have lower priority than options
1018 * specified directly */
1019 qdict_join(*options, json_options, false);
1020 QDECREF(json_options);
1021 *pfilename = filename = NULL;
1022 }
1023
Max Reitz53a29512015-03-19 14:53:16 -04001024 drvname = qdict_get_try_str(*options, "driver");
1025
1026 /* If the user has explicitly specified the driver, this choice should
1027 * override the BDRV_O_PROTOCOL flag */
1028 tmp_drv = drv;
1029 if (!tmp_drv && drvname) {
1030 tmp_drv = bdrv_find_format(drvname);
1031 }
1032 if (tmp_drv) {
1033 protocol = tmp_drv->bdrv_file_open;
1034 }
1035
1036 if (protocol) {
1037 *flags |= BDRV_O_PROTOCOL;
1038 } else {
1039 *flags &= ~BDRV_O_PROTOCOL;
1040 }
1041
Kevin Wolff54120f2014-05-26 11:09:59 +02001042 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001043 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001044 if (!qdict_haskey(*options, "filename")) {
1045 qdict_put(*options, "filename", qstring_from_str(filename));
1046 parse_filename = true;
1047 } else {
1048 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1049 "the same time");
1050 return -EINVAL;
1051 }
1052 }
1053
1054 /* Find the right block driver */
1055 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001056
Kevin Wolf17b005f2014-05-27 10:50:29 +02001057 if (drv) {
1058 if (drvname) {
1059 error_setg(errp, "Driver specified twice");
1060 return -EINVAL;
1061 }
1062 drvname = drv->format_name;
1063 qdict_put(*options, "driver", qstring_from_str(drvname));
1064 } else {
1065 if (!drvname && protocol) {
1066 if (filename) {
Max Reitzb65a5e12015-02-05 13:58:12 -05001067 drv = bdrv_find_protocol(filename, parse_filename, errp);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001068 if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001069 return -EINVAL;
1070 }
1071
1072 drvname = drv->format_name;
1073 qdict_put(*options, "driver", qstring_from_str(drvname));
1074 } else {
1075 error_setg(errp, "Must specify either driver or file");
Kevin Wolff54120f2014-05-26 11:09:59 +02001076 return -EINVAL;
1077 }
Kevin Wolf17b005f2014-05-27 10:50:29 +02001078 } else if (drvname) {
1079 drv = bdrv_find_format(drvname);
1080 if (!drv) {
1081 error_setg(errp, "Unknown driver '%s'", drvname);
1082 return -ENOENT;
1083 }
Kevin Wolff54120f2014-05-26 11:09:59 +02001084 }
1085 }
1086
Kevin Wolf17b005f2014-05-27 10:50:29 +02001087 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001088
1089 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001090 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001091 drv->bdrv_parse_filename(filename, *options, &local_err);
1092 if (local_err) {
1093 error_propagate(errp, local_err);
1094 return -EINVAL;
1095 }
1096
1097 if (!drv->bdrv_needs_filename) {
1098 qdict_del(*options, "filename");
1099 }
1100 }
1101
1102 return 0;
1103}
1104
Fam Zheng8d24cce2014-05-23 21:29:45 +08001105void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1106{
1107
Fam Zheng826b6ca2014-05-23 21:29:47 +08001108 if (bs->backing_hd) {
1109 assert(bs->backing_blocker);
1110 bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
1111 } else if (backing_hd) {
1112 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001113 "node is used as backing hd of '%s'",
1114 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001115 }
1116
Fam Zheng8d24cce2014-05-23 21:29:45 +08001117 bs->backing_hd = backing_hd;
1118 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001119 error_free(bs->backing_blocker);
1120 bs->backing_blocker = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001121 goto out;
1122 }
1123 bs->open_flags &= ~BDRV_O_NO_BACKING;
1124 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1125 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1126 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001127
1128 bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1129 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Fam Zhengbb000212014-09-11 13:14:00 +08001130 bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001131 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001132out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001133 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001134}
1135
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001136/*
1137 * Opens the backing file for a BlockDriverState if not yet open
1138 *
1139 * options is a QDict of options to pass to the block drivers, or NULL for an
1140 * empty set of options. The reference to the QDict is transferred to this
1141 * function (even on failure), so if the caller intends to reuse the dictionary,
1142 * it needs to use QINCREF() before calling bdrv_file_open.
1143 */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001144int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001145{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001146 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolf317fc442014-04-25 13:27:34 +02001147 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001148 BlockDriverState *backing_hd;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001149 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001150
1151 if (bs->backing_hd != NULL) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001152 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001153 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001154 }
1155
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001156 /* NULL means an empty set of options */
1157 if (options == NULL) {
1158 options = qdict_new();
1159 }
1160
Paolo Bonzini9156df12012-10-18 16:49:17 +02001161 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001162 if (qdict_haskey(options, "file.filename")) {
1163 backing_filename[0] = '\0';
1164 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001165 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001166 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001167 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001168 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1169 &local_err);
1170 if (local_err) {
1171 ret = -EINVAL;
1172 error_propagate(errp, local_err);
1173 QDECREF(options);
1174 goto free_exit;
1175 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001176 }
1177
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001178 if (!bs->drv || !bs->drv->supports_backing) {
1179 ret = -EINVAL;
1180 error_setg(errp, "Driver doesn't support backing files");
1181 QDECREF(options);
1182 goto free_exit;
1183 }
1184
Markus Armbrustere4e99862014-10-07 13:59:03 +02001185 backing_hd = bdrv_new();
Fam Zheng8d24cce2014-05-23 21:29:45 +08001186
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001187 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1188 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001189 }
1190
Max Reitzf67503e2014-02-18 18:33:05 +01001191 assert(bs->backing_hd == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001192 ret = bdrv_open_inherit(&backing_hd,
1193 *backing_filename ? backing_filename : NULL,
1194 NULL, options, 0, bs, &child_backing,
1195 NULL, &local_err);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001196 if (ret < 0) {
Fam Zheng8d24cce2014-05-23 21:29:45 +08001197 bdrv_unref(backing_hd);
1198 backing_hd = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001199 bs->open_flags |= BDRV_O_NO_BACKING;
Fam Zhengb04b6b62013-11-08 11:26:49 +08001200 error_setg(errp, "Could not open backing file: %s",
1201 error_get_pretty(local_err));
1202 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001203 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001204 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001205 bdrv_set_backing_hd(bs, backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001206
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001207free_exit:
1208 g_free(backing_filename);
1209 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001210}
1211
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001212/*
Max Reitzda557aa2013-12-20 19:28:11 +01001213 * Opens a disk image whose options are given as BlockdevRef in another block
1214 * device's options.
1215 *
Max Reitzda557aa2013-12-20 19:28:11 +01001216 * If allow_none is true, no image will be opened if filename is false and no
1217 * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1218 *
1219 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1220 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1221 * itself, all options starting with "${bdref_key}." are considered part of the
1222 * BlockdevRef.
1223 *
1224 * The BlockdevRef will be removed from the options QDict.
Max Reitzf67503e2014-02-18 18:33:05 +01001225 *
1226 * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
Max Reitzda557aa2013-12-20 19:28:11 +01001227 */
1228int bdrv_open_image(BlockDriverState **pbs, const char *filename,
Kevin Wolff3930ed2015-04-08 13:43:47 +02001229 QDict *options, const char *bdref_key,
1230 BlockDriverState* parent, const BdrvChildRole *child_role,
Max Reitzf7d9fd82014-02-18 18:33:12 +01001231 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001232{
1233 QDict *image_options;
1234 int ret;
1235 char *bdref_key_dot;
1236 const char *reference;
1237
Max Reitzf67503e2014-02-18 18:33:05 +01001238 assert(pbs);
1239 assert(*pbs == NULL);
1240
Max Reitzda557aa2013-12-20 19:28:11 +01001241 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1242 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1243 g_free(bdref_key_dot);
1244
1245 reference = qdict_get_try_str(options, bdref_key);
1246 if (!filename && !reference && !qdict_size(image_options)) {
1247 if (allow_none) {
1248 ret = 0;
1249 } else {
1250 error_setg(errp, "A block device must be specified for \"%s\"",
1251 bdref_key);
1252 ret = -EINVAL;
1253 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001254 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001255 goto done;
1256 }
1257
Kevin Wolff3930ed2015-04-08 13:43:47 +02001258 ret = bdrv_open_inherit(pbs, filename, reference, image_options, 0,
1259 parent, child_role, NULL, errp);
Max Reitzda557aa2013-12-20 19:28:11 +01001260
1261done:
1262 qdict_del(options, bdref_key);
1263 return ret;
1264}
1265
Chen Gang6b8aeca2014-06-23 23:28:23 +08001266int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001267{
1268 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001269 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001270 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001271 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001272 QDict *snapshot_options;
1273 BlockDriverState *bs_snapshot;
1274 Error *local_err;
1275 int ret;
1276
1277 /* if snapshot, we create a temporary backing file and open it
1278 instead of opening 'filename' directly */
1279
1280 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001281 total_size = bdrv_getlength(bs);
1282 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001283 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001284 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001285 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001286 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001287
1288 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001289 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001290 if (ret < 0) {
1291 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001292 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001293 }
1294
Max Reitzef810432014-12-02 18:32:42 +01001295 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001296 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001297 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Max Reitzef810432014-12-02 18:32:42 +01001298 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08001299 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001300 if (ret < 0) {
1301 error_setg_errno(errp, -ret, "Could not create temporary overlay "
1302 "'%s': %s", tmp_filename,
1303 error_get_pretty(local_err));
1304 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001305 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001306 }
1307
1308 /* Prepare a new options QDict for the temporary file */
1309 snapshot_options = qdict_new();
1310 qdict_put(snapshot_options, "file.driver",
1311 qstring_from_str("file"));
1312 qdict_put(snapshot_options, "file.filename",
1313 qstring_from_str(tmp_filename));
1314
Markus Armbrustere4e99862014-10-07 13:59:03 +02001315 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001316
1317 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitzef810432014-12-02 18:32:42 +01001318 flags, &bdrv_qcow2, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001319 if (ret < 0) {
1320 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001321 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001322 }
1323
1324 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001325
1326out:
1327 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001328 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001329}
1330
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001331static void bdrv_attach_child(BlockDriverState *parent_bs,
1332 BlockDriverState *child_bs,
1333 const BdrvChildRole *child_role)
1334{
1335 BdrvChild *child = g_new(BdrvChild, 1);
1336 *child = (BdrvChild) {
1337 .bs = child_bs,
1338 .role = child_role,
1339 };
1340
1341 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1342}
1343
Max Reitzda557aa2013-12-20 19:28:11 +01001344/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001345 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001346 *
1347 * options is a QDict of options to pass to the block drivers, or NULL for an
1348 * empty set of options. The reference to the QDict belongs to the block layer
1349 * after the call (even on failure), so if the caller intends to reuse the
1350 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001351 *
1352 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1353 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001354 *
1355 * The reference parameter may be used to specify an existing block device which
1356 * should be opened. If specified, neither options nor a filename may be given,
1357 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001358 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001359static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1360 const char *reference, QDict *options, int flags,
1361 BlockDriverState *parent,
1362 const BdrvChildRole *child_role,
1363 BlockDriver *drv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001364{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001365 int ret;
Max Reitzf67503e2014-02-18 18:33:05 +01001366 BlockDriverState *file = NULL, *bs;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001367 const char *drvname;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001368 Error *local_err = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001369 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001370
Max Reitzf67503e2014-02-18 18:33:05 +01001371 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001372 assert(!child_role || !flags);
1373 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001374
Max Reitzddf56362014-02-18 18:33:06 +01001375 if (reference) {
1376 bool options_non_empty = options ? qdict_size(options) : false;
1377 QDECREF(options);
1378
1379 if (*pbs) {
1380 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1381 "another block device");
1382 return -EINVAL;
1383 }
1384
1385 if (filename || options_non_empty) {
1386 error_setg(errp, "Cannot reference an existing block device with "
1387 "additional options or a new filename");
1388 return -EINVAL;
1389 }
1390
1391 bs = bdrv_lookup_bs(reference, reference, errp);
1392 if (!bs) {
1393 return -ENODEV;
1394 }
1395 bdrv_ref(bs);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001396 if (child_role) {
1397 bdrv_attach_child(parent, bs, child_role);
1398 }
Max Reitzddf56362014-02-18 18:33:06 +01001399 *pbs = bs;
1400 return 0;
1401 }
1402
Max Reitzf67503e2014-02-18 18:33:05 +01001403 if (*pbs) {
1404 bs = *pbs;
1405 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001406 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001407 }
1408
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001409 /* NULL means an empty set of options */
1410 if (options == NULL) {
1411 options = qdict_new();
1412 }
1413
Kevin Wolff3930ed2015-04-08 13:43:47 +02001414 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001415 bs->inherits_from = parent;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001416 flags = child_role->inherit_flags(parent->open_flags);
1417 }
1418
Max Reitz53a29512015-03-19 14:53:16 -04001419 ret = bdrv_fill_options(&options, &filename, &flags, drv, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001420 if (local_err) {
1421 goto fail;
1422 }
1423
Kevin Wolf76c591b2014-06-04 14:19:44 +02001424 /* Find the right image format driver */
1425 drv = NULL;
1426 drvname = qdict_get_try_str(options, "driver");
1427 if (drvname) {
1428 drv = bdrv_find_format(drvname);
1429 qdict_del(options, "driver");
1430 if (!drv) {
1431 error_setg(errp, "Unknown driver: '%s'", drvname);
1432 ret = -EINVAL;
1433 goto fail;
1434 }
1435 }
1436
1437 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001438
Kevin Wolff3930ed2015-04-08 13:43:47 +02001439 bs->open_flags = flags;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001440 bs->options = options;
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001441 options = qdict_clone_shallow(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001442
Kevin Wolff4788ad2014-06-03 16:44:19 +02001443 /* Open image file without format layer */
1444 if ((flags & BDRV_O_PROTOCOL) == 0) {
1445 if (flags & BDRV_O_RDWR) {
1446 flags |= BDRV_O_ALLOW_RDWR;
1447 }
1448 if (flags & BDRV_O_SNAPSHOT) {
1449 snapshot_flags = bdrv_temp_snapshot_flags(flags);
1450 flags = bdrv_backing_flags(flags);
1451 }
1452
1453 assert(file == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001454 bs->open_flags = flags;
Kevin Wolff4788ad2014-06-03 16:44:19 +02001455 ret = bdrv_open_image(&file, filename, options, "file",
Kevin Wolff3930ed2015-04-08 13:43:47 +02001456 bs, &child_file, true, &local_err);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001457 if (ret < 0) {
Max Reitz5469a2a2014-02-18 18:33:10 +01001458 goto fail;
1459 }
1460 }
1461
Kevin Wolf76c591b2014-06-04 14:19:44 +02001462 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001463 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001464 if (!drv && file) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001465 ret = find_image_format(file, filename, &drv, &local_err);
1466 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001467 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001468 }
Kevin Wolf76c591b2014-06-04 14:19:44 +02001469 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001470 error_setg(errp, "Must specify either driver or file");
1471 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001472 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001473 }
1474
Max Reitz53a29512015-03-19 14:53:16 -04001475 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1476 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1477 /* file must be NULL if a protocol BDS is about to be created
1478 * (the inverse results in an error message from bdrv_open_common()) */
1479 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1480
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001481 /* Open the image */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001482 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001483 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001484 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001485 }
1486
Max Reitz2a05cbe2013-12-20 19:28:10 +01001487 if (file && (bs->file != file)) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001488 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001489 file = NULL;
1490 }
1491
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001492 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001493 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001494 QDict *backing_options;
1495
Benoît Canet5726d872013-09-25 13:30:01 +02001496 qdict_extract_subqdict(options, &backing_options, "backing.");
Max Reitz34b5d2c2013-09-05 14:45:29 +02001497 ret = bdrv_open_backing_file(bs, backing_options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001498 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001499 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001500 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001501 }
1502
Max Reitz91af7012014-07-18 20:24:56 +02001503 bdrv_refresh_filename(bs);
1504
Kevin Wolfb9988752014-04-03 12:09:34 +02001505 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1506 * temporary snapshot afterwards. */
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001507 if (snapshot_flags) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001508 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001509 if (local_err) {
Kevin Wolfb9988752014-04-03 12:09:34 +02001510 goto close_and_fail;
1511 }
1512 }
1513
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001514 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001515 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001516 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001517 if (flags & BDRV_O_PROTOCOL) {
1518 error_setg(errp, "Block protocol '%s' doesn't support the option "
1519 "'%s'", drv->format_name, entry->key);
1520 } else {
1521 error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1522 "support the option '%s'", drv->format_name,
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001523 bdrv_get_device_name(bs), entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001524 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001525
1526 ret = -EINVAL;
1527 goto close_and_fail;
1528 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001529
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001530 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001531 if (bs->blk) {
1532 blk_dev_change_media_cb(bs->blk, true);
1533 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001534 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1535 && !runstate_check(RUN_STATE_INMIGRATE)
1536 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1537 error_setg(errp,
1538 "Guest must be stopped for opening of encrypted image");
1539 ret = -EBUSY;
1540 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001541 }
1542
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001543 if (child_role) {
1544 bdrv_attach_child(parent, bs, child_role);
1545 }
1546
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001547 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001548 *pbs = bs;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001549 return 0;
1550
Kevin Wolf8bfea152014-04-11 19:16:36 +02001551fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001552 if (file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001553 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001554 }
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001555 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001556 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001557 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001558 if (!*pbs) {
1559 /* If *pbs is NULL, a new BDS has been created in this function and
1560 needs to be freed now. Otherwise, it does not need to be closed,
1561 since it has not really been opened yet. */
1562 bdrv_unref(bs);
1563 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001564 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001565 error_propagate(errp, local_err);
1566 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001567 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001568
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001569close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001570 /* See fail path, but now the BDS has to be always closed */
1571 if (*pbs) {
1572 bdrv_close(bs);
1573 } else {
1574 bdrv_unref(bs);
1575 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001576 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001577 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001578 error_propagate(errp, local_err);
1579 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001580 return ret;
1581}
1582
Kevin Wolff3930ed2015-04-08 13:43:47 +02001583int bdrv_open(BlockDriverState **pbs, const char *filename,
1584 const char *reference, QDict *options, int flags,
1585 BlockDriver *drv, Error **errp)
1586{
1587 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
1588 NULL, drv, errp);
1589}
1590
Jeff Codye971aa12012-09-20 15:13:19 -04001591typedef struct BlockReopenQueueEntry {
1592 bool prepared;
1593 BDRVReopenState state;
1594 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1595} BlockReopenQueueEntry;
1596
1597/*
1598 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1599 * reopen of multiple devices.
1600 *
1601 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1602 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1603 * be created and initialized. This newly created BlockReopenQueue should be
1604 * passed back in for subsequent calls that are intended to be of the same
1605 * atomic 'set'.
1606 *
1607 * bs is the BlockDriverState to add to the reopen queue.
1608 *
1609 * flags contains the open flags for the associated bs
1610 *
1611 * returns a pointer to bs_queue, which is either the newly allocated
1612 * bs_queue, or the existing bs_queue being used.
1613 *
1614 */
1615BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1616 BlockDriverState *bs, int flags)
1617{
1618 assert(bs != NULL);
1619
1620 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001621 BdrvChild *child;
1622
Jeff Codye971aa12012-09-20 15:13:19 -04001623 if (bs_queue == NULL) {
1624 bs_queue = g_new0(BlockReopenQueue, 1);
1625 QSIMPLEQ_INIT(bs_queue);
1626 }
1627
Kevin Wolff1f25a22014-04-25 19:04:55 +02001628 /* bdrv_open() masks this flag out */
1629 flags &= ~BDRV_O_PROTOCOL;
1630
Kevin Wolf67251a32015-04-09 18:54:04 +02001631 QLIST_FOREACH(child, &bs->children, next) {
1632 int child_flags;
1633
1634 if (child->bs->inherits_from != bs) {
1635 continue;
1636 }
1637
1638 child_flags = child->role->inherit_flags(flags);
1639 bdrv_reopen_queue(bs_queue, child->bs, child_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001640 }
1641
1642 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1643 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1644
1645 bs_entry->state.bs = bs;
1646 bs_entry->state.flags = flags;
1647
1648 return bs_queue;
1649}
1650
1651/*
1652 * Reopen multiple BlockDriverStates atomically & transactionally.
1653 *
1654 * The queue passed in (bs_queue) must have been built up previous
1655 * via bdrv_reopen_queue().
1656 *
1657 * Reopens all BDS specified in the queue, with the appropriate
1658 * flags. All devices are prepared for reopen, and failure of any
1659 * device will cause all device changes to be abandonded, and intermediate
1660 * data cleaned up.
1661 *
1662 * If all devices prepare successfully, then the changes are committed
1663 * to all devices.
1664 *
1665 */
1666int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1667{
1668 int ret = -1;
1669 BlockReopenQueueEntry *bs_entry, *next;
1670 Error *local_err = NULL;
1671
1672 assert(bs_queue != NULL);
1673
1674 bdrv_drain_all();
1675
1676 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1677 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1678 error_propagate(errp, local_err);
1679 goto cleanup;
1680 }
1681 bs_entry->prepared = true;
1682 }
1683
1684 /* If we reach this point, we have success and just need to apply the
1685 * changes
1686 */
1687 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1688 bdrv_reopen_commit(&bs_entry->state);
1689 }
1690
1691 ret = 0;
1692
1693cleanup:
1694 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1695 if (ret && bs_entry->prepared) {
1696 bdrv_reopen_abort(&bs_entry->state);
1697 }
1698 g_free(bs_entry);
1699 }
1700 g_free(bs_queue);
1701 return ret;
1702}
1703
1704
1705/* Reopen a single BlockDriverState with the specified flags. */
1706int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1707{
1708 int ret = -1;
1709 Error *local_err = NULL;
1710 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1711
1712 ret = bdrv_reopen_multiple(queue, &local_err);
1713 if (local_err != NULL) {
1714 error_propagate(errp, local_err);
1715 }
1716 return ret;
1717}
1718
1719
1720/*
1721 * Prepares a BlockDriverState for reopen. All changes are staged in the
1722 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1723 * the block driver layer .bdrv_reopen_prepare()
1724 *
1725 * bs is the BlockDriverState to reopen
1726 * flags are the new open flags
1727 * queue is the reopen queue
1728 *
1729 * Returns 0 on success, non-zero on error. On error errp will be set
1730 * as well.
1731 *
1732 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1733 * It is the responsibility of the caller to then call the abort() or
1734 * commit() for any other BDS that have been left in a prepare() state
1735 *
1736 */
1737int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1738 Error **errp)
1739{
1740 int ret = -1;
1741 Error *local_err = NULL;
1742 BlockDriver *drv;
1743
1744 assert(reopen_state != NULL);
1745 assert(reopen_state->bs->drv != NULL);
1746 drv = reopen_state->bs->drv;
1747
1748 /* if we are to stay read-only, do not allow permission change
1749 * to r/w */
1750 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1751 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03001752 error_setg(errp, "Node '%s' is read only",
1753 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001754 goto error;
1755 }
1756
1757
1758 ret = bdrv_flush(reopen_state->bs);
1759 if (ret) {
1760 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1761 strerror(-ret));
1762 goto error;
1763 }
1764
1765 if (drv->bdrv_reopen_prepare) {
1766 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1767 if (ret) {
1768 if (local_err != NULL) {
1769 error_propagate(errp, local_err);
1770 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04001771 error_setg(errp, "failed while preparing to reopen image '%s'",
1772 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04001773 }
1774 goto error;
1775 }
1776 } else {
1777 /* It is currently mandatory to have a bdrv_reopen_prepare()
1778 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03001779 error_setg(errp, "Block format '%s' used by node '%s' "
1780 "does not support reopening files", drv->format_name,
1781 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001782 ret = -1;
1783 goto error;
1784 }
1785
1786 ret = 0;
1787
1788error:
1789 return ret;
1790}
1791
1792/*
1793 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1794 * makes them final by swapping the staging BlockDriverState contents into
1795 * the active BlockDriverState contents.
1796 */
1797void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1798{
1799 BlockDriver *drv;
1800
1801 assert(reopen_state != NULL);
1802 drv = reopen_state->bs->drv;
1803 assert(drv != NULL);
1804
1805 /* If there are any driver level actions to take */
1806 if (drv->bdrv_reopen_commit) {
1807 drv->bdrv_reopen_commit(reopen_state);
1808 }
1809
1810 /* set BDS specific flags now */
1811 reopen_state->bs->open_flags = reopen_state->flags;
1812 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1813 BDRV_O_CACHE_WB);
1814 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01001815
Kevin Wolf3baca892014-07-16 17:48:16 +02001816 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04001817}
1818
1819/*
1820 * Abort the reopen, and delete and free the staged changes in
1821 * reopen_state
1822 */
1823void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1824{
1825 BlockDriver *drv;
1826
1827 assert(reopen_state != NULL);
1828 drv = reopen_state->bs->drv;
1829 assert(drv != NULL);
1830
1831 if (drv->bdrv_reopen_abort) {
1832 drv->bdrv_reopen_abort(reopen_state);
1833 }
1834}
1835
1836
bellardfc01f7e2003-06-30 10:03:06 +00001837void bdrv_close(BlockDriverState *bs)
1838{
Max Reitz33384422014-06-20 21:57:33 +02001839 BdrvAioNotifier *ban, *ban_next;
1840
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001841 if (bs->job) {
1842 block_job_cancel_sync(bs->job);
1843 }
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02001844 bdrv_drain_all(); /* complete I/O */
1845 bdrv_flush(bs);
1846 bdrv_drain_all(); /* in case flush left pending I/O */
Paolo Bonzinid7d512f2012-08-23 11:20:36 +02001847 notifier_list_notify(&bs->close_notifiers, bs);
Kevin Wolf7094f122012-04-11 11:06:37 +02001848
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001849 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001850 BdrvChild *child, *next;
1851
1852 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001853 if (child->bs->inherits_from == bs) {
1854 child->bs->inherits_from = NULL;
1855 }
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001856 QLIST_REMOVE(child, next);
1857 g_free(child);
1858 }
1859
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001860 if (bs->backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001861 BlockDriverState *backing_hd = bs->backing_hd;
1862 bdrv_set_backing_hd(bs, NULL);
1863 bdrv_unref(backing_hd);
Stefan Hajnoczi557df6a2010-04-17 10:49:06 +01001864 }
bellardea2384d2004-08-01 21:59:26 +00001865 bs->drv->bdrv_close(bs);
Anthony Liguori7267c092011-08-20 22:09:37 -05001866 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00001867 bs->opaque = NULL;
1868 bs->drv = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00001869 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02001870 bs->backing_file[0] = '\0';
1871 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02001872 bs->total_sectors = 0;
1873 bs->encrypted = 0;
1874 bs->valid_key = 0;
1875 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08001876 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001877 QDECREF(bs->options);
1878 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02001879 QDECREF(bs->full_open_options);
1880 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00001881
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001882 if (bs->file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001883 bdrv_unref(bs->file);
Paolo Bonzini0ac93772012-05-08 16:51:44 +02001884 bs->file = NULL;
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001885 }
bellardb3380822004-03-14 21:38:54 +00001886 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001887
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001888 if (bs->blk) {
1889 blk_dev_change_media_cb(bs->blk, false);
1890 }
Pavel Hrdina9ca11152012-08-09 12:44:48 +02001891
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001892 /*throttling disk I/O limits*/
1893 if (bs->io_limits_enabled) {
1894 bdrv_io_limits_disable(bs);
1895 }
Max Reitz33384422014-06-20 21:57:33 +02001896
1897 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1898 g_free(ban);
1899 }
1900 QLIST_INIT(&bs->aio_notifiers);
bellardb3380822004-03-14 21:38:54 +00001901}
1902
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001903void bdrv_close_all(void)
1904{
1905 BlockDriverState *bs;
1906
Benoît Canetdc364f42014-01-23 21:31:32 +01001907 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001908 AioContext *aio_context = bdrv_get_aio_context(bs);
1909
1910 aio_context_acquire(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001911 bdrv_close(bs);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001912 aio_context_release(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001913 }
1914}
1915
Benoît Canetdc364f42014-01-23 21:31:32 +01001916/* make a BlockDriverState anonymous by removing from bdrv_state and
1917 * graph_bdrv_state list.
Ryan Harperd22b2f42011-03-29 20:51:47 -05001918 Also, NULL terminate the device_name to prevent double remove */
1919void bdrv_make_anon(BlockDriverState *bs)
1920{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001921 /*
1922 * Take care to remove bs from bdrv_states only when it's actually
1923 * in it. Note that bs->device_list.tqe_prev is initially null,
1924 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1925 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1926 * resetting it to null on remove.
1927 */
1928 if (bs->device_list.tqe_prev) {
Benoît Canetdc364f42014-01-23 21:31:32 +01001929 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001930 bs->device_list.tqe_prev = NULL;
Ryan Harperd22b2f42011-03-29 20:51:47 -05001931 }
Benoît Canetdc364f42014-01-23 21:31:32 +01001932 if (bs->node_name[0] != '\0') {
1933 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1934 }
1935 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05001936}
1937
Paolo Bonzinie023b2e2012-05-08 16:51:41 +02001938static void bdrv_rebind(BlockDriverState *bs)
1939{
1940 if (bs->drv && bs->drv->bdrv_rebind) {
1941 bs->drv->bdrv_rebind(bs);
1942 }
1943}
1944
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001945static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
1946 BlockDriverState *bs_src)
1947{
1948 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001949
1950 /* dev info */
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01001951 bs_dest->guest_block_size = bs_src->guest_block_size;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001952 bs_dest->copy_on_read = bs_src->copy_on_read;
1953
1954 bs_dest->enable_write_cache = bs_src->enable_write_cache;
1955
Benoît Canetcc0681c2013-09-02 14:14:39 +02001956 /* i/o throttled req */
Alberto Garcia76f4afb2015-06-08 18:17:44 +02001957 bs_dest->throttle_state = bs_src->throttle_state,
1958 bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
1959 bs_dest->pending_reqs[0] = bs_src->pending_reqs[0];
1960 bs_dest->pending_reqs[1] = bs_src->pending_reqs[1];
1961 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
1962 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
1963 memcpy(&bs_dest->round_robin,
1964 &bs_src->round_robin,
1965 sizeof(bs_dest->round_robin));
Benoît Canet0e5b0a22015-06-08 18:17:41 +02001966 memcpy(&bs_dest->throttle_timers,
1967 &bs_src->throttle_timers,
1968 sizeof(ThrottleTimers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001969
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001970 /* r/w error */
1971 bs_dest->on_read_error = bs_src->on_read_error;
1972 bs_dest->on_write_error = bs_src->on_write_error;
1973
1974 /* i/o status */
1975 bs_dest->iostatus_enabled = bs_src->iostatus_enabled;
1976 bs_dest->iostatus = bs_src->iostatus;
1977
1978 /* dirty bitmap */
Fam Zhenge4654d22013-11-13 18:29:43 +08001979 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001980
Fam Zheng9fcb0252013-08-23 09:14:46 +08001981 /* reference count */
1982 bs_dest->refcnt = bs_src->refcnt;
1983
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001984 /* job */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001985 bs_dest->job = bs_src->job;
1986
1987 /* keep the same entry in bdrv_states */
Benoît Canetdc364f42014-01-23 21:31:32 +01001988 bs_dest->device_list = bs_src->device_list;
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02001989 bs_dest->blk = bs_src->blk;
1990
Fam Zhengfbe40ff2014-05-23 21:29:42 +08001991 memcpy(bs_dest->op_blockers, bs_src->op_blockers,
1992 sizeof(bs_dest->op_blockers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02001993}
1994
1995/*
1996 * Swap bs contents for two image chains while they are live,
1997 * while keeping required fields on the BlockDriverState that is
1998 * actually attached to a device.
1999 *
2000 * This will modify the BlockDriverState fields, and swap contents
2001 * between bs_new and bs_old. Both bs_new and bs_old are modified.
2002 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002003 * bs_new must not be attached to a BlockBackend.
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002004 *
2005 * This function does not create any image files.
2006 */
2007void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
2008{
2009 BlockDriverState tmp;
Kevin Wolfbddcec32015-04-09 18:47:50 +02002010 BdrvChild *child;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002011
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002012 bdrv_drain(bs_new);
2013 bdrv_drain(bs_old);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002014
Benoît Canet90ce8a02014-03-05 23:48:29 +01002015 /* The code needs to swap the node_name but simply swapping node_list won't
2016 * work so first remove the nodes from the graph list, do the swap then
2017 * insert them back if needed.
2018 */
2019 if (bs_new->node_name[0] != '\0') {
2020 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2021 }
2022 if (bs_old->node_name[0] != '\0') {
2023 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2024 }
2025
Alberto Garciadb628332015-06-08 18:17:45 +02002026 /* If the BlockDriverState is part of a throttling group acquire
2027 * its lock since we're going to mess with the protected fields.
2028 * Otherwise there's no need to worry since no one else can touch
2029 * them. */
2030 if (bs_old->throttle_state) {
2031 throttle_group_lock(bs_old);
2032 }
2033
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002034 /* bs_new must be unattached and shouldn't have anything fancy enabled */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002035 assert(!bs_new->blk);
Fam Zhenge4654d22013-11-13 18:29:43 +08002036 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002037 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002038 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002039 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002040 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002041
2042 tmp = *bs_new;
2043 *bs_new = *bs_old;
2044 *bs_old = tmp;
2045
2046 /* there are some fields that should not be swapped, move them back */
2047 bdrv_move_feature_fields(&tmp, bs_old);
2048 bdrv_move_feature_fields(bs_old, bs_new);
2049 bdrv_move_feature_fields(bs_new, &tmp);
2050
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002051 /* bs_new must remain unattached */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002052 assert(!bs_new->blk);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002053
2054 /* Check a few fields that should remain attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002055 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002056 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002057 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002058 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002059
Alberto Garciadb628332015-06-08 18:17:45 +02002060 /* Release the ThrottleGroup lock */
2061 if (bs_old->throttle_state) {
2062 throttle_group_unlock(bs_old);
2063 }
2064
Benoît Canet90ce8a02014-03-05 23:48:29 +01002065 /* insert the nodes back into the graph node list if needed */
2066 if (bs_new->node_name[0] != '\0') {
2067 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2068 }
2069 if (bs_old->node_name[0] != '\0') {
2070 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2071 }
2072
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002073 /*
2074 * Update lh_first.le_prev for non-empty lists.
2075 *
2076 * The head of the op blocker list doesn't change because it is moved back
2077 * in bdrv_move_feature_fields().
2078 */
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002079 assert(QLIST_EMPTY(&bs_old->tracked_requests));
2080 assert(QLIST_EMPTY(&bs_new->tracked_requests));
2081
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002082 QLIST_FIX_HEAD_PTR(&bs_new->children, next);
2083 QLIST_FIX_HEAD_PTR(&bs_old->children, next);
2084
Kevin Wolfbddcec32015-04-09 18:47:50 +02002085 /* Update references in bs->opaque and children */
2086 QLIST_FOREACH(child, &bs_old->children, next) {
2087 if (child->bs->inherits_from == bs_new) {
2088 child->bs->inherits_from = bs_old;
2089 }
2090 }
2091 QLIST_FOREACH(child, &bs_new->children, next) {
2092 if (child->bs->inherits_from == bs_old) {
2093 child->bs->inherits_from = bs_new;
2094 }
2095 }
2096
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002097 bdrv_rebind(bs_new);
2098 bdrv_rebind(bs_old);
2099}
2100
Jeff Cody8802d1f2012-02-28 15:54:06 -05002101/*
2102 * Add new bs contents at the top of an image chain while the chain is
2103 * live, while keeping required fields on the top layer.
2104 *
2105 * This will modify the BlockDriverState fields, and swap contents
2106 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2107 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002108 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002109 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002110 * This function does not create any image files.
2111 */
2112void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2113{
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002114 bdrv_swap(bs_new, bs_top);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002115
2116 /* The contents of 'tmp' will become bs_top, as we are
2117 * swapping bs_new and bs_top contents. */
Fam Zheng8d24cce2014-05-23 21:29:45 +08002118 bdrv_set_backing_hd(bs_top, bs_new);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002119 bdrv_attach_child(bs_top, bs_new, &child_backing);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002120}
2121
Fam Zheng4f6fd342013-08-23 09:14:47 +08002122static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002123{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002124 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002125 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002126 assert(!bs->refcnt);
Fam Zhenge4654d22013-11-13 18:29:43 +08002127 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
Markus Armbruster18846de2010-06-29 16:58:30 +02002128
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002129 bdrv_close(bs);
2130
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002131 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002132 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002133
Anthony Liguori7267c092011-08-20 22:09:37 -05002134 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002135}
2136
aliguorie97fc192009-04-21 23:11:50 +00002137/*
2138 * Run consistency checks on an image
2139 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002140 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002141 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002142 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002143 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002144int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002145{
Max Reitz908bcd52014-08-07 22:47:55 +02002146 if (bs->drv == NULL) {
2147 return -ENOMEDIUM;
2148 }
aliguorie97fc192009-04-21 23:11:50 +00002149 if (bs->drv->bdrv_check == NULL) {
2150 return -ENOTSUP;
2151 }
2152
Kevin Wolfe076f332010-06-29 11:43:13 +02002153 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002154 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002155}
2156
Kevin Wolf8a426612010-07-16 17:17:01 +02002157#define COMMIT_BUF_SECTORS 2048
2158
bellard33e39632003-07-06 17:15:21 +00002159/* commit COW file into the raw image */
2160int bdrv_commit(BlockDriverState *bs)
2161{
bellard19cb3732006-08-19 11:45:59 +00002162 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002163 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002164 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002165 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002166 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002167
bellard19cb3732006-08-19 11:45:59 +00002168 if (!drv)
2169 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002170
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002171 if (!bs->backing_hd) {
2172 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002173 }
2174
Fam Zhengbb000212014-09-11 13:14:00 +08002175 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2176 bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002177 return -EBUSY;
2178 }
2179
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002180 ro = bs->backing_hd->read_only;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002181 open_flags = bs->backing_hd->open_flags;
2182
2183 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002184 if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2185 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002186 }
bellard33e39632003-07-06 17:15:21 +00002187 }
bellardea2384d2004-08-01 21:59:26 +00002188
Jeff Cody72706ea2014-01-24 09:02:35 -05002189 length = bdrv_getlength(bs);
2190 if (length < 0) {
2191 ret = length;
2192 goto ro_cleanup;
2193 }
2194
2195 backing_length = bdrv_getlength(bs->backing_hd);
2196 if (backing_length < 0) {
2197 ret = backing_length;
2198 goto ro_cleanup;
2199 }
2200
2201 /* If our top snapshot is larger than the backing file image,
2202 * grow the backing file image if possible. If not possible,
2203 * we must return an error */
2204 if (length > backing_length) {
2205 ret = bdrv_truncate(bs->backing_hd, length);
2206 if (ret < 0) {
2207 goto ro_cleanup;
2208 }
2209 }
2210
2211 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002212
2213 /* qemu_try_blockalign() for bs will choose an alignment that works for
2214 * bs->backing_hd as well, so no need to compare the alignment manually. */
2215 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2216 if (buf == NULL) {
2217 ret = -ENOMEM;
2218 goto ro_cleanup;
2219 }
bellardea2384d2004-08-01 21:59:26 +00002220
Kevin Wolf8a426612010-07-16 17:17:01 +02002221 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002222 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2223 if (ret < 0) {
2224 goto ro_cleanup;
2225 }
2226 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002227 ret = bdrv_read(bs, sector, buf, n);
2228 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002229 goto ro_cleanup;
2230 }
2231
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002232 ret = bdrv_write(bs->backing_hd, sector, buf, n);
2233 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002234 goto ro_cleanup;
2235 }
bellardea2384d2004-08-01 21:59:26 +00002236 }
2237 }
bellard95389c82005-12-18 18:28:15 +00002238
Christoph Hellwig1d449522010-01-17 12:32:30 +01002239 if (drv->bdrv_make_empty) {
2240 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002241 if (ret < 0) {
2242 goto ro_cleanup;
2243 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002244 bdrv_flush(bs);
2245 }
bellard95389c82005-12-18 18:28:15 +00002246
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002247 /*
2248 * Make sure all data we wrote to the backing device is actually
2249 * stable on disk.
2250 */
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002251 if (bs->backing_hd) {
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002252 bdrv_flush(bs->backing_hd);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002253 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002254
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002255 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002256ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002257 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002258
2259 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002260 /* ignoring error return here */
2261 bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002262 }
2263
Christoph Hellwig1d449522010-01-17 12:32:30 +01002264 return ret;
bellard33e39632003-07-06 17:15:21 +00002265}
2266
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002267int bdrv_commit_all(void)
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002268{
2269 BlockDriverState *bs;
2270
Benoît Canetdc364f42014-01-23 21:31:32 +01002271 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002272 AioContext *aio_context = bdrv_get_aio_context(bs);
2273
2274 aio_context_acquire(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002275 if (bs->drv && bs->backing_hd) {
2276 int ret = bdrv_commit(bs);
2277 if (ret < 0) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002278 aio_context_release(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002279 return ret;
2280 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002281 }
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002282 aio_context_release(aio_context);
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002283 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002284 return 0;
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002285}
2286
Kevin Wolf756e6732010-01-12 12:55:17 +01002287/*
2288 * Return values:
2289 * 0 - success
2290 * -EINVAL - backing format specified, but no file
2291 * -ENOSPC - can't update the backing file because no space is left in the
2292 * image file header
2293 * -ENOTSUP - format driver doesn't support changing the backing file
2294 */
2295int bdrv_change_backing_file(BlockDriverState *bs,
2296 const char *backing_file, const char *backing_fmt)
2297{
2298 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002299 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002300
Paolo Bonzini5f377792012-04-12 14:01:01 +02002301 /* Backing file format doesn't make sense without a backing file */
2302 if (backing_fmt && !backing_file) {
2303 return -EINVAL;
2304 }
2305
Kevin Wolf756e6732010-01-12 12:55:17 +01002306 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002307 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002308 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002309 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002310 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002311
2312 if (ret == 0) {
2313 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2314 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2315 }
2316 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002317}
2318
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002319/*
2320 * Finds the image layer in the chain that has 'bs' as its backing file.
2321 *
2322 * active is the current topmost image.
2323 *
2324 * Returns NULL if bs is not found in active's image chain,
2325 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002326 *
2327 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002328 */
2329BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2330 BlockDriverState *bs)
2331{
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002332 while (active && bs != active->backing_hd) {
2333 active = active->backing_hd;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002334 }
2335
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002336 return active;
2337}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002338
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002339/* Given a BDS, searches for the base layer. */
2340BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2341{
2342 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002343}
2344
2345typedef struct BlkIntermediateStates {
2346 BlockDriverState *bs;
2347 QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2348} BlkIntermediateStates;
2349
2350
2351/*
2352 * Drops images above 'base' up to and including 'top', and sets the image
2353 * above 'top' to have base as its backing file.
2354 *
2355 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2356 * information in 'bs' can be properly updated.
2357 *
2358 * E.g., this will convert the following chain:
2359 * bottom <- base <- intermediate <- top <- active
2360 *
2361 * to
2362 *
2363 * bottom <- base <- active
2364 *
2365 * It is allowed for bottom==base, in which case it converts:
2366 *
2367 * base <- intermediate <- top <- active
2368 *
2369 * to
2370 *
2371 * base <- active
2372 *
Jeff Cody54e26902014-06-25 15:40:10 -04002373 * If backing_file_str is non-NULL, it will be used when modifying top's
2374 * overlay image metadata.
2375 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002376 * Error conditions:
2377 * if active == top, that is considered an error
2378 *
2379 */
2380int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002381 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002382{
2383 BlockDriverState *intermediate;
2384 BlockDriverState *base_bs = NULL;
2385 BlockDriverState *new_top_bs = NULL;
2386 BlkIntermediateStates *intermediate_state, *next;
2387 int ret = -EIO;
2388
2389 QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2390 QSIMPLEQ_INIT(&states_to_delete);
2391
2392 if (!top->drv || !base->drv) {
2393 goto exit;
2394 }
2395
2396 new_top_bs = bdrv_find_overlay(active, top);
2397
2398 if (new_top_bs == NULL) {
2399 /* we could not find the image above 'top', this is an error */
2400 goto exit;
2401 }
2402
2403 /* special case of new_top_bs->backing_hd already pointing to base - nothing
2404 * to do, no intermediate images */
2405 if (new_top_bs->backing_hd == base) {
2406 ret = 0;
2407 goto exit;
2408 }
2409
2410 intermediate = top;
2411
2412 /* now we will go down through the list, and add each BDS we find
2413 * into our deletion queue, until we hit the 'base'
2414 */
2415 while (intermediate) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002416 intermediate_state = g_new0(BlkIntermediateStates, 1);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002417 intermediate_state->bs = intermediate;
2418 QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2419
2420 if (intermediate->backing_hd == base) {
2421 base_bs = intermediate->backing_hd;
2422 break;
2423 }
2424 intermediate = intermediate->backing_hd;
2425 }
2426 if (base_bs == NULL) {
2427 /* something went wrong, we did not end at the base. safely
2428 * unravel everything, and exit with error */
2429 goto exit;
2430 }
2431
2432 /* success - we can delete the intermediate states, and link top->base */
Jeff Cody54e26902014-06-25 15:40:10 -04002433 backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2434 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002435 base_bs->drv ? base_bs->drv->format_name : "");
2436 if (ret) {
2437 goto exit;
2438 }
Fam Zheng920beae2014-05-23 21:29:46 +08002439 bdrv_set_backing_hd(new_top_bs, base_bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002440
2441 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2442 /* so that bdrv_close() does not recursively close the chain */
Fam Zheng920beae2014-05-23 21:29:46 +08002443 bdrv_set_backing_hd(intermediate_state->bs, NULL);
Fam Zheng4f6fd342013-08-23 09:14:47 +08002444 bdrv_unref(intermediate_state->bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002445 }
2446 ret = 0;
2447
2448exit:
2449 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2450 g_free(intermediate_state);
2451 }
2452 return ret;
2453}
2454
bellard83f64092006-08-01 16:21:11 +00002455/**
bellard83f64092006-08-01 16:21:11 +00002456 * Truncate file to 'offset' bytes (needed only for file protocols)
2457 */
2458int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2459{
2460 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002461 int ret;
bellard83f64092006-08-01 16:21:11 +00002462 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002463 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002464 if (!drv->bdrv_truncate)
2465 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002466 if (bs->read_only)
2467 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002468
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002469 ret = drv->bdrv_truncate(bs, offset);
2470 if (ret == 0) {
2471 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002472 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002473 if (bs->blk) {
2474 blk_dev_resize_cb(bs->blk);
2475 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002476 }
2477 return ret;
bellard83f64092006-08-01 16:21:11 +00002478}
2479
2480/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002481 * Length of a allocated file in bytes. Sparse files are counted by actual
2482 * allocated space. Return < 0 if error or unknown.
2483 */
2484int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2485{
2486 BlockDriver *drv = bs->drv;
2487 if (!drv) {
2488 return -ENOMEDIUM;
2489 }
2490 if (drv->bdrv_get_allocated_file_size) {
2491 return drv->bdrv_get_allocated_file_size(bs);
2492 }
2493 if (bs->file) {
2494 return bdrv_get_allocated_file_size(bs->file);
2495 }
2496 return -ENOTSUP;
2497}
2498
2499/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002500 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002501 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002502int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002503{
2504 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002505
bellard83f64092006-08-01 16:21:11 +00002506 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002507 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002508
Kevin Wolfb94a2612013-10-29 12:18:58 +01002509 if (drv->has_variable_length) {
2510 int ret = refresh_total_sectors(bs, bs->total_sectors);
2511 if (ret < 0) {
2512 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002513 }
bellard83f64092006-08-01 16:21:11 +00002514 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002515 return bs->total_sectors;
2516}
2517
2518/**
2519 * Return length in bytes on success, -errno on error.
2520 * The length is always a multiple of BDRV_SECTOR_SIZE.
2521 */
2522int64_t bdrv_getlength(BlockDriverState *bs)
2523{
2524 int64_t ret = bdrv_nb_sectors(bs);
2525
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002526 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002527 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002528}
2529
bellard19cb3732006-08-19 11:45:59 +00002530/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002531void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002532{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002533 int64_t nb_sectors = bdrv_nb_sectors(bs);
2534
2535 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002536}
bellardcf989512004-02-16 21:56:36 +00002537
Paolo Bonziniff06f5f2012-09-28 17:22:54 +02002538void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
2539 BlockdevOnError on_write_error)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002540{
2541 bs->on_read_error = on_read_error;
2542 bs->on_write_error = on_write_error;
2543}
2544
Paolo Bonzini1ceee0d2012-09-28 17:22:56 +02002545BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002546{
2547 return is_read ? bs->on_read_error : bs->on_write_error;
2548}
2549
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002550BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
2551{
2552 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
2553
2554 switch (on_err) {
2555 case BLOCKDEV_ON_ERROR_ENOSPC:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002556 return (error == ENOSPC) ?
2557 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002558 case BLOCKDEV_ON_ERROR_STOP:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002559 return BLOCK_ERROR_ACTION_STOP;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002560 case BLOCKDEV_ON_ERROR_REPORT:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002561 return BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002562 case BLOCKDEV_ON_ERROR_IGNORE:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002563 return BLOCK_ERROR_ACTION_IGNORE;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002564 default:
2565 abort();
2566 }
2567}
2568
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002569static void send_qmp_error_event(BlockDriverState *bs,
2570 BlockErrorAction action,
2571 bool is_read, int error)
2572{
Peter Maydell573742a2014-10-10 20:33:03 +01002573 IoOperationType optype;
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002574
Peter Maydell573742a2014-10-10 20:33:03 +01002575 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
2576 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002577 bdrv_iostatus_is_enabled(bs),
Luiz Capitulino624ff572014-09-11 10:25:48 -04002578 error == ENOSPC, strerror(error),
2579 &error_abort);
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002580}
2581
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002582/* This is done by device models because, while the block layer knows
2583 * about the error, it does not know whether an operation comes from
2584 * the device or the block layer (from a job, for example).
2585 */
2586void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
2587 bool is_read, int error)
2588{
2589 assert(error >= 0);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002590
Wenchao Xiaa5895692014-06-18 08:43:30 +02002591 if (action == BLOCK_ERROR_ACTION_STOP) {
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002592 /* First set the iostatus, so that "info block" returns an iostatus
2593 * that matches the events raised so far (an additional error iostatus
2594 * is fine, but not a lost one).
2595 */
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002596 bdrv_iostatus_set_err(bs, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002597
2598 /* Then raise the request to stop the VM and the event.
2599 * qemu_system_vmstop_request_prepare has two effects. First,
2600 * it ensures that the STOP event always comes after the
2601 * BLOCK_IO_ERROR event. Second, it ensures that even if management
2602 * can observe the STOP event and do a "cont" before the STOP
2603 * event is issued, the VM will not stop. In this case, vm_start()
2604 * also ensures that the STOP/RESUME pair of events is emitted.
2605 */
2606 qemu_system_vmstop_request_prepare();
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002607 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002608 qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
2609 } else {
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002610 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002611 }
2612}
2613
bellardb3380822004-03-14 21:38:54 +00002614int bdrv_is_read_only(BlockDriverState *bs)
2615{
2616 return bs->read_only;
2617}
2618
ths985a03b2007-12-24 16:10:43 +00002619int bdrv_is_sg(BlockDriverState *bs)
2620{
2621 return bs->sg;
2622}
2623
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002624int bdrv_enable_write_cache(BlockDriverState *bs)
2625{
2626 return bs->enable_write_cache;
2627}
2628
Paolo Bonzini425b0142012-06-06 00:04:52 +02002629void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2630{
2631 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002632
2633 /* so a reopen() will preserve wce */
2634 if (wce) {
2635 bs->open_flags |= BDRV_O_CACHE_WB;
2636 } else {
2637 bs->open_flags &= ~BDRV_O_CACHE_WB;
2638 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002639}
2640
bellardea2384d2004-08-01 21:59:26 +00002641int bdrv_is_encrypted(BlockDriverState *bs)
2642{
2643 if (bs->backing_hd && bs->backing_hd->encrypted)
2644 return 1;
2645 return bs->encrypted;
2646}
2647
aliguoric0f4ce72009-03-05 23:01:01 +00002648int bdrv_key_required(BlockDriverState *bs)
2649{
2650 BlockDriverState *backing_hd = bs->backing_hd;
2651
2652 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
2653 return 1;
2654 return (bs->encrypted && !bs->valid_key);
2655}
2656
bellardea2384d2004-08-01 21:59:26 +00002657int bdrv_set_key(BlockDriverState *bs, const char *key)
2658{
2659 int ret;
2660 if (bs->backing_hd && bs->backing_hd->encrypted) {
2661 ret = bdrv_set_key(bs->backing_hd, key);
2662 if (ret < 0)
2663 return ret;
2664 if (!bs->encrypted)
2665 return 0;
2666 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002667 if (!bs->encrypted) {
2668 return -EINVAL;
2669 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2670 return -ENOMEDIUM;
2671 }
aliguoric0f4ce72009-03-05 23:01:01 +00002672 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002673 if (ret < 0) {
2674 bs->valid_key = 0;
2675 } else if (!bs->valid_key) {
2676 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002677 if (bs->blk) {
2678 /* call the change callback now, we skipped it on open */
2679 blk_dev_change_media_cb(bs->blk, true);
2680 }
aliguoribb5fc202009-03-05 23:01:15 +00002681 }
aliguoric0f4ce72009-03-05 23:01:01 +00002682 return ret;
bellardea2384d2004-08-01 21:59:26 +00002683}
2684
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002685/*
2686 * Provide an encryption key for @bs.
2687 * If @key is non-null:
2688 * If @bs is not encrypted, fail.
2689 * Else if the key is invalid, fail.
2690 * Else set @bs's key to @key, replacing the existing key, if any.
2691 * If @key is null:
2692 * If @bs is encrypted and still lacks a key, fail.
2693 * Else do nothing.
2694 * On failure, store an error object through @errp if non-null.
2695 */
2696void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2697{
2698 if (key) {
2699 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002700 error_setg(errp, "Node '%s' is not encrypted",
2701 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002702 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002703 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002704 }
2705 } else {
2706 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002707 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2708 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002709 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002710 bdrv_get_encrypted_filename(bs));
2711 }
2712 }
2713}
2714
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002715const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002716{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002717 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002718}
2719
Stefan Hajnocziada42402014-08-27 12:08:55 +01002720static int qsort_strcmp(const void *a, const void *b)
2721{
2722 return strcmp(a, b);
2723}
2724
ths5fafdf22007-09-16 21:08:06 +00002725void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002726 void *opaque)
2727{
2728 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002729 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002730 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002731 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002732
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002733 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002734 if (drv->format_name) {
2735 bool found = false;
2736 int i = count;
2737 while (formats && i && !found) {
2738 found = !strcmp(formats[--i], drv->format_name);
2739 }
2740
2741 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002742 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002743 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002744 }
2745 }
bellardea2384d2004-08-01 21:59:26 +00002746 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002747
2748 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2749
2750 for (i = 0; i < count; i++) {
2751 it(opaque, formats[i]);
2752 }
2753
Jeff Codye855e4f2014-04-28 18:29:54 -04002754 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002755}
2756
Benoît Canetdc364f42014-01-23 21:31:32 +01002757/* This function is to find a node in the bs graph */
2758BlockDriverState *bdrv_find_node(const char *node_name)
2759{
2760 BlockDriverState *bs;
2761
2762 assert(node_name);
2763
2764 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2765 if (!strcmp(node_name, bs->node_name)) {
2766 return bs;
2767 }
2768 }
2769 return NULL;
2770}
2771
Benoît Canetc13163f2014-01-23 21:31:34 +01002772/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002773BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002774{
2775 BlockDeviceInfoList *list, *entry;
2776 BlockDriverState *bs;
2777
2778 list = NULL;
2779 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002780 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2781 if (!info) {
2782 qapi_free_BlockDeviceInfoList(list);
2783 return NULL;
2784 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002785 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002786 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002787 entry->next = list;
2788 list = entry;
2789 }
2790
2791 return list;
2792}
2793
Benoît Canet12d3ba82014-01-23 21:31:35 +01002794BlockDriverState *bdrv_lookup_bs(const char *device,
2795 const char *node_name,
2796 Error **errp)
2797{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002798 BlockBackend *blk;
2799 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002800
Benoît Canet12d3ba82014-01-23 21:31:35 +01002801 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002802 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002803
Markus Armbruster7f06d472014-10-07 13:59:12 +02002804 if (blk) {
2805 return blk_bs(blk);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002806 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002807 }
2808
Benoît Canetdd67fa52014-02-12 17:15:06 +01002809 if (node_name) {
2810 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002811
Benoît Canetdd67fa52014-02-12 17:15:06 +01002812 if (bs) {
2813 return bs;
2814 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002815 }
2816
Benoît Canetdd67fa52014-02-12 17:15:06 +01002817 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2818 device ? device : "",
2819 node_name ? node_name : "");
2820 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002821}
2822
Jeff Cody5a6684d2014-06-25 15:40:09 -04002823/* If 'base' is in the same chain as 'top', return true. Otherwise,
2824 * return false. If either argument is NULL, return false. */
2825bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2826{
2827 while (top && top != base) {
2828 top = top->backing_hd;
2829 }
2830
2831 return top != NULL;
2832}
2833
Fam Zheng04df7652014-10-31 11:32:54 +08002834BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2835{
2836 if (!bs) {
2837 return QTAILQ_FIRST(&graph_bdrv_states);
2838 }
2839 return QTAILQ_NEXT(bs, node_list);
2840}
2841
Markus Armbruster2f399b02010-06-02 18:55:20 +02002842BlockDriverState *bdrv_next(BlockDriverState *bs)
2843{
2844 if (!bs) {
2845 return QTAILQ_FIRST(&bdrv_states);
2846 }
Benoît Canetdc364f42014-01-23 21:31:32 +01002847 return QTAILQ_NEXT(bs, device_list);
Markus Armbruster2f399b02010-06-02 18:55:20 +02002848}
2849
Fam Zheng20a9e772014-10-31 11:32:55 +08002850const char *bdrv_get_node_name(const BlockDriverState *bs)
2851{
2852 return bs->node_name;
2853}
2854
Markus Armbruster7f06d472014-10-07 13:59:12 +02002855/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002856const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002857{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002858 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002859}
2860
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002861/* This can be used to identify nodes that might not have a device
2862 * name associated. Since node and device names live in the same
2863 * namespace, the result is unambiguous. The exception is if both are
2864 * absent, then this returns an empty (non-null) string. */
2865const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2866{
2867 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2868}
2869
Markus Armbrusterc8433282012-06-05 16:49:24 +02002870int bdrv_get_flags(BlockDriverState *bs)
2871{
2872 return bs->open_flags;
2873}
2874
Peter Lieven3ac21622013-06-28 12:47:42 +02002875int bdrv_has_zero_init_1(BlockDriverState *bs)
2876{
2877 return 1;
2878}
2879
Kevin Wolff2feebb2010-04-14 17:30:35 +02002880int bdrv_has_zero_init(BlockDriverState *bs)
2881{
2882 assert(bs->drv);
2883
Paolo Bonzini11212d82013-09-04 19:00:27 +02002884 /* If BS is a copy on write image, it is initialized to
2885 the contents of the base image, which may not be zeroes. */
2886 if (bs->backing_hd) {
2887 return 0;
2888 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002889 if (bs->drv->bdrv_has_zero_init) {
2890 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002891 }
2892
Peter Lieven3ac21622013-06-28 12:47:42 +02002893 /* safe default */
2894 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002895}
2896
Peter Lieven4ce78692013-10-24 12:06:54 +02002897bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2898{
2899 BlockDriverInfo bdi;
2900
2901 if (bs->backing_hd) {
2902 return false;
2903 }
2904
2905 if (bdrv_get_info(bs, &bdi) == 0) {
2906 return bdi.unallocated_blocks_are_zero;
2907 }
2908
2909 return false;
2910}
2911
2912bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2913{
2914 BlockDriverInfo bdi;
2915
2916 if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
2917 return false;
2918 }
2919
2920 if (bdrv_get_info(bs, &bdi) == 0) {
2921 return bdi.can_write_zeroes_with_unmap;
2922 }
2923
2924 return false;
2925}
2926
aliguori045df332009-03-05 23:00:48 +00002927const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2928{
2929 if (bs->backing_hd && bs->backing_hd->encrypted)
2930 return bs->backing_file;
2931 else if (bs->encrypted)
2932 return bs->filename;
2933 else
2934 return NULL;
2935}
2936
ths5fafdf22007-09-16 21:08:06 +00002937void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002938 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002939{
Kevin Wolf3574c602011-10-26 11:02:11 +02002940 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002941}
2942
bellardfaea38e2006-08-05 21:31:00 +00002943int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2944{
2945 BlockDriver *drv = bs->drv;
2946 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002947 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00002948 if (!drv->bdrv_get_info)
2949 return -ENOTSUP;
2950 memset(bdi, 0, sizeof(*bdi));
2951 return drv->bdrv_get_info(bs, bdi);
2952}
2953
Max Reitzeae041f2013-10-09 10:46:16 +02002954ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2955{
2956 BlockDriver *drv = bs->drv;
2957 if (drv && drv->bdrv_get_specific_info) {
2958 return drv->bdrv_get_specific_info(bs);
2959 }
2960 return NULL;
2961}
2962
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002963void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
2964{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002965 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002966 return;
2967 }
2968
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002969 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01002970}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002971
Kevin Wolf41c695c2012-12-06 14:32:58 +01002972int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
2973 const char *tag)
2974{
2975 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
2976 bs = bs->file;
2977 }
2978
2979 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
2980 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
2981 }
2982
2983 return -ENOTSUP;
2984}
2985
Fam Zheng4cc70e92013-11-20 10:01:54 +08002986int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
2987{
2988 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
2989 bs = bs->file;
2990 }
2991
2992 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
2993 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
2994 }
2995
2996 return -ENOTSUP;
2997}
2998
Kevin Wolf41c695c2012-12-06 14:32:58 +01002999int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3000{
Max Reitz938789e2014-03-10 23:44:08 +01003001 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf41c695c2012-12-06 14:32:58 +01003002 bs = bs->file;
3003 }
3004
3005 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3006 return bs->drv->bdrv_debug_resume(bs, tag);
3007 }
3008
3009 return -ENOTSUP;
3010}
3011
3012bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3013{
3014 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3015 bs = bs->file;
3016 }
3017
3018 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3019 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3020 }
3021
3022 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003023}
3024
Blue Swirl199630b2010-07-25 20:49:34 +00003025int bdrv_is_snapshot(BlockDriverState *bs)
3026{
3027 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3028}
3029
Jeff Codyb1b1d782012-10-16 15:49:09 -04003030/* backing_file can either be relative, or absolute, or a protocol. If it is
3031 * relative, it must be relative to the chain. So, passing in bs->filename
3032 * from a BDS as backing_file should not be done, as that may be relative to
3033 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003034BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3035 const char *backing_file)
3036{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003037 char *filename_full = NULL;
3038 char *backing_file_full = NULL;
3039 char *filename_tmp = NULL;
3040 int is_protocol = 0;
3041 BlockDriverState *curr_bs = NULL;
3042 BlockDriverState *retval = NULL;
3043
3044 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003045 return NULL;
3046 }
3047
Jeff Codyb1b1d782012-10-16 15:49:09 -04003048 filename_full = g_malloc(PATH_MAX);
3049 backing_file_full = g_malloc(PATH_MAX);
3050 filename_tmp = g_malloc(PATH_MAX);
3051
3052 is_protocol = path_has_protocol(backing_file);
3053
3054 for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
3055
3056 /* If either of the filename paths is actually a protocol, then
3057 * compare unmodified paths; otherwise make paths relative */
3058 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3059 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3060 retval = curr_bs->backing_hd;
3061 break;
3062 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003063 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003064 /* If not an absolute filename path, make it relative to the current
3065 * image's filename path */
3066 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3067 backing_file);
3068
3069 /* We are going to compare absolute pathnames */
3070 if (!realpath(filename_tmp, filename_full)) {
3071 continue;
3072 }
3073
3074 /* We need to make sure the backing filename we are comparing against
3075 * is relative to the current image filename (or absolute) */
3076 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3077 curr_bs->backing_file);
3078
3079 if (!realpath(filename_tmp, backing_file_full)) {
3080 continue;
3081 }
3082
3083 if (strcmp(backing_file_full, filename_full) == 0) {
3084 retval = curr_bs->backing_hd;
3085 break;
3086 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003087 }
3088 }
3089
Jeff Codyb1b1d782012-10-16 15:49:09 -04003090 g_free(filename_full);
3091 g_free(backing_file_full);
3092 g_free(filename_tmp);
3093 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003094}
3095
Benoît Canetf198fd12012-08-02 10:22:47 +02003096int bdrv_get_backing_file_depth(BlockDriverState *bs)
3097{
3098 if (!bs->drv) {
3099 return 0;
3100 }
3101
3102 if (!bs->backing_hd) {
3103 return 0;
3104 }
3105
3106 return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3107}
3108
bellardea2384d2004-08-01 21:59:26 +00003109void bdrv_init(void)
3110{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003111 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003112}
pbrookce1a14d2006-08-07 02:38:06 +00003113
Markus Armbrustereb852012009-10-27 18:41:44 +01003114void bdrv_init_with_whitelist(void)
3115{
3116 use_bdrv_whitelist = 1;
3117 bdrv_init();
3118}
3119
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003120void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003121{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003122 Error *local_err = NULL;
3123 int ret;
3124
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003125 if (!bs->drv) {
3126 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003127 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003128
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003129 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3130 return;
3131 }
3132 bs->open_flags &= ~BDRV_O_INCOMING;
3133
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003134 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003135 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003136 } else if (bs->file) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003137 bdrv_invalidate_cache(bs->file, &local_err);
3138 }
3139 if (local_err) {
3140 error_propagate(errp, local_err);
3141 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003142 }
3143
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003144 ret = refresh_total_sectors(bs, bs->total_sectors);
3145 if (ret < 0) {
3146 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3147 return;
3148 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003149}
3150
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003151void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003152{
3153 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003154 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003155
Benoît Canetdc364f42014-01-23 21:31:32 +01003156 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003157 AioContext *aio_context = bdrv_get_aio_context(bs);
3158
3159 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003160 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003161 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003162 if (local_err) {
3163 error_propagate(errp, local_err);
3164 return;
3165 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003166 }
3167}
3168
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003169/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003170/* removable device support */
3171
3172/**
3173 * Return TRUE if the media is present
3174 */
3175int bdrv_is_inserted(BlockDriverState *bs)
3176{
3177 BlockDriver *drv = bs->drv;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003178
bellard19cb3732006-08-19 11:45:59 +00003179 if (!drv)
3180 return 0;
3181 if (!drv->bdrv_is_inserted)
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003182 return 1;
3183 return drv->bdrv_is_inserted(bs);
bellard19cb3732006-08-19 11:45:59 +00003184}
3185
3186/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003187 * Return whether the media changed since the last call to this
3188 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003189 */
3190int bdrv_media_changed(BlockDriverState *bs)
3191{
3192 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003193
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003194 if (drv && drv->bdrv_media_changed) {
3195 return drv->bdrv_media_changed(bs);
3196 }
3197 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003198}
3199
3200/**
3201 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3202 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003203void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003204{
3205 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003206 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003207
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003208 if (drv && drv->bdrv_eject) {
3209 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003210 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003211
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003212 device_name = bdrv_get_device_name(bs);
3213 if (device_name[0] != '\0') {
3214 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003215 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003216 }
bellard19cb3732006-08-19 11:45:59 +00003217}
3218
bellard19cb3732006-08-19 11:45:59 +00003219/**
3220 * Lock or unlock the media (if it is locked, the user won't be able
3221 * to eject it manually).
3222 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003223void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003224{
3225 BlockDriver *drv = bs->drv;
3226
Markus Armbruster025e8492011-09-06 18:58:47 +02003227 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003228
Markus Armbruster025e8492011-09-06 18:58:47 +02003229 if (drv && drv->bdrv_lock_medium) {
3230 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003231 }
3232}
ths985a03b2007-12-24 16:10:43 +00003233
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003234void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003235{
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003236 bs->guest_block_size = align;
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003237}
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003238
Fam Zheng0db6e542015-04-17 19:49:50 -04003239BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3240{
3241 BdrvDirtyBitmap *bm;
3242
3243 assert(name);
3244 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3245 if (bm->name && !strcmp(name, bm->name)) {
3246 return bm;
3247 }
3248 }
3249 return NULL;
3250}
3251
John Snow20dca812015-04-17 19:50:02 -04003252void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
Fam Zheng0db6e542015-04-17 19:49:50 -04003253{
John Snow9bd2b082015-04-17 19:49:57 -04003254 assert(!bdrv_dirty_bitmap_frozen(bitmap));
Fam Zheng0db6e542015-04-17 19:49:50 -04003255 g_free(bitmap->name);
3256 bitmap->name = NULL;
3257}
3258
3259BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
John Snow5fba6c02015-04-17 19:49:51 -04003260 uint32_t granularity,
Fam Zheng0db6e542015-04-17 19:49:50 -04003261 const char *name,
Fam Zhengb8afb522014-04-16 09:34:30 +08003262 Error **errp)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003263{
3264 int64_t bitmap_size;
Fam Zhenge4654d22013-11-13 18:29:43 +08003265 BdrvDirtyBitmap *bitmap;
John Snow5fba6c02015-04-17 19:49:51 -04003266 uint32_t sector_granularity;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003267
Paolo Bonzini50717e92013-01-21 17:09:45 +01003268 assert((granularity & (granularity - 1)) == 0);
3269
Fam Zheng0db6e542015-04-17 19:49:50 -04003270 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3271 error_setg(errp, "Bitmap already exists: %s", name);
3272 return NULL;
3273 }
John Snow5fba6c02015-04-17 19:49:51 -04003274 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3275 assert(sector_granularity);
Markus Armbruster57322b72014-06-26 13:23:22 +02003276 bitmap_size = bdrv_nb_sectors(bs);
Fam Zhengb8afb522014-04-16 09:34:30 +08003277 if (bitmap_size < 0) {
3278 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3279 errno = -bitmap_size;
3280 return NULL;
3281 }
Markus Armbruster5839e532014-08-19 10:31:08 +02003282 bitmap = g_new0(BdrvDirtyBitmap, 1);
John Snow5fba6c02015-04-17 19:49:51 -04003283 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
John Snowe74e6b72015-04-17 19:49:59 -04003284 bitmap->size = bitmap_size;
Fam Zheng0db6e542015-04-17 19:49:50 -04003285 bitmap->name = g_strdup(name);
John Snowb8e6fb72015-04-17 19:49:56 -04003286 bitmap->disabled = false;
Fam Zhenge4654d22013-11-13 18:29:43 +08003287 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3288 return bitmap;
3289}
3290
John Snow9bd2b082015-04-17 19:49:57 -04003291bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3292{
3293 return bitmap->successor;
3294}
3295
John Snowb8e6fb72015-04-17 19:49:56 -04003296bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3297{
John Snow9bd2b082015-04-17 19:49:57 -04003298 return !(bitmap->disabled || bitmap->successor);
3299}
3300
John Snow9abe3bd2015-05-12 15:53:01 -04003301DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3302{
3303 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3304 return DIRTY_BITMAP_STATUS_FROZEN;
3305 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3306 return DIRTY_BITMAP_STATUS_DISABLED;
3307 } else {
3308 return DIRTY_BITMAP_STATUS_ACTIVE;
3309 }
3310}
3311
John Snow9bd2b082015-04-17 19:49:57 -04003312/**
3313 * Create a successor bitmap destined to replace this bitmap after an operation.
3314 * Requires that the bitmap is not frozen and has no successor.
3315 */
3316int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3317 BdrvDirtyBitmap *bitmap, Error **errp)
3318{
3319 uint64_t granularity;
3320 BdrvDirtyBitmap *child;
3321
3322 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3323 error_setg(errp, "Cannot create a successor for a bitmap that is "
3324 "currently frozen");
3325 return -1;
3326 }
3327 assert(!bitmap->successor);
3328
3329 /* Create an anonymous successor */
3330 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3331 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3332 if (!child) {
3333 return -1;
3334 }
3335
3336 /* Successor will be on or off based on our current state. */
3337 child->disabled = bitmap->disabled;
3338
3339 /* Install the successor and freeze the parent */
3340 bitmap->successor = child;
3341 return 0;
3342}
3343
3344/**
3345 * For a bitmap with a successor, yield our name to the successor,
3346 * delete the old bitmap, and return a handle to the new bitmap.
3347 */
3348BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3349 BdrvDirtyBitmap *bitmap,
3350 Error **errp)
3351{
3352 char *name;
3353 BdrvDirtyBitmap *successor = bitmap->successor;
3354
3355 if (successor == NULL) {
3356 error_setg(errp, "Cannot relinquish control if "
3357 "there's no successor present");
3358 return NULL;
3359 }
3360
3361 name = bitmap->name;
3362 bitmap->name = NULL;
3363 successor->name = name;
3364 bitmap->successor = NULL;
3365 bdrv_release_dirty_bitmap(bs, bitmap);
3366
3367 return successor;
3368}
3369
3370/**
3371 * In cases of failure where we can no longer safely delete the parent,
3372 * we may wish to re-join the parent and child/successor.
3373 * The merged parent will be un-frozen, but not explicitly re-enabled.
3374 */
3375BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3376 BdrvDirtyBitmap *parent,
3377 Error **errp)
3378{
3379 BdrvDirtyBitmap *successor = parent->successor;
3380
3381 if (!successor) {
3382 error_setg(errp, "Cannot reclaim a successor when none is present");
3383 return NULL;
3384 }
3385
3386 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3387 error_setg(errp, "Merging of parent and successor bitmap failed");
3388 return NULL;
3389 }
3390 bdrv_release_dirty_bitmap(bs, successor);
3391 parent->successor = NULL;
3392
3393 return parent;
John Snowb8e6fb72015-04-17 19:49:56 -04003394}
3395
John Snowce1ffea2015-04-17 19:50:03 -04003396/**
3397 * Truncates _all_ bitmaps attached to a BDS.
3398 */
3399static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3400{
3401 BdrvDirtyBitmap *bitmap;
3402 uint64_t size = bdrv_nb_sectors(bs);
3403
3404 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snow06207b02015-06-10 13:24:54 -04003405 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowce1ffea2015-04-17 19:50:03 -04003406 hbitmap_truncate(bitmap->bitmap, size);
John Snow5270b6a2015-06-08 16:49:15 -04003407 bitmap->size = size;
John Snowce1ffea2015-04-17 19:50:03 -04003408 }
3409}
3410
Fam Zhenge4654d22013-11-13 18:29:43 +08003411void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3412{
3413 BdrvDirtyBitmap *bm, *next;
3414 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3415 if (bm == bitmap) {
John Snow9bd2b082015-04-17 19:49:57 -04003416 assert(!bdrv_dirty_bitmap_frozen(bm));
Fam Zhenge4654d22013-11-13 18:29:43 +08003417 QLIST_REMOVE(bitmap, list);
3418 hbitmap_free(bitmap->bitmap);
Fam Zheng0db6e542015-04-17 19:49:50 -04003419 g_free(bitmap->name);
Fam Zhenge4654d22013-11-13 18:29:43 +08003420 g_free(bitmap);
3421 return;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003422 }
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003423 }
3424}
3425
John Snowb8e6fb72015-04-17 19:49:56 -04003426void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3427{
John Snow9bd2b082015-04-17 19:49:57 -04003428 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003429 bitmap->disabled = true;
3430}
3431
3432void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3433{
John Snow9bd2b082015-04-17 19:49:57 -04003434 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003435 bitmap->disabled = false;
3436}
3437
Fam Zheng21b56832013-11-13 18:29:44 +08003438BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3439{
3440 BdrvDirtyBitmap *bm;
3441 BlockDirtyInfoList *list = NULL;
3442 BlockDirtyInfoList **plist = &list;
3443
3444 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
Markus Armbruster5839e532014-08-19 10:31:08 +02003445 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3446 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
John Snow20dca812015-04-17 19:50:02 -04003447 info->count = bdrv_get_dirty_count(bm);
John Snow592fdd02015-04-17 19:49:53 -04003448 info->granularity = bdrv_dirty_bitmap_granularity(bm);
Fam Zheng0db6e542015-04-17 19:49:50 -04003449 info->has_name = !!bm->name;
3450 info->name = g_strdup(bm->name);
John Snow9abe3bd2015-05-12 15:53:01 -04003451 info->status = bdrv_dirty_bitmap_status(bm);
Fam Zheng21b56832013-11-13 18:29:44 +08003452 entry->value = info;
3453 *plist = entry;
3454 plist = &entry->next;
3455 }
3456
3457 return list;
3458}
3459
Fam Zhenge4654d22013-11-13 18:29:43 +08003460int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003461{
Fam Zhenge4654d22013-11-13 18:29:43 +08003462 if (bitmap) {
3463 return hbitmap_get(bitmap->bitmap, sector);
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003464 } else {
3465 return 0;
3466 }
3467}
3468
John Snow341ebc22015-04-17 19:49:52 -04003469/**
3470 * Chooses a default granularity based on the existing cluster size,
3471 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3472 * is no cluster size information available.
3473 */
3474uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3475{
3476 BlockDriverInfo bdi;
3477 uint32_t granularity;
3478
3479 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3480 granularity = MAX(4096, bdi.cluster_size);
3481 granularity = MIN(65536, granularity);
3482 } else {
3483 granularity = 65536;
3484 }
3485
3486 return granularity;
3487}
3488
John Snow592fdd02015-04-17 19:49:53 -04003489uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3490{
3491 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3492}
3493
John Snow20dca812015-04-17 19:50:02 -04003494void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003495{
Fam Zhenge4654d22013-11-13 18:29:43 +08003496 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
Paolo Bonzini1755da12012-10-18 16:49:18 +02003497}
3498
John Snow20dca812015-04-17 19:50:02 -04003499void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003500 int64_t cur_sector, int nr_sectors)
3501{
John Snowb8e6fb72015-04-17 19:49:56 -04003502 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003503 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3504}
3505
John Snow20dca812015-04-17 19:50:02 -04003506void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003507 int64_t cur_sector, int nr_sectors)
3508{
John Snowb8e6fb72015-04-17 19:49:56 -04003509 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003510 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3511}
3512
John Snowe74e6b72015-04-17 19:49:59 -04003513void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3514{
3515 assert(bdrv_dirty_bitmap_enabled(bitmap));
3516 hbitmap_reset(bitmap->bitmap, 0, bitmap->size);
3517}
3518
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003519void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3520 int nr_sectors)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003521{
Fam Zhenge4654d22013-11-13 18:29:43 +08003522 BdrvDirtyBitmap *bitmap;
3523 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003524 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3525 continue;
3526 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003527 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
Paolo Bonzini8f0720e2013-01-21 17:09:41 +01003528 }
Liran Schouraaa0eb72010-01-26 10:31:48 +02003529}
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003530
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003531void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
3532 int nr_sectors)
Fam Zhenge4654d22013-11-13 18:29:43 +08003533{
3534 BdrvDirtyBitmap *bitmap;
3535 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003536 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3537 continue;
3538 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003539 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3540 }
3541}
3542
John Snowd58d8452015-04-17 19:49:58 -04003543/**
3544 * Advance an HBitmapIter to an arbitrary offset.
3545 */
3546void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3547{
3548 assert(hbi->hb);
3549 hbitmap_iter_init(hbi, hbi->hb, offset);
3550}
3551
John Snow20dca812015-04-17 19:50:02 -04003552int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
Fam Zhenge4654d22013-11-13 18:29:43 +08003553{
3554 return hbitmap_count(bitmap->bitmap);
3555}
3556
Fam Zheng9fcb0252013-08-23 09:14:46 +08003557/* Get a reference to bs */
3558void bdrv_ref(BlockDriverState *bs)
3559{
3560 bs->refcnt++;
3561}
3562
3563/* Release a previously grabbed reference to bs.
3564 * If after releasing, reference count is zero, the BlockDriverState is
3565 * deleted. */
3566void bdrv_unref(BlockDriverState *bs)
3567{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003568 if (!bs) {
3569 return;
3570 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003571 assert(bs->refcnt > 0);
3572 if (--bs->refcnt == 0) {
3573 bdrv_delete(bs);
3574 }
3575}
3576
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003577struct BdrvOpBlocker {
3578 Error *reason;
3579 QLIST_ENTRY(BdrvOpBlocker) list;
3580};
3581
3582bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3583{
3584 BdrvOpBlocker *blocker;
3585 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3586 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3587 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3588 if (errp) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03003589 error_setg(errp, "Node '%s' is busy: %s",
3590 bdrv_get_device_or_node_name(bs),
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003591 error_get_pretty(blocker->reason));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003592 }
3593 return true;
3594 }
3595 return false;
3596}
3597
3598void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3599{
3600 BdrvOpBlocker *blocker;
3601 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3602
Markus Armbruster5839e532014-08-19 10:31:08 +02003603 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003604 blocker->reason = reason;
3605 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3606}
3607
3608void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3609{
3610 BdrvOpBlocker *blocker, *next;
3611 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3612 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3613 if (blocker->reason == reason) {
3614 QLIST_REMOVE(blocker, list);
3615 g_free(blocker);
3616 }
3617 }
3618}
3619
3620void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3621{
3622 int i;
3623 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3624 bdrv_op_block(bs, i, reason);
3625 }
3626}
3627
3628void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3629{
3630 int i;
3631 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3632 bdrv_op_unblock(bs, i, reason);
3633 }
3634}
3635
3636bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3637{
3638 int i;
3639
3640 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3641 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3642 return false;
3643 }
3644 }
3645 return true;
3646}
3647
Luiz Capitulino28a72822011-09-26 17:43:50 -03003648void bdrv_iostatus_enable(BlockDriverState *bs)
3649{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003650 bs->iostatus_enabled = true;
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003651 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003652}
3653
3654/* The I/O status is only enabled if the drive explicitly
3655 * enables it _and_ the VM is configured to stop on errors */
3656bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
3657{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003658 return (bs->iostatus_enabled &&
Paolo Bonzini92aa5c62012-09-28 17:22:55 +02003659 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
3660 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP ||
3661 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
Luiz Capitulino28a72822011-09-26 17:43:50 -03003662}
3663
3664void bdrv_iostatus_disable(BlockDriverState *bs)
3665{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003666 bs->iostatus_enabled = false;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003667}
3668
3669void bdrv_iostatus_reset(BlockDriverState *bs)
3670{
3671 if (bdrv_iostatus_is_enabled(bs)) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003672 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Paolo Bonzini3bd293c2012-10-18 16:49:27 +02003673 if (bs->job) {
3674 block_job_iostatus_reset(bs->job);
3675 }
Luiz Capitulino28a72822011-09-26 17:43:50 -03003676 }
3677}
3678
Luiz Capitulino28a72822011-09-26 17:43:50 -03003679void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
3680{
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02003681 assert(bdrv_iostatus_is_enabled(bs));
3682 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003683 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
3684 BLOCK_DEVICE_IO_STATUS_FAILED;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003685 }
3686}
3687
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003688void bdrv_img_create(const char *filename, const char *fmt,
3689 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003690 char *options, uint64_t img_size, int flags,
3691 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003692{
Chunyan Liu83d05212014-06-05 17:20:51 +08003693 QemuOptsList *create_opts = NULL;
3694 QemuOpts *opts = NULL;
3695 const char *backing_fmt, *backing_file;
3696 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003697 BlockDriver *drv, *proto_drv;
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003698 BlockDriver *backing_drv = NULL;
Max Reitzcc84d902013-09-06 17:14:26 +02003699 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003700 int ret = 0;
3701
3702 /* Find driver and parse its options */
3703 drv = bdrv_find_format(fmt);
3704 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003705 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003706 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003707 }
3708
Max Reitzb65a5e12015-02-05 13:58:12 -05003709 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003710 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003711 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003712 }
3713
Max Reitzc6149722014-12-02 18:32:45 +01003714 if (!drv->create_opts) {
3715 error_setg(errp, "Format driver '%s' does not support image creation",
3716 drv->format_name);
3717 return;
3718 }
3719
3720 if (!proto_drv->create_opts) {
3721 error_setg(errp, "Protocol driver '%s' does not support image creation",
3722 proto_drv->format_name);
3723 return;
3724 }
3725
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003726 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3727 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003728
3729 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003730 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003731 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003732
3733 /* Parse -o options */
3734 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003735 qemu_opts_do_parse(opts, options, NULL, &local_err);
3736 if (local_err) {
3737 error_report_err(local_err);
3738 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003739 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003740 goto out;
3741 }
3742 }
3743
3744 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003745 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003746 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003747 error_setg(errp, "Backing file not supported for file format '%s'",
3748 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003749 goto out;
3750 }
3751 }
3752
3753 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003754 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003755 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003756 error_setg(errp, "Backing file format not supported for file "
3757 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003758 goto out;
3759 }
3760 }
3761
Chunyan Liu83d05212014-06-05 17:20:51 +08003762 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3763 if (backing_file) {
3764 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003765 error_setg(errp, "Error: Trying to create an image with the "
3766 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003767 goto out;
3768 }
3769 }
3770
Chunyan Liu83d05212014-06-05 17:20:51 +08003771 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
3772 if (backing_fmt) {
3773 backing_drv = bdrv_find_format(backing_fmt);
Stefan Hajnoczi96df67d2011-01-24 09:32:20 +00003774 if (!backing_drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003775 error_setg(errp, "Unknown backing file format '%s'",
Chunyan Liu83d05212014-06-05 17:20:51 +08003776 backing_fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003777 goto out;
3778 }
3779 }
3780
3781 // The size for the image must always be specified, with one exception:
3782 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003783 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3784 if (size == -1) {
3785 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003786 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003787 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003788 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003789 int back_flags;
3790
Max Reitz29168012014-11-26 17:20:27 +01003791 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3792 full_backing, PATH_MAX,
3793 &local_err);
3794 if (local_err) {
3795 g_free(full_backing);
3796 goto out;
3797 }
3798
Paolo Bonzini63090da2012-04-12 14:01:03 +02003799 /* backing files always opened read-only */
3800 back_flags =
3801 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003802
Max Reitzf67503e2014-02-18 18:33:05 +01003803 bs = NULL;
Max Reitz29168012014-11-26 17:20:27 +01003804 ret = bdrv_open(&bs, full_backing, NULL, NULL, back_flags,
Max Reitzcc84d902013-09-06 17:14:26 +02003805 backing_drv, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003806 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003807 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003808 goto out;
3809 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003810 size = bdrv_getlength(bs);
3811 if (size < 0) {
3812 error_setg_errno(errp, -size, "Could not get size of '%s'",
3813 backing_file);
3814 bdrv_unref(bs);
3815 goto out;
3816 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003817
Markus Armbruster39101f22015-02-12 16:46:36 +01003818 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003819
3820 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003821 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003822 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003823 goto out;
3824 }
3825 }
3826
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003827 if (!quiet) {
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003828 printf("Formatting '%s', fmt=%s", filename, fmt);
3829 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003830 puts("");
3831 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003832
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003833 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003834
Max Reitzcc84d902013-09-06 17:14:26 +02003835 if (ret == -EFBIG) {
3836 /* This is generally a better message than whatever the driver would
3837 * deliver (especially because of the cluster_size_hint), since that
3838 * is most probably not much different from "image too large". */
3839 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003840 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003841 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003842 }
Max Reitzcc84d902013-09-06 17:14:26 +02003843 error_setg(errp, "The image size is too large for file format '%s'"
3844 "%s", fmt, cluster_size_hint);
3845 error_free(local_err);
3846 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003847 }
3848
3849out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003850 qemu_opts_del(opts);
3851 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003852 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003853 error_propagate(errp, local_err);
3854 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003855}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003856
3857AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3858{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003859 return bs->aio_context;
3860}
3861
3862void bdrv_detach_aio_context(BlockDriverState *bs)
3863{
Max Reitz33384422014-06-20 21:57:33 +02003864 BdrvAioNotifier *baf;
3865
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003866 if (!bs->drv) {
3867 return;
3868 }
3869
Max Reitz33384422014-06-20 21:57:33 +02003870 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3871 baf->detach_aio_context(baf->opaque);
3872 }
3873
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003874 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003875 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003876 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003877 if (bs->drv->bdrv_detach_aio_context) {
3878 bs->drv->bdrv_detach_aio_context(bs);
3879 }
3880 if (bs->file) {
3881 bdrv_detach_aio_context(bs->file);
3882 }
3883 if (bs->backing_hd) {
3884 bdrv_detach_aio_context(bs->backing_hd);
3885 }
3886
3887 bs->aio_context = NULL;
3888}
3889
3890void bdrv_attach_aio_context(BlockDriverState *bs,
3891 AioContext *new_context)
3892{
Max Reitz33384422014-06-20 21:57:33 +02003893 BdrvAioNotifier *ban;
3894
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003895 if (!bs->drv) {
3896 return;
3897 }
3898
3899 bs->aio_context = new_context;
3900
3901 if (bs->backing_hd) {
3902 bdrv_attach_aio_context(bs->backing_hd, new_context);
3903 }
3904 if (bs->file) {
3905 bdrv_attach_aio_context(bs->file, new_context);
3906 }
3907 if (bs->drv->bdrv_attach_aio_context) {
3908 bs->drv->bdrv_attach_aio_context(bs, new_context);
3909 }
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003910 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003911 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003912 }
Max Reitz33384422014-06-20 21:57:33 +02003913
3914 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3915 ban->attached_aio_context(new_context, ban->opaque);
3916 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003917}
3918
3919void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3920{
3921 bdrv_drain_all(); /* ensure there are no in-flight requests */
3922
3923 bdrv_detach_aio_context(bs);
3924
3925 /* This function executes in the old AioContext so acquire the new one in
3926 * case it runs in a different thread.
3927 */
3928 aio_context_acquire(new_context);
3929 bdrv_attach_aio_context(bs, new_context);
3930 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003931}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003932
Max Reitz33384422014-06-20 21:57:33 +02003933void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3934 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3935 void (*detach_aio_context)(void *opaque), void *opaque)
3936{
3937 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3938 *ban = (BdrvAioNotifier){
3939 .attached_aio_context = attached_aio_context,
3940 .detach_aio_context = detach_aio_context,
3941 .opaque = opaque
3942 };
3943
3944 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3945}
3946
3947void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3948 void (*attached_aio_context)(AioContext *,
3949 void *),
3950 void (*detach_aio_context)(void *),
3951 void *opaque)
3952{
3953 BdrvAioNotifier *ban, *ban_next;
3954
3955 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3956 if (ban->attached_aio_context == attached_aio_context &&
3957 ban->detach_aio_context == detach_aio_context &&
3958 ban->opaque == opaque)
3959 {
3960 QLIST_REMOVE(ban, list);
3961 g_free(ban);
3962
3963 return;
3964 }
3965 }
3966
3967 abort();
3968}
3969
Max Reitz77485432014-10-27 11:12:50 +01003970int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
3971 BlockDriverAmendStatusCB *status_cb)
Max Reitz6f176b42013-09-03 10:09:50 +02003972{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003973 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003974 return -ENOTSUP;
3975 }
Max Reitz77485432014-10-27 11:12:50 +01003976 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
Max Reitz6f176b42013-09-03 10:09:50 +02003977}
Benoît Canetf6186f42013-10-02 14:33:48 +02003978
Benoît Canetb5042a32014-03-03 19:11:34 +01003979/* This function will be called by the bdrv_recurse_is_first_non_filter method
3980 * of block filter and by bdrv_is_first_non_filter.
3981 * It is used to test if the given bs is the candidate or recurse more in the
3982 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003983 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003984bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3985 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003986{
Benoît Canetb5042a32014-03-03 19:11:34 +01003987 /* return false if basic checks fails */
3988 if (!bs || !bs->drv) {
3989 return false;
3990 }
3991
3992 /* the code reached a non block filter driver -> check if the bs is
3993 * the same as the candidate. It's the recursion termination condition.
3994 */
3995 if (!bs->drv->is_filter) {
3996 return bs == candidate;
3997 }
3998 /* Down this path the driver is a block filter driver */
3999
4000 /* If the block filter recursion method is defined use it to recurse down
4001 * the node graph.
4002 */
4003 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01004004 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
4005 }
4006
Benoît Canetb5042a32014-03-03 19:11:34 +01004007 /* the driver is a block filter but don't allow to recurse -> return false
4008 */
4009 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01004010}
4011
4012/* This function checks if the candidate is the first non filter bs down it's
4013 * bs chain. Since we don't have pointers to parents it explore all bs chains
4014 * from the top. Some filters can choose not to pass down the recursion.
4015 */
4016bool bdrv_is_first_non_filter(BlockDriverState *candidate)
4017{
4018 BlockDriverState *bs;
4019
4020 /* walk down the bs forest recursively */
4021 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4022 bool perm;
4023
Benoît Canetb5042a32014-03-03 19:11:34 +01004024 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01004025 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01004026
4027 /* candidate is the first non filter */
4028 if (perm) {
4029 return true;
4030 }
4031 }
4032
4033 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02004034}
Benoît Canet09158f02014-06-27 18:25:25 +02004035
4036BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
4037{
4038 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004039 AioContext *aio_context;
4040
Benoît Canet09158f02014-06-27 18:25:25 +02004041 if (!to_replace_bs) {
4042 error_setg(errp, "Node name '%s' not found", node_name);
4043 return NULL;
4044 }
4045
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004046 aio_context = bdrv_get_aio_context(to_replace_bs);
4047 aio_context_acquire(aio_context);
4048
Benoît Canet09158f02014-06-27 18:25:25 +02004049 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004050 to_replace_bs = NULL;
4051 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004052 }
4053
4054 /* We don't want arbitrary node of the BDS chain to be replaced only the top
4055 * most non filter in order to prevent data corruption.
4056 * Another benefit is that this tests exclude backing files which are
4057 * blocked by the backing blockers.
4058 */
4059 if (!bdrv_is_first_non_filter(to_replace_bs)) {
4060 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004061 to_replace_bs = NULL;
4062 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004063 }
4064
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004065out:
4066 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02004067 return to_replace_bs;
4068}
Ming Lei448ad912014-07-04 18:04:33 +08004069
Max Reitz91af7012014-07-18 20:24:56 +02004070static bool append_open_options(QDict *d, BlockDriverState *bs)
4071{
4072 const QDictEntry *entry;
4073 bool found_any = false;
4074
4075 for (entry = qdict_first(bs->options); entry;
4076 entry = qdict_next(bs->options, entry))
4077 {
4078 /* Only take options for this level and exclude all non-driver-specific
4079 * options */
4080 if (!strchr(qdict_entry_key(entry), '.') &&
4081 strcmp(qdict_entry_key(entry), "node-name"))
4082 {
4083 qobject_incref(qdict_entry_value(entry));
4084 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
4085 found_any = true;
4086 }
4087 }
4088
4089 return found_any;
4090}
4091
4092/* Updates the following BDS fields:
4093 * - exact_filename: A filename which may be used for opening a block device
4094 * which (mostly) equals the given BDS (even without any
4095 * other options; so reading and writing must return the same
4096 * results, but caching etc. may be different)
4097 * - full_open_options: Options which, when given when opening a block device
4098 * (without a filename), result in a BDS (mostly)
4099 * equalling the given one
4100 * - filename: If exact_filename is set, it is copied here. Otherwise,
4101 * full_open_options is converted to a JSON object, prefixed with
4102 * "json:" (for use through the JSON pseudo protocol) and put here.
4103 */
4104void bdrv_refresh_filename(BlockDriverState *bs)
4105{
4106 BlockDriver *drv = bs->drv;
4107 QDict *opts;
4108
4109 if (!drv) {
4110 return;
4111 }
4112
4113 /* This BDS's file name will most probably depend on its file's name, so
4114 * refresh that first */
4115 if (bs->file) {
4116 bdrv_refresh_filename(bs->file);
4117 }
4118
4119 if (drv->bdrv_refresh_filename) {
4120 /* Obsolete information is of no use here, so drop the old file name
4121 * information before refreshing it */
4122 bs->exact_filename[0] = '\0';
4123 if (bs->full_open_options) {
4124 QDECREF(bs->full_open_options);
4125 bs->full_open_options = NULL;
4126 }
4127
4128 drv->bdrv_refresh_filename(bs);
4129 } else if (bs->file) {
4130 /* Try to reconstruct valid information from the underlying file */
4131 bool has_open_options;
4132
4133 bs->exact_filename[0] = '\0';
4134 if (bs->full_open_options) {
4135 QDECREF(bs->full_open_options);
4136 bs->full_open_options = NULL;
4137 }
4138
4139 opts = qdict_new();
4140 has_open_options = append_open_options(opts, bs);
4141
4142 /* If no specific options have been given for this BDS, the filename of
4143 * the underlying file should suffice for this one as well */
4144 if (bs->file->exact_filename[0] && !has_open_options) {
4145 strcpy(bs->exact_filename, bs->file->exact_filename);
4146 }
4147 /* Reconstructing the full options QDict is simple for most format block
4148 * drivers, as long as the full options are known for the underlying
4149 * file BDS. The full options QDict of that file BDS should somehow
4150 * contain a representation of the filename, therefore the following
4151 * suffices without querying the (exact_)filename of this BDS. */
4152 if (bs->file->full_open_options) {
4153 qdict_put_obj(opts, "driver",
4154 QOBJECT(qstring_from_str(drv->format_name)));
4155 QINCREF(bs->file->full_open_options);
4156 qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
4157
4158 bs->full_open_options = opts;
4159 } else {
4160 QDECREF(opts);
4161 }
4162 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4163 /* There is no underlying file BDS (at least referenced by BDS.file),
4164 * so the full options QDict should be equal to the options given
4165 * specifically for this block device when it was opened (plus the
4166 * driver specification).
4167 * Because those options don't change, there is no need to update
4168 * full_open_options when it's already set. */
4169
4170 opts = qdict_new();
4171 append_open_options(opts, bs);
4172 qdict_put_obj(opts, "driver",
4173 QOBJECT(qstring_from_str(drv->format_name)));
4174
4175 if (bs->exact_filename[0]) {
4176 /* This may not work for all block protocol drivers (some may
4177 * require this filename to be parsed), but we have to find some
4178 * default solution here, so just include it. If some block driver
4179 * does not support pure options without any filename at all or
4180 * needs some special format of the options QDict, it needs to
4181 * implement the driver-specific bdrv_refresh_filename() function.
4182 */
4183 qdict_put_obj(opts, "filename",
4184 QOBJECT(qstring_from_str(bs->exact_filename)));
4185 }
4186
4187 bs->full_open_options = opts;
4188 }
4189
4190 if (bs->exact_filename[0]) {
4191 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4192 } else if (bs->full_open_options) {
4193 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4194 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4195 qstring_get_str(json));
4196 QDECREF(json);
4197 }
4198}
Benoît Canet5366d0c2014-09-05 15:46:18 +02004199
4200/* This accessor function purpose is to allow the device models to access the
4201 * BlockAcctStats structure embedded inside a BlockDriverState without being
4202 * aware of the BlockDriverState structure layout.
4203 * It will go away when the BlockAcctStats structure will be moved inside
4204 * the device models.
4205 */
4206BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
4207{
4208 return &bs->stats;
4209}