blob: 52fa7f883b61685fc76d14fcf896f0aef9243c9f [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,
Max Reitzce343772015-08-26 19:47:50 +020088 const BdrvChildRole *child_role, Error **errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +020089
John Snowce1ffea2015-04-17 19:50:03 -040090static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs);
Markus Armbrustereb852012009-10-27 18:41:44 +010091/* If non-zero, use only whitelisted block drivers */
92static int use_bdrv_whitelist;
93
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000094#ifdef _WIN32
95static int is_windows_drive_prefix(const char *filename)
96{
97 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
98 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
99 filename[1] == ':');
100}
101
102int is_windows_drive(const char *filename)
103{
104 if (is_windows_drive_prefix(filename) &&
105 filename[2] == '\0')
106 return 1;
107 if (strstart(filename, "\\\\.\\", NULL) ||
108 strstart(filename, "//./", NULL))
109 return 1;
110 return 0;
111}
112#endif
113
Kevin Wolf339064d2013-11-28 10:23:32 +0100114size_t bdrv_opt_mem_align(BlockDriverState *bs)
115{
116 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300117 /* page size or 4k (hdd sector size) should be on the safe side */
118 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100119 }
120
121 return bs->bl.opt_mem_alignment;
122}
123
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300124size_t bdrv_min_mem_align(BlockDriverState *bs)
125{
126 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300127 /* page size or 4k (hdd sector size) should be on the safe side */
128 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300129 }
130
131 return bs->bl.min_mem_alignment;
132}
133
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000134/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100135int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000136{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200137 const char *p;
138
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000139#ifdef _WIN32
140 if (is_windows_drive(path) ||
141 is_windows_drive_prefix(path)) {
142 return 0;
143 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200144 p = path + strcspn(path, ":/\\");
145#else
146 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000147#endif
148
Paolo Bonzini947995c2012-05-08 16:51:48 +0200149 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000150}
151
bellard83f64092006-08-01 16:21:11 +0000152int path_is_absolute(const char *path)
153{
bellard21664422007-01-07 18:22:37 +0000154#ifdef _WIN32
155 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200156 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000157 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200158 }
159 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000160#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200161 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000162#endif
bellard83f64092006-08-01 16:21:11 +0000163}
164
165/* if filename is absolute, just copy it to dest. Otherwise, build a
166 path to it by considering it is relative to base_path. URL are
167 supported. */
168void path_combine(char *dest, int dest_size,
169 const char *base_path,
170 const char *filename)
171{
172 const char *p, *p1;
173 int len;
174
175 if (dest_size <= 0)
176 return;
177 if (path_is_absolute(filename)) {
178 pstrcpy(dest, dest_size, filename);
179 } else {
180 p = strchr(base_path, ':');
181 if (p)
182 p++;
183 else
184 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000185 p1 = strrchr(base_path, '/');
186#ifdef _WIN32
187 {
188 const char *p2;
189 p2 = strrchr(base_path, '\\');
190 if (!p1 || p2 > p1)
191 p1 = p2;
192 }
193#endif
bellard83f64092006-08-01 16:21:11 +0000194 if (p1)
195 p1++;
196 else
197 p1 = base_path;
198 if (p1 > p)
199 p = p1;
200 len = p - base_path;
201 if (len > dest_size - 1)
202 len = dest_size - 1;
203 memcpy(dest, base_path, len);
204 dest[len] = '\0';
205 pstrcat(dest, dest_size, filename);
206 }
207}
208
Max Reitz0a828552014-11-26 17:20:25 +0100209void bdrv_get_full_backing_filename_from_filename(const char *backed,
210 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100211 char *dest, size_t sz,
212 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100213{
Max Reitz9f074292014-11-26 17:20:26 +0100214 if (backing[0] == '\0' || path_has_protocol(backing) ||
215 path_is_absolute(backing))
216 {
Max Reitz0a828552014-11-26 17:20:25 +0100217 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100218 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
219 error_setg(errp, "Cannot use relative backing file names for '%s'",
220 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100221 } else {
222 path_combine(dest, sz, backed, backing);
223 }
224}
225
Max Reitz9f074292014-11-26 17:20:26 +0100226void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
227 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200228{
Max Reitz9f074292014-11-26 17:20:26 +0100229 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
230
231 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
232 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200233}
234
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100235void bdrv_register(BlockDriver *bdrv)
236{
237 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200238
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100239 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000240}
bellardb3380822004-03-14 21:38:54 +0000241
Markus Armbruster7f06d472014-10-07 13:59:12 +0200242BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000243{
Markus Armbruster7f06d472014-10-07 13:59:12 +0200244 BlockDriverState *bs = bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200245
Markus Armbrustere4e99862014-10-07 13:59:03 +0200246 QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
Markus Armbrustere4e99862014-10-07 13:59:03 +0200247 return bs;
248}
249
250BlockDriverState *bdrv_new(void)
251{
252 BlockDriverState *bs;
253 int i;
254
Markus Armbruster5839e532014-08-19 10:31:08 +0200255 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800256 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800257 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
258 QLIST_INIT(&bs->op_blockers[i]);
259 }
Luiz Capitulino28a72822011-09-26 17:43:50 -0300260 bdrv_iostatus_disable(bs);
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200261 notifier_list_init(&bs->close_notifiers);
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200262 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200263 qemu_co_queue_init(&bs->throttled_reqs[0]);
264 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800265 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200266 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200267
bellardb3380822004-03-14 21:38:54 +0000268 return bs;
269}
270
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200271void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
272{
273 notifier_list_add(&bs->close_notifiers, notify);
274}
275
bellardea2384d2004-08-01 21:59:26 +0000276BlockDriver *bdrv_find_format(const char *format_name)
277{
278 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100279 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
280 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000281 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100282 }
bellardea2384d2004-08-01 21:59:26 +0000283 }
284 return NULL;
285}
286
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800287static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100288{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800289 static const char *whitelist_rw[] = {
290 CONFIG_BDRV_RW_WHITELIST
291 };
292 static const char *whitelist_ro[] = {
293 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100294 };
295 const char **p;
296
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800297 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100298 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800299 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100300
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800301 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100302 if (!strcmp(drv->format_name, *p)) {
303 return 1;
304 }
305 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800306 if (read_only) {
307 for (p = whitelist_ro; *p; p++) {
308 if (!strcmp(drv->format_name, *p)) {
309 return 1;
310 }
311 }
312 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100313 return 0;
314}
315
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800316BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
317 bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100318{
319 BlockDriver *drv = bdrv_find_format(format_name);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800320 return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
Markus Armbrustereb852012009-10-27 18:41:44 +0100321}
322
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800323typedef struct CreateCo {
324 BlockDriver *drv;
325 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800326 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800327 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200328 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800329} CreateCo;
330
331static void coroutine_fn bdrv_create_co_entry(void *opaque)
332{
Max Reitzcc84d902013-09-06 17:14:26 +0200333 Error *local_err = NULL;
334 int ret;
335
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800336 CreateCo *cco = opaque;
337 assert(cco->drv);
338
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800339 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100340 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200341 error_propagate(&cco->err, local_err);
342 }
343 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800344}
345
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200346int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800347 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000348{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800349 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200350
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800351 Coroutine *co;
352 CreateCo cco = {
353 .drv = drv,
354 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800355 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800356 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200357 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800358 };
359
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800360 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200361 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300362 ret = -ENOTSUP;
363 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800364 }
365
366 if (qemu_in_coroutine()) {
367 /* Fast-path if already in coroutine context */
368 bdrv_create_co_entry(&cco);
369 } else {
370 co = qemu_coroutine_create(bdrv_create_co_entry);
371 qemu_coroutine_enter(co, &cco);
372 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200373 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800374 }
375 }
376
377 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200378 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100379 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200380 error_propagate(errp, cco.err);
381 } else {
382 error_setg_errno(errp, -ret, "Could not create image");
383 }
384 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800385
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300386out:
387 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800388 return ret;
bellardea2384d2004-08-01 21:59:26 +0000389}
390
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800391int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200392{
393 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200394 Error *local_err = NULL;
395 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200396
Max Reitzb65a5e12015-02-05 13:58:12 -0500397 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200398 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000399 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200400 }
401
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800402 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100403 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200404 error_propagate(errp, local_err);
405 }
406 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200407}
408
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100409/**
410 * Try to get @bs's logical and physical block size.
411 * On success, store them in @bsz struct and return 0.
412 * On failure return -errno.
413 * @bs must not be empty.
414 */
415int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
416{
417 BlockDriver *drv = bs->drv;
418
419 if (drv && drv->bdrv_probe_blocksizes) {
420 return drv->bdrv_probe_blocksizes(bs, bsz);
421 }
422
423 return -ENOTSUP;
424}
425
426/**
427 * Try to get @bs's geometry (cyls, heads, sectors).
428 * On success, store them in @geo struct and return 0.
429 * On failure return -errno.
430 * @bs must not be empty.
431 */
432int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
433{
434 BlockDriver *drv = bs->drv;
435
436 if (drv && drv->bdrv_probe_geometry) {
437 return drv->bdrv_probe_geometry(bs, geo);
438 }
439
440 return -ENOTSUP;
441}
442
Jim Meyeringeba25052012-05-28 09:27:54 +0200443/*
444 * Create a uniquely-named empty temporary file.
445 * Return 0 upon success, otherwise a negative errno value.
446 */
447int get_tmp_filename(char *filename, int size)
448{
bellardd5249392004-08-03 21:14:23 +0000449#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000450 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200451 /* GetTempFileName requires that its output buffer (4th param)
452 have length MAX_PATH or greater. */
453 assert(size >= MAX_PATH);
454 return (GetTempPath(MAX_PATH, temp_dir)
455 && GetTempFileName(temp_dir, "qem", 0, filename)
456 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000457#else
bellardea2384d2004-08-01 21:59:26 +0000458 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000459 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000460 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530461 if (!tmpdir) {
462 tmpdir = "/var/tmp";
463 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200464 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
465 return -EOVERFLOW;
466 }
bellardea2384d2004-08-01 21:59:26 +0000467 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800468 if (fd < 0) {
469 return -errno;
470 }
471 if (close(fd) != 0) {
472 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200473 return -errno;
474 }
475 return 0;
bellardd5249392004-08-03 21:14:23 +0000476#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200477}
bellardea2384d2004-08-01 21:59:26 +0000478
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200479/*
480 * Detect host devices. By convention, /dev/cdrom[N] is always
481 * recognized as a host CDROM.
482 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200483static BlockDriver *find_hdev_driver(const char *filename)
484{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200485 int score_max = 0, score;
486 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200487
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100488 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200489 if (d->bdrv_probe_device) {
490 score = d->bdrv_probe_device(filename);
491 if (score > score_max) {
492 score_max = score;
493 drv = d;
494 }
495 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200496 }
497
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200498 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200499}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200500
Kevin Wolf98289622013-07-10 15:47:39 +0200501BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500502 bool allow_protocol_prefix,
503 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200504{
505 BlockDriver *drv1;
506 char protocol[128];
507 int len;
508 const char *p;
509
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200510 /* TODO Drivers without bdrv_file_open must be specified explicitly */
511
Christoph Hellwig39508e72010-06-23 12:25:17 +0200512 /*
513 * XXX(hch): we really should not let host device detection
514 * override an explicit protocol specification, but moving this
515 * later breaks access to device names with colons in them.
516 * Thanks to the brain-dead persistent naming schemes on udev-
517 * based Linux systems those actually are quite common.
518 */
519 drv1 = find_hdev_driver(filename);
520 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200521 return drv1;
522 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200523
Kevin Wolf98289622013-07-10 15:47:39 +0200524 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100525 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200526 }
Kevin Wolf98289622013-07-10 15:47:39 +0200527
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000528 p = strchr(filename, ':');
529 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200530 len = p - filename;
531 if (len > sizeof(protocol) - 1)
532 len = sizeof(protocol) - 1;
533 memcpy(protocol, filename, len);
534 protocol[len] = '\0';
535 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
536 if (drv1->protocol_name &&
537 !strcmp(drv1->protocol_name, protocol)) {
538 return drv1;
539 }
540 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500541
542 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200543 return NULL;
544}
545
Markus Armbrusterc6684242014-11-20 16:27:10 +0100546/*
547 * Guess image format by probing its contents.
548 * This is not a good idea when your image is raw (CVE-2008-2004), but
549 * we do it anyway for backward compatibility.
550 *
551 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100552 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
553 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100554 * @filename is its filename.
555 *
556 * For all block drivers, call the bdrv_probe() method to get its
557 * probing score.
558 * Return the first block driver with the highest probing score.
559 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100560BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
561 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100562{
563 int score_max = 0, score;
564 BlockDriver *drv = NULL, *d;
565
566 QLIST_FOREACH(d, &bdrv_drivers, list) {
567 if (d->bdrv_probe) {
568 score = d->bdrv_probe(buf, buf_size, filename);
569 if (score > score_max) {
570 score_max = score;
571 drv = d;
572 }
573 }
574 }
575
576 return drv;
577}
578
Kevin Wolff500a6d2012-11-12 17:35:27 +0100579static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200580 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000581{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100582 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100583 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100584 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700585
Kevin Wolf08a00552010-06-01 18:37:31 +0200586 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300587 if (bdrv_is_sg(bs) || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100588 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200589 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700590 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700591
bellard83f64092006-08-01 16:21:11 +0000592 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000593 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200594 error_setg_errno(errp, -ret, "Could not read image for determining its "
595 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200596 *pdrv = NULL;
597 return ret;
bellard83f64092006-08-01 16:21:11 +0000598 }
599
Markus Armbrusterc6684242014-11-20 16:27:10 +0100600 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200601 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200602 error_setg(errp, "Could not determine image format: No compatible "
603 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200604 ret = -ENOENT;
605 }
606 *pdrv = drv;
607 return ret;
bellardea2384d2004-08-01 21:59:26 +0000608}
609
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100610/**
611 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200612 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100613 */
614static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
615{
616 BlockDriver *drv = bs->drv;
617
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700618 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300619 if (bdrv_is_sg(bs))
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700620 return 0;
621
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100622 /* query actual device if possible, otherwise just trust the hint */
623 if (drv->bdrv_getlength) {
624 int64_t length = drv->bdrv_getlength(bs);
625 if (length < 0) {
626 return length;
627 }
Fam Zheng7e382002013-11-06 19:48:06 +0800628 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100629 }
630
631 bs->total_sectors = hint;
632 return 0;
633}
634
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100635/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100636 * Set open flags for a given discard mode
637 *
638 * Return 0 on success, -1 if the discard mode was invalid.
639 */
640int bdrv_parse_discard_flags(const char *mode, int *flags)
641{
642 *flags &= ~BDRV_O_UNMAP;
643
644 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
645 /* do nothing */
646 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
647 *flags |= BDRV_O_UNMAP;
648 } else {
649 return -1;
650 }
651
652 return 0;
653}
654
655/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100656 * Set open flags for a given cache mode
657 *
658 * Return 0 on success, -1 if the cache mode was invalid.
659 */
660int bdrv_parse_cache_flags(const char *mode, int *flags)
661{
662 *flags &= ~BDRV_O_CACHE_MASK;
663
664 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
665 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100666 } else if (!strcmp(mode, "directsync")) {
667 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100668 } else if (!strcmp(mode, "writeback")) {
669 *flags |= BDRV_O_CACHE_WB;
670 } else if (!strcmp(mode, "unsafe")) {
671 *flags |= BDRV_O_CACHE_WB;
672 *flags |= BDRV_O_NO_FLUSH;
673 } else if (!strcmp(mode, "writethrough")) {
674 /* this is the default */
675 } else {
676 return -1;
677 }
678
679 return 0;
680}
681
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200682/*
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200683 * Returns the flags that a temporary snapshot should get, based on the
684 * originally requested flags (the originally requested image will have flags
685 * like a backing file)
686 */
687static int bdrv_temp_snapshot_flags(int flags)
688{
689 return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
690}
691
692/*
Kevin Wolff3930ed2015-04-08 13:43:47 +0200693 * Returns the flags that bs->file should get if a protocol driver is expected,
694 * based on the given flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200695 */
696static int bdrv_inherited_flags(int flags)
697{
698 /* Enable protocol handling, disable format probing for bs->file */
699 flags |= BDRV_O_PROTOCOL;
700
701 /* Our block drivers take care to send flushes and respect unmap policy,
702 * so we can enable both unconditionally on lower layers. */
703 flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
704
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200705 /* Clear flags that only apply to the top layer */
Kevin Wolf5669b442014-04-11 21:36:45 +0200706 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200707
708 return flags;
709}
710
Kevin Wolff3930ed2015-04-08 13:43:47 +0200711const BdrvChildRole child_file = {
712 .inherit_flags = bdrv_inherited_flags,
713};
714
715/*
716 * Returns the flags that bs->file should get if the use of formats (and not
717 * only protocols) is permitted for it, based on the given flags for the parent
718 * BDS
719 */
720static int bdrv_inherited_fmt_flags(int parent_flags)
721{
722 int flags = child_file.inherit_flags(parent_flags);
723 return flags & ~BDRV_O_PROTOCOL;
724}
725
726const BdrvChildRole child_format = {
727 .inherit_flags = bdrv_inherited_fmt_flags,
728};
729
Kevin Wolf317fc442014-04-25 13:27:34 +0200730/*
731 * Returns the flags that bs->backing_hd should get, based on the given flags
732 * for the parent BDS
733 */
734static int bdrv_backing_flags(int flags)
735{
736 /* backing files always opened read-only */
737 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
738
739 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200740 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200741
742 return flags;
743}
744
Kevin Wolff3930ed2015-04-08 13:43:47 +0200745static const BdrvChildRole child_backing = {
746 .inherit_flags = bdrv_backing_flags,
747};
748
Kevin Wolf7b272452012-11-12 17:05:39 +0100749static int bdrv_open_flags(BlockDriverState *bs, int flags)
750{
751 int open_flags = flags | BDRV_O_CACHE_WB;
752
753 /*
754 * Clear flags that are internal to the block layer before opening the
755 * image.
756 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200757 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100758
759 /*
760 * Snapshots should be writable.
761 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200762 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100763 open_flags |= BDRV_O_RDWR;
764 }
765
766 return open_flags;
767}
768
Kevin Wolf636ea372014-01-24 14:11:52 +0100769static void bdrv_assign_node_name(BlockDriverState *bs,
770 const char *node_name,
771 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100772{
773 if (!node_name) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100774 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100775 }
776
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200777 /* Check for empty string or invalid characters */
Markus Armbrusterf5bebbb2014-09-30 13:59:30 +0200778 if (!id_wellformed(node_name)) {
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200779 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100780 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100781 }
782
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100783 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200784 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100785 error_setg(errp, "node-name=%s is conflicting with a device id",
786 node_name);
Kevin Wolf636ea372014-01-24 14:11:52 +0100787 return;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100788 }
789
Benoît Canet6913c0c2014-01-23 21:31:33 +0100790 /* takes care of avoiding duplicates node names */
791 if (bdrv_find_node(node_name)) {
792 error_setg(errp, "Duplicate node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100793 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100794 }
795
796 /* copy node name into the bs and insert it into the graph list */
797 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
798 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100799}
800
Kevin Wolf18edf282015-04-07 17:12:56 +0200801static QemuOptsList bdrv_runtime_opts = {
802 .name = "bdrv_common",
803 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
804 .desc = {
805 {
806 .name = "node-name",
807 .type = QEMU_OPT_STRING,
808 .help = "Node name of the block device node",
809 },
810 { /* end of list */ }
811 },
812};
813
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200814/*
Kevin Wolf57915332010-04-14 15:24:50 +0200815 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100816 *
817 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200818 */
Kevin Wolff500a6d2012-11-12 17:35:27 +0100819static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200820 QDict *options, int flags, BlockDriver *drv, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200821{
822 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200823 const char *filename;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100824 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200825 QemuOpts *opts;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200826 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200827
828 assert(drv != NULL);
Paolo Bonzini64058752012-05-08 16:51:49 +0200829 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100830 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200831
Kevin Wolf45673672013-04-22 17:48:40 +0200832 if (file != NULL) {
833 filename = file->filename;
834 } else {
835 filename = qdict_get_try_str(options, "filename");
836 }
837
Kevin Wolf765003d2014-02-03 14:49:42 +0100838 if (drv->bdrv_needs_filename && !filename) {
839 error_setg(errp, "The '%s' block driver requires a file name",
840 drv->format_name);
841 return -EINVAL;
842 }
843
Kevin Wolf45673672013-04-22 17:48:40 +0200844 trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
Stefan Hajnoczi28dcee12011-09-22 20:14:12 +0100845
Kevin Wolf18edf282015-04-07 17:12:56 +0200846 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
847 qemu_opts_absorb_qdict(opts, options, &local_err);
848 if (local_err) {
849 error_propagate(errp, local_err);
850 ret = -EINVAL;
851 goto fail_opts;
852 }
853
854 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100855 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200856 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100857 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200858 ret = -EINVAL;
859 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100860 }
861
Paolo Bonzini1b7fd722011-11-29 11:35:47 +0100862 bs->guest_block_size = 512;
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100863 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800864 bs->zero_beyond_eof = true;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800865 open_flags = bdrv_open_flags(bs, flags);
866 bs->read_only = !(open_flags & BDRV_O_RDWR);
867
868 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200869 error_setg(errp,
870 !bs->read_only && bdrv_is_whitelisted(drv, true)
871 ? "Driver '%s' can only be used for read-only devices"
872 : "Driver '%s' is not whitelisted",
873 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200874 ret = -ENOTSUP;
875 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800876 }
Kevin Wolf57915332010-04-14 15:24:50 +0200877
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000878 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200879 if (flags & BDRV_O_COPY_ON_READ) {
880 if (!bs->read_only) {
881 bdrv_enable_copy_on_read(bs);
882 } else {
883 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200884 ret = -EINVAL;
885 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200886 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000887 }
888
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100889 if (filename != NULL) {
890 pstrcpy(bs->filename, sizeof(bs->filename), filename);
891 } else {
892 bs->filename[0] = '\0';
893 }
Max Reitz91af7012014-07-18 20:24:56 +0200894 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200895
Kevin Wolf57915332010-04-14 15:24:50 +0200896 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500897 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200898
Stefan Hajnoczi03f541b2011-10-27 10:54:28 +0100899 bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100900
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200901 /* Open the image, either directly or using a protocol */
902 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100903 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200904 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200905 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100906 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200907 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200908 error_setg(errp, "Can't use '%s' as a block driver for the "
909 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200910 ret = -EINVAL;
911 goto free_and_fail;
912 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100913 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200914 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200915 }
916
Kevin Wolf57915332010-04-14 15:24:50 +0200917 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100918 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200919 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800920 } else if (bs->filename[0]) {
921 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200922 } else {
923 error_setg_errno(errp, -ret, "Could not open image");
924 }
Kevin Wolf57915332010-04-14 15:24:50 +0200925 goto free_and_fail;
926 }
927
Markus Armbrustera1f688f2015-03-13 21:09:40 +0100928 if (bs->encrypted) {
929 error_report("Encrypted images are deprecated");
930 error_printf("Support for them will be removed in a future release.\n"
931 "You can use 'qemu-img convert' to convert your image"
932 " to an unencrypted one.\n");
933 }
934
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100935 ret = refresh_total_sectors(bs, bs->total_sectors);
936 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200937 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100938 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +0200939 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100940
Kevin Wolf3baca892014-07-16 17:48:16 +0200941 bdrv_refresh_limits(bs, &local_err);
942 if (local_err) {
943 error_propagate(errp, local_err);
944 ret = -EINVAL;
945 goto free_and_fail;
946 }
947
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100948 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300949 assert(bdrv_min_mem_align(bs) != 0);
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300950 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
Kevin Wolf18edf282015-04-07 17:12:56 +0200951
952 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200953 return 0;
954
955free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +0100956 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -0500957 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +0200958 bs->opaque = NULL;
959 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200960fail_opts:
961 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +0200962 return ret;
963}
964
Kevin Wolf5e5c4f62014-05-26 11:45:08 +0200965static QDict *parse_json_filename(const char *filename, Error **errp)
966{
967 QObject *options_obj;
968 QDict *options;
969 int ret;
970
971 ret = strstart(filename, "json:", &filename);
972 assert(ret);
973
974 options_obj = qobject_from_json(filename);
975 if (!options_obj) {
976 error_setg(errp, "Could not parse the JSON options");
977 return NULL;
978 }
979
980 if (qobject_type(options_obj) != QTYPE_QDICT) {
981 qobject_decref(options_obj);
982 error_setg(errp, "Invalid JSON object given");
983 return NULL;
984 }
985
986 options = qobject_to_qdict(options_obj);
987 qdict_flatten(options);
988
989 return options;
990}
991
Kevin Wolf57915332010-04-14 15:24:50 +0200992/*
Kevin Wolff54120f2014-05-26 11:09:59 +0200993 * Fills in default options for opening images and converts the legacy
994 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -0400995 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
996 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +0200997 */
Max Reitz53a29512015-03-19 14:53:16 -0400998static int bdrv_fill_options(QDict **options, const char **pfilename,
999 int *flags, BlockDriver *drv, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001000{
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001001 const char *filename = *pfilename;
Kevin Wolff54120f2014-05-26 11:09:59 +02001002 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001003 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001004 bool parse_filename = false;
Max Reitz53a29512015-03-19 14:53:16 -04001005 BlockDriver *tmp_drv;
Kevin Wolff54120f2014-05-26 11:09:59 +02001006 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001007
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001008 /* Parse json: pseudo-protocol */
1009 if (filename && g_str_has_prefix(filename, "json:")) {
1010 QDict *json_options = parse_json_filename(filename, &local_err);
1011 if (local_err) {
1012 error_propagate(errp, local_err);
1013 return -EINVAL;
1014 }
1015
1016 /* Options given in the filename have lower priority than options
1017 * specified directly */
1018 qdict_join(*options, json_options, false);
1019 QDECREF(json_options);
1020 *pfilename = filename = NULL;
1021 }
1022
Max Reitz53a29512015-03-19 14:53:16 -04001023 drvname = qdict_get_try_str(*options, "driver");
1024
1025 /* If the user has explicitly specified the driver, this choice should
1026 * override the BDRV_O_PROTOCOL flag */
1027 tmp_drv = drv;
1028 if (!tmp_drv && drvname) {
1029 tmp_drv = bdrv_find_format(drvname);
1030 }
1031 if (tmp_drv) {
1032 protocol = tmp_drv->bdrv_file_open;
1033 }
1034
1035 if (protocol) {
1036 *flags |= BDRV_O_PROTOCOL;
1037 } else {
1038 *flags &= ~BDRV_O_PROTOCOL;
1039 }
1040
Kevin Wolff54120f2014-05-26 11:09:59 +02001041 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001042 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001043 if (!qdict_haskey(*options, "filename")) {
1044 qdict_put(*options, "filename", qstring_from_str(filename));
1045 parse_filename = true;
1046 } else {
1047 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1048 "the same time");
1049 return -EINVAL;
1050 }
1051 }
1052
1053 /* Find the right block driver */
1054 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001055
Kevin Wolf17b005f2014-05-27 10:50:29 +02001056 if (drv) {
1057 if (drvname) {
1058 error_setg(errp, "Driver specified twice");
1059 return -EINVAL;
1060 }
1061 drvname = drv->format_name;
1062 qdict_put(*options, "driver", qstring_from_str(drvname));
1063 } else {
1064 if (!drvname && protocol) {
1065 if (filename) {
Max Reitzb65a5e12015-02-05 13:58:12 -05001066 drv = bdrv_find_protocol(filename, parse_filename, errp);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001067 if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001068 return -EINVAL;
1069 }
1070
1071 drvname = drv->format_name;
1072 qdict_put(*options, "driver", qstring_from_str(drvname));
1073 } else {
1074 error_setg(errp, "Must specify either driver or file");
Kevin Wolff54120f2014-05-26 11:09:59 +02001075 return -EINVAL;
1076 }
Kevin Wolf17b005f2014-05-27 10:50:29 +02001077 } else if (drvname) {
1078 drv = bdrv_find_format(drvname);
1079 if (!drv) {
1080 error_setg(errp, "Unknown driver '%s'", drvname);
1081 return -ENOENT;
1082 }
Kevin Wolff54120f2014-05-26 11:09:59 +02001083 }
1084 }
1085
Kevin Wolf17b005f2014-05-27 10:50:29 +02001086 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001087
1088 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001089 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001090 drv->bdrv_parse_filename(filename, *options, &local_err);
1091 if (local_err) {
1092 error_propagate(errp, local_err);
1093 return -EINVAL;
1094 }
1095
1096 if (!drv->bdrv_needs_filename) {
1097 qdict_del(*options, "filename");
1098 }
1099 }
1100
1101 return 0;
1102}
1103
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001104static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1105 BlockDriverState *child_bs,
1106 const BdrvChildRole *child_role)
Kevin Wolfdf581792015-06-15 11:53:47 +02001107{
1108 BdrvChild *child = g_new(BdrvChild, 1);
1109 *child = (BdrvChild) {
1110 .bs = child_bs,
1111 .role = child_role,
1112 };
1113
1114 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001115
1116 return child;
Kevin Wolfdf581792015-06-15 11:53:47 +02001117}
1118
Kevin Wolf33a60402015-06-15 13:51:04 +02001119static void bdrv_detach_child(BdrvChild *child)
1120{
1121 QLIST_REMOVE(child, next);
1122 g_free(child);
1123}
1124
1125void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1126{
1127 BlockDriverState *child_bs = child->bs;
1128
1129 if (child->bs->inherits_from == parent) {
1130 child->bs->inherits_from = NULL;
1131 }
1132
1133 bdrv_detach_child(child);
1134 bdrv_unref(child_bs);
1135}
1136
Fam Zheng8d24cce2014-05-23 21:29:45 +08001137void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1138{
1139
Fam Zheng826b6ca2014-05-23 21:29:47 +08001140 if (bs->backing_hd) {
1141 assert(bs->backing_blocker);
1142 bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
Kevin Wolf80a1e132015-06-17 15:52:09 +02001143 bdrv_detach_child(bs->backing_child);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001144 } else if (backing_hd) {
1145 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001146 "node is used as backing hd of '%s'",
1147 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001148 }
1149
Fam Zheng8d24cce2014-05-23 21:29:45 +08001150 bs->backing_hd = backing_hd;
1151 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001152 error_free(bs->backing_blocker);
1153 bs->backing_blocker = NULL;
Kevin Wolf80a1e132015-06-17 15:52:09 +02001154 bs->backing_child = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001155 goto out;
1156 }
Kevin Wolf80a1e132015-06-17 15:52:09 +02001157 bs->backing_child = bdrv_attach_child(bs, backing_hd, &child_backing);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001158 bs->open_flags &= ~BDRV_O_NO_BACKING;
1159 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1160 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1161 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001162
1163 bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1164 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Fam Zhengbb000212014-09-11 13:14:00 +08001165 bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001166 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001167out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001168 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001169}
1170
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001171/*
1172 * Opens the backing file for a BlockDriverState if not yet open
1173 *
1174 * options is a QDict of options to pass to the block drivers, or NULL for an
1175 * empty set of options. The reference to the QDict is transferred to this
1176 * function (even on failure), so if the caller intends to reuse the dictionary,
1177 * it needs to use QINCREF() before calling bdrv_file_open.
1178 */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001179int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001180{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001181 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolf317fc442014-04-25 13:27:34 +02001182 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001183 BlockDriverState *backing_hd;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001184 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001185
1186 if (bs->backing_hd != NULL) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001187 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001188 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001189 }
1190
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001191 /* NULL means an empty set of options */
1192 if (options == NULL) {
1193 options = qdict_new();
1194 }
1195
Paolo Bonzini9156df12012-10-18 16:49:17 +02001196 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001197 if (qdict_haskey(options, "file.filename")) {
1198 backing_filename[0] = '\0';
1199 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001200 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001201 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001202 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001203 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1204 &local_err);
1205 if (local_err) {
1206 ret = -EINVAL;
1207 error_propagate(errp, local_err);
1208 QDECREF(options);
1209 goto free_exit;
1210 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001211 }
1212
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001213 if (!bs->drv || !bs->drv->supports_backing) {
1214 ret = -EINVAL;
1215 error_setg(errp, "Driver doesn't support backing files");
1216 QDECREF(options);
1217 goto free_exit;
1218 }
1219
Markus Armbrustere4e99862014-10-07 13:59:03 +02001220 backing_hd = bdrv_new();
Fam Zheng8d24cce2014-05-23 21:29:45 +08001221
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001222 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1223 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001224 }
1225
Max Reitzf67503e2014-02-18 18:33:05 +01001226 assert(bs->backing_hd == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001227 ret = bdrv_open_inherit(&backing_hd,
1228 *backing_filename ? backing_filename : NULL,
Max Reitzce343772015-08-26 19:47:50 +02001229 NULL, options, 0, bs, &child_backing, &local_err);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001230 if (ret < 0) {
Fam Zheng8d24cce2014-05-23 21:29:45 +08001231 bdrv_unref(backing_hd);
1232 backing_hd = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001233 bs->open_flags |= BDRV_O_NO_BACKING;
Fam Zhengb04b6b62013-11-08 11:26:49 +08001234 error_setg(errp, "Could not open backing file: %s",
1235 error_get_pretty(local_err));
1236 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001237 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001238 }
Kevin Wolfdf581792015-06-15 11:53:47 +02001239
Fam Zheng8d24cce2014-05-23 21:29:45 +08001240 bdrv_set_backing_hd(bs, backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001241
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001242free_exit:
1243 g_free(backing_filename);
1244 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001245}
1246
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001247/*
Max Reitzda557aa2013-12-20 19:28:11 +01001248 * Opens a disk image whose options are given as BlockdevRef in another block
1249 * device's options.
1250 *
Max Reitzda557aa2013-12-20 19:28:11 +01001251 * If allow_none is true, no image will be opened if filename is false and no
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001252 * BlockdevRef is given. NULL will be returned, but errp remains unset.
Max Reitzda557aa2013-12-20 19:28:11 +01001253 *
1254 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1255 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1256 * itself, all options starting with "${bdref_key}." are considered part of the
1257 * BlockdevRef.
1258 *
1259 * The BlockdevRef will be removed from the options QDict.
1260 */
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001261BdrvChild *bdrv_open_child(const char *filename,
1262 QDict *options, const char *bdref_key,
1263 BlockDriverState* parent,
1264 const BdrvChildRole *child_role,
1265 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001266{
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001267 BdrvChild *c = NULL;
1268 BlockDriverState *bs;
Max Reitzda557aa2013-12-20 19:28:11 +01001269 QDict *image_options;
1270 int ret;
1271 char *bdref_key_dot;
1272 const char *reference;
1273
Kevin Wolfdf581792015-06-15 11:53:47 +02001274 assert(child_role != NULL);
Max Reitzf67503e2014-02-18 18:33:05 +01001275
Max Reitzda557aa2013-12-20 19:28:11 +01001276 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1277 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1278 g_free(bdref_key_dot);
1279
1280 reference = qdict_get_try_str(options, bdref_key);
1281 if (!filename && !reference && !qdict_size(image_options)) {
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001282 if (!allow_none) {
Max Reitzda557aa2013-12-20 19:28:11 +01001283 error_setg(errp, "A block device must be specified for \"%s\"",
1284 bdref_key);
Max Reitzda557aa2013-12-20 19:28:11 +01001285 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001286 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001287 goto done;
1288 }
1289
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001290 bs = NULL;
1291 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0,
Max Reitzce343772015-08-26 19:47:50 +02001292 parent, child_role, errp);
Kevin Wolfdf581792015-06-15 11:53:47 +02001293 if (ret < 0) {
1294 goto done;
1295 }
1296
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001297 c = bdrv_attach_child(parent, bs, child_role);
Max Reitzda557aa2013-12-20 19:28:11 +01001298
1299done:
1300 qdict_del(options, bdref_key);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001301 return c;
1302}
1303
1304/*
1305 * This is a version of bdrv_open_child() that returns 0/-EINVAL instead of
1306 * a BdrvChild object.
1307 *
1308 * If allow_none is true, no image will be opened if filename is false and no
1309 * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1310 *
1311 * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
1312 */
1313int bdrv_open_image(BlockDriverState **pbs, const char *filename,
1314 QDict *options, const char *bdref_key,
1315 BlockDriverState* parent, const BdrvChildRole *child_role,
1316 bool allow_none, Error **errp)
1317{
1318 Error *local_err = NULL;
1319 BdrvChild *c;
1320
1321 assert(pbs);
1322 assert(*pbs == NULL);
1323
1324 c = bdrv_open_child(filename, options, bdref_key, parent, child_role,
1325 allow_none, &local_err);
1326 if (local_err) {
1327 error_propagate(errp, local_err);
1328 return -EINVAL;
1329 }
1330
1331 if (c != NULL) {
1332 *pbs = c->bs;
1333 }
1334
1335 return 0;
Max Reitzda557aa2013-12-20 19:28:11 +01001336}
1337
Chen Gang6b8aeca2014-06-23 23:28:23 +08001338int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001339{
1340 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001341 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001342 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001343 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001344 QDict *snapshot_options;
1345 BlockDriverState *bs_snapshot;
Fam Zhengc2e0dbb2015-07-06 12:24:44 +08001346 Error *local_err = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001347 int ret;
1348
1349 /* if snapshot, we create a temporary backing file and open it
1350 instead of opening 'filename' directly */
1351
1352 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001353 total_size = bdrv_getlength(bs);
1354 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001355 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001356 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001357 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001358 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001359
1360 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001361 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001362 if (ret < 0) {
1363 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001364 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001365 }
1366
Max Reitzef810432014-12-02 18:32:42 +01001367 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001368 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001369 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Max Reitzef810432014-12-02 18:32:42 +01001370 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08001371 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001372 if (ret < 0) {
1373 error_setg_errno(errp, -ret, "Could not create temporary overlay "
1374 "'%s': %s", tmp_filename,
1375 error_get_pretty(local_err));
1376 error_free(local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001377 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001378 }
1379
1380 /* Prepare a new options QDict for the temporary file */
1381 snapshot_options = qdict_new();
1382 qdict_put(snapshot_options, "file.driver",
1383 qstring_from_str("file"));
1384 qdict_put(snapshot_options, "file.filename",
1385 qstring_from_str(tmp_filename));
Max Reitze6641712015-08-26 19:47:48 +02001386 qdict_put(snapshot_options, "driver",
1387 qstring_from_str("qcow2"));
Kevin Wolfb9988752014-04-03 12:09:34 +02001388
Markus Armbrustere4e99862014-10-07 13:59:03 +02001389 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001390
1391 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001392 flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001393 if (ret < 0) {
1394 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001395 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001396 }
1397
1398 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001399
1400out:
1401 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001402 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001403}
1404
Max Reitzda557aa2013-12-20 19:28:11 +01001405/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001406 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001407 *
1408 * options is a QDict of options to pass to the block drivers, or NULL for an
1409 * empty set of options. The reference to the QDict belongs to the block layer
1410 * after the call (even on failure), so if the caller intends to reuse the
1411 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001412 *
1413 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1414 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001415 *
1416 * The reference parameter may be used to specify an existing block device which
1417 * should be opened. If specified, neither options nor a filename may be given,
1418 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001419 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001420static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1421 const char *reference, QDict *options, int flags,
1422 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +02001423 const BdrvChildRole *child_role, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001424{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001425 int ret;
Max Reitzf67503e2014-02-18 18:33:05 +01001426 BlockDriverState *file = NULL, *bs;
Max Reitzce343772015-08-26 19:47:50 +02001427 BlockDriver *drv = NULL;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001428 const char *drvname;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001429 Error *local_err = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001430 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001431
Max Reitzf67503e2014-02-18 18:33:05 +01001432 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001433 assert(!child_role || !flags);
1434 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001435
Max Reitzddf56362014-02-18 18:33:06 +01001436 if (reference) {
1437 bool options_non_empty = options ? qdict_size(options) : false;
1438 QDECREF(options);
1439
1440 if (*pbs) {
1441 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1442 "another block device");
1443 return -EINVAL;
1444 }
1445
1446 if (filename || options_non_empty) {
1447 error_setg(errp, "Cannot reference an existing block device with "
1448 "additional options or a new filename");
1449 return -EINVAL;
1450 }
1451
1452 bs = bdrv_lookup_bs(reference, reference, errp);
1453 if (!bs) {
1454 return -ENODEV;
1455 }
1456 bdrv_ref(bs);
1457 *pbs = bs;
1458 return 0;
1459 }
1460
Max Reitzf67503e2014-02-18 18:33:05 +01001461 if (*pbs) {
1462 bs = *pbs;
1463 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001464 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001465 }
1466
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001467 /* NULL means an empty set of options */
1468 if (options == NULL) {
1469 options = qdict_new();
1470 }
1471
Kevin Wolff3930ed2015-04-08 13:43:47 +02001472 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001473 bs->inherits_from = parent;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001474 flags = child_role->inherit_flags(parent->open_flags);
1475 }
1476
Max Reitzce343772015-08-26 19:47:50 +02001477 ret = bdrv_fill_options(&options, &filename, &flags, NULL, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001478 if (local_err) {
1479 goto fail;
1480 }
1481
Kevin Wolf76c591b2014-06-04 14:19:44 +02001482 /* Find the right image format driver */
Kevin Wolf76c591b2014-06-04 14:19:44 +02001483 drvname = qdict_get_try_str(options, "driver");
1484 if (drvname) {
1485 drv = bdrv_find_format(drvname);
1486 qdict_del(options, "driver");
1487 if (!drv) {
1488 error_setg(errp, "Unknown driver: '%s'", drvname);
1489 ret = -EINVAL;
1490 goto fail;
1491 }
1492 }
1493
1494 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001495
Kevin Wolff3930ed2015-04-08 13:43:47 +02001496 bs->open_flags = flags;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001497 bs->options = options;
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001498 options = qdict_clone_shallow(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001499
Kevin Wolff4788ad2014-06-03 16:44:19 +02001500 /* Open image file without format layer */
1501 if ((flags & BDRV_O_PROTOCOL) == 0) {
1502 if (flags & BDRV_O_RDWR) {
1503 flags |= BDRV_O_ALLOW_RDWR;
1504 }
1505 if (flags & BDRV_O_SNAPSHOT) {
1506 snapshot_flags = bdrv_temp_snapshot_flags(flags);
1507 flags = bdrv_backing_flags(flags);
1508 }
1509
1510 assert(file == NULL);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001511 bs->open_flags = flags;
Kevin Wolff4788ad2014-06-03 16:44:19 +02001512 ret = bdrv_open_image(&file, filename, options, "file",
Kevin Wolff3930ed2015-04-08 13:43:47 +02001513 bs, &child_file, true, &local_err);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001514 if (ret < 0) {
Max Reitz5469a2a2014-02-18 18:33:10 +01001515 goto fail;
1516 }
1517 }
1518
Kevin Wolf76c591b2014-06-04 14:19:44 +02001519 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001520 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001521 if (!drv && file) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001522 ret = find_image_format(file, filename, &drv, &local_err);
1523 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001524 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001525 }
Kevin Wolf76c591b2014-06-04 14:19:44 +02001526 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001527 error_setg(errp, "Must specify either driver or file");
1528 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001529 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001530 }
1531
Max Reitz53a29512015-03-19 14:53:16 -04001532 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1533 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1534 /* file must be NULL if a protocol BDS is about to be created
1535 * (the inverse results in an error message from bdrv_open_common()) */
1536 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1537
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001538 /* Open the image */
Max Reitz34b5d2c2013-09-05 14:45:29 +02001539 ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001540 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001541 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001542 }
1543
Max Reitz2a05cbe2013-12-20 19:28:10 +01001544 if (file && (bs->file != file)) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001545 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001546 file = NULL;
1547 }
1548
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001549 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001550 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001551 QDict *backing_options;
1552
Benoît Canet5726d872013-09-25 13:30:01 +02001553 qdict_extract_subqdict(options, &backing_options, "backing.");
Max Reitz34b5d2c2013-09-05 14:45:29 +02001554 ret = bdrv_open_backing_file(bs, backing_options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001555 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001556 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001557 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001558 }
1559
Max Reitz91af7012014-07-18 20:24:56 +02001560 bdrv_refresh_filename(bs);
1561
Kevin Wolfb9988752014-04-03 12:09:34 +02001562 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1563 * temporary snapshot afterwards. */
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001564 if (snapshot_flags) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001565 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
Kevin Wolfb9988752014-04-03 12:09:34 +02001566 if (local_err) {
Kevin Wolfb9988752014-04-03 12:09:34 +02001567 goto close_and_fail;
1568 }
1569 }
1570
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001571 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001572 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001573 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001574 if (flags & BDRV_O_PROTOCOL) {
1575 error_setg(errp, "Block protocol '%s' doesn't support the option "
1576 "'%s'", drv->format_name, entry->key);
1577 } else {
1578 error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1579 "support the option '%s'", drv->format_name,
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001580 bdrv_get_device_name(bs), entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001581 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001582
1583 ret = -EINVAL;
1584 goto close_and_fail;
1585 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001586
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001587 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001588 if (bs->blk) {
1589 blk_dev_change_media_cb(bs->blk, true);
1590 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001591 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1592 && !runstate_check(RUN_STATE_INMIGRATE)
1593 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1594 error_setg(errp,
1595 "Guest must be stopped for opening of encrypted image");
1596 ret = -EBUSY;
1597 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001598 }
1599
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001600 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001601 *pbs = bs;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001602 return 0;
1603
Kevin Wolf8bfea152014-04-11 19:16:36 +02001604fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001605 if (file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001606 bdrv_unref(file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001607 }
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001608 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001609 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001610 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001611 if (!*pbs) {
1612 /* If *pbs is NULL, a new BDS has been created in this function and
1613 needs to be freed now. Otherwise, it does not need to be closed,
1614 since it has not really been opened yet. */
1615 bdrv_unref(bs);
1616 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001617 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001618 error_propagate(errp, local_err);
1619 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001620 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001621
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001622close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001623 /* See fail path, but now the BDS has to be always closed */
1624 if (*pbs) {
1625 bdrv_close(bs);
1626 } else {
1627 bdrv_unref(bs);
1628 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001629 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001630 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001631 error_propagate(errp, local_err);
1632 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001633 return ret;
1634}
1635
Kevin Wolff3930ed2015-04-08 13:43:47 +02001636int bdrv_open(BlockDriverState **pbs, const char *filename,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001637 const char *reference, QDict *options, int flags, Error **errp)
Kevin Wolff3930ed2015-04-08 13:43:47 +02001638{
1639 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
Max Reitzce343772015-08-26 19:47:50 +02001640 NULL, errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001641}
1642
Jeff Codye971aa12012-09-20 15:13:19 -04001643typedef struct BlockReopenQueueEntry {
1644 bool prepared;
1645 BDRVReopenState state;
1646 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1647} BlockReopenQueueEntry;
1648
1649/*
1650 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1651 * reopen of multiple devices.
1652 *
1653 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1654 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1655 * be created and initialized. This newly created BlockReopenQueue should be
1656 * passed back in for subsequent calls that are intended to be of the same
1657 * atomic 'set'.
1658 *
1659 * bs is the BlockDriverState to add to the reopen queue.
1660 *
1661 * flags contains the open flags for the associated bs
1662 *
1663 * returns a pointer to bs_queue, which is either the newly allocated
1664 * bs_queue, or the existing bs_queue being used.
1665 *
1666 */
1667BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1668 BlockDriverState *bs, int flags)
1669{
1670 assert(bs != NULL);
1671
1672 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001673 BdrvChild *child;
1674
Jeff Codye971aa12012-09-20 15:13:19 -04001675 if (bs_queue == NULL) {
1676 bs_queue = g_new0(BlockReopenQueue, 1);
1677 QSIMPLEQ_INIT(bs_queue);
1678 }
1679
Kevin Wolff1f25a22014-04-25 19:04:55 +02001680 /* bdrv_open() masks this flag out */
1681 flags &= ~BDRV_O_PROTOCOL;
1682
Kevin Wolf67251a32015-04-09 18:54:04 +02001683 QLIST_FOREACH(child, &bs->children, next) {
1684 int child_flags;
1685
1686 if (child->bs->inherits_from != bs) {
1687 continue;
1688 }
1689
1690 child_flags = child->role->inherit_flags(flags);
1691 bdrv_reopen_queue(bs_queue, child->bs, child_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001692 }
1693
1694 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1695 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1696
1697 bs_entry->state.bs = bs;
1698 bs_entry->state.flags = flags;
1699
1700 return bs_queue;
1701}
1702
1703/*
1704 * Reopen multiple BlockDriverStates atomically & transactionally.
1705 *
1706 * The queue passed in (bs_queue) must have been built up previous
1707 * via bdrv_reopen_queue().
1708 *
1709 * Reopens all BDS specified in the queue, with the appropriate
1710 * flags. All devices are prepared for reopen, and failure of any
1711 * device will cause all device changes to be abandonded, and intermediate
1712 * data cleaned up.
1713 *
1714 * If all devices prepare successfully, then the changes are committed
1715 * to all devices.
1716 *
1717 */
1718int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1719{
1720 int ret = -1;
1721 BlockReopenQueueEntry *bs_entry, *next;
1722 Error *local_err = NULL;
1723
1724 assert(bs_queue != NULL);
1725
1726 bdrv_drain_all();
1727
1728 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1729 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1730 error_propagate(errp, local_err);
1731 goto cleanup;
1732 }
1733 bs_entry->prepared = true;
1734 }
1735
1736 /* If we reach this point, we have success and just need to apply the
1737 * changes
1738 */
1739 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1740 bdrv_reopen_commit(&bs_entry->state);
1741 }
1742
1743 ret = 0;
1744
1745cleanup:
1746 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1747 if (ret && bs_entry->prepared) {
1748 bdrv_reopen_abort(&bs_entry->state);
1749 }
1750 g_free(bs_entry);
1751 }
1752 g_free(bs_queue);
1753 return ret;
1754}
1755
1756
1757/* Reopen a single BlockDriverState with the specified flags. */
1758int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1759{
1760 int ret = -1;
1761 Error *local_err = NULL;
1762 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1763
1764 ret = bdrv_reopen_multiple(queue, &local_err);
1765 if (local_err != NULL) {
1766 error_propagate(errp, local_err);
1767 }
1768 return ret;
1769}
1770
1771
1772/*
1773 * Prepares a BlockDriverState for reopen. All changes are staged in the
1774 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1775 * the block driver layer .bdrv_reopen_prepare()
1776 *
1777 * bs is the BlockDriverState to reopen
1778 * flags are the new open flags
1779 * queue is the reopen queue
1780 *
1781 * Returns 0 on success, non-zero on error. On error errp will be set
1782 * as well.
1783 *
1784 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1785 * It is the responsibility of the caller to then call the abort() or
1786 * commit() for any other BDS that have been left in a prepare() state
1787 *
1788 */
1789int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1790 Error **errp)
1791{
1792 int ret = -1;
1793 Error *local_err = NULL;
1794 BlockDriver *drv;
1795
1796 assert(reopen_state != NULL);
1797 assert(reopen_state->bs->drv != NULL);
1798 drv = reopen_state->bs->drv;
1799
1800 /* if we are to stay read-only, do not allow permission change
1801 * to r/w */
1802 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1803 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03001804 error_setg(errp, "Node '%s' is read only",
1805 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001806 goto error;
1807 }
1808
1809
1810 ret = bdrv_flush(reopen_state->bs);
1811 if (ret) {
1812 error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1813 strerror(-ret));
1814 goto error;
1815 }
1816
1817 if (drv->bdrv_reopen_prepare) {
1818 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1819 if (ret) {
1820 if (local_err != NULL) {
1821 error_propagate(errp, local_err);
1822 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04001823 error_setg(errp, "failed while preparing to reopen image '%s'",
1824 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04001825 }
1826 goto error;
1827 }
1828 } else {
1829 /* It is currently mandatory to have a bdrv_reopen_prepare()
1830 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03001831 error_setg(errp, "Block format '%s' used by node '%s' "
1832 "does not support reopening files", drv->format_name,
1833 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04001834 ret = -1;
1835 goto error;
1836 }
1837
1838 ret = 0;
1839
1840error:
1841 return ret;
1842}
1843
1844/*
1845 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1846 * makes them final by swapping the staging BlockDriverState contents into
1847 * the active BlockDriverState contents.
1848 */
1849void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1850{
1851 BlockDriver *drv;
1852
1853 assert(reopen_state != NULL);
1854 drv = reopen_state->bs->drv;
1855 assert(drv != NULL);
1856
1857 /* If there are any driver level actions to take */
1858 if (drv->bdrv_reopen_commit) {
1859 drv->bdrv_reopen_commit(reopen_state);
1860 }
1861
1862 /* set BDS specific flags now */
1863 reopen_state->bs->open_flags = reopen_state->flags;
1864 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1865 BDRV_O_CACHE_WB);
1866 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01001867
Kevin Wolf3baca892014-07-16 17:48:16 +02001868 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04001869}
1870
1871/*
1872 * Abort the reopen, and delete and free the staged changes in
1873 * reopen_state
1874 */
1875void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1876{
1877 BlockDriver *drv;
1878
1879 assert(reopen_state != NULL);
1880 drv = reopen_state->bs->drv;
1881 assert(drv != NULL);
1882
1883 if (drv->bdrv_reopen_abort) {
1884 drv->bdrv_reopen_abort(reopen_state);
1885 }
1886}
1887
1888
bellardfc01f7e2003-06-30 10:03:06 +00001889void bdrv_close(BlockDriverState *bs)
1890{
Max Reitz33384422014-06-20 21:57:33 +02001891 BdrvAioNotifier *ban, *ban_next;
1892
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001893 if (bs->job) {
1894 block_job_cancel_sync(bs->job);
1895 }
Fam Zheng53ec73e2015-05-29 18:53:14 +08001896 bdrv_drain(bs); /* complete I/O */
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02001897 bdrv_flush(bs);
Fam Zheng53ec73e2015-05-29 18:53:14 +08001898 bdrv_drain(bs); /* in case flush left pending I/O */
Paolo Bonzinid7d512f2012-08-23 11:20:36 +02001899 notifier_list_notify(&bs->close_notifiers, bs);
Kevin Wolf7094f122012-04-11 11:06:37 +02001900
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02001901 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001902 BdrvChild *child, *next;
1903
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02001904 bs->drv->bdrv_close(bs);
1905
1906 if (bs->backing_hd) {
1907 BlockDriverState *backing_hd = bs->backing_hd;
1908 bdrv_set_backing_hd(bs, NULL);
1909 bdrv_unref(backing_hd);
1910 }
1911
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001912 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolf33a60402015-06-15 13:51:04 +02001913 /* TODO Remove bdrv_unref() from drivers' close function and use
1914 * bdrv_unref_child() here */
Kevin Wolfbddcec32015-04-09 18:47:50 +02001915 if (child->bs->inherits_from == bs) {
1916 child->bs->inherits_from = NULL;
1917 }
Kevin Wolf33a60402015-06-15 13:51:04 +02001918 bdrv_detach_child(child);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02001919 }
1920
Anthony Liguori7267c092011-08-20 22:09:37 -05001921 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00001922 bs->opaque = NULL;
1923 bs->drv = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00001924 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02001925 bs->backing_file[0] = '\0';
1926 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02001927 bs->total_sectors = 0;
1928 bs->encrypted = 0;
1929 bs->valid_key = 0;
1930 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08001931 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001932 QDECREF(bs->options);
1933 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02001934 QDECREF(bs->full_open_options);
1935 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00001936
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001937 if (bs->file != NULL) {
Fam Zheng4f6fd342013-08-23 09:14:47 +08001938 bdrv_unref(bs->file);
Paolo Bonzini0ac93772012-05-08 16:51:44 +02001939 bs->file = NULL;
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001940 }
bellardb3380822004-03-14 21:38:54 +00001941 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001942
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001943 if (bs->blk) {
1944 blk_dev_change_media_cb(bs->blk, false);
1945 }
Pavel Hrdina9ca11152012-08-09 12:44:48 +02001946
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08001947 /*throttling disk I/O limits*/
1948 if (bs->io_limits_enabled) {
1949 bdrv_io_limits_disable(bs);
1950 }
Max Reitz33384422014-06-20 21:57:33 +02001951
1952 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1953 g_free(ban);
1954 }
1955 QLIST_INIT(&bs->aio_notifiers);
bellardb3380822004-03-14 21:38:54 +00001956}
1957
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001958void bdrv_close_all(void)
1959{
1960 BlockDriverState *bs;
1961
Benoît Canetdc364f42014-01-23 21:31:32 +01001962 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001963 AioContext *aio_context = bdrv_get_aio_context(bs);
1964
1965 aio_context_acquire(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001966 bdrv_close(bs);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02001967 aio_context_release(aio_context);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09001968 }
1969}
1970
Benoît Canetdc364f42014-01-23 21:31:32 +01001971/* make a BlockDriverState anonymous by removing from bdrv_state and
1972 * graph_bdrv_state list.
Ryan Harperd22b2f42011-03-29 20:51:47 -05001973 Also, NULL terminate the device_name to prevent double remove */
1974void bdrv_make_anon(BlockDriverState *bs)
1975{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001976 /*
1977 * Take care to remove bs from bdrv_states only when it's actually
1978 * in it. Note that bs->device_list.tqe_prev is initially null,
1979 * and gets set to non-null by QTAILQ_INSERT_TAIL(). Establish
1980 * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1981 * resetting it to null on remove.
1982 */
1983 if (bs->device_list.tqe_prev) {
Benoît Canetdc364f42014-01-23 21:31:32 +01001984 QTAILQ_REMOVE(&bdrv_states, bs, device_list);
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02001985 bs->device_list.tqe_prev = NULL;
Ryan Harperd22b2f42011-03-29 20:51:47 -05001986 }
Benoît Canetdc364f42014-01-23 21:31:32 +01001987 if (bs->node_name[0] != '\0') {
1988 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1989 }
1990 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05001991}
1992
Paolo Bonzinie023b2e2012-05-08 16:51:41 +02001993static void bdrv_rebind(BlockDriverState *bs)
1994{
1995 if (bs->drv && bs->drv->bdrv_rebind) {
1996 bs->drv->bdrv_rebind(bs);
1997 }
1998}
1999
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002000static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2001 BlockDriverState *bs_src)
2002{
2003 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002004
2005 /* dev info */
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01002006 bs_dest->guest_block_size = bs_src->guest_block_size;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002007 bs_dest->copy_on_read = bs_src->copy_on_read;
2008
2009 bs_dest->enable_write_cache = bs_src->enable_write_cache;
2010
Benoît Canetcc0681c2013-09-02 14:14:39 +02002011 /* i/o throttled req */
Alberto Garcia76f4afb2015-06-08 18:17:44 +02002012 bs_dest->throttle_state = bs_src->throttle_state,
2013 bs_dest->io_limits_enabled = bs_src->io_limits_enabled;
2014 bs_dest->pending_reqs[0] = bs_src->pending_reqs[0];
2015 bs_dest->pending_reqs[1] = bs_src->pending_reqs[1];
2016 bs_dest->throttled_reqs[0] = bs_src->throttled_reqs[0];
2017 bs_dest->throttled_reqs[1] = bs_src->throttled_reqs[1];
2018 memcpy(&bs_dest->round_robin,
2019 &bs_src->round_robin,
2020 sizeof(bs_dest->round_robin));
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002021 memcpy(&bs_dest->throttle_timers,
2022 &bs_src->throttle_timers,
2023 sizeof(ThrottleTimers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002024
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002025 /* r/w error */
2026 bs_dest->on_read_error = bs_src->on_read_error;
2027 bs_dest->on_write_error = bs_src->on_write_error;
2028
2029 /* i/o status */
2030 bs_dest->iostatus_enabled = bs_src->iostatus_enabled;
2031 bs_dest->iostatus = bs_src->iostatus;
2032
2033 /* dirty bitmap */
Fam Zhenge4654d22013-11-13 18:29:43 +08002034 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002035
Fam Zheng9fcb0252013-08-23 09:14:46 +08002036 /* reference count */
2037 bs_dest->refcnt = bs_src->refcnt;
2038
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002039 /* job */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002040 bs_dest->job = bs_src->job;
2041
2042 /* keep the same entry in bdrv_states */
Benoît Canetdc364f42014-01-23 21:31:32 +01002043 bs_dest->device_list = bs_src->device_list;
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002044 bs_dest->blk = bs_src->blk;
2045
Fam Zhengfbe40ff2014-05-23 21:29:42 +08002046 memcpy(bs_dest->op_blockers, bs_src->op_blockers,
2047 sizeof(bs_dest->op_blockers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002048}
2049
2050/*
2051 * Swap bs contents for two image chains while they are live,
2052 * while keeping required fields on the BlockDriverState that is
2053 * actually attached to a device.
2054 *
2055 * This will modify the BlockDriverState fields, and swap contents
2056 * between bs_new and bs_old. Both bs_new and bs_old are modified.
2057 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002058 * bs_new must not be attached to a BlockBackend.
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002059 *
2060 * This function does not create any image files.
2061 */
2062void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
2063{
2064 BlockDriverState tmp;
Kevin Wolfbddcec32015-04-09 18:47:50 +02002065 BdrvChild *child;
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002066
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002067 bdrv_drain(bs_new);
2068 bdrv_drain(bs_old);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002069
Benoît Canet90ce8a02014-03-05 23:48:29 +01002070 /* The code needs to swap the node_name but simply swapping node_list won't
2071 * work so first remove the nodes from the graph list, do the swap then
2072 * insert them back if needed.
2073 */
2074 if (bs_new->node_name[0] != '\0') {
2075 QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2076 }
2077 if (bs_old->node_name[0] != '\0') {
2078 QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2079 }
2080
Alberto Garciadb628332015-06-08 18:17:45 +02002081 /* If the BlockDriverState is part of a throttling group acquire
2082 * its lock since we're going to mess with the protected fields.
2083 * Otherwise there's no need to worry since no one else can touch
2084 * them. */
2085 if (bs_old->throttle_state) {
2086 throttle_group_lock(bs_old);
2087 }
2088
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002089 /* bs_new must be unattached and shouldn't have anything fancy enabled */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002090 assert(!bs_new->blk);
Fam Zhenge4654d22013-11-13 18:29:43 +08002091 assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002092 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002093 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002094 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002095 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002096
2097 tmp = *bs_new;
2098 *bs_new = *bs_old;
2099 *bs_old = tmp;
2100
2101 /* there are some fields that should not be swapped, move them back */
2102 bdrv_move_feature_fields(&tmp, bs_old);
2103 bdrv_move_feature_fields(bs_old, bs_new);
2104 bdrv_move_feature_fields(bs_new, &tmp);
2105
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002106 /* bs_new must remain unattached */
Markus Armbruster7e7d56d2014-10-07 13:59:05 +02002107 assert(!bs_new->blk);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002108
2109 /* Check a few fields that should remain attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002110 assert(bs_new->job == NULL);
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002111 assert(bs_new->io_limits_enabled == false);
Alberto Garciadb628332015-06-08 18:17:45 +02002112 assert(bs_new->throttle_state == NULL);
Benoît Canet0e5b0a22015-06-08 18:17:41 +02002113 assert(!throttle_timers_are_initialized(&bs_new->throttle_timers));
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002114
Alberto Garciadb628332015-06-08 18:17:45 +02002115 /* Release the ThrottleGroup lock */
2116 if (bs_old->throttle_state) {
2117 throttle_group_unlock(bs_old);
2118 }
2119
Benoît Canet90ce8a02014-03-05 23:48:29 +01002120 /* insert the nodes back into the graph node list if needed */
2121 if (bs_new->node_name[0] != '\0') {
2122 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2123 }
2124 if (bs_old->node_name[0] != '\0') {
2125 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2126 }
2127
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002128 /*
2129 * Update lh_first.le_prev for non-empty lists.
2130 *
2131 * The head of the op blocker list doesn't change because it is moved back
2132 * in bdrv_move_feature_fields().
2133 */
Kevin Wolf6ee4ce12015-06-10 13:33:17 +02002134 assert(QLIST_EMPTY(&bs_old->tracked_requests));
2135 assert(QLIST_EMPTY(&bs_new->tracked_requests));
2136
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002137 QLIST_FIX_HEAD_PTR(&bs_new->children, next);
2138 QLIST_FIX_HEAD_PTR(&bs_old->children, next);
2139
Kevin Wolfbddcec32015-04-09 18:47:50 +02002140 /* Update references in bs->opaque and children */
2141 QLIST_FOREACH(child, &bs_old->children, next) {
2142 if (child->bs->inherits_from == bs_new) {
2143 child->bs->inherits_from = bs_old;
2144 }
2145 }
2146 QLIST_FOREACH(child, &bs_new->children, next) {
2147 if (child->bs->inherits_from == bs_old) {
2148 child->bs->inherits_from = bs_new;
2149 }
2150 }
2151
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002152 bdrv_rebind(bs_new);
2153 bdrv_rebind(bs_old);
2154}
2155
Jeff Cody8802d1f2012-02-28 15:54:06 -05002156/*
2157 * Add new bs contents at the top of an image chain while the chain is
2158 * live, while keeping required fields on the top layer.
2159 *
2160 * This will modify the BlockDriverState fields, and swap contents
2161 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2162 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002163 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002164 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002165 * This function does not create any image files.
2166 */
2167void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2168{
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002169 bdrv_swap(bs_new, bs_top);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002170
2171 /* The contents of 'tmp' will become bs_top, as we are
2172 * swapping bs_new and bs_top contents. */
Fam Zheng8d24cce2014-05-23 21:29:45 +08002173 bdrv_set_backing_hd(bs_top, bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002174}
2175
Fam Zheng4f6fd342013-08-23 09:14:47 +08002176static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002177{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002178 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002179 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002180 assert(!bs->refcnt);
Fam Zhenge4654d22013-11-13 18:29:43 +08002181 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
Markus Armbruster18846de2010-06-29 16:58:30 +02002182
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002183 bdrv_close(bs);
2184
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002185 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002186 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002187
Anthony Liguori7267c092011-08-20 22:09:37 -05002188 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002189}
2190
aliguorie97fc192009-04-21 23:11:50 +00002191/*
2192 * Run consistency checks on an image
2193 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002194 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002195 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002196 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002197 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002198int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002199{
Max Reitz908bcd52014-08-07 22:47:55 +02002200 if (bs->drv == NULL) {
2201 return -ENOMEDIUM;
2202 }
aliguorie97fc192009-04-21 23:11:50 +00002203 if (bs->drv->bdrv_check == NULL) {
2204 return -ENOTSUP;
2205 }
2206
Kevin Wolfe076f332010-06-29 11:43:13 +02002207 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002208 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002209}
2210
Kevin Wolf8a426612010-07-16 17:17:01 +02002211#define COMMIT_BUF_SECTORS 2048
2212
bellard33e39632003-07-06 17:15:21 +00002213/* commit COW file into the raw image */
2214int bdrv_commit(BlockDriverState *bs)
2215{
bellard19cb3732006-08-19 11:45:59 +00002216 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002217 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002218 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002219 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002220 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002221
bellard19cb3732006-08-19 11:45:59 +00002222 if (!drv)
2223 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002224
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002225 if (!bs->backing_hd) {
2226 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002227 }
2228
Fam Zhengbb000212014-09-11 13:14:00 +08002229 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
2230 bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002231 return -EBUSY;
2232 }
2233
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002234 ro = bs->backing_hd->read_only;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002235 open_flags = bs->backing_hd->open_flags;
2236
2237 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002238 if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2239 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002240 }
bellard33e39632003-07-06 17:15:21 +00002241 }
bellardea2384d2004-08-01 21:59:26 +00002242
Jeff Cody72706ea2014-01-24 09:02:35 -05002243 length = bdrv_getlength(bs);
2244 if (length < 0) {
2245 ret = length;
2246 goto ro_cleanup;
2247 }
2248
2249 backing_length = bdrv_getlength(bs->backing_hd);
2250 if (backing_length < 0) {
2251 ret = backing_length;
2252 goto ro_cleanup;
2253 }
2254
2255 /* If our top snapshot is larger than the backing file image,
2256 * grow the backing file image if possible. If not possible,
2257 * we must return an error */
2258 if (length > backing_length) {
2259 ret = bdrv_truncate(bs->backing_hd, length);
2260 if (ret < 0) {
2261 goto ro_cleanup;
2262 }
2263 }
2264
2265 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002266
2267 /* qemu_try_blockalign() for bs will choose an alignment that works for
2268 * bs->backing_hd as well, so no need to compare the alignment manually. */
2269 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2270 if (buf == NULL) {
2271 ret = -ENOMEM;
2272 goto ro_cleanup;
2273 }
bellardea2384d2004-08-01 21:59:26 +00002274
Kevin Wolf8a426612010-07-16 17:17:01 +02002275 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002276 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2277 if (ret < 0) {
2278 goto ro_cleanup;
2279 }
2280 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002281 ret = bdrv_read(bs, sector, buf, n);
2282 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002283 goto ro_cleanup;
2284 }
2285
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002286 ret = bdrv_write(bs->backing_hd, sector, buf, n);
2287 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002288 goto ro_cleanup;
2289 }
bellardea2384d2004-08-01 21:59:26 +00002290 }
2291 }
bellard95389c82005-12-18 18:28:15 +00002292
Christoph Hellwig1d449522010-01-17 12:32:30 +01002293 if (drv->bdrv_make_empty) {
2294 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002295 if (ret < 0) {
2296 goto ro_cleanup;
2297 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002298 bdrv_flush(bs);
2299 }
bellard95389c82005-12-18 18:28:15 +00002300
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002301 /*
2302 * Make sure all data we wrote to the backing device is actually
2303 * stable on disk.
2304 */
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002305 if (bs->backing_hd) {
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002306 bdrv_flush(bs->backing_hd);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002307 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002308
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002309 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002310ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002311 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002312
2313 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002314 /* ignoring error return here */
2315 bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002316 }
2317
Christoph Hellwig1d449522010-01-17 12:32:30 +01002318 return ret;
bellard33e39632003-07-06 17:15:21 +00002319}
2320
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002321int bdrv_commit_all(void)
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002322{
2323 BlockDriverState *bs;
2324
Benoît Canetdc364f42014-01-23 21:31:32 +01002325 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002326 AioContext *aio_context = bdrv_get_aio_context(bs);
2327
2328 aio_context_acquire(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002329 if (bs->drv && bs->backing_hd) {
2330 int ret = bdrv_commit(bs);
2331 if (ret < 0) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002332 aio_context_release(aio_context);
Jeff Cody272d2d82013-02-26 09:55:48 -05002333 return ret;
2334 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002335 }
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002336 aio_context_release(aio_context);
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002337 }
Stefan Hajnoczie8877492012-03-05 18:10:11 +00002338 return 0;
Markus Armbruster6ab4b5a2010-06-02 18:55:18 +02002339}
2340
Kevin Wolf756e6732010-01-12 12:55:17 +01002341/*
2342 * Return values:
2343 * 0 - success
2344 * -EINVAL - backing format specified, but no file
2345 * -ENOSPC - can't update the backing file because no space is left in the
2346 * image file header
2347 * -ENOTSUP - format driver doesn't support changing the backing file
2348 */
2349int bdrv_change_backing_file(BlockDriverState *bs,
2350 const char *backing_file, const char *backing_fmt)
2351{
2352 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002353 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002354
Paolo Bonzini5f377792012-04-12 14:01:01 +02002355 /* Backing file format doesn't make sense without a backing file */
2356 if (backing_fmt && !backing_file) {
2357 return -EINVAL;
2358 }
2359
Kevin Wolf756e6732010-01-12 12:55:17 +01002360 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002361 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002362 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002363 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002364 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002365
2366 if (ret == 0) {
2367 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2368 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2369 }
2370 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002371}
2372
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002373/*
2374 * Finds the image layer in the chain that has 'bs' as its backing file.
2375 *
2376 * active is the current topmost image.
2377 *
2378 * Returns NULL if bs is not found in active's image chain,
2379 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002380 *
2381 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002382 */
2383BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2384 BlockDriverState *bs)
2385{
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002386 while (active && bs != active->backing_hd) {
2387 active = active->backing_hd;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002388 }
2389
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002390 return active;
2391}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002392
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002393/* Given a BDS, searches for the base layer. */
2394BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2395{
2396 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002397}
2398
2399typedef struct BlkIntermediateStates {
2400 BlockDriverState *bs;
2401 QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2402} BlkIntermediateStates;
2403
2404
2405/*
2406 * Drops images above 'base' up to and including 'top', and sets the image
2407 * above 'top' to have base as its backing file.
2408 *
2409 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2410 * information in 'bs' can be properly updated.
2411 *
2412 * E.g., this will convert the following chain:
2413 * bottom <- base <- intermediate <- top <- active
2414 *
2415 * to
2416 *
2417 * bottom <- base <- active
2418 *
2419 * It is allowed for bottom==base, in which case it converts:
2420 *
2421 * base <- intermediate <- top <- active
2422 *
2423 * to
2424 *
2425 * base <- active
2426 *
Jeff Cody54e26902014-06-25 15:40:10 -04002427 * If backing_file_str is non-NULL, it will be used when modifying top's
2428 * overlay image metadata.
2429 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002430 * Error conditions:
2431 * if active == top, that is considered an error
2432 *
2433 */
2434int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002435 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002436{
2437 BlockDriverState *intermediate;
2438 BlockDriverState *base_bs = NULL;
2439 BlockDriverState *new_top_bs = NULL;
2440 BlkIntermediateStates *intermediate_state, *next;
2441 int ret = -EIO;
2442
2443 QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2444 QSIMPLEQ_INIT(&states_to_delete);
2445
2446 if (!top->drv || !base->drv) {
2447 goto exit;
2448 }
2449
2450 new_top_bs = bdrv_find_overlay(active, top);
2451
2452 if (new_top_bs == NULL) {
2453 /* we could not find the image above 'top', this is an error */
2454 goto exit;
2455 }
2456
2457 /* special case of new_top_bs->backing_hd already pointing to base - nothing
2458 * to do, no intermediate images */
2459 if (new_top_bs->backing_hd == base) {
2460 ret = 0;
2461 goto exit;
2462 }
2463
2464 intermediate = top;
2465
2466 /* now we will go down through the list, and add each BDS we find
2467 * into our deletion queue, until we hit the 'base'
2468 */
2469 while (intermediate) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002470 intermediate_state = g_new0(BlkIntermediateStates, 1);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002471 intermediate_state->bs = intermediate;
2472 QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2473
2474 if (intermediate->backing_hd == base) {
2475 base_bs = intermediate->backing_hd;
2476 break;
2477 }
2478 intermediate = intermediate->backing_hd;
2479 }
2480 if (base_bs == NULL) {
2481 /* something went wrong, we did not end at the base. safely
2482 * unravel everything, and exit with error */
2483 goto exit;
2484 }
2485
2486 /* success - we can delete the intermediate states, and link top->base */
Jeff Cody54e26902014-06-25 15:40:10 -04002487 backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2488 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002489 base_bs->drv ? base_bs->drv->format_name : "");
2490 if (ret) {
2491 goto exit;
2492 }
Fam Zheng920beae2014-05-23 21:29:46 +08002493 bdrv_set_backing_hd(new_top_bs, base_bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002494
2495 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2496 /* so that bdrv_close() does not recursively close the chain */
Fam Zheng920beae2014-05-23 21:29:46 +08002497 bdrv_set_backing_hd(intermediate_state->bs, NULL);
Fam Zheng4f6fd342013-08-23 09:14:47 +08002498 bdrv_unref(intermediate_state->bs);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002499 }
2500 ret = 0;
2501
2502exit:
2503 QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2504 g_free(intermediate_state);
2505 }
2506 return ret;
2507}
2508
bellard83f64092006-08-01 16:21:11 +00002509/**
bellard83f64092006-08-01 16:21:11 +00002510 * Truncate file to 'offset' bytes (needed only for file protocols)
2511 */
2512int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2513{
2514 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002515 int ret;
bellard83f64092006-08-01 16:21:11 +00002516 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002517 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002518 if (!drv->bdrv_truncate)
2519 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002520 if (bs->read_only)
2521 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002522
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002523 ret = drv->bdrv_truncate(bs, offset);
2524 if (ret == 0) {
2525 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002526 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002527 if (bs->blk) {
2528 blk_dev_resize_cb(bs->blk);
2529 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002530 }
2531 return ret;
bellard83f64092006-08-01 16:21:11 +00002532}
2533
2534/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002535 * Length of a allocated file in bytes. Sparse files are counted by actual
2536 * allocated space. Return < 0 if error or unknown.
2537 */
2538int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2539{
2540 BlockDriver *drv = bs->drv;
2541 if (!drv) {
2542 return -ENOMEDIUM;
2543 }
2544 if (drv->bdrv_get_allocated_file_size) {
2545 return drv->bdrv_get_allocated_file_size(bs);
2546 }
2547 if (bs->file) {
2548 return bdrv_get_allocated_file_size(bs->file);
2549 }
2550 return -ENOTSUP;
2551}
2552
2553/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002554 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002555 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002556int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002557{
2558 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002559
bellard83f64092006-08-01 16:21:11 +00002560 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002561 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002562
Kevin Wolfb94a2612013-10-29 12:18:58 +01002563 if (drv->has_variable_length) {
2564 int ret = refresh_total_sectors(bs, bs->total_sectors);
2565 if (ret < 0) {
2566 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002567 }
bellard83f64092006-08-01 16:21:11 +00002568 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002569 return bs->total_sectors;
2570}
2571
2572/**
2573 * Return length in bytes on success, -errno on error.
2574 * The length is always a multiple of BDRV_SECTOR_SIZE.
2575 */
2576int64_t bdrv_getlength(BlockDriverState *bs)
2577{
2578 int64_t ret = bdrv_nb_sectors(bs);
2579
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002580 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002581 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002582}
2583
bellard19cb3732006-08-19 11:45:59 +00002584/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002585void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002586{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002587 int64_t nb_sectors = bdrv_nb_sectors(bs);
2588
2589 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002590}
bellardcf989512004-02-16 21:56:36 +00002591
Paolo Bonziniff06f5f2012-09-28 17:22:54 +02002592void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
2593 BlockdevOnError on_write_error)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002594{
2595 bs->on_read_error = on_read_error;
2596 bs->on_write_error = on_write_error;
2597}
2598
Paolo Bonzini1ceee0d2012-09-28 17:22:56 +02002599BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
Markus Armbrusterabd7f682010-06-02 18:55:17 +02002600{
2601 return is_read ? bs->on_read_error : bs->on_write_error;
2602}
2603
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002604BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
2605{
2606 BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
2607
2608 switch (on_err) {
2609 case BLOCKDEV_ON_ERROR_ENOSPC:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002610 return (error == ENOSPC) ?
2611 BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002612 case BLOCKDEV_ON_ERROR_STOP:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002613 return BLOCK_ERROR_ACTION_STOP;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002614 case BLOCKDEV_ON_ERROR_REPORT:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002615 return BLOCK_ERROR_ACTION_REPORT;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002616 case BLOCKDEV_ON_ERROR_IGNORE:
Wenchao Xiaa5895692014-06-18 08:43:30 +02002617 return BLOCK_ERROR_ACTION_IGNORE;
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002618 default:
2619 abort();
2620 }
2621}
2622
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002623static void send_qmp_error_event(BlockDriverState *bs,
2624 BlockErrorAction action,
2625 bool is_read, int error)
2626{
Peter Maydell573742a2014-10-10 20:33:03 +01002627 IoOperationType optype;
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002628
Peter Maydell573742a2014-10-10 20:33:03 +01002629 optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
2630 qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002631 bdrv_iostatus_is_enabled(bs),
Luiz Capitulino624ff572014-09-11 10:25:48 -04002632 error == ENOSPC, strerror(error),
2633 &error_abort);
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002634}
2635
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002636/* This is done by device models because, while the block layer knows
2637 * about the error, it does not know whether an operation comes from
2638 * the device or the block layer (from a job, for example).
2639 */
2640void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
2641 bool is_read, int error)
2642{
2643 assert(error >= 0);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002644
Wenchao Xiaa5895692014-06-18 08:43:30 +02002645 if (action == BLOCK_ERROR_ACTION_STOP) {
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002646 /* First set the iostatus, so that "info block" returns an iostatus
2647 * that matches the events raised so far (an additional error iostatus
2648 * is fine, but not a lost one).
2649 */
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002650 bdrv_iostatus_set_err(bs, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002651
2652 /* Then raise the request to stop the VM and the event.
2653 * qemu_system_vmstop_request_prepare has two effects. First,
2654 * it ensures that the STOP event always comes after the
2655 * BLOCK_IO_ERROR event. Second, it ensures that even if management
2656 * can observe the STOP event and do a "cont" before the STOP
2657 * event is issued, the VM will not stop. In this case, vm_start()
2658 * also ensures that the STOP/RESUME pair of events is emitted.
2659 */
2660 qemu_system_vmstop_request_prepare();
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002661 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini2bd3bce2014-06-05 14:53:59 +02002662 qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
2663 } else {
Luiz Capitulinoc7c2ff02014-08-29 16:07:27 -04002664 send_qmp_error_event(bs, action, is_read, error);
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02002665 }
2666}
2667
bellardb3380822004-03-14 21:38:54 +00002668int bdrv_is_read_only(BlockDriverState *bs)
2669{
2670 return bs->read_only;
2671}
2672
ths985a03b2007-12-24 16:10:43 +00002673int bdrv_is_sg(BlockDriverState *bs)
2674{
2675 return bs->sg;
2676}
2677
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002678int bdrv_enable_write_cache(BlockDriverState *bs)
2679{
2680 return bs->enable_write_cache;
2681}
2682
Paolo Bonzini425b0142012-06-06 00:04:52 +02002683void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2684{
2685 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002686
2687 /* so a reopen() will preserve wce */
2688 if (wce) {
2689 bs->open_flags |= BDRV_O_CACHE_WB;
2690 } else {
2691 bs->open_flags &= ~BDRV_O_CACHE_WB;
2692 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002693}
2694
bellardea2384d2004-08-01 21:59:26 +00002695int bdrv_is_encrypted(BlockDriverState *bs)
2696{
2697 if (bs->backing_hd && bs->backing_hd->encrypted)
2698 return 1;
2699 return bs->encrypted;
2700}
2701
aliguoric0f4ce72009-03-05 23:01:01 +00002702int bdrv_key_required(BlockDriverState *bs)
2703{
2704 BlockDriverState *backing_hd = bs->backing_hd;
2705
2706 if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
2707 return 1;
2708 return (bs->encrypted && !bs->valid_key);
2709}
2710
bellardea2384d2004-08-01 21:59:26 +00002711int bdrv_set_key(BlockDriverState *bs, const char *key)
2712{
2713 int ret;
2714 if (bs->backing_hd && bs->backing_hd->encrypted) {
2715 ret = bdrv_set_key(bs->backing_hd, key);
2716 if (ret < 0)
2717 return ret;
2718 if (!bs->encrypted)
2719 return 0;
2720 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002721 if (!bs->encrypted) {
2722 return -EINVAL;
2723 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2724 return -ENOMEDIUM;
2725 }
aliguoric0f4ce72009-03-05 23:01:01 +00002726 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002727 if (ret < 0) {
2728 bs->valid_key = 0;
2729 } else if (!bs->valid_key) {
2730 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002731 if (bs->blk) {
2732 /* call the change callback now, we skipped it on open */
2733 blk_dev_change_media_cb(bs->blk, true);
2734 }
aliguoribb5fc202009-03-05 23:01:15 +00002735 }
aliguoric0f4ce72009-03-05 23:01:01 +00002736 return ret;
bellardea2384d2004-08-01 21:59:26 +00002737}
2738
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002739/*
2740 * Provide an encryption key for @bs.
2741 * If @key is non-null:
2742 * If @bs is not encrypted, fail.
2743 * Else if the key is invalid, fail.
2744 * Else set @bs's key to @key, replacing the existing key, if any.
2745 * If @key is null:
2746 * If @bs is encrypted and still lacks a key, fail.
2747 * Else do nothing.
2748 * On failure, store an error object through @errp if non-null.
2749 */
2750void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2751{
2752 if (key) {
2753 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002754 error_setg(errp, "Node '%s' is not encrypted",
2755 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002756 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002757 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002758 }
2759 } else {
2760 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002761 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2762 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002763 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002764 bdrv_get_encrypted_filename(bs));
2765 }
2766 }
2767}
2768
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002769const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002770{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002771 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002772}
2773
Stefan Hajnocziada42402014-08-27 12:08:55 +01002774static int qsort_strcmp(const void *a, const void *b)
2775{
2776 return strcmp(a, b);
2777}
2778
ths5fafdf22007-09-16 21:08:06 +00002779void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002780 void *opaque)
2781{
2782 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002783 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002784 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002785 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002786
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002787 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002788 if (drv->format_name) {
2789 bool found = false;
2790 int i = count;
2791 while (formats && i && !found) {
2792 found = !strcmp(formats[--i], drv->format_name);
2793 }
2794
2795 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002796 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002797 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002798 }
2799 }
bellardea2384d2004-08-01 21:59:26 +00002800 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002801
2802 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2803
2804 for (i = 0; i < count; i++) {
2805 it(opaque, formats[i]);
2806 }
2807
Jeff Codye855e4f2014-04-28 18:29:54 -04002808 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002809}
2810
Benoît Canetdc364f42014-01-23 21:31:32 +01002811/* This function is to find a node in the bs graph */
2812BlockDriverState *bdrv_find_node(const char *node_name)
2813{
2814 BlockDriverState *bs;
2815
2816 assert(node_name);
2817
2818 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2819 if (!strcmp(node_name, bs->node_name)) {
2820 return bs;
2821 }
2822 }
2823 return NULL;
2824}
2825
Benoît Canetc13163f2014-01-23 21:31:34 +01002826/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002827BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002828{
2829 BlockDeviceInfoList *list, *entry;
2830 BlockDriverState *bs;
2831
2832 list = NULL;
2833 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002834 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2835 if (!info) {
2836 qapi_free_BlockDeviceInfoList(list);
2837 return NULL;
2838 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002839 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002840 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002841 entry->next = list;
2842 list = entry;
2843 }
2844
2845 return list;
2846}
2847
Benoît Canet12d3ba82014-01-23 21:31:35 +01002848BlockDriverState *bdrv_lookup_bs(const char *device,
2849 const char *node_name,
2850 Error **errp)
2851{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002852 BlockBackend *blk;
2853 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002854
Benoît Canet12d3ba82014-01-23 21:31:35 +01002855 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002856 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002857
Markus Armbruster7f06d472014-10-07 13:59:12 +02002858 if (blk) {
2859 return blk_bs(blk);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002860 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002861 }
2862
Benoît Canetdd67fa52014-02-12 17:15:06 +01002863 if (node_name) {
2864 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002865
Benoît Canetdd67fa52014-02-12 17:15:06 +01002866 if (bs) {
2867 return bs;
2868 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002869 }
2870
Benoît Canetdd67fa52014-02-12 17:15:06 +01002871 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2872 device ? device : "",
2873 node_name ? node_name : "");
2874 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002875}
2876
Jeff Cody5a6684d2014-06-25 15:40:09 -04002877/* If 'base' is in the same chain as 'top', return true. Otherwise,
2878 * return false. If either argument is NULL, return false. */
2879bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2880{
2881 while (top && top != base) {
2882 top = top->backing_hd;
2883 }
2884
2885 return top != NULL;
2886}
2887
Fam Zheng04df7652014-10-31 11:32:54 +08002888BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2889{
2890 if (!bs) {
2891 return QTAILQ_FIRST(&graph_bdrv_states);
2892 }
2893 return QTAILQ_NEXT(bs, node_list);
2894}
2895
Markus Armbruster2f399b02010-06-02 18:55:20 +02002896BlockDriverState *bdrv_next(BlockDriverState *bs)
2897{
2898 if (!bs) {
2899 return QTAILQ_FIRST(&bdrv_states);
2900 }
Benoît Canetdc364f42014-01-23 21:31:32 +01002901 return QTAILQ_NEXT(bs, device_list);
Markus Armbruster2f399b02010-06-02 18:55:20 +02002902}
2903
Fam Zheng20a9e772014-10-31 11:32:55 +08002904const char *bdrv_get_node_name(const BlockDriverState *bs)
2905{
2906 return bs->node_name;
2907}
2908
Markus Armbruster7f06d472014-10-07 13:59:12 +02002909/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002910const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002911{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002912 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002913}
2914
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002915/* This can be used to identify nodes that might not have a device
2916 * name associated. Since node and device names live in the same
2917 * namespace, the result is unambiguous. The exception is if both are
2918 * absent, then this returns an empty (non-null) string. */
2919const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2920{
2921 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2922}
2923
Markus Armbrusterc8433282012-06-05 16:49:24 +02002924int bdrv_get_flags(BlockDriverState *bs)
2925{
2926 return bs->open_flags;
2927}
2928
Peter Lieven3ac21622013-06-28 12:47:42 +02002929int bdrv_has_zero_init_1(BlockDriverState *bs)
2930{
2931 return 1;
2932}
2933
Kevin Wolff2feebb2010-04-14 17:30:35 +02002934int bdrv_has_zero_init(BlockDriverState *bs)
2935{
2936 assert(bs->drv);
2937
Paolo Bonzini11212d82013-09-04 19:00:27 +02002938 /* If BS is a copy on write image, it is initialized to
2939 the contents of the base image, which may not be zeroes. */
2940 if (bs->backing_hd) {
2941 return 0;
2942 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002943 if (bs->drv->bdrv_has_zero_init) {
2944 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002945 }
2946
Peter Lieven3ac21622013-06-28 12:47:42 +02002947 /* safe default */
2948 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002949}
2950
Peter Lieven4ce78692013-10-24 12:06:54 +02002951bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2952{
2953 BlockDriverInfo bdi;
2954
2955 if (bs->backing_hd) {
2956 return false;
2957 }
2958
2959 if (bdrv_get_info(bs, &bdi) == 0) {
2960 return bdi.unallocated_blocks_are_zero;
2961 }
2962
2963 return false;
2964}
2965
2966bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2967{
2968 BlockDriverInfo bdi;
2969
2970 if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
2971 return false;
2972 }
2973
2974 if (bdrv_get_info(bs, &bdi) == 0) {
2975 return bdi.can_write_zeroes_with_unmap;
2976 }
2977
2978 return false;
2979}
2980
aliguori045df332009-03-05 23:00:48 +00002981const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2982{
2983 if (bs->backing_hd && bs->backing_hd->encrypted)
2984 return bs->backing_file;
2985 else if (bs->encrypted)
2986 return bs->filename;
2987 else
2988 return NULL;
2989}
2990
ths5fafdf22007-09-16 21:08:06 +00002991void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002992 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002993{
Kevin Wolf3574c602011-10-26 11:02:11 +02002994 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002995}
2996
bellardfaea38e2006-08-05 21:31:00 +00002997int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2998{
2999 BlockDriver *drv = bs->drv;
3000 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00003001 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00003002 if (!drv->bdrv_get_info)
3003 return -ENOTSUP;
3004 memset(bdi, 0, sizeof(*bdi));
3005 return drv->bdrv_get_info(bs, bdi);
3006}
3007
Max Reitzeae041f2013-10-09 10:46:16 +02003008ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3009{
3010 BlockDriver *drv = bs->drv;
3011 if (drv && drv->bdrv_get_specific_info) {
3012 return drv->bdrv_get_specific_info(bs);
3013 }
3014 return NULL;
3015}
3016
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003017void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
3018{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003019 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003020 return;
3021 }
3022
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003023 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01003024}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003025
Kevin Wolf41c695c2012-12-06 14:32:58 +01003026int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3027 const char *tag)
3028{
3029 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
3030 bs = bs->file;
3031 }
3032
3033 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3034 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3035 }
3036
3037 return -ENOTSUP;
3038}
3039
Fam Zheng4cc70e92013-11-20 10:01:54 +08003040int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3041{
3042 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
3043 bs = bs->file;
3044 }
3045
3046 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3047 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3048 }
3049
3050 return -ENOTSUP;
3051}
3052
Kevin Wolf41c695c2012-12-06 14:32:58 +01003053int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3054{
Max Reitz938789e2014-03-10 23:44:08 +01003055 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf41c695c2012-12-06 14:32:58 +01003056 bs = bs->file;
3057 }
3058
3059 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3060 return bs->drv->bdrv_debug_resume(bs, tag);
3061 }
3062
3063 return -ENOTSUP;
3064}
3065
3066bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3067{
3068 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3069 bs = bs->file;
3070 }
3071
3072 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3073 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3074 }
3075
3076 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003077}
3078
Blue Swirl199630b2010-07-25 20:49:34 +00003079int bdrv_is_snapshot(BlockDriverState *bs)
3080{
3081 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3082}
3083
Jeff Codyb1b1d782012-10-16 15:49:09 -04003084/* backing_file can either be relative, or absolute, or a protocol. If it is
3085 * relative, it must be relative to the chain. So, passing in bs->filename
3086 * from a BDS as backing_file should not be done, as that may be relative to
3087 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003088BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3089 const char *backing_file)
3090{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003091 char *filename_full = NULL;
3092 char *backing_file_full = NULL;
3093 char *filename_tmp = NULL;
3094 int is_protocol = 0;
3095 BlockDriverState *curr_bs = NULL;
3096 BlockDriverState *retval = NULL;
3097
3098 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003099 return NULL;
3100 }
3101
Jeff Codyb1b1d782012-10-16 15:49:09 -04003102 filename_full = g_malloc(PATH_MAX);
3103 backing_file_full = g_malloc(PATH_MAX);
3104 filename_tmp = g_malloc(PATH_MAX);
3105
3106 is_protocol = path_has_protocol(backing_file);
3107
3108 for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
3109
3110 /* If either of the filename paths is actually a protocol, then
3111 * compare unmodified paths; otherwise make paths relative */
3112 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3113 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3114 retval = curr_bs->backing_hd;
3115 break;
3116 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003117 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003118 /* If not an absolute filename path, make it relative to the current
3119 * image's filename path */
3120 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3121 backing_file);
3122
3123 /* We are going to compare absolute pathnames */
3124 if (!realpath(filename_tmp, filename_full)) {
3125 continue;
3126 }
3127
3128 /* We need to make sure the backing filename we are comparing against
3129 * is relative to the current image filename (or absolute) */
3130 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3131 curr_bs->backing_file);
3132
3133 if (!realpath(filename_tmp, backing_file_full)) {
3134 continue;
3135 }
3136
3137 if (strcmp(backing_file_full, filename_full) == 0) {
3138 retval = curr_bs->backing_hd;
3139 break;
3140 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003141 }
3142 }
3143
Jeff Codyb1b1d782012-10-16 15:49:09 -04003144 g_free(filename_full);
3145 g_free(backing_file_full);
3146 g_free(filename_tmp);
3147 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003148}
3149
Benoît Canetf198fd12012-08-02 10:22:47 +02003150int bdrv_get_backing_file_depth(BlockDriverState *bs)
3151{
3152 if (!bs->drv) {
3153 return 0;
3154 }
3155
3156 if (!bs->backing_hd) {
3157 return 0;
3158 }
3159
3160 return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3161}
3162
bellardea2384d2004-08-01 21:59:26 +00003163void bdrv_init(void)
3164{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003165 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003166}
pbrookce1a14d2006-08-07 02:38:06 +00003167
Markus Armbrustereb852012009-10-27 18:41:44 +01003168void bdrv_init_with_whitelist(void)
3169{
3170 use_bdrv_whitelist = 1;
3171 bdrv_init();
3172}
3173
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003174void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003175{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003176 Error *local_err = NULL;
3177 int ret;
3178
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003179 if (!bs->drv) {
3180 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003181 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003182
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003183 if (!(bs->open_flags & BDRV_O_INCOMING)) {
3184 return;
3185 }
3186 bs->open_flags &= ~BDRV_O_INCOMING;
3187
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003188 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003189 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003190 } else if (bs->file) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003191 bdrv_invalidate_cache(bs->file, &local_err);
3192 }
3193 if (local_err) {
3194 error_propagate(errp, local_err);
3195 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003196 }
3197
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003198 ret = refresh_total_sectors(bs, bs->total_sectors);
3199 if (ret < 0) {
3200 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3201 return;
3202 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003203}
3204
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003205void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003206{
3207 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003208 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003209
Benoît Canetdc364f42014-01-23 21:31:32 +01003210 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003211 AioContext *aio_context = bdrv_get_aio_context(bs);
3212
3213 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003214 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003215 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003216 if (local_err) {
3217 error_propagate(errp, local_err);
3218 return;
3219 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003220 }
3221}
3222
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003223/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003224/* removable device support */
3225
3226/**
3227 * Return TRUE if the media is present
3228 */
3229int bdrv_is_inserted(BlockDriverState *bs)
3230{
3231 BlockDriver *drv = bs->drv;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003232
bellard19cb3732006-08-19 11:45:59 +00003233 if (!drv)
3234 return 0;
3235 if (!drv->bdrv_is_inserted)
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003236 return 1;
3237 return drv->bdrv_is_inserted(bs);
bellard19cb3732006-08-19 11:45:59 +00003238}
3239
3240/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003241 * Return whether the media changed since the last call to this
3242 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003243 */
3244int bdrv_media_changed(BlockDriverState *bs)
3245{
3246 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003247
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003248 if (drv && drv->bdrv_media_changed) {
3249 return drv->bdrv_media_changed(bs);
3250 }
3251 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003252}
3253
3254/**
3255 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3256 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003257void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003258{
3259 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003260 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003261
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003262 if (drv && drv->bdrv_eject) {
3263 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003264 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003265
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003266 device_name = bdrv_get_device_name(bs);
3267 if (device_name[0] != '\0') {
3268 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003269 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003270 }
bellard19cb3732006-08-19 11:45:59 +00003271}
3272
bellard19cb3732006-08-19 11:45:59 +00003273/**
3274 * Lock or unlock the media (if it is locked, the user won't be able
3275 * to eject it manually).
3276 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003277void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003278{
3279 BlockDriver *drv = bs->drv;
3280
Markus Armbruster025e8492011-09-06 18:58:47 +02003281 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003282
Markus Armbruster025e8492011-09-06 18:58:47 +02003283 if (drv && drv->bdrv_lock_medium) {
3284 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003285 }
3286}
ths985a03b2007-12-24 16:10:43 +00003287
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003288void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003289{
Paolo Bonzini1b7fd722011-11-29 11:35:47 +01003290 bs->guest_block_size = align;
Markus Armbruster7b6f9302011-09-06 18:58:56 +02003291}
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003292
Fam Zheng0db6e542015-04-17 19:49:50 -04003293BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs, const char *name)
3294{
3295 BdrvDirtyBitmap *bm;
3296
3297 assert(name);
3298 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
3299 if (bm->name && !strcmp(name, bm->name)) {
3300 return bm;
3301 }
3302 }
3303 return NULL;
3304}
3305
John Snow20dca812015-04-17 19:50:02 -04003306void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap)
Fam Zheng0db6e542015-04-17 19:49:50 -04003307{
John Snow9bd2b082015-04-17 19:49:57 -04003308 assert(!bdrv_dirty_bitmap_frozen(bitmap));
Fam Zheng0db6e542015-04-17 19:49:50 -04003309 g_free(bitmap->name);
3310 bitmap->name = NULL;
3311}
3312
3313BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs,
John Snow5fba6c02015-04-17 19:49:51 -04003314 uint32_t granularity,
Fam Zheng0db6e542015-04-17 19:49:50 -04003315 const char *name,
Fam Zhengb8afb522014-04-16 09:34:30 +08003316 Error **errp)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003317{
3318 int64_t bitmap_size;
Fam Zhenge4654d22013-11-13 18:29:43 +08003319 BdrvDirtyBitmap *bitmap;
John Snow5fba6c02015-04-17 19:49:51 -04003320 uint32_t sector_granularity;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003321
Paolo Bonzini50717e92013-01-21 17:09:45 +01003322 assert((granularity & (granularity - 1)) == 0);
3323
Fam Zheng0db6e542015-04-17 19:49:50 -04003324 if (name && bdrv_find_dirty_bitmap(bs, name)) {
3325 error_setg(errp, "Bitmap already exists: %s", name);
3326 return NULL;
3327 }
John Snow5fba6c02015-04-17 19:49:51 -04003328 sector_granularity = granularity >> BDRV_SECTOR_BITS;
3329 assert(sector_granularity);
Markus Armbruster57322b72014-06-26 13:23:22 +02003330 bitmap_size = bdrv_nb_sectors(bs);
Fam Zhengb8afb522014-04-16 09:34:30 +08003331 if (bitmap_size < 0) {
3332 error_setg_errno(errp, -bitmap_size, "could not get length of device");
3333 errno = -bitmap_size;
3334 return NULL;
3335 }
Markus Armbruster5839e532014-08-19 10:31:08 +02003336 bitmap = g_new0(BdrvDirtyBitmap, 1);
John Snow5fba6c02015-04-17 19:49:51 -04003337 bitmap->bitmap = hbitmap_alloc(bitmap_size, ctz32(sector_granularity));
John Snowe74e6b72015-04-17 19:49:59 -04003338 bitmap->size = bitmap_size;
Fam Zheng0db6e542015-04-17 19:49:50 -04003339 bitmap->name = g_strdup(name);
John Snowb8e6fb72015-04-17 19:49:56 -04003340 bitmap->disabled = false;
Fam Zhenge4654d22013-11-13 18:29:43 +08003341 QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
3342 return bitmap;
3343}
3344
John Snow9bd2b082015-04-17 19:49:57 -04003345bool bdrv_dirty_bitmap_frozen(BdrvDirtyBitmap *bitmap)
3346{
3347 return bitmap->successor;
3348}
3349
John Snowb8e6fb72015-04-17 19:49:56 -04003350bool bdrv_dirty_bitmap_enabled(BdrvDirtyBitmap *bitmap)
3351{
John Snow9bd2b082015-04-17 19:49:57 -04003352 return !(bitmap->disabled || bitmap->successor);
3353}
3354
John Snow9abe3bd2015-05-12 15:53:01 -04003355DirtyBitmapStatus bdrv_dirty_bitmap_status(BdrvDirtyBitmap *bitmap)
3356{
3357 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3358 return DIRTY_BITMAP_STATUS_FROZEN;
3359 } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3360 return DIRTY_BITMAP_STATUS_DISABLED;
3361 } else {
3362 return DIRTY_BITMAP_STATUS_ACTIVE;
3363 }
3364}
3365
John Snow9bd2b082015-04-17 19:49:57 -04003366/**
3367 * Create a successor bitmap destined to replace this bitmap after an operation.
3368 * Requires that the bitmap is not frozen and has no successor.
3369 */
3370int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs,
3371 BdrvDirtyBitmap *bitmap, Error **errp)
3372{
3373 uint64_t granularity;
3374 BdrvDirtyBitmap *child;
3375
3376 if (bdrv_dirty_bitmap_frozen(bitmap)) {
3377 error_setg(errp, "Cannot create a successor for a bitmap that is "
3378 "currently frozen");
3379 return -1;
3380 }
3381 assert(!bitmap->successor);
3382
3383 /* Create an anonymous successor */
3384 granularity = bdrv_dirty_bitmap_granularity(bitmap);
3385 child = bdrv_create_dirty_bitmap(bs, granularity, NULL, errp);
3386 if (!child) {
3387 return -1;
3388 }
3389
3390 /* Successor will be on or off based on our current state. */
3391 child->disabled = bitmap->disabled;
3392
3393 /* Install the successor and freeze the parent */
3394 bitmap->successor = child;
3395 return 0;
3396}
3397
3398/**
3399 * For a bitmap with a successor, yield our name to the successor,
3400 * delete the old bitmap, and return a handle to the new bitmap.
3401 */
3402BdrvDirtyBitmap *bdrv_dirty_bitmap_abdicate(BlockDriverState *bs,
3403 BdrvDirtyBitmap *bitmap,
3404 Error **errp)
3405{
3406 char *name;
3407 BdrvDirtyBitmap *successor = bitmap->successor;
3408
3409 if (successor == NULL) {
3410 error_setg(errp, "Cannot relinquish control if "
3411 "there's no successor present");
3412 return NULL;
3413 }
3414
3415 name = bitmap->name;
3416 bitmap->name = NULL;
3417 successor->name = name;
3418 bitmap->successor = NULL;
3419 bdrv_release_dirty_bitmap(bs, bitmap);
3420
3421 return successor;
3422}
3423
3424/**
3425 * In cases of failure where we can no longer safely delete the parent,
3426 * we may wish to re-join the parent and child/successor.
3427 * The merged parent will be un-frozen, but not explicitly re-enabled.
3428 */
3429BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap(BlockDriverState *bs,
3430 BdrvDirtyBitmap *parent,
3431 Error **errp)
3432{
3433 BdrvDirtyBitmap *successor = parent->successor;
3434
3435 if (!successor) {
3436 error_setg(errp, "Cannot reclaim a successor when none is present");
3437 return NULL;
3438 }
3439
3440 if (!hbitmap_merge(parent->bitmap, successor->bitmap)) {
3441 error_setg(errp, "Merging of parent and successor bitmap failed");
3442 return NULL;
3443 }
3444 bdrv_release_dirty_bitmap(bs, successor);
3445 parent->successor = NULL;
3446
3447 return parent;
John Snowb8e6fb72015-04-17 19:49:56 -04003448}
3449
John Snowce1ffea2015-04-17 19:50:03 -04003450/**
3451 * Truncates _all_ bitmaps attached to a BDS.
3452 */
3453static void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
3454{
3455 BdrvDirtyBitmap *bitmap;
3456 uint64_t size = bdrv_nb_sectors(bs);
3457
3458 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snow06207b02015-06-10 13:24:54 -04003459 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowce1ffea2015-04-17 19:50:03 -04003460 hbitmap_truncate(bitmap->bitmap, size);
John Snow5270b6a2015-06-08 16:49:15 -04003461 bitmap->size = size;
John Snowce1ffea2015-04-17 19:50:03 -04003462 }
3463}
3464
Fam Zhenge4654d22013-11-13 18:29:43 +08003465void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
3466{
3467 BdrvDirtyBitmap *bm, *next;
3468 QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
3469 if (bm == bitmap) {
John Snow9bd2b082015-04-17 19:49:57 -04003470 assert(!bdrv_dirty_bitmap_frozen(bm));
Fam Zhenge4654d22013-11-13 18:29:43 +08003471 QLIST_REMOVE(bitmap, list);
3472 hbitmap_free(bitmap->bitmap);
Fam Zheng0db6e542015-04-17 19:49:50 -04003473 g_free(bitmap->name);
Fam Zhenge4654d22013-11-13 18:29:43 +08003474 g_free(bitmap);
3475 return;
Jan Kiszkaa55eb922009-11-30 18:21:19 +01003476 }
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003477 }
3478}
3479
John Snowb8e6fb72015-04-17 19:49:56 -04003480void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3481{
John Snow9bd2b082015-04-17 19:49:57 -04003482 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003483 bitmap->disabled = true;
3484}
3485
3486void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3487{
John Snow9bd2b082015-04-17 19:49:57 -04003488 assert(!bdrv_dirty_bitmap_frozen(bitmap));
John Snowb8e6fb72015-04-17 19:49:56 -04003489 bitmap->disabled = false;
3490}
3491
Fam Zheng21b56832013-11-13 18:29:44 +08003492BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
3493{
3494 BdrvDirtyBitmap *bm;
3495 BlockDirtyInfoList *list = NULL;
3496 BlockDirtyInfoList **plist = &list;
3497
3498 QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
Markus Armbruster5839e532014-08-19 10:31:08 +02003499 BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
3500 BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
John Snow20dca812015-04-17 19:50:02 -04003501 info->count = bdrv_get_dirty_count(bm);
John Snow592fdd02015-04-17 19:49:53 -04003502 info->granularity = bdrv_dirty_bitmap_granularity(bm);
Fam Zheng0db6e542015-04-17 19:49:50 -04003503 info->has_name = !!bm->name;
3504 info->name = g_strdup(bm->name);
John Snow9abe3bd2015-05-12 15:53:01 -04003505 info->status = bdrv_dirty_bitmap_status(bm);
Fam Zheng21b56832013-11-13 18:29:44 +08003506 entry->value = info;
3507 *plist = entry;
3508 plist = &entry->next;
3509 }
3510
3511 return list;
3512}
3513
Fam Zhenge4654d22013-11-13 18:29:43 +08003514int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003515{
Fam Zhenge4654d22013-11-13 18:29:43 +08003516 if (bitmap) {
3517 return hbitmap_get(bitmap->bitmap, sector);
lirans@il.ibm.com7cd1e322009-11-02 15:40:41 +02003518 } else {
3519 return 0;
3520 }
3521}
3522
John Snow341ebc22015-04-17 19:49:52 -04003523/**
3524 * Chooses a default granularity based on the existing cluster size,
3525 * but clamped between [4K, 64K]. Defaults to 64K in the case that there
3526 * is no cluster size information available.
3527 */
3528uint32_t bdrv_get_default_bitmap_granularity(BlockDriverState *bs)
3529{
3530 BlockDriverInfo bdi;
3531 uint32_t granularity;
3532
3533 if (bdrv_get_info(bs, &bdi) >= 0 && bdi.cluster_size > 0) {
3534 granularity = MAX(4096, bdi.cluster_size);
3535 granularity = MIN(65536, granularity);
3536 } else {
3537 granularity = 65536;
3538 }
3539
3540 return granularity;
3541}
3542
John Snow592fdd02015-04-17 19:49:53 -04003543uint32_t bdrv_dirty_bitmap_granularity(BdrvDirtyBitmap *bitmap)
3544{
3545 return BDRV_SECTOR_SIZE << hbitmap_granularity(bitmap->bitmap);
3546}
3547
John Snow20dca812015-04-17 19:50:02 -04003548void bdrv_dirty_iter_init(BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003549{
Fam Zhenge4654d22013-11-13 18:29:43 +08003550 hbitmap_iter_init(hbi, bitmap->bitmap, 0);
Paolo Bonzini1755da12012-10-18 16:49:18 +02003551}
3552
John Snow20dca812015-04-17 19:50:02 -04003553void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003554 int64_t cur_sector, int nr_sectors)
3555{
John Snowb8e6fb72015-04-17 19:49:56 -04003556 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003557 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
3558}
3559
John Snow20dca812015-04-17 19:50:02 -04003560void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap,
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003561 int64_t cur_sector, int nr_sectors)
3562{
John Snowb8e6fb72015-04-17 19:49:56 -04003563 assert(bdrv_dirty_bitmap_enabled(bitmap));
Vladimir Sementsov-Ogievskiyc4237df2014-11-27 12:40:46 +03003564 hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
3565}
3566
John Snowe74e6b72015-04-17 19:49:59 -04003567void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap)
3568{
3569 assert(bdrv_dirty_bitmap_enabled(bitmap));
Wen Congyangc6a8c322015-05-22 09:29:46 +08003570 hbitmap_reset_all(bitmap->bitmap);
John Snowe74e6b72015-04-17 19:49:59 -04003571}
3572
Stefan Hajnoczie0c47b62015-04-28 14:27:50 +01003573void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
3574 int nr_sectors)
Paolo Bonzini1755da12012-10-18 16:49:18 +02003575{
Fam Zhenge4654d22013-11-13 18:29:43 +08003576 BdrvDirtyBitmap *bitmap;
3577 QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
John Snowb8e6fb72015-04-17 19:49:56 -04003578 if (!bdrv_dirty_bitmap_enabled(bitmap)) {
3579 continue;
3580 }
Fam Zhenge4654d22013-11-13 18:29:43 +08003581 hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
Paolo Bonzini8f0720e2013-01-21 17:09:41 +01003582 }
Liran Schouraaa0eb72010-01-26 10:31:48 +02003583}
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003584
John Snowd58d8452015-04-17 19:49:58 -04003585/**
3586 * Advance an HBitmapIter to an arbitrary offset.
3587 */
3588void bdrv_set_dirty_iter(HBitmapIter *hbi, int64_t offset)
3589{
3590 assert(hbi->hb);
3591 hbitmap_iter_init(hbi, hbi->hb, offset);
3592}
3593
John Snow20dca812015-04-17 19:50:02 -04003594int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap)
Fam Zhenge4654d22013-11-13 18:29:43 +08003595{
3596 return hbitmap_count(bitmap->bitmap);
3597}
3598
Fam Zheng9fcb0252013-08-23 09:14:46 +08003599/* Get a reference to bs */
3600void bdrv_ref(BlockDriverState *bs)
3601{
3602 bs->refcnt++;
3603}
3604
3605/* Release a previously grabbed reference to bs.
3606 * If after releasing, reference count is zero, the BlockDriverState is
3607 * deleted. */
3608void bdrv_unref(BlockDriverState *bs)
3609{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003610 if (!bs) {
3611 return;
3612 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003613 assert(bs->refcnt > 0);
3614 if (--bs->refcnt == 0) {
3615 bdrv_delete(bs);
3616 }
3617}
3618
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003619struct BdrvOpBlocker {
3620 Error *reason;
3621 QLIST_ENTRY(BdrvOpBlocker) list;
3622};
3623
3624bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3625{
3626 BdrvOpBlocker *blocker;
3627 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3628 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3629 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3630 if (errp) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03003631 error_setg(errp, "Node '%s' is busy: %s",
3632 bdrv_get_device_or_node_name(bs),
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003633 error_get_pretty(blocker->reason));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003634 }
3635 return true;
3636 }
3637 return false;
3638}
3639
3640void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3641{
3642 BdrvOpBlocker *blocker;
3643 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3644
Markus Armbruster5839e532014-08-19 10:31:08 +02003645 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003646 blocker->reason = reason;
3647 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3648}
3649
3650void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3651{
3652 BdrvOpBlocker *blocker, *next;
3653 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3654 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3655 if (blocker->reason == reason) {
3656 QLIST_REMOVE(blocker, list);
3657 g_free(blocker);
3658 }
3659 }
3660}
3661
3662void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3663{
3664 int i;
3665 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3666 bdrv_op_block(bs, i, reason);
3667 }
3668}
3669
3670void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3671{
3672 int i;
3673 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3674 bdrv_op_unblock(bs, i, reason);
3675 }
3676}
3677
3678bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3679{
3680 int i;
3681
3682 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3683 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3684 return false;
3685 }
3686 }
3687 return true;
3688}
3689
Luiz Capitulino28a72822011-09-26 17:43:50 -03003690void bdrv_iostatus_enable(BlockDriverState *bs)
3691{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003692 bs->iostatus_enabled = true;
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003693 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003694}
3695
3696/* The I/O status is only enabled if the drive explicitly
3697 * enables it _and_ the VM is configured to stop on errors */
3698bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
3699{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003700 return (bs->iostatus_enabled &&
Paolo Bonzini92aa5c62012-09-28 17:22:55 +02003701 (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
3702 bs->on_write_error == BLOCKDEV_ON_ERROR_STOP ||
3703 bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
Luiz Capitulino28a72822011-09-26 17:43:50 -03003704}
3705
3706void bdrv_iostatus_disable(BlockDriverState *bs)
3707{
Luiz Capitulinod6bf2792011-10-14 17:11:23 -03003708 bs->iostatus_enabled = false;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003709}
3710
3711void bdrv_iostatus_reset(BlockDriverState *bs)
3712{
3713 if (bdrv_iostatus_is_enabled(bs)) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003714 bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
Paolo Bonzini3bd293c2012-10-18 16:49:27 +02003715 if (bs->job) {
3716 block_job_iostatus_reset(bs->job);
3717 }
Luiz Capitulino28a72822011-09-26 17:43:50 -03003718 }
3719}
3720
Luiz Capitulino28a72822011-09-26 17:43:50 -03003721void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
3722{
Paolo Bonzini3e1caa52012-09-28 17:22:57 +02003723 assert(bdrv_iostatus_is_enabled(bs));
3724 if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
Luiz Capitulino58e21ef2011-10-14 17:22:24 -03003725 bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
3726 BLOCK_DEVICE_IO_STATUS_FAILED;
Luiz Capitulino28a72822011-09-26 17:43:50 -03003727 }
3728}
3729
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003730void bdrv_img_create(const char *filename, const char *fmt,
3731 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003732 char *options, uint64_t img_size, int flags,
3733 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003734{
Chunyan Liu83d05212014-06-05 17:20:51 +08003735 QemuOptsList *create_opts = NULL;
3736 QemuOpts *opts = NULL;
3737 const char *backing_fmt, *backing_file;
3738 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003739 BlockDriver *drv, *proto_drv;
Max Reitzcc84d902013-09-06 17:14:26 +02003740 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003741 int ret = 0;
3742
3743 /* Find driver and parse its options */
3744 drv = bdrv_find_format(fmt);
3745 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003746 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003747 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003748 }
3749
Max Reitzb65a5e12015-02-05 13:58:12 -05003750 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003751 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003752 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003753 }
3754
Max Reitzc6149722014-12-02 18:32:45 +01003755 if (!drv->create_opts) {
3756 error_setg(errp, "Format driver '%s' does not support image creation",
3757 drv->format_name);
3758 return;
3759 }
3760
3761 if (!proto_drv->create_opts) {
3762 error_setg(errp, "Protocol driver '%s' does not support image creation",
3763 proto_drv->format_name);
3764 return;
3765 }
3766
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003767 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3768 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003769
3770 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003771 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003772 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003773
3774 /* Parse -o options */
3775 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003776 qemu_opts_do_parse(opts, options, NULL, &local_err);
3777 if (local_err) {
3778 error_report_err(local_err);
3779 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003780 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003781 goto out;
3782 }
3783 }
3784
3785 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003786 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003787 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003788 error_setg(errp, "Backing file not supported for file format '%s'",
3789 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003790 goto out;
3791 }
3792 }
3793
3794 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003795 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003796 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003797 error_setg(errp, "Backing file format not supported for file "
3798 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003799 goto out;
3800 }
3801 }
3802
Chunyan Liu83d05212014-06-05 17:20:51 +08003803 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3804 if (backing_file) {
3805 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003806 error_setg(errp, "Error: Trying to create an image with the "
3807 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003808 goto out;
3809 }
3810 }
3811
Chunyan Liu83d05212014-06-05 17:20:51 +08003812 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003813
3814 // The size for the image must always be specified, with one exception:
3815 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003816 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3817 if (size == -1) {
3818 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003819 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003820 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003821 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003822 int back_flags;
Max Reitze6641712015-08-26 19:47:48 +02003823 QDict *backing_options = NULL;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003824
Max Reitz29168012014-11-26 17:20:27 +01003825 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3826 full_backing, PATH_MAX,
3827 &local_err);
3828 if (local_err) {
3829 g_free(full_backing);
3830 goto out;
3831 }
3832
Paolo Bonzini63090da2012-04-12 14:01:03 +02003833 /* backing files always opened read-only */
3834 back_flags =
3835 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003836
Max Reitze6641712015-08-26 19:47:48 +02003837 if (backing_fmt) {
3838 backing_options = qdict_new();
3839 qdict_put(backing_options, "driver",
3840 qstring_from_str(backing_fmt));
3841 }
3842
Max Reitzf67503e2014-02-18 18:33:05 +01003843 bs = NULL;
Max Reitze6641712015-08-26 19:47:48 +02003844 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02003845 back_flags, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003846 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003847 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003848 goto out;
3849 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003850 size = bdrv_getlength(bs);
3851 if (size < 0) {
3852 error_setg_errno(errp, -size, "Could not get size of '%s'",
3853 backing_file);
3854 bdrv_unref(bs);
3855 goto out;
3856 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003857
Markus Armbruster39101f22015-02-12 16:46:36 +01003858 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003859
3860 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003861 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003862 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003863 goto out;
3864 }
3865 }
3866
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003867 if (!quiet) {
Kővágó, Zoltánfe646692015-07-07 16:42:10 +02003868 printf("Formatting '%s', fmt=%s ", filename, fmt);
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003869 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003870 puts("");
3871 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003872
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003873 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003874
Max Reitzcc84d902013-09-06 17:14:26 +02003875 if (ret == -EFBIG) {
3876 /* This is generally a better message than whatever the driver would
3877 * deliver (especially because of the cluster_size_hint), since that
3878 * is most probably not much different from "image too large". */
3879 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003880 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003881 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003882 }
Max Reitzcc84d902013-09-06 17:14:26 +02003883 error_setg(errp, "The image size is too large for file format '%s'"
3884 "%s", fmt, cluster_size_hint);
3885 error_free(local_err);
3886 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003887 }
3888
3889out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003890 qemu_opts_del(opts);
3891 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003892 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003893 error_propagate(errp, local_err);
3894 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003895}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003896
3897AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3898{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003899 return bs->aio_context;
3900}
3901
3902void bdrv_detach_aio_context(BlockDriverState *bs)
3903{
Max Reitz33384422014-06-20 21:57:33 +02003904 BdrvAioNotifier *baf;
3905
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003906 if (!bs->drv) {
3907 return;
3908 }
3909
Max Reitz33384422014-06-20 21:57:33 +02003910 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3911 baf->detach_aio_context(baf->opaque);
3912 }
3913
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003914 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003915 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003916 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003917 if (bs->drv->bdrv_detach_aio_context) {
3918 bs->drv->bdrv_detach_aio_context(bs);
3919 }
3920 if (bs->file) {
3921 bdrv_detach_aio_context(bs->file);
3922 }
3923 if (bs->backing_hd) {
3924 bdrv_detach_aio_context(bs->backing_hd);
3925 }
3926
3927 bs->aio_context = NULL;
3928}
3929
3930void bdrv_attach_aio_context(BlockDriverState *bs,
3931 AioContext *new_context)
3932{
Max Reitz33384422014-06-20 21:57:33 +02003933 BdrvAioNotifier *ban;
3934
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003935 if (!bs->drv) {
3936 return;
3937 }
3938
3939 bs->aio_context = new_context;
3940
3941 if (bs->backing_hd) {
3942 bdrv_attach_aio_context(bs->backing_hd, new_context);
3943 }
3944 if (bs->file) {
3945 bdrv_attach_aio_context(bs->file, new_context);
3946 }
3947 if (bs->drv->bdrv_attach_aio_context) {
3948 bs->drv->bdrv_attach_aio_context(bs, new_context);
3949 }
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003950 if (bs->io_limits_enabled) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003951 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003952 }
Max Reitz33384422014-06-20 21:57:33 +02003953
3954 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3955 ban->attached_aio_context(new_context, ban->opaque);
3956 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003957}
3958
3959void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3960{
Fam Zheng53ec73e2015-05-29 18:53:14 +08003961 bdrv_drain(bs); /* ensure there are no in-flight requests */
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003962
3963 bdrv_detach_aio_context(bs);
3964
3965 /* This function executes in the old AioContext so acquire the new one in
3966 * case it runs in a different thread.
3967 */
3968 aio_context_acquire(new_context);
3969 bdrv_attach_aio_context(bs, new_context);
3970 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003971}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003972
Max Reitz33384422014-06-20 21:57:33 +02003973void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3974 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3975 void (*detach_aio_context)(void *opaque), void *opaque)
3976{
3977 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3978 *ban = (BdrvAioNotifier){
3979 .attached_aio_context = attached_aio_context,
3980 .detach_aio_context = detach_aio_context,
3981 .opaque = opaque
3982 };
3983
3984 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3985}
3986
3987void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3988 void (*attached_aio_context)(AioContext *,
3989 void *),
3990 void (*detach_aio_context)(void *),
3991 void *opaque)
3992{
3993 BdrvAioNotifier *ban, *ban_next;
3994
3995 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3996 if (ban->attached_aio_context == attached_aio_context &&
3997 ban->detach_aio_context == detach_aio_context &&
3998 ban->opaque == opaque)
3999 {
4000 QLIST_REMOVE(ban, list);
4001 g_free(ban);
4002
4003 return;
4004 }
4005 }
4006
4007 abort();
4008}
4009
Max Reitz77485432014-10-27 11:12:50 +01004010int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
4011 BlockDriverAmendStatusCB *status_cb)
Max Reitz6f176b42013-09-03 10:09:50 +02004012{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08004013 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02004014 return -ENOTSUP;
4015 }
Max Reitz77485432014-10-27 11:12:50 +01004016 return bs->drv->bdrv_amend_options(bs, opts, status_cb);
Max Reitz6f176b42013-09-03 10:09:50 +02004017}
Benoît Canetf6186f42013-10-02 14:33:48 +02004018
Benoît Canetb5042a32014-03-03 19:11:34 +01004019/* This function will be called by the bdrv_recurse_is_first_non_filter method
4020 * of block filter and by bdrv_is_first_non_filter.
4021 * It is used to test if the given bs is the candidate or recurse more in the
4022 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01004023 */
Benoît Canet212a5a82014-01-23 21:31:36 +01004024bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
4025 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02004026{
Benoît Canetb5042a32014-03-03 19:11:34 +01004027 /* return false if basic checks fails */
4028 if (!bs || !bs->drv) {
4029 return false;
4030 }
4031
4032 /* the code reached a non block filter driver -> check if the bs is
4033 * the same as the candidate. It's the recursion termination condition.
4034 */
4035 if (!bs->drv->is_filter) {
4036 return bs == candidate;
4037 }
4038 /* Down this path the driver is a block filter driver */
4039
4040 /* If the block filter recursion method is defined use it to recurse down
4041 * the node graph.
4042 */
4043 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01004044 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
4045 }
4046
Benoît Canetb5042a32014-03-03 19:11:34 +01004047 /* the driver is a block filter but don't allow to recurse -> return false
4048 */
4049 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01004050}
4051
4052/* This function checks if the candidate is the first non filter bs down it's
4053 * bs chain. Since we don't have pointers to parents it explore all bs chains
4054 * from the top. Some filters can choose not to pass down the recursion.
4055 */
4056bool bdrv_is_first_non_filter(BlockDriverState *candidate)
4057{
4058 BlockDriverState *bs;
4059
4060 /* walk down the bs forest recursively */
4061 QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4062 bool perm;
4063
Benoît Canetb5042a32014-03-03 19:11:34 +01004064 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01004065 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01004066
4067 /* candidate is the first non filter */
4068 if (perm) {
4069 return true;
4070 }
4071 }
4072
4073 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02004074}
Benoît Canet09158f02014-06-27 18:25:25 +02004075
Wen Congyange12f3782015-07-17 10:12:22 +08004076BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
4077 const char *node_name, Error **errp)
Benoît Canet09158f02014-06-27 18:25:25 +02004078{
4079 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004080 AioContext *aio_context;
4081
Benoît Canet09158f02014-06-27 18:25:25 +02004082 if (!to_replace_bs) {
4083 error_setg(errp, "Node name '%s' not found", node_name);
4084 return NULL;
4085 }
4086
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004087 aio_context = bdrv_get_aio_context(to_replace_bs);
4088 aio_context_acquire(aio_context);
4089
Benoît Canet09158f02014-06-27 18:25:25 +02004090 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004091 to_replace_bs = NULL;
4092 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004093 }
4094
4095 /* We don't want arbitrary node of the BDS chain to be replaced only the top
4096 * most non filter in order to prevent data corruption.
4097 * Another benefit is that this tests exclude backing files which are
4098 * blocked by the backing blockers.
4099 */
Wen Congyange12f3782015-07-17 10:12:22 +08004100 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
Benoît Canet09158f02014-06-27 18:25:25 +02004101 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004102 to_replace_bs = NULL;
4103 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02004104 }
4105
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01004106out:
4107 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02004108 return to_replace_bs;
4109}
Ming Lei448ad912014-07-04 18:04:33 +08004110
Max Reitz91af7012014-07-18 20:24:56 +02004111static bool append_open_options(QDict *d, BlockDriverState *bs)
4112{
4113 const QDictEntry *entry;
4114 bool found_any = false;
4115
4116 for (entry = qdict_first(bs->options); entry;
4117 entry = qdict_next(bs->options, entry))
4118 {
4119 /* Only take options for this level and exclude all non-driver-specific
4120 * options */
4121 if (!strchr(qdict_entry_key(entry), '.') &&
4122 strcmp(qdict_entry_key(entry), "node-name"))
4123 {
4124 qobject_incref(qdict_entry_value(entry));
4125 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
4126 found_any = true;
4127 }
4128 }
4129
4130 return found_any;
4131}
4132
4133/* Updates the following BDS fields:
4134 * - exact_filename: A filename which may be used for opening a block device
4135 * which (mostly) equals the given BDS (even without any
4136 * other options; so reading and writing must return the same
4137 * results, but caching etc. may be different)
4138 * - full_open_options: Options which, when given when opening a block device
4139 * (without a filename), result in a BDS (mostly)
4140 * equalling the given one
4141 * - filename: If exact_filename is set, it is copied here. Otherwise,
4142 * full_open_options is converted to a JSON object, prefixed with
4143 * "json:" (for use through the JSON pseudo protocol) and put here.
4144 */
4145void bdrv_refresh_filename(BlockDriverState *bs)
4146{
4147 BlockDriver *drv = bs->drv;
4148 QDict *opts;
4149
4150 if (!drv) {
4151 return;
4152 }
4153
4154 /* This BDS's file name will most probably depend on its file's name, so
4155 * refresh that first */
4156 if (bs->file) {
4157 bdrv_refresh_filename(bs->file);
4158 }
4159
4160 if (drv->bdrv_refresh_filename) {
4161 /* Obsolete information is of no use here, so drop the old file name
4162 * information before refreshing it */
4163 bs->exact_filename[0] = '\0';
4164 if (bs->full_open_options) {
4165 QDECREF(bs->full_open_options);
4166 bs->full_open_options = NULL;
4167 }
4168
4169 drv->bdrv_refresh_filename(bs);
4170 } else if (bs->file) {
4171 /* Try to reconstruct valid information from the underlying file */
4172 bool has_open_options;
4173
4174 bs->exact_filename[0] = '\0';
4175 if (bs->full_open_options) {
4176 QDECREF(bs->full_open_options);
4177 bs->full_open_options = NULL;
4178 }
4179
4180 opts = qdict_new();
4181 has_open_options = append_open_options(opts, bs);
4182
4183 /* If no specific options have been given for this BDS, the filename of
4184 * the underlying file should suffice for this one as well */
4185 if (bs->file->exact_filename[0] && !has_open_options) {
4186 strcpy(bs->exact_filename, bs->file->exact_filename);
4187 }
4188 /* Reconstructing the full options QDict is simple for most format block
4189 * drivers, as long as the full options are known for the underlying
4190 * file BDS. The full options QDict of that file BDS should somehow
4191 * contain a representation of the filename, therefore the following
4192 * suffices without querying the (exact_)filename of this BDS. */
4193 if (bs->file->full_open_options) {
4194 qdict_put_obj(opts, "driver",
4195 QOBJECT(qstring_from_str(drv->format_name)));
4196 QINCREF(bs->file->full_open_options);
4197 qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
4198
4199 bs->full_open_options = opts;
4200 } else {
4201 QDECREF(opts);
4202 }
4203 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4204 /* There is no underlying file BDS (at least referenced by BDS.file),
4205 * so the full options QDict should be equal to the options given
4206 * specifically for this block device when it was opened (plus the
4207 * driver specification).
4208 * Because those options don't change, there is no need to update
4209 * full_open_options when it's already set. */
4210
4211 opts = qdict_new();
4212 append_open_options(opts, bs);
4213 qdict_put_obj(opts, "driver",
4214 QOBJECT(qstring_from_str(drv->format_name)));
4215
4216 if (bs->exact_filename[0]) {
4217 /* This may not work for all block protocol drivers (some may
4218 * require this filename to be parsed), but we have to find some
4219 * default solution here, so just include it. If some block driver
4220 * does not support pure options without any filename at all or
4221 * needs some special format of the options QDict, it needs to
4222 * implement the driver-specific bdrv_refresh_filename() function.
4223 */
4224 qdict_put_obj(opts, "filename",
4225 QOBJECT(qstring_from_str(bs->exact_filename)));
4226 }
4227
4228 bs->full_open_options = opts;
4229 }
4230
4231 if (bs->exact_filename[0]) {
4232 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4233 } else if (bs->full_open_options) {
4234 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4235 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4236 qstring_get_str(json));
4237 QDECREF(json);
4238 }
4239}
Benoît Canet5366d0c2014-09-05 15:46:18 +02004240
4241/* This accessor function purpose is to allow the device models to access the
4242 * BlockAcctStats structure embedded inside a BlockDriverState without being
4243 * aware of the BlockDriverState structure layout.
4244 * It will go away when the BlockAcctStats structure will be moved inside
4245 * the device models.
4246 */
4247BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
4248{
4249 return &bs->stats;
4250}