blob: d050c4bb5831fb8c5b1bb78cf4819038bb8183a3 [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 */
Peter Maydelld38ea872016-01-29 17:50:05 +000024#include "qemu/osdep.h"
Stefan Hajnoczi6d519a52010-05-22 18:15:08 +010025#include "trace.h"
Paolo Bonzini737e1502012-12-17 18:19:44 +010026#include "block/block_int.h"
27#include "block/blockjob.h"
Markus Armbrusterd49b6832015-03-17 18:29:20 +010028#include "qemu/error-report.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010029#include "qemu/module.h"
Markus Armbrustercc7a8ea2015-03-17 17:22:46 +010030#include "qapi/qmp/qerror.h"
Kevin Wolf91a097e2015-05-08 17:49:53 +020031#include "qapi/qmp/qbool.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"
Daniel P. Berrange10817bf2015-09-01 14:48:02 +010036#include "qemu/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"
Veronia Bahaaf348b6d2016-03-20 19:16:19 +020042#include "qemu/cutils.h"
43#include "qemu/id.h"
bellardfc01f7e2003-06-30 10:03:06 +000044
Juan Quintela71e72a12009-07-27 16:12:56 +020045#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000046#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
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010057#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
58
Benoît Canetdc364f42014-01-23 21:31:32 +010059static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
60 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
61
Max Reitz2c1d04e2016-01-29 16:36:11 +010062static QTAILQ_HEAD(, BlockDriverState) all_bdrv_states =
63 QTAILQ_HEAD_INITIALIZER(all_bdrv_states);
64
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010065static QLIST_HEAD(, BlockDriver) bdrv_drivers =
66 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000067
Kevin Wolff3930ed2015-04-08 13:43:47 +020068static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
69 const char *reference, QDict *options, int flags,
70 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +020071 const BdrvChildRole *child_role, Error **errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +020072
Markus Armbrustereb852012009-10-27 18:41:44 +010073/* If non-zero, use only whitelisted block drivers */
74static int use_bdrv_whitelist;
75
Max Reitz64dff522016-01-29 16:36:10 +010076static void bdrv_close(BlockDriverState *bs);
77
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000078#ifdef _WIN32
79static int is_windows_drive_prefix(const char *filename)
80{
81 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
82 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
83 filename[1] == ':');
84}
85
86int is_windows_drive(const char *filename)
87{
88 if (is_windows_drive_prefix(filename) &&
89 filename[2] == '\0')
90 return 1;
91 if (strstart(filename, "\\\\.\\", NULL) ||
92 strstart(filename, "//./", NULL))
93 return 1;
94 return 0;
95}
96#endif
97
Kevin Wolf339064d2013-11-28 10:23:32 +010098size_t bdrv_opt_mem_align(BlockDriverState *bs)
99{
100 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300101 /* page size or 4k (hdd sector size) should be on the safe side */
102 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100103 }
104
105 return bs->bl.opt_mem_alignment;
106}
107
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300108size_t bdrv_min_mem_align(BlockDriverState *bs)
109{
110 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300111 /* page size or 4k (hdd sector size) should be on the safe side */
112 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300113 }
114
115 return bs->bl.min_mem_alignment;
116}
117
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000118/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100119int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000120{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200121 const char *p;
122
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000123#ifdef _WIN32
124 if (is_windows_drive(path) ||
125 is_windows_drive_prefix(path)) {
126 return 0;
127 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200128 p = path + strcspn(path, ":/\\");
129#else
130 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000131#endif
132
Paolo Bonzini947995c2012-05-08 16:51:48 +0200133 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000134}
135
bellard83f64092006-08-01 16:21:11 +0000136int path_is_absolute(const char *path)
137{
bellard21664422007-01-07 18:22:37 +0000138#ifdef _WIN32
139 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200140 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000141 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200142 }
143 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000144#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200145 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000146#endif
bellard83f64092006-08-01 16:21:11 +0000147}
148
149/* if filename is absolute, just copy it to dest. Otherwise, build a
150 path to it by considering it is relative to base_path. URL are
151 supported. */
152void path_combine(char *dest, int dest_size,
153 const char *base_path,
154 const char *filename)
155{
156 const char *p, *p1;
157 int len;
158
159 if (dest_size <= 0)
160 return;
161 if (path_is_absolute(filename)) {
162 pstrcpy(dest, dest_size, filename);
163 } else {
164 p = strchr(base_path, ':');
165 if (p)
166 p++;
167 else
168 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000169 p1 = strrchr(base_path, '/');
170#ifdef _WIN32
171 {
172 const char *p2;
173 p2 = strrchr(base_path, '\\');
174 if (!p1 || p2 > p1)
175 p1 = p2;
176 }
177#endif
bellard83f64092006-08-01 16:21:11 +0000178 if (p1)
179 p1++;
180 else
181 p1 = base_path;
182 if (p1 > p)
183 p = p1;
184 len = p - base_path;
185 if (len > dest_size - 1)
186 len = dest_size - 1;
187 memcpy(dest, base_path, len);
188 dest[len] = '\0';
189 pstrcat(dest, dest_size, filename);
190 }
191}
192
Max Reitz0a828552014-11-26 17:20:25 +0100193void bdrv_get_full_backing_filename_from_filename(const char *backed,
194 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100195 char *dest, size_t sz,
196 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100197{
Max Reitz9f074292014-11-26 17:20:26 +0100198 if (backing[0] == '\0' || path_has_protocol(backing) ||
199 path_is_absolute(backing))
200 {
Max Reitz0a828552014-11-26 17:20:25 +0100201 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100202 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
203 error_setg(errp, "Cannot use relative backing file names for '%s'",
204 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100205 } else {
206 path_combine(dest, sz, backed, backing);
207 }
208}
209
Max Reitz9f074292014-11-26 17:20:26 +0100210void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
211 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200212{
Max Reitz9f074292014-11-26 17:20:26 +0100213 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
214
215 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
216 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200217}
218
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100219void bdrv_register(BlockDriver *bdrv)
220{
221 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200222
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100223 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000224}
bellardb3380822004-03-14 21:38:54 +0000225
Markus Armbruster7f06d472014-10-07 13:59:12 +0200226BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000227{
Max Reitz9aaf28c2016-03-16 19:54:45 +0100228 return bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200229}
230
231BlockDriverState *bdrv_new(void)
232{
233 BlockDriverState *bs;
234 int i;
235
Markus Armbruster5839e532014-08-19 10:31:08 +0200236 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800237 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800238 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
239 QLIST_INIT(&bs->op_blockers[i]);
240 }
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200241 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200242 qemu_co_queue_init(&bs->throttled_reqs[0]);
243 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800244 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200245 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200246
Max Reitz2c1d04e2016-01-29 16:36:11 +0100247 QTAILQ_INSERT_TAIL(&all_bdrv_states, bs, bs_list);
248
bellardb3380822004-03-14 21:38:54 +0000249 return bs;
250}
251
bellardea2384d2004-08-01 21:59:26 +0000252BlockDriver *bdrv_find_format(const char *format_name)
253{
254 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100255 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
256 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000257 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100258 }
bellardea2384d2004-08-01 21:59:26 +0000259 }
260 return NULL;
261}
262
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800263static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100264{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800265 static const char *whitelist_rw[] = {
266 CONFIG_BDRV_RW_WHITELIST
267 };
268 static const char *whitelist_ro[] = {
269 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100270 };
271 const char **p;
272
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800273 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100274 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800275 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100276
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800277 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100278 if (!strcmp(drv->format_name, *p)) {
279 return 1;
280 }
281 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800282 if (read_only) {
283 for (p = whitelist_ro; *p; p++) {
284 if (!strcmp(drv->format_name, *p)) {
285 return 1;
286 }
287 }
288 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100289 return 0;
290}
291
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800292typedef struct CreateCo {
293 BlockDriver *drv;
294 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800295 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800296 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200297 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800298} CreateCo;
299
300static void coroutine_fn bdrv_create_co_entry(void *opaque)
301{
Max Reitzcc84d902013-09-06 17:14:26 +0200302 Error *local_err = NULL;
303 int ret;
304
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800305 CreateCo *cco = opaque;
306 assert(cco->drv);
307
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800308 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100309 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200310 error_propagate(&cco->err, local_err);
311 }
312 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800313}
314
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200315int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800316 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000317{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800318 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200319
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800320 Coroutine *co;
321 CreateCo cco = {
322 .drv = drv,
323 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800324 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800325 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200326 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800327 };
328
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800329 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200330 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300331 ret = -ENOTSUP;
332 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800333 }
334
335 if (qemu_in_coroutine()) {
336 /* Fast-path if already in coroutine context */
337 bdrv_create_co_entry(&cco);
338 } else {
339 co = qemu_coroutine_create(bdrv_create_co_entry);
340 qemu_coroutine_enter(co, &cco);
341 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200342 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800343 }
344 }
345
346 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200347 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100348 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200349 error_propagate(errp, cco.err);
350 } else {
351 error_setg_errno(errp, -ret, "Could not create image");
352 }
353 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800354
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300355out:
356 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800357 return ret;
bellardea2384d2004-08-01 21:59:26 +0000358}
359
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800360int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200361{
362 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200363 Error *local_err = NULL;
364 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200365
Max Reitzb65a5e12015-02-05 13:58:12 -0500366 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200367 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000368 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200369 }
370
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800371 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100372 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200373 error_propagate(errp, local_err);
374 }
375 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200376}
377
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100378/**
379 * Try to get @bs's logical and physical block size.
380 * On success, store them in @bsz struct and return 0.
381 * On failure return -errno.
382 * @bs must not be empty.
383 */
384int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
385{
386 BlockDriver *drv = bs->drv;
387
388 if (drv && drv->bdrv_probe_blocksizes) {
389 return drv->bdrv_probe_blocksizes(bs, bsz);
390 }
391
392 return -ENOTSUP;
393}
394
395/**
396 * Try to get @bs's geometry (cyls, heads, sectors).
397 * On success, store them in @geo struct and return 0.
398 * On failure return -errno.
399 * @bs must not be empty.
400 */
401int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
402{
403 BlockDriver *drv = bs->drv;
404
405 if (drv && drv->bdrv_probe_geometry) {
406 return drv->bdrv_probe_geometry(bs, geo);
407 }
408
409 return -ENOTSUP;
410}
411
Jim Meyeringeba25052012-05-28 09:27:54 +0200412/*
413 * Create a uniquely-named empty temporary file.
414 * Return 0 upon success, otherwise a negative errno value.
415 */
416int get_tmp_filename(char *filename, int size)
417{
bellardd5249392004-08-03 21:14:23 +0000418#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000419 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200420 /* GetTempFileName requires that its output buffer (4th param)
421 have length MAX_PATH or greater. */
422 assert(size >= MAX_PATH);
423 return (GetTempPath(MAX_PATH, temp_dir)
424 && GetTempFileName(temp_dir, "qem", 0, filename)
425 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000426#else
bellardea2384d2004-08-01 21:59:26 +0000427 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000428 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000429 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530430 if (!tmpdir) {
431 tmpdir = "/var/tmp";
432 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200433 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
434 return -EOVERFLOW;
435 }
bellardea2384d2004-08-01 21:59:26 +0000436 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800437 if (fd < 0) {
438 return -errno;
439 }
440 if (close(fd) != 0) {
441 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200442 return -errno;
443 }
444 return 0;
bellardd5249392004-08-03 21:14:23 +0000445#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200446}
bellardea2384d2004-08-01 21:59:26 +0000447
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200448/*
449 * Detect host devices. By convention, /dev/cdrom[N] is always
450 * recognized as a host CDROM.
451 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200452static BlockDriver *find_hdev_driver(const char *filename)
453{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200454 int score_max = 0, score;
455 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200456
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100457 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200458 if (d->bdrv_probe_device) {
459 score = d->bdrv_probe_device(filename);
460 if (score > score_max) {
461 score_max = score;
462 drv = d;
463 }
464 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200465 }
466
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200467 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200468}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200469
Kevin Wolf98289622013-07-10 15:47:39 +0200470BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500471 bool allow_protocol_prefix,
472 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200473{
474 BlockDriver *drv1;
475 char protocol[128];
476 int len;
477 const char *p;
478
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200479 /* TODO Drivers without bdrv_file_open must be specified explicitly */
480
Christoph Hellwig39508e72010-06-23 12:25:17 +0200481 /*
482 * XXX(hch): we really should not let host device detection
483 * override an explicit protocol specification, but moving this
484 * later breaks access to device names with colons in them.
485 * Thanks to the brain-dead persistent naming schemes on udev-
486 * based Linux systems those actually are quite common.
487 */
488 drv1 = find_hdev_driver(filename);
489 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200490 return drv1;
491 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200492
Kevin Wolf98289622013-07-10 15:47:39 +0200493 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100494 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200495 }
Kevin Wolf98289622013-07-10 15:47:39 +0200496
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000497 p = strchr(filename, ':');
498 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200499 len = p - filename;
500 if (len > sizeof(protocol) - 1)
501 len = sizeof(protocol) - 1;
502 memcpy(protocol, filename, len);
503 protocol[len] = '\0';
504 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
505 if (drv1->protocol_name &&
506 !strcmp(drv1->protocol_name, protocol)) {
507 return drv1;
508 }
509 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500510
511 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200512 return NULL;
513}
514
Markus Armbrusterc6684242014-11-20 16:27:10 +0100515/*
516 * Guess image format by probing its contents.
517 * This is not a good idea when your image is raw (CVE-2008-2004), but
518 * we do it anyway for backward compatibility.
519 *
520 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100521 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
522 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100523 * @filename is its filename.
524 *
525 * For all block drivers, call the bdrv_probe() method to get its
526 * probing score.
527 * Return the first block driver with the highest probing score.
528 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100529BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
530 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100531{
532 int score_max = 0, score;
533 BlockDriver *drv = NULL, *d;
534
535 QLIST_FOREACH(d, &bdrv_drivers, list) {
536 if (d->bdrv_probe) {
537 score = d->bdrv_probe(buf, buf_size, filename);
538 if (score > score_max) {
539 score_max = score;
540 drv = d;
541 }
542 }
543 }
544
545 return drv;
546}
547
Kevin Wolff500a6d2012-11-12 17:35:27 +0100548static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200549 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000550{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100551 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100552 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100553 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700554
Kevin Wolf08a00552010-06-01 18:37:31 +0200555 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300556 if (bdrv_is_sg(bs) || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100557 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200558 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700559 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700560
bellard83f64092006-08-01 16:21:11 +0000561 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000562 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200563 error_setg_errno(errp, -ret, "Could not read image for determining its "
564 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200565 *pdrv = NULL;
566 return ret;
bellard83f64092006-08-01 16:21:11 +0000567 }
568
Markus Armbrusterc6684242014-11-20 16:27:10 +0100569 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200570 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200571 error_setg(errp, "Could not determine image format: No compatible "
572 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200573 ret = -ENOENT;
574 }
575 *pdrv = drv;
576 return ret;
bellardea2384d2004-08-01 21:59:26 +0000577}
578
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100579/**
580 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200581 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100582 */
583static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
584{
585 BlockDriver *drv = bs->drv;
586
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700587 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300588 if (bdrv_is_sg(bs))
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700589 return 0;
590
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100591 /* query actual device if possible, otherwise just trust the hint */
592 if (drv->bdrv_getlength) {
593 int64_t length = drv->bdrv_getlength(bs);
594 if (length < 0) {
595 return length;
596 }
Fam Zheng7e382002013-11-06 19:48:06 +0800597 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100598 }
599
600 bs->total_sectors = hint;
601 return 0;
602}
603
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100604/**
Kevin Wolfcddff5b2015-11-16 16:43:27 +0100605 * Combines a QDict of new block driver @options with any missing options taken
606 * from @old_options, so that leaving out an option defaults to its old value.
607 */
608static void bdrv_join_options(BlockDriverState *bs, QDict *options,
609 QDict *old_options)
610{
611 if (bs->drv && bs->drv->bdrv_join_options) {
612 bs->drv->bdrv_join_options(options, old_options);
613 } else {
614 qdict_join(options, old_options, false);
615 }
616}
617
618/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100619 * Set open flags for a given discard mode
620 *
621 * Return 0 on success, -1 if the discard mode was invalid.
622 */
623int bdrv_parse_discard_flags(const char *mode, int *flags)
624{
625 *flags &= ~BDRV_O_UNMAP;
626
627 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
628 /* do nothing */
629 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
630 *flags |= BDRV_O_UNMAP;
631 } else {
632 return -1;
633 }
634
635 return 0;
636}
637
638/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100639 * Set open flags for a given cache mode
640 *
641 * Return 0 on success, -1 if the cache mode was invalid.
642 */
643int bdrv_parse_cache_flags(const char *mode, int *flags)
644{
645 *flags &= ~BDRV_O_CACHE_MASK;
646
647 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
648 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100649 } else if (!strcmp(mode, "directsync")) {
650 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100651 } else if (!strcmp(mode, "writeback")) {
652 *flags |= BDRV_O_CACHE_WB;
653 } else if (!strcmp(mode, "unsafe")) {
654 *flags |= BDRV_O_CACHE_WB;
655 *flags |= BDRV_O_NO_FLUSH;
656 } else if (!strcmp(mode, "writethrough")) {
657 /* this is the default */
658 } else {
659 return -1;
660 }
661
662 return 0;
663}
664
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200665/*
Kevin Wolf73176be2016-03-07 13:02:15 +0100666 * Returns the options and flags that a temporary snapshot should get, based on
667 * the originally requested flags (the originally requested image will have
668 * flags like a backing file)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200669 */
Kevin Wolf73176be2016-03-07 13:02:15 +0100670static void bdrv_temp_snapshot_options(int *child_flags, QDict *child_options,
671 int parent_flags, QDict *parent_options)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200672{
Kevin Wolf73176be2016-03-07 13:02:15 +0100673 *child_flags = (parent_flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
674
675 /* For temporary files, unconditional cache=unsafe is fine */
676 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
677 qdict_set_default_str(child_options, BDRV_OPT_CACHE_DIRECT, "off");
678 qdict_set_default_str(child_options, BDRV_OPT_CACHE_NO_FLUSH, "on");
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200679}
680
681/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200682 * Returns the options and flags that bs->file should get if a protocol driver
683 * is expected, based on the given options and flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200684 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200685static void bdrv_inherited_options(int *child_flags, QDict *child_options,
686 int parent_flags, QDict *parent_options)
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200687{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200688 int flags = parent_flags;
689
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200690 /* Enable protocol handling, disable format probing for bs->file */
691 flags |= BDRV_O_PROTOCOL;
692
Kevin Wolf91a097e2015-05-08 17:49:53 +0200693 /* If the cache mode isn't explicitly set, inherit direct and no-flush from
694 * the parent. */
695 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
696 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
697
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200698 /* Our block drivers take care to send flushes and respect unmap policy,
Kevin Wolf91a097e2015-05-08 17:49:53 +0200699 * so we can default to enable both on lower layers regardless of the
700 * corresponding parent options. */
701 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
702 flags |= BDRV_O_UNMAP;
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200703
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200704 /* Clear flags that only apply to the top layer */
Kevin Wolf5669b442014-04-11 21:36:45 +0200705 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200706
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200707 *child_flags = flags;
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200708}
709
Kevin Wolff3930ed2015-04-08 13:43:47 +0200710const BdrvChildRole child_file = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200711 .inherit_options = bdrv_inherited_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200712};
713
714/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200715 * Returns the options and flags that bs->file should get if the use of formats
716 * (and not only protocols) is permitted for it, based on the given options and
717 * flags for the parent BDS
Kevin Wolff3930ed2015-04-08 13:43:47 +0200718 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200719static void bdrv_inherited_fmt_options(int *child_flags, QDict *child_options,
720 int parent_flags, QDict *parent_options)
Kevin Wolff3930ed2015-04-08 13:43:47 +0200721{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200722 child_file.inherit_options(child_flags, child_options,
723 parent_flags, parent_options);
724
725 *child_flags &= ~BDRV_O_PROTOCOL;
Kevin Wolff3930ed2015-04-08 13:43:47 +0200726}
727
728const BdrvChildRole child_format = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200729 .inherit_options = bdrv_inherited_fmt_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200730};
731
Kevin Wolf317fc442014-04-25 13:27:34 +0200732/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200733 * Returns the options and flags that bs->backing should get, based on the
734 * given options and flags for the parent BDS
Kevin Wolf317fc442014-04-25 13:27:34 +0200735 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200736static void bdrv_backing_options(int *child_flags, QDict *child_options,
737 int parent_flags, QDict *parent_options)
Kevin Wolf317fc442014-04-25 13:27:34 +0200738{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200739 int flags = parent_flags;
740
Kevin Wolfb8816a42016-03-04 14:52:32 +0100741 /* The cache mode is inherited unmodified for backing files; except WCE,
742 * which is only applied on the top level (BlockBackend) */
743 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
Kevin Wolf91a097e2015-05-08 17:49:53 +0200744 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
745 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
746
Kevin Wolf317fc442014-04-25 13:27:34 +0200747 /* backing files always opened read-only */
748 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
749
750 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200751 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200752
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200753 *child_flags = flags;
Kevin Wolf317fc442014-04-25 13:27:34 +0200754}
755
Kevin Wolff3930ed2015-04-08 13:43:47 +0200756static const BdrvChildRole child_backing = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200757 .inherit_options = bdrv_backing_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200758};
759
Kevin Wolf7b272452012-11-12 17:05:39 +0100760static int bdrv_open_flags(BlockDriverState *bs, int flags)
761{
762 int open_flags = flags | BDRV_O_CACHE_WB;
763
764 /*
765 * Clear flags that are internal to the block layer before opening the
766 * image.
767 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200768 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100769
770 /*
771 * Snapshots should be writable.
772 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200773 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100774 open_flags |= BDRV_O_RDWR;
775 }
776
777 return open_flags;
778}
779
Kevin Wolf91a097e2015-05-08 17:49:53 +0200780static void update_flags_from_options(int *flags, QemuOpts *opts)
781{
782 *flags &= ~BDRV_O_CACHE_MASK;
783
784 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_WB));
785 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, false)) {
786 *flags |= BDRV_O_CACHE_WB;
787 }
788
789 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_NO_FLUSH));
790 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
791 *flags |= BDRV_O_NO_FLUSH;
792 }
793
794 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_DIRECT));
795 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
796 *flags |= BDRV_O_NOCACHE;
797 }
798}
799
800static void update_options_from_flags(QDict *options, int flags)
801{
802 if (!qdict_haskey(options, BDRV_OPT_CACHE_WB)) {
803 qdict_put(options, BDRV_OPT_CACHE_WB,
804 qbool_from_bool(flags & BDRV_O_CACHE_WB));
805 }
806 if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
807 qdict_put(options, BDRV_OPT_CACHE_DIRECT,
808 qbool_from_bool(flags & BDRV_O_NOCACHE));
809 }
810 if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
811 qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
812 qbool_from_bool(flags & BDRV_O_NO_FLUSH));
813 }
814}
815
Kevin Wolf636ea372014-01-24 14:11:52 +0100816static void bdrv_assign_node_name(BlockDriverState *bs,
817 const char *node_name,
818 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100819{
Jeff Cody15489c72015-10-12 19:36:50 -0400820 char *gen_node_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100821
Jeff Cody15489c72015-10-12 19:36:50 -0400822 if (!node_name) {
823 node_name = gen_node_name = id_generate(ID_BLOCK);
824 } else if (!id_wellformed(node_name)) {
825 /*
826 * Check for empty string or invalid characters, but not if it is
827 * generated (generated names use characters not available to the user)
828 */
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200829 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100830 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100831 }
832
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100833 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200834 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100835 error_setg(errp, "node-name=%s is conflicting with a device id",
836 node_name);
Jeff Cody15489c72015-10-12 19:36:50 -0400837 goto out;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100838 }
839
Benoît Canet6913c0c2014-01-23 21:31:33 +0100840 /* takes care of avoiding duplicates node names */
841 if (bdrv_find_node(node_name)) {
842 error_setg(errp, "Duplicate node name");
Jeff Cody15489c72015-10-12 19:36:50 -0400843 goto out;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100844 }
845
846 /* copy node name into the bs and insert it into the graph list */
847 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
848 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Jeff Cody15489c72015-10-12 19:36:50 -0400849out:
850 g_free(gen_node_name);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100851}
852
Kevin Wolf18edf282015-04-07 17:12:56 +0200853static QemuOptsList bdrv_runtime_opts = {
854 .name = "bdrv_common",
855 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
856 .desc = {
857 {
858 .name = "node-name",
859 .type = QEMU_OPT_STRING,
860 .help = "Node name of the block device node",
861 },
Kevin Wolf62392eb2015-04-24 16:38:02 +0200862 {
863 .name = "driver",
864 .type = QEMU_OPT_STRING,
865 .help = "Block driver to use for the node",
866 },
Kevin Wolf91a097e2015-05-08 17:49:53 +0200867 {
868 .name = BDRV_OPT_CACHE_WB,
869 .type = QEMU_OPT_BOOL,
870 .help = "Enable writeback mode",
871 },
872 {
873 .name = BDRV_OPT_CACHE_DIRECT,
874 .type = QEMU_OPT_BOOL,
875 .help = "Bypass software writeback cache on the host",
876 },
877 {
878 .name = BDRV_OPT_CACHE_NO_FLUSH,
879 .type = QEMU_OPT_BOOL,
880 .help = "Ignore flush requests",
881 },
Kevin Wolf18edf282015-04-07 17:12:56 +0200882 { /* end of list */ }
883 },
884};
885
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200886/*
Kevin Wolf57915332010-04-14 15:24:50 +0200887 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100888 *
889 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200890 */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200891static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file,
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100892 QDict *options, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200893{
894 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200895 const char *filename;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200896 const char *driver_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100897 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200898 QemuOpts *opts;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200899 BlockDriver *drv;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200900 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200901
Paolo Bonzini64058752012-05-08 16:51:49 +0200902 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100903 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200904
Kevin Wolf62392eb2015-04-24 16:38:02 +0200905 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
906 qemu_opts_absorb_qdict(opts, options, &local_err);
907 if (local_err) {
908 error_propagate(errp, local_err);
909 ret = -EINVAL;
910 goto fail_opts;
911 }
912
913 driver_name = qemu_opt_get(opts, "driver");
914 drv = bdrv_find_format(driver_name);
915 assert(drv != NULL);
916
Kevin Wolf45673672013-04-22 17:48:40 +0200917 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200918 filename = file->bs->filename;
Kevin Wolf45673672013-04-22 17:48:40 +0200919 } else {
920 filename = qdict_get_try_str(options, "filename");
921 }
922
Kevin Wolf765003d2014-02-03 14:49:42 +0100923 if (drv->bdrv_needs_filename && !filename) {
924 error_setg(errp, "The '%s' block driver requires a file name",
925 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200926 ret = -EINVAL;
927 goto fail_opts;
928 }
929
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100930 trace_bdrv_open_common(bs, filename ?: "", bs->open_flags,
931 drv->format_name);
Kevin Wolf62392eb2015-04-24 16:38:02 +0200932
Kevin Wolf18edf282015-04-07 17:12:56 +0200933 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100934 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200935 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100936 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200937 ret = -EINVAL;
938 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100939 }
940
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100941 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800942 bs->zero_beyond_eof = true;
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100943 bs->read_only = !(bs->open_flags & BDRV_O_RDWR);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800944
945 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200946 error_setg(errp,
947 !bs->read_only && bdrv_is_whitelisted(drv, true)
948 ? "Driver '%s' can only be used for read-only devices"
949 : "Driver '%s' is not whitelisted",
950 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200951 ret = -ENOTSUP;
952 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800953 }
Kevin Wolf57915332010-04-14 15:24:50 +0200954
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000955 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100956 if (bs->open_flags & BDRV_O_COPY_ON_READ) {
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200957 if (!bs->read_only) {
958 bdrv_enable_copy_on_read(bs);
959 } else {
960 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200961 ret = -EINVAL;
962 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200963 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000964 }
965
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100966 if (filename != NULL) {
967 pstrcpy(bs->filename, sizeof(bs->filename), filename);
968 } else {
969 bs->filename[0] = '\0';
970 }
Max Reitz91af7012014-07-18 20:24:56 +0200971 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200972
Kevin Wolf57915332010-04-14 15:24:50 +0200973 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500974 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200975
Kevin Wolf91a097e2015-05-08 17:49:53 +0200976 /* Apply cache mode options */
977 update_flags_from_options(&bs->open_flags, opts);
978 bdrv_set_enable_write_cache(bs, bs->open_flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100979
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200980 /* Open the image, either directly or using a protocol */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100981 open_flags = bdrv_open_flags(bs, bs->open_flags);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200982 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100983 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200984 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200985 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100986 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200987 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200988 error_setg(errp, "Can't use '%s' as a block driver for the "
989 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200990 ret = -EINVAL;
991 goto free_and_fail;
992 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100993 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200994 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200995 }
996
Kevin Wolf57915332010-04-14 15:24:50 +0200997 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100998 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200999 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +08001000 } else if (bs->filename[0]) {
1001 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +02001002 } else {
1003 error_setg_errno(errp, -ret, "Could not open image");
1004 }
Kevin Wolf57915332010-04-14 15:24:50 +02001005 goto free_and_fail;
1006 }
1007
Markus Armbrustera1f688f2015-03-13 21:09:40 +01001008 if (bs->encrypted) {
1009 error_report("Encrypted images are deprecated");
1010 error_printf("Support for them will be removed in a future release.\n"
1011 "You can use 'qemu-img convert' to convert your image"
1012 " to an unencrypted one.\n");
1013 }
1014
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001015 ret = refresh_total_sectors(bs, bs->total_sectors);
1016 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001017 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001018 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +02001019 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001020
Kevin Wolf3baca892014-07-16 17:48:16 +02001021 bdrv_refresh_limits(bs, &local_err);
1022 if (local_err) {
1023 error_propagate(errp, local_err);
1024 ret = -EINVAL;
1025 goto free_and_fail;
1026 }
1027
Paolo Bonzinic25f53b2011-11-29 12:42:20 +01001028 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +03001029 assert(bdrv_min_mem_align(bs) != 0);
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +03001030 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
Kevin Wolf18edf282015-04-07 17:12:56 +02001031
1032 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001033 return 0;
1034
1035free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001036 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -05001037 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +02001038 bs->opaque = NULL;
1039 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +02001040fail_opts:
1041 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001042 return ret;
1043}
1044
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001045static QDict *parse_json_filename(const char *filename, Error **errp)
1046{
1047 QObject *options_obj;
1048 QDict *options;
1049 int ret;
1050
1051 ret = strstart(filename, "json:", &filename);
1052 assert(ret);
1053
1054 options_obj = qobject_from_json(filename);
1055 if (!options_obj) {
1056 error_setg(errp, "Could not parse the JSON options");
1057 return NULL;
1058 }
1059
1060 if (qobject_type(options_obj) != QTYPE_QDICT) {
1061 qobject_decref(options_obj);
1062 error_setg(errp, "Invalid JSON object given");
1063 return NULL;
1064 }
1065
1066 options = qobject_to_qdict(options_obj);
1067 qdict_flatten(options);
1068
1069 return options;
1070}
1071
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001072static void parse_json_protocol(QDict *options, const char **pfilename,
1073 Error **errp)
1074{
1075 QDict *json_options;
1076 Error *local_err = NULL;
1077
1078 /* Parse json: pseudo-protocol */
1079 if (!*pfilename || !g_str_has_prefix(*pfilename, "json:")) {
1080 return;
1081 }
1082
1083 json_options = parse_json_filename(*pfilename, &local_err);
1084 if (local_err) {
1085 error_propagate(errp, local_err);
1086 return;
1087 }
1088
1089 /* Options given in the filename have lower priority than options
1090 * specified directly */
1091 qdict_join(options, json_options, false);
1092 QDECREF(json_options);
1093 *pfilename = NULL;
1094}
1095
Kevin Wolf57915332010-04-14 15:24:50 +02001096/*
Kevin Wolff54120f2014-05-26 11:09:59 +02001097 * Fills in default options for opening images and converts the legacy
1098 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -04001099 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
1100 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +02001101 */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001102static int bdrv_fill_options(QDict **options, const char *filename,
Max Reitz053e1572015-08-26 19:47:51 +02001103 int *flags, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001104{
1105 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001106 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001107 bool parse_filename = false;
Max Reitz053e1572015-08-26 19:47:51 +02001108 BlockDriver *drv = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001109 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001110
Max Reitz53a29512015-03-19 14:53:16 -04001111 drvname = qdict_get_try_str(*options, "driver");
Max Reitz053e1572015-08-26 19:47:51 +02001112 if (drvname) {
1113 drv = bdrv_find_format(drvname);
1114 if (!drv) {
1115 error_setg(errp, "Unknown driver '%s'", drvname);
1116 return -ENOENT;
1117 }
1118 /* If the user has explicitly specified the driver, this choice should
1119 * override the BDRV_O_PROTOCOL flag */
1120 protocol = drv->bdrv_file_open;
Max Reitz53a29512015-03-19 14:53:16 -04001121 }
1122
1123 if (protocol) {
1124 *flags |= BDRV_O_PROTOCOL;
1125 } else {
1126 *flags &= ~BDRV_O_PROTOCOL;
1127 }
1128
Kevin Wolf91a097e2015-05-08 17:49:53 +02001129 /* Translate cache options from flags into options */
1130 update_options_from_flags(*options, *flags);
1131
Kevin Wolff54120f2014-05-26 11:09:59 +02001132 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001133 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001134 if (!qdict_haskey(*options, "filename")) {
1135 qdict_put(*options, "filename", qstring_from_str(filename));
1136 parse_filename = true;
1137 } else {
1138 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1139 "the same time");
1140 return -EINVAL;
1141 }
1142 }
1143
1144 /* Find the right block driver */
1145 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001146
Max Reitz053e1572015-08-26 19:47:51 +02001147 if (!drvname && protocol) {
1148 if (filename) {
1149 drv = bdrv_find_protocol(filename, parse_filename, errp);
1150 if (!drv) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001151 return -EINVAL;
1152 }
Max Reitz053e1572015-08-26 19:47:51 +02001153
1154 drvname = drv->format_name;
1155 qdict_put(*options, "driver", qstring_from_str(drvname));
1156 } else {
1157 error_setg(errp, "Must specify either driver or file");
1158 return -EINVAL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001159 }
1160 }
1161
Kevin Wolf17b005f2014-05-27 10:50:29 +02001162 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001163
1164 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001165 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001166 drv->bdrv_parse_filename(filename, *options, &local_err);
1167 if (local_err) {
1168 error_propagate(errp, local_err);
1169 return -EINVAL;
1170 }
1171
1172 if (!drv->bdrv_needs_filename) {
1173 qdict_del(*options, "filename");
1174 }
1175 }
1176
1177 return 0;
1178}
1179
Kevin Wolff21d96d2016-03-08 13:47:46 +01001180BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
1181 const char *child_name,
1182 const BdrvChildRole *child_role)
Kevin Wolfdf581792015-06-15 11:53:47 +02001183{
1184 BdrvChild *child = g_new(BdrvChild, 1);
1185 *child = (BdrvChild) {
1186 .bs = child_bs,
Kevin Wolf260fecf2015-04-27 13:46:22 +02001187 .name = g_strdup(child_name),
Kevin Wolfdf581792015-06-15 11:53:47 +02001188 .role = child_role,
1189 };
1190
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001191 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001192
1193 return child;
Kevin Wolfdf581792015-06-15 11:53:47 +02001194}
1195
Kevin Wolff21d96d2016-03-08 13:47:46 +01001196static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1197 BlockDriverState *child_bs,
1198 const char *child_name,
1199 const BdrvChildRole *child_role)
1200{
1201 BdrvChild *child = bdrv_root_attach_child(child_bs, child_name, child_role);
1202 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1203 return child;
1204}
1205
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02001206static void bdrv_detach_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001207{
Kevin Wolff21d96d2016-03-08 13:47:46 +01001208 if (child->next.le_prev) {
1209 QLIST_REMOVE(child, next);
1210 child->next.le_prev = NULL;
1211 }
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001212 QLIST_REMOVE(child, next_parent);
Kevin Wolf260fecf2015-04-27 13:46:22 +02001213 g_free(child->name);
Kevin Wolf33a60402015-06-15 13:51:04 +02001214 g_free(child);
1215}
1216
Kevin Wolff21d96d2016-03-08 13:47:46 +01001217void bdrv_root_unref_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001218{
Kevin Wolf779020c2015-10-13 14:09:44 +02001219 BlockDriverState *child_bs;
1220
Kevin Wolff21d96d2016-03-08 13:47:46 +01001221 child_bs = child->bs;
1222 bdrv_detach_child(child);
1223 bdrv_unref(child_bs);
1224}
1225
1226void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1227{
Kevin Wolf779020c2015-10-13 14:09:44 +02001228 if (child == NULL) {
1229 return;
1230 }
Kevin Wolf33a60402015-06-15 13:51:04 +02001231
1232 if (child->bs->inherits_from == parent) {
1233 child->bs->inherits_from = NULL;
1234 }
1235
Kevin Wolff21d96d2016-03-08 13:47:46 +01001236 bdrv_root_unref_child(child);
Kevin Wolf33a60402015-06-15 13:51:04 +02001237}
1238
Kevin Wolf5db15a52015-09-14 15:33:33 +02001239/*
1240 * Sets the backing file link of a BDS. A new reference is created; callers
1241 * which don't need their own reference any more must call bdrv_unref().
1242 */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001243void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1244{
Kevin Wolf5db15a52015-09-14 15:33:33 +02001245 if (backing_hd) {
1246 bdrv_ref(backing_hd);
1247 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001248
Kevin Wolf760e0062015-06-17 14:55:21 +02001249 if (bs->backing) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001250 assert(bs->backing_blocker);
Kevin Wolf760e0062015-06-17 14:55:21 +02001251 bdrv_op_unblock_all(bs->backing->bs, bs->backing_blocker);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001252 bdrv_unref_child(bs, bs->backing);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001253 } else if (backing_hd) {
1254 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001255 "node is used as backing hd of '%s'",
1256 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001257 }
1258
Fam Zheng8d24cce2014-05-23 21:29:45 +08001259 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001260 error_free(bs->backing_blocker);
1261 bs->backing_blocker = NULL;
Kevin Wolf760e0062015-06-17 14:55:21 +02001262 bs->backing = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001263 goto out;
1264 }
Kevin Wolf260fecf2015-04-27 13:46:22 +02001265 bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_backing);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001266 bs->open_flags &= ~BDRV_O_NO_BACKING;
1267 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1268 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1269 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001270
Kevin Wolf760e0062015-06-17 14:55:21 +02001271 bdrv_op_block_all(backing_hd, bs->backing_blocker);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001272 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Kevin Wolf760e0062015-06-17 14:55:21 +02001273 bdrv_op_unblock(backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001274 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001275out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001276 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001277}
1278
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001279/*
1280 * Opens the backing file for a BlockDriverState if not yet open
1281 *
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001282 * bdref_key specifies the key for the image's BlockdevRef in the options QDict.
1283 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1284 * itself, all options starting with "${bdref_key}." are considered part of the
1285 * BlockdevRef.
1286 *
1287 * TODO Can this be unified with bdrv_open_image()?
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001288 */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001289int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
1290 const char *bdref_key, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001291{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001292 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001293 char *bdref_key_dot;
1294 const char *reference = NULL;
Kevin Wolf317fc442014-04-25 13:27:34 +02001295 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001296 BlockDriverState *backing_hd;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001297 QDict *options;
1298 QDict *tmp_parent_options = NULL;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001299 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001300
Kevin Wolf760e0062015-06-17 14:55:21 +02001301 if (bs->backing != NULL) {
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001302 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001303 }
1304
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001305 /* NULL means an empty set of options */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001306 if (parent_options == NULL) {
1307 tmp_parent_options = qdict_new();
1308 parent_options = tmp_parent_options;
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001309 }
1310
Paolo Bonzini9156df12012-10-18 16:49:17 +02001311 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001312
1313 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1314 qdict_extract_subqdict(parent_options, &options, bdref_key_dot);
1315 g_free(bdref_key_dot);
1316
1317 reference = qdict_get_try_str(parent_options, bdref_key);
1318 if (reference || qdict_haskey(options, "file.filename")) {
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001319 backing_filename[0] = '\0';
1320 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001321 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001322 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001323 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001324 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1325 &local_err);
1326 if (local_err) {
1327 ret = -EINVAL;
1328 error_propagate(errp, local_err);
1329 QDECREF(options);
1330 goto free_exit;
1331 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001332 }
1333
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001334 if (!bs->drv || !bs->drv->supports_backing) {
1335 ret = -EINVAL;
1336 error_setg(errp, "Driver doesn't support backing files");
1337 QDECREF(options);
1338 goto free_exit;
1339 }
1340
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001341 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1342 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001343 }
1344
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001345 backing_hd = NULL;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001346 ret = bdrv_open_inherit(&backing_hd,
1347 *backing_filename ? backing_filename : NULL,
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001348 reference, options, 0, bs, &child_backing,
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001349 errp);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001350 if (ret < 0) {
Paolo Bonzini9156df12012-10-18 16:49:17 +02001351 bs->open_flags |= BDRV_O_NO_BACKING;
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001352 error_prepend(errp, "Could not open backing file: ");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001353 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001354 }
Kevin Wolfdf581792015-06-15 11:53:47 +02001355
Kevin Wolf5db15a52015-09-14 15:33:33 +02001356 /* Hook up the backing file link; drop our reference, bs owns the
1357 * backing_hd reference now */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001358 bdrv_set_backing_hd(bs, backing_hd);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001359 bdrv_unref(backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001360
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001361 qdict_del(parent_options, bdref_key);
1362
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001363free_exit:
1364 g_free(backing_filename);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001365 QDECREF(tmp_parent_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001366 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001367}
1368
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001369/*
Max Reitzda557aa2013-12-20 19:28:11 +01001370 * Opens a disk image whose options are given as BlockdevRef in another block
1371 * device's options.
1372 *
Max Reitzda557aa2013-12-20 19:28:11 +01001373 * If allow_none is true, no image will be opened if filename is false and no
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001374 * BlockdevRef is given. NULL will be returned, but errp remains unset.
Max Reitzda557aa2013-12-20 19:28:11 +01001375 *
1376 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1377 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1378 * itself, all options starting with "${bdref_key}." are considered part of the
1379 * BlockdevRef.
1380 *
1381 * The BlockdevRef will be removed from the options QDict.
1382 */
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001383BdrvChild *bdrv_open_child(const char *filename,
1384 QDict *options, const char *bdref_key,
1385 BlockDriverState* parent,
1386 const BdrvChildRole *child_role,
1387 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001388{
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001389 BdrvChild *c = NULL;
1390 BlockDriverState *bs;
Max Reitzda557aa2013-12-20 19:28:11 +01001391 QDict *image_options;
1392 int ret;
1393 char *bdref_key_dot;
1394 const char *reference;
1395
Kevin Wolfdf581792015-06-15 11:53:47 +02001396 assert(child_role != NULL);
Max Reitzf67503e2014-02-18 18:33:05 +01001397
Max Reitzda557aa2013-12-20 19:28:11 +01001398 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1399 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1400 g_free(bdref_key_dot);
1401
1402 reference = qdict_get_try_str(options, bdref_key);
1403 if (!filename && !reference && !qdict_size(image_options)) {
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001404 if (!allow_none) {
Max Reitzda557aa2013-12-20 19:28:11 +01001405 error_setg(errp, "A block device must be specified for \"%s\"",
1406 bdref_key);
Max Reitzda557aa2013-12-20 19:28:11 +01001407 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001408 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001409 goto done;
1410 }
1411
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001412 bs = NULL;
1413 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0,
Max Reitzce343772015-08-26 19:47:50 +02001414 parent, child_role, errp);
Kevin Wolfdf581792015-06-15 11:53:47 +02001415 if (ret < 0) {
1416 goto done;
1417 }
1418
Kevin Wolf260fecf2015-04-27 13:46:22 +02001419 c = bdrv_attach_child(parent, bs, bdref_key, child_role);
Max Reitzda557aa2013-12-20 19:28:11 +01001420
1421done:
1422 qdict_del(options, bdref_key);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001423 return c;
1424}
1425
Kevin Wolf73176be2016-03-07 13:02:15 +01001426static int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags,
1427 QDict *snapshot_options, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001428{
1429 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001430 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001431 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001432 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001433 BlockDriverState *bs_snapshot;
Fam Zhengc2e0dbb2015-07-06 12:24:44 +08001434 Error *local_err = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001435 int ret;
1436
1437 /* if snapshot, we create a temporary backing file and open it
1438 instead of opening 'filename' directly */
1439
1440 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001441 total_size = bdrv_getlength(bs);
1442 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001443 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001444 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001445 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001446 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001447
1448 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001449 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001450 if (ret < 0) {
1451 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001452 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001453 }
1454
Max Reitzef810432014-12-02 18:32:42 +01001455 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001456 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001457 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001458 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, errp);
Chunyan Liu83d05212014-06-05 17:20:51 +08001459 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001460 if (ret < 0) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001461 error_prepend(errp, "Could not create temporary overlay '%s': ",
1462 tmp_filename);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001463 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001464 }
1465
Kevin Wolf73176be2016-03-07 13:02:15 +01001466 /* Prepare options QDict for the temporary file */
Kevin Wolfb9988752014-04-03 12:09:34 +02001467 qdict_put(snapshot_options, "file.driver",
1468 qstring_from_str("file"));
1469 qdict_put(snapshot_options, "file.filename",
1470 qstring_from_str(tmp_filename));
Max Reitze6641712015-08-26 19:47:48 +02001471 qdict_put(snapshot_options, "driver",
1472 qstring_from_str("qcow2"));
Kevin Wolfb9988752014-04-03 12:09:34 +02001473
Markus Armbrustere4e99862014-10-07 13:59:03 +02001474 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001475
1476 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001477 flags, &local_err);
Kevin Wolf73176be2016-03-07 13:02:15 +01001478 snapshot_options = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001479 if (ret < 0) {
1480 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001481 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001482 }
1483
1484 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001485
1486out:
Kevin Wolf73176be2016-03-07 13:02:15 +01001487 QDECREF(snapshot_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001488 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001489 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001490}
1491
Max Reitzda557aa2013-12-20 19:28:11 +01001492/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001493 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001494 *
1495 * options is a QDict of options to pass to the block drivers, or NULL for an
1496 * empty set of options. The reference to the QDict belongs to the block layer
1497 * after the call (even on failure), so if the caller intends to reuse the
1498 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001499 *
1500 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1501 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001502 *
1503 * The reference parameter may be used to specify an existing block device which
1504 * should be opened. If specified, neither options nor a filename may be given,
1505 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001506 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001507static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1508 const char *reference, QDict *options, int flags,
1509 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +02001510 const BdrvChildRole *child_role, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001511{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001512 int ret;
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001513 BdrvChild *file = NULL;
1514 BlockDriverState *bs;
Max Reitzce343772015-08-26 19:47:50 +02001515 BlockDriver *drv = NULL;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001516 const char *drvname;
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001517 const char *backing;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001518 Error *local_err = NULL;
Kevin Wolf73176be2016-03-07 13:02:15 +01001519 QDict *snapshot_options = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001520 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001521
Max Reitzf67503e2014-02-18 18:33:05 +01001522 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001523 assert(!child_role || !flags);
1524 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001525
Max Reitzddf56362014-02-18 18:33:06 +01001526 if (reference) {
1527 bool options_non_empty = options ? qdict_size(options) : false;
1528 QDECREF(options);
1529
1530 if (*pbs) {
1531 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1532 "another block device");
1533 return -EINVAL;
1534 }
1535
1536 if (filename || options_non_empty) {
1537 error_setg(errp, "Cannot reference an existing block device with "
1538 "additional options or a new filename");
1539 return -EINVAL;
1540 }
1541
1542 bs = bdrv_lookup_bs(reference, reference, errp);
1543 if (!bs) {
1544 return -ENODEV;
1545 }
1546 bdrv_ref(bs);
1547 *pbs = bs;
1548 return 0;
1549 }
1550
Max Reitzf67503e2014-02-18 18:33:05 +01001551 if (*pbs) {
1552 bs = *pbs;
1553 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001554 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001555 }
1556
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001557 /* NULL means an empty set of options */
1558 if (options == NULL) {
1559 options = qdict_new();
1560 }
1561
Kevin Wolf145f5982015-05-08 16:15:03 +02001562 /* json: syntax counts as explicit options, as if in the QDict */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001563 parse_json_protocol(options, &filename, &local_err);
1564 if (local_err) {
1565 ret = -EINVAL;
1566 goto fail;
1567 }
1568
Kevin Wolf145f5982015-05-08 16:15:03 +02001569 bs->explicit_options = qdict_clone_shallow(options);
1570
Kevin Wolff3930ed2015-04-08 13:43:47 +02001571 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001572 bs->inherits_from = parent;
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001573 child_role->inherit_options(&flags, options,
1574 parent->open_flags, parent->options);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001575 }
1576
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001577 ret = bdrv_fill_options(&options, filename, &flags, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001578 if (local_err) {
1579 goto fail;
1580 }
1581
Kevin Wolf62392eb2015-04-24 16:38:02 +02001582 bs->open_flags = flags;
1583 bs->options = options;
1584 options = qdict_clone_shallow(options);
1585
Kevin Wolf76c591b2014-06-04 14:19:44 +02001586 /* Find the right image format driver */
Kevin Wolf76c591b2014-06-04 14:19:44 +02001587 drvname = qdict_get_try_str(options, "driver");
1588 if (drvname) {
1589 drv = bdrv_find_format(drvname);
Kevin Wolf76c591b2014-06-04 14:19:44 +02001590 if (!drv) {
1591 error_setg(errp, "Unknown driver: '%s'", drvname);
1592 ret = -EINVAL;
1593 goto fail;
1594 }
1595 }
1596
1597 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001598
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001599 backing = qdict_get_try_str(options, "backing");
1600 if (backing && *backing == '\0') {
1601 flags |= BDRV_O_NO_BACKING;
1602 qdict_del(options, "backing");
1603 }
1604
Kevin Wolff4788ad2014-06-03 16:44:19 +02001605 /* Open image file without format layer */
1606 if ((flags & BDRV_O_PROTOCOL) == 0) {
1607 if (flags & BDRV_O_RDWR) {
1608 flags |= BDRV_O_ALLOW_RDWR;
1609 }
1610 if (flags & BDRV_O_SNAPSHOT) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001611 snapshot_options = qdict_new();
1612 bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
1613 flags, options);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001614 bdrv_backing_options(&flags, options, flags, options);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001615 }
1616
Kevin Wolff3930ed2015-04-08 13:43:47 +02001617 bs->open_flags = flags;
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001618
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001619 file = bdrv_open_child(filename, options, "file", bs,
1620 &child_file, true, &local_err);
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001621 if (local_err) {
1622 ret = -EINVAL;
Max Reitz5469a2a2014-02-18 18:33:10 +01001623 goto fail;
1624 }
1625 }
1626
Kevin Wolf76c591b2014-06-04 14:19:44 +02001627 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001628 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001629 if (!drv && file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001630 ret = find_image_format(file->bs, filename, &drv, &local_err);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001631 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001632 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001633 }
Kevin Wolf62392eb2015-04-24 16:38:02 +02001634 /*
1635 * This option update would logically belong in bdrv_fill_options(),
1636 * but we first need to open bs->file for the probing to work, while
1637 * opening bs->file already requires the (mostly) final set of options
1638 * so that cache mode etc. can be inherited.
1639 *
1640 * Adding the driver later is somewhat ugly, but it's not an option
1641 * that would ever be inherited, so it's correct. We just need to make
1642 * sure to update both bs->options (which has the full effective
1643 * options for bs) and options (which has file.* already removed).
1644 */
1645 qdict_put(bs->options, "driver", qstring_from_str(drv->format_name));
1646 qdict_put(options, "driver", qstring_from_str(drv->format_name));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001647 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001648 error_setg(errp, "Must specify either driver or file");
1649 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001650 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001651 }
1652
Max Reitz53a29512015-03-19 14:53:16 -04001653 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1654 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1655 /* file must be NULL if a protocol BDS is about to be created
1656 * (the inverse results in an error message from bdrv_open_common()) */
1657 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1658
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001659 /* Open the image */
Kevin Wolf82dc8b42016-01-11 19:07:50 +01001660 ret = bdrv_open_common(bs, file, options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001661 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001662 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001663 }
1664
Max Reitz2a05cbe2013-12-20 19:28:10 +01001665 if (file && (bs->file != file)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001666 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001667 file = NULL;
1668 }
1669
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001670 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001671 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001672 ret = bdrv_open_backing_file(bs, options, "backing", &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001673 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001674 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001675 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001676 }
1677
Max Reitz91af7012014-07-18 20:24:56 +02001678 bdrv_refresh_filename(bs);
1679
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001680 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001681 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001682 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001683 if (flags & BDRV_O_PROTOCOL) {
1684 error_setg(errp, "Block protocol '%s' doesn't support the option "
1685 "'%s'", drv->format_name, entry->key);
1686 } else {
Max Reitzd0e46a52016-03-16 19:54:34 +01001687 error_setg(errp,
1688 "Block format '%s' does not support the option '%s'",
1689 drv->format_name, entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001690 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001691
1692 ret = -EINVAL;
1693 goto close_and_fail;
1694 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001695
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001696 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001697 if (bs->blk) {
1698 blk_dev_change_media_cb(bs->blk, true);
1699 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001700 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1701 && !runstate_check(RUN_STATE_INMIGRATE)
1702 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1703 error_setg(errp,
1704 "Guest must be stopped for opening of encrypted image");
1705 ret = -EBUSY;
1706 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001707 }
1708
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001709 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001710 *pbs = bs;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001711
1712 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1713 * temporary snapshot afterwards. */
1714 if (snapshot_flags) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001715 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, snapshot_options,
1716 &local_err);
1717 snapshot_options = NULL;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001718 if (local_err) {
1719 goto close_and_fail;
1720 }
1721 }
1722
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001723 return 0;
1724
Kevin Wolf8bfea152014-04-11 19:16:36 +02001725fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001726 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001727 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001728 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001729 QDECREF(snapshot_options);
Kevin Wolf145f5982015-05-08 16:15:03 +02001730 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001731 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001732 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001733 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001734 if (!*pbs) {
1735 /* If *pbs is NULL, a new BDS has been created in this function and
1736 needs to be freed now. Otherwise, it does not need to be closed,
1737 since it has not really been opened yet. */
1738 bdrv_unref(bs);
1739 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001740 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001741 error_propagate(errp, local_err);
1742 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001743 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001744
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001745close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001746 /* See fail path, but now the BDS has to be always closed */
1747 if (*pbs) {
1748 bdrv_close(bs);
1749 } else {
1750 bdrv_unref(bs);
1751 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001752 QDECREF(snapshot_options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001753 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001754 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001755 error_propagate(errp, local_err);
1756 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001757 return ret;
1758}
1759
Kevin Wolff3930ed2015-04-08 13:43:47 +02001760int bdrv_open(BlockDriverState **pbs, const char *filename,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001761 const char *reference, QDict *options, int flags, Error **errp)
Kevin Wolff3930ed2015-04-08 13:43:47 +02001762{
1763 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
Max Reitzce343772015-08-26 19:47:50 +02001764 NULL, errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001765}
1766
Jeff Codye971aa12012-09-20 15:13:19 -04001767typedef struct BlockReopenQueueEntry {
1768 bool prepared;
1769 BDRVReopenState state;
1770 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1771} BlockReopenQueueEntry;
1772
1773/*
1774 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1775 * reopen of multiple devices.
1776 *
1777 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1778 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1779 * be created and initialized. This newly created BlockReopenQueue should be
1780 * passed back in for subsequent calls that are intended to be of the same
1781 * atomic 'set'.
1782 *
1783 * bs is the BlockDriverState to add to the reopen queue.
1784 *
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001785 * options contains the changed options for the associated bs
1786 * (the BlockReopenQueue takes ownership)
1787 *
Jeff Codye971aa12012-09-20 15:13:19 -04001788 * flags contains the open flags for the associated bs
1789 *
1790 * returns a pointer to bs_queue, which is either the newly allocated
1791 * bs_queue, or the existing bs_queue being used.
1792 *
1793 */
Kevin Wolf28518102015-05-08 17:07:31 +02001794static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
1795 BlockDriverState *bs,
1796 QDict *options,
1797 int flags,
1798 const BdrvChildRole *role,
1799 QDict *parent_options,
1800 int parent_flags)
Jeff Codye971aa12012-09-20 15:13:19 -04001801{
1802 assert(bs != NULL);
1803
1804 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001805 BdrvChild *child;
Kevin Wolf145f5982015-05-08 16:15:03 +02001806 QDict *old_options, *explicit_options;
Kevin Wolf67251a32015-04-09 18:54:04 +02001807
Jeff Codye971aa12012-09-20 15:13:19 -04001808 if (bs_queue == NULL) {
1809 bs_queue = g_new0(BlockReopenQueue, 1);
1810 QSIMPLEQ_INIT(bs_queue);
1811 }
1812
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001813 if (!options) {
1814 options = qdict_new();
1815 }
1816
Kevin Wolf28518102015-05-08 17:07:31 +02001817 /*
1818 * Precedence of options:
1819 * 1. Explicitly passed in options (highest)
Kevin Wolf91a097e2015-05-08 17:49:53 +02001820 * 2. Set in flags (only for top level)
Kevin Wolf145f5982015-05-08 16:15:03 +02001821 * 3. Retained from explicitly set options of bs
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001822 * 4. Inherited from parent node
Kevin Wolf28518102015-05-08 17:07:31 +02001823 * 5. Retained from effective options of bs
1824 */
1825
Kevin Wolf91a097e2015-05-08 17:49:53 +02001826 if (!parent_options) {
1827 /*
1828 * Any setting represented by flags is always updated. If the
1829 * corresponding QDict option is set, it takes precedence. Otherwise
1830 * the flag is translated into a QDict option. The old setting of bs is
1831 * not considered.
1832 */
1833 update_options_from_flags(options, flags);
1834 }
1835
Kevin Wolf145f5982015-05-08 16:15:03 +02001836 /* Old explicitly set values (don't overwrite by inherited value) */
1837 old_options = qdict_clone_shallow(bs->explicit_options);
1838 bdrv_join_options(bs, options, old_options);
1839 QDECREF(old_options);
1840
1841 explicit_options = qdict_clone_shallow(options);
1842
Kevin Wolf28518102015-05-08 17:07:31 +02001843 /* Inherit from parent node */
1844 if (parent_options) {
1845 assert(!flags);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001846 role->inherit_options(&flags, options, parent_flags, parent_options);
Kevin Wolf28518102015-05-08 17:07:31 +02001847 }
1848
1849 /* Old values are used for options that aren't set yet */
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001850 old_options = qdict_clone_shallow(bs->options);
Kevin Wolfcddff5b2015-11-16 16:43:27 +01001851 bdrv_join_options(bs, options, old_options);
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001852 QDECREF(old_options);
1853
Kevin Wolff1f25a22014-04-25 19:04:55 +02001854 /* bdrv_open() masks this flag out */
1855 flags &= ~BDRV_O_PROTOCOL;
1856
Kevin Wolf67251a32015-04-09 18:54:04 +02001857 QLIST_FOREACH(child, &bs->children, next) {
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001858 QDict *new_child_options;
1859 char *child_key_dot;
Kevin Wolf67251a32015-04-09 18:54:04 +02001860
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001861 /* reopen can only change the options of block devices that were
1862 * implicitly created and inherited options. For other (referenced)
1863 * block devices, a syntax like "backing.foo" results in an error. */
Kevin Wolf67251a32015-04-09 18:54:04 +02001864 if (child->bs->inherits_from != bs) {
1865 continue;
1866 }
1867
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001868 child_key_dot = g_strdup_printf("%s.", child->name);
1869 qdict_extract_subqdict(options, &new_child_options, child_key_dot);
1870 g_free(child_key_dot);
1871
Kevin Wolf28518102015-05-08 17:07:31 +02001872 bdrv_reopen_queue_child(bs_queue, child->bs, new_child_options, 0,
1873 child->role, options, flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001874 }
1875
1876 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1877 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1878
1879 bs_entry->state.bs = bs;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001880 bs_entry->state.options = options;
Kevin Wolf145f5982015-05-08 16:15:03 +02001881 bs_entry->state.explicit_options = explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04001882 bs_entry->state.flags = flags;
1883
1884 return bs_queue;
1885}
1886
Kevin Wolf28518102015-05-08 17:07:31 +02001887BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1888 BlockDriverState *bs,
1889 QDict *options, int flags)
1890{
1891 return bdrv_reopen_queue_child(bs_queue, bs, options, flags,
1892 NULL, NULL, 0);
1893}
1894
Jeff Codye971aa12012-09-20 15:13:19 -04001895/*
1896 * Reopen multiple BlockDriverStates atomically & transactionally.
1897 *
1898 * The queue passed in (bs_queue) must have been built up previous
1899 * via bdrv_reopen_queue().
1900 *
1901 * Reopens all BDS specified in the queue, with the appropriate
1902 * flags. All devices are prepared for reopen, and failure of any
1903 * device will cause all device changes to be abandonded, and intermediate
1904 * data cleaned up.
1905 *
1906 * If all devices prepare successfully, then the changes are committed
1907 * to all devices.
1908 *
1909 */
1910int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1911{
1912 int ret = -1;
1913 BlockReopenQueueEntry *bs_entry, *next;
1914 Error *local_err = NULL;
1915
1916 assert(bs_queue != NULL);
1917
1918 bdrv_drain_all();
1919
1920 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1921 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1922 error_propagate(errp, local_err);
1923 goto cleanup;
1924 }
1925 bs_entry->prepared = true;
1926 }
1927
1928 /* If we reach this point, we have success and just need to apply the
1929 * changes
1930 */
1931 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1932 bdrv_reopen_commit(&bs_entry->state);
1933 }
1934
1935 ret = 0;
1936
1937cleanup:
1938 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1939 if (ret && bs_entry->prepared) {
1940 bdrv_reopen_abort(&bs_entry->state);
Kevin Wolf145f5982015-05-08 16:15:03 +02001941 } else if (ret) {
1942 QDECREF(bs_entry->state.explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04001943 }
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001944 QDECREF(bs_entry->state.options);
Jeff Codye971aa12012-09-20 15:13:19 -04001945 g_free(bs_entry);
1946 }
1947 g_free(bs_queue);
1948 return ret;
1949}
1950
1951
1952/* Reopen a single BlockDriverState with the specified flags. */
1953int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1954{
1955 int ret = -1;
1956 Error *local_err = NULL;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001957 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001958
1959 ret = bdrv_reopen_multiple(queue, &local_err);
1960 if (local_err != NULL) {
1961 error_propagate(errp, local_err);
1962 }
1963 return ret;
1964}
1965
1966
1967/*
1968 * Prepares a BlockDriverState for reopen. All changes are staged in the
1969 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1970 * the block driver layer .bdrv_reopen_prepare()
1971 *
1972 * bs is the BlockDriverState to reopen
1973 * flags are the new open flags
1974 * queue is the reopen queue
1975 *
1976 * Returns 0 on success, non-zero on error. On error errp will be set
1977 * as well.
1978 *
1979 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1980 * It is the responsibility of the caller to then call the abort() or
1981 * commit() for any other BDS that have been left in a prepare() state
1982 *
1983 */
1984int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1985 Error **errp)
1986{
1987 int ret = -1;
1988 Error *local_err = NULL;
1989 BlockDriver *drv;
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001990 QemuOpts *opts;
1991 const char *value;
Jeff Codye971aa12012-09-20 15:13:19 -04001992
1993 assert(reopen_state != NULL);
1994 assert(reopen_state->bs->drv != NULL);
1995 drv = reopen_state->bs->drv;
1996
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001997 /* Process generic block layer options */
1998 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
1999 qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
2000 if (local_err) {
2001 error_propagate(errp, local_err);
2002 ret = -EINVAL;
2003 goto error;
2004 }
2005
Kevin Wolf91a097e2015-05-08 17:49:53 +02002006 update_flags_from_options(&reopen_state->flags, opts);
2007
2008 /* If a guest device is attached, it owns WCE */
2009 if (reopen_state->bs->blk && blk_get_attached_dev(reopen_state->bs->blk)) {
2010 bool old_wce = bdrv_enable_write_cache(reopen_state->bs);
2011 bool new_wce = (reopen_state->flags & BDRV_O_CACHE_WB);
2012 if (old_wce != new_wce) {
2013 error_setg(errp, "Cannot change cache.writeback: Device attached");
2014 ret = -EINVAL;
2015 goto error;
2016 }
2017 }
2018
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002019 /* node-name and driver must be unchanged. Put them back into the QDict, so
2020 * that they are checked at the end of this function. */
2021 value = qemu_opt_get(opts, "node-name");
2022 if (value) {
2023 qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2024 }
2025
2026 value = qemu_opt_get(opts, "driver");
2027 if (value) {
2028 qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2029 }
2030
Jeff Codye971aa12012-09-20 15:13:19 -04002031 /* if we are to stay read-only, do not allow permission change
2032 * to r/w */
2033 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2034 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002035 error_setg(errp, "Node '%s' is read only",
2036 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002037 goto error;
2038 }
2039
2040
2041 ret = bdrv_flush(reopen_state->bs);
2042 if (ret) {
Eric Blake455b0fd2015-11-10 23:51:20 -07002043 error_setg_errno(errp, -ret, "Error flushing drive");
Jeff Codye971aa12012-09-20 15:13:19 -04002044 goto error;
2045 }
2046
2047 if (drv->bdrv_reopen_prepare) {
2048 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2049 if (ret) {
2050 if (local_err != NULL) {
2051 error_propagate(errp, local_err);
2052 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04002053 error_setg(errp, "failed while preparing to reopen image '%s'",
2054 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04002055 }
2056 goto error;
2057 }
2058 } else {
2059 /* It is currently mandatory to have a bdrv_reopen_prepare()
2060 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03002061 error_setg(errp, "Block format '%s' used by node '%s' "
2062 "does not support reopening files", drv->format_name,
2063 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002064 ret = -1;
2065 goto error;
2066 }
2067
Kevin Wolf4d2cb092015-04-10 17:50:50 +02002068 /* Options that are not handled are only okay if they are unchanged
2069 * compared to the old state. It is expected that some options are only
2070 * used for the initial open, but not reopen (e.g. filename) */
2071 if (qdict_size(reopen_state->options)) {
2072 const QDictEntry *entry = qdict_first(reopen_state->options);
2073
2074 do {
2075 QString *new_obj = qobject_to_qstring(entry->value);
2076 const char *new = qstring_get_str(new_obj);
2077 const char *old = qdict_get_try_str(reopen_state->bs->options,
2078 entry->key);
2079
2080 if (!old || strcmp(new, old)) {
2081 error_setg(errp, "Cannot change the option '%s'", entry->key);
2082 ret = -EINVAL;
2083 goto error;
2084 }
2085 } while ((entry = qdict_next(reopen_state->options, entry)));
2086 }
2087
Jeff Codye971aa12012-09-20 15:13:19 -04002088 ret = 0;
2089
2090error:
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002091 qemu_opts_del(opts);
Jeff Codye971aa12012-09-20 15:13:19 -04002092 return ret;
2093}
2094
2095/*
2096 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2097 * makes them final by swapping the staging BlockDriverState contents into
2098 * the active BlockDriverState contents.
2099 */
2100void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2101{
2102 BlockDriver *drv;
2103
2104 assert(reopen_state != NULL);
2105 drv = reopen_state->bs->drv;
2106 assert(drv != NULL);
2107
2108 /* If there are any driver level actions to take */
2109 if (drv->bdrv_reopen_commit) {
2110 drv->bdrv_reopen_commit(reopen_state);
2111 }
2112
2113 /* set BDS specific flags now */
Kevin Wolf145f5982015-05-08 16:15:03 +02002114 QDECREF(reopen_state->bs->explicit_options);
2115
2116 reopen_state->bs->explicit_options = reopen_state->explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04002117 reopen_state->bs->open_flags = reopen_state->flags;
2118 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
2119 BDRV_O_CACHE_WB);
2120 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01002121
Kevin Wolf3baca892014-07-16 17:48:16 +02002122 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04002123}
2124
2125/*
2126 * Abort the reopen, and delete and free the staged changes in
2127 * reopen_state
2128 */
2129void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2130{
2131 BlockDriver *drv;
2132
2133 assert(reopen_state != NULL);
2134 drv = reopen_state->bs->drv;
2135 assert(drv != NULL);
2136
2137 if (drv->bdrv_reopen_abort) {
2138 drv->bdrv_reopen_abort(reopen_state);
2139 }
Kevin Wolf145f5982015-05-08 16:15:03 +02002140
2141 QDECREF(reopen_state->explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04002142}
2143
2144
Max Reitz64dff522016-01-29 16:36:10 +01002145static void bdrv_close(BlockDriverState *bs)
bellardfc01f7e2003-06-30 10:03:06 +00002146{
Max Reitz33384422014-06-20 21:57:33 +02002147 BdrvAioNotifier *ban, *ban_next;
2148
Max Reitzca9bd242016-01-29 16:36:14 +01002149 assert(!bs->job);
Alberto Garcia99b7e772015-09-25 16:41:44 +03002150
2151 /* Disable I/O limits and drain all pending throttled requests */
Alberto Garciaa0d64a62015-11-04 15:15:36 +02002152 if (bs->throttle_state) {
Alberto Garcia99b7e772015-09-25 16:41:44 +03002153 bdrv_io_limits_disable(bs);
2154 }
2155
Paolo Bonzinifc272912015-12-23 11:48:24 +01002156 bdrv_drained_begin(bs); /* complete I/O */
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02002157 bdrv_flush(bs);
Fam Zheng53ec73e2015-05-29 18:53:14 +08002158 bdrv_drain(bs); /* in case flush left pending I/O */
Paolo Bonzinifc272912015-12-23 11:48:24 +01002159
Max Reitzc5acdc92016-01-29 16:36:01 +01002160 bdrv_release_named_dirty_bitmaps(bs);
2161 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2162
Max Reitzb4d02822015-10-19 17:53:15 +02002163 if (bs->blk) {
2164 blk_dev_change_media_cb(bs->blk, false);
2165 }
2166
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02002167 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002168 BdrvChild *child, *next;
2169
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002170 bs->drv->bdrv_close(bs);
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002171 bs->drv = NULL;
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002172
Kevin Wolf5db15a52015-09-14 15:33:33 +02002173 bdrv_set_backing_hd(bs, NULL);
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002174
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002175 if (bs->file != NULL) {
2176 bdrv_unref_child(bs, bs->file);
2177 bs->file = NULL;
2178 }
2179
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002180 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolf33a60402015-06-15 13:51:04 +02002181 /* TODO Remove bdrv_unref() from drivers' close function and use
2182 * bdrv_unref_child() here */
Kevin Wolfbddcec32015-04-09 18:47:50 +02002183 if (child->bs->inherits_from == bs) {
2184 child->bs->inherits_from = NULL;
2185 }
Kevin Wolf33a60402015-06-15 13:51:04 +02002186 bdrv_detach_child(child);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002187 }
2188
Anthony Liguori7267c092011-08-20 22:09:37 -05002189 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00002190 bs->opaque = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00002191 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02002192 bs->backing_file[0] = '\0';
2193 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02002194 bs->total_sectors = 0;
2195 bs->encrypted = 0;
2196 bs->valid_key = 0;
2197 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08002198 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002199 QDECREF(bs->options);
Kevin Wolf145f5982015-05-08 16:15:03 +02002200 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002201 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02002202 QDECREF(bs->full_open_options);
2203 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00002204 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08002205
Max Reitz33384422014-06-20 21:57:33 +02002206 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2207 g_free(ban);
2208 }
2209 QLIST_INIT(&bs->aio_notifiers);
Paolo Bonzinifc272912015-12-23 11:48:24 +01002210 bdrv_drained_end(bs);
bellardb3380822004-03-14 21:38:54 +00002211}
2212
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002213void bdrv_close_all(void)
2214{
2215 BlockDriverState *bs;
Max Reitzca9bd242016-01-29 16:36:14 +01002216 AioContext *aio_context;
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002217
Max Reitzca9bd242016-01-29 16:36:14 +01002218 /* Drop references from requests still in flight, such as canceled block
2219 * jobs whose AIO context has not been polled yet */
2220 bdrv_drain_all();
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002221
Max Reitzca9bd242016-01-29 16:36:14 +01002222 blk_remove_all_bs();
2223 blockdev_close_all_bdrv_states();
2224
2225 /* Cancel all block jobs */
2226 while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2227 QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2228 aio_context = bdrv_get_aio_context(bs);
2229
2230 aio_context_acquire(aio_context);
2231 if (bs->job) {
2232 block_job_cancel_sync(bs->job);
2233 aio_context_release(aio_context);
2234 break;
2235 }
2236 aio_context_release(aio_context);
2237 }
2238
2239 /* All the remaining BlockDriverStates are referenced directly or
2240 * indirectly from block jobs, so there needs to be at least one BDS
2241 * directly used by a block job */
2242 assert(bs);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002243 }
2244}
2245
Kevin Wolf8e419ae2015-09-16 16:18:38 +02002246/* Fields that need to stay with the top-level BDS */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002247static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2248 BlockDriverState *bs_src)
2249{
2250 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002251
2252 /* dev info */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002253 bs_dest->enable_write_cache = bs_src->enable_write_cache;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002254}
2255
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002256static void change_parent_backing_link(BlockDriverState *from,
2257 BlockDriverState *to)
2258{
2259 BdrvChild *c, *next;
2260
Kevin Wolff21d96d2016-03-08 13:47:46 +01002261 if (from->blk) {
2262 /* FIXME We bypass blk_set_bs(), so we need to make these updates
2263 * manually. The root problem is not in this change function, but the
2264 * existence of BlockDriverState.blk. */
2265 to->blk = from->blk;
2266 from->blk = NULL;
2267 }
2268
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002269 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2270 assert(c->role != &child_backing);
2271 c->bs = to;
2272 QLIST_REMOVE(c, next_parent);
2273 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2274 bdrv_ref(to);
2275 bdrv_unref(from);
2276 }
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002277}
2278
2279static void swap_feature_fields(BlockDriverState *bs_top,
2280 BlockDriverState *bs_new)
2281{
2282 BlockDriverState tmp;
2283
2284 bdrv_move_feature_fields(&tmp, bs_top);
2285 bdrv_move_feature_fields(bs_top, bs_new);
2286 bdrv_move_feature_fields(bs_new, &tmp);
2287
2288 assert(!bs_new->throttle_state);
2289 if (bs_top->throttle_state) {
2290 assert(bs_top->io_limits_enabled);
2291 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2292 bdrv_io_limits_disable(bs_top);
2293 }
2294}
2295
Jeff Cody8802d1f2012-02-28 15:54:06 -05002296/*
2297 * Add new bs contents at the top of an image chain while the chain is
2298 * live, while keeping required fields on the top layer.
2299 *
2300 * This will modify the BlockDriverState fields, and swap contents
2301 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2302 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002303 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002304 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002305 * This function does not create any image files.
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002306 *
2307 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2308 * that's what the callers commonly need. bs_new will be referenced by the old
2309 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2310 * reference of its own, it must call bdrv_ref().
Jeff Cody8802d1f2012-02-28 15:54:06 -05002311 */
2312void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2313{
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002314 assert(!bdrv_requests_pending(bs_top));
2315 assert(!bdrv_requests_pending(bs_new));
Jeff Cody8802d1f2012-02-28 15:54:06 -05002316
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002317 bdrv_ref(bs_top);
2318 change_parent_backing_link(bs_top, bs_new);
2319
2320 /* Some fields always stay on top of the backing file chain */
2321 swap_feature_fields(bs_top, bs_new);
2322
2323 bdrv_set_backing_hd(bs_new, bs_top);
2324 bdrv_unref(bs_top);
2325
2326 /* bs_new is now referenced by its new parents, we don't need the
2327 * additional reference any more. */
2328 bdrv_unref(bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002329}
2330
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02002331void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2332{
2333 assert(!bdrv_requests_pending(old));
2334 assert(!bdrv_requests_pending(new));
2335
2336 bdrv_ref(old);
2337
2338 if (old->blk) {
2339 /* As long as these fields aren't in BlockBackend, but in the top-level
2340 * BlockDriverState, it's not possible for a BDS to have two BBs.
2341 *
2342 * We really want to copy the fields from old to new, but we go for a
2343 * swap instead so that pointers aren't duplicated and cause trouble.
2344 * (Also, bdrv_swap() used to do the same.) */
2345 assert(!new->blk);
2346 swap_feature_fields(old, new);
2347 }
2348 change_parent_backing_link(old, new);
2349
2350 /* Change backing files if a previously independent node is added to the
2351 * chain. For active commit, we replace top by its own (indirect) backing
2352 * file and don't do anything here so we don't build a loop. */
2353 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2354 bdrv_set_backing_hd(new, backing_bs(old));
2355 bdrv_set_backing_hd(old, NULL);
2356 }
2357
2358 bdrv_unref(old);
2359}
2360
Fam Zheng4f6fd342013-08-23 09:14:47 +08002361static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002362{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002363 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002364 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002365 assert(!bs->refcnt);
Markus Armbruster18846de2010-06-29 16:58:30 +02002366
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002367 bdrv_close(bs);
2368
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002369 /* remove from list, if necessary */
Kevin Wolf63eaaae2016-03-18 10:46:57 +01002370 if (bs->node_name[0] != '\0') {
2371 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2372 }
Max Reitz2c1d04e2016-01-29 16:36:11 +01002373 QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2374
Anthony Liguori7267c092011-08-20 22:09:37 -05002375 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002376}
2377
aliguorie97fc192009-04-21 23:11:50 +00002378/*
2379 * Run consistency checks on an image
2380 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002381 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002382 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002383 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002384 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002385int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002386{
Max Reitz908bcd52014-08-07 22:47:55 +02002387 if (bs->drv == NULL) {
2388 return -ENOMEDIUM;
2389 }
aliguorie97fc192009-04-21 23:11:50 +00002390 if (bs->drv->bdrv_check == NULL) {
2391 return -ENOTSUP;
2392 }
2393
Kevin Wolfe076f332010-06-29 11:43:13 +02002394 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002395 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002396}
2397
Kevin Wolf8a426612010-07-16 17:17:01 +02002398#define COMMIT_BUF_SECTORS 2048
2399
bellard33e39632003-07-06 17:15:21 +00002400/* commit COW file into the raw image */
2401int bdrv_commit(BlockDriverState *bs)
2402{
bellard19cb3732006-08-19 11:45:59 +00002403 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002404 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002405 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002406 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002407 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002408
bellard19cb3732006-08-19 11:45:59 +00002409 if (!drv)
2410 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002411
Kevin Wolf760e0062015-06-17 14:55:21 +02002412 if (!bs->backing) {
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002413 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002414 }
2415
Fam Zhengbb000212014-09-11 13:14:00 +08002416 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
Kevin Wolf760e0062015-06-17 14:55:21 +02002417 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002418 return -EBUSY;
2419 }
2420
Kevin Wolf760e0062015-06-17 14:55:21 +02002421 ro = bs->backing->bs->read_only;
2422 open_flags = bs->backing->bs->open_flags;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002423
2424 if (ro) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002425 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002426 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002427 }
bellard33e39632003-07-06 17:15:21 +00002428 }
bellardea2384d2004-08-01 21:59:26 +00002429
Jeff Cody72706ea2014-01-24 09:02:35 -05002430 length = bdrv_getlength(bs);
2431 if (length < 0) {
2432 ret = length;
2433 goto ro_cleanup;
2434 }
2435
Kevin Wolf760e0062015-06-17 14:55:21 +02002436 backing_length = bdrv_getlength(bs->backing->bs);
Jeff Cody72706ea2014-01-24 09:02:35 -05002437 if (backing_length < 0) {
2438 ret = backing_length;
2439 goto ro_cleanup;
2440 }
2441
2442 /* If our top snapshot is larger than the backing file image,
2443 * grow the backing file image if possible. If not possible,
2444 * we must return an error */
2445 if (length > backing_length) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002446 ret = bdrv_truncate(bs->backing->bs, length);
Jeff Cody72706ea2014-01-24 09:02:35 -05002447 if (ret < 0) {
2448 goto ro_cleanup;
2449 }
2450 }
2451
2452 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002453
2454 /* qemu_try_blockalign() for bs will choose an alignment that works for
Kevin Wolf760e0062015-06-17 14:55:21 +02002455 * bs->backing->bs as well, so no need to compare the alignment manually. */
Kevin Wolf857d4f42014-05-20 13:16:51 +02002456 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2457 if (buf == NULL) {
2458 ret = -ENOMEM;
2459 goto ro_cleanup;
2460 }
bellardea2384d2004-08-01 21:59:26 +00002461
Kevin Wolf8a426612010-07-16 17:17:01 +02002462 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002463 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2464 if (ret < 0) {
2465 goto ro_cleanup;
2466 }
2467 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002468 ret = bdrv_read(bs, sector, buf, n);
2469 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002470 goto ro_cleanup;
2471 }
2472
Kevin Wolf760e0062015-06-17 14:55:21 +02002473 ret = bdrv_write(bs->backing->bs, sector, buf, n);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002474 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002475 goto ro_cleanup;
2476 }
bellardea2384d2004-08-01 21:59:26 +00002477 }
2478 }
bellard95389c82005-12-18 18:28:15 +00002479
Christoph Hellwig1d449522010-01-17 12:32:30 +01002480 if (drv->bdrv_make_empty) {
2481 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002482 if (ret < 0) {
2483 goto ro_cleanup;
2484 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002485 bdrv_flush(bs);
2486 }
bellard95389c82005-12-18 18:28:15 +00002487
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002488 /*
2489 * Make sure all data we wrote to the backing device is actually
2490 * stable on disk.
2491 */
Kevin Wolf760e0062015-06-17 14:55:21 +02002492 if (bs->backing) {
2493 bdrv_flush(bs->backing->bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002494 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002495
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002496 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002497ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002498 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002499
2500 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002501 /* ignoring error return here */
Kevin Wolf760e0062015-06-17 14:55:21 +02002502 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002503 }
2504
Christoph Hellwig1d449522010-01-17 12:32:30 +01002505 return ret;
bellard33e39632003-07-06 17:15:21 +00002506}
2507
Kevin Wolf756e6732010-01-12 12:55:17 +01002508/*
2509 * Return values:
2510 * 0 - success
2511 * -EINVAL - backing format specified, but no file
2512 * -ENOSPC - can't update the backing file because no space is left in the
2513 * image file header
2514 * -ENOTSUP - format driver doesn't support changing the backing file
2515 */
2516int bdrv_change_backing_file(BlockDriverState *bs,
2517 const char *backing_file, const char *backing_fmt)
2518{
2519 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002520 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002521
Paolo Bonzini5f377792012-04-12 14:01:01 +02002522 /* Backing file format doesn't make sense without a backing file */
2523 if (backing_fmt && !backing_file) {
2524 return -EINVAL;
2525 }
2526
Kevin Wolf756e6732010-01-12 12:55:17 +01002527 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002528 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002529 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002530 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002531 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002532
2533 if (ret == 0) {
2534 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2535 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2536 }
2537 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002538}
2539
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002540/*
2541 * Finds the image layer in the chain that has 'bs' as its backing file.
2542 *
2543 * active is the current topmost image.
2544 *
2545 * Returns NULL if bs is not found in active's image chain,
2546 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002547 *
2548 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002549 */
2550BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2551 BlockDriverState *bs)
2552{
Kevin Wolf760e0062015-06-17 14:55:21 +02002553 while (active && bs != backing_bs(active)) {
2554 active = backing_bs(active);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002555 }
2556
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002557 return active;
2558}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002559
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002560/* Given a BDS, searches for the base layer. */
2561BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2562{
2563 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002564}
2565
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002566/*
2567 * Drops images above 'base' up to and including 'top', and sets the image
2568 * above 'top' to have base as its backing file.
2569 *
2570 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2571 * information in 'bs' can be properly updated.
2572 *
2573 * E.g., this will convert the following chain:
2574 * bottom <- base <- intermediate <- top <- active
2575 *
2576 * to
2577 *
2578 * bottom <- base <- active
2579 *
2580 * It is allowed for bottom==base, in which case it converts:
2581 *
2582 * base <- intermediate <- top <- active
2583 *
2584 * to
2585 *
2586 * base <- active
2587 *
Jeff Cody54e26902014-06-25 15:40:10 -04002588 * If backing_file_str is non-NULL, it will be used when modifying top's
2589 * overlay image metadata.
2590 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002591 * Error conditions:
2592 * if active == top, that is considered an error
2593 *
2594 */
2595int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002596 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002597{
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002598 BlockDriverState *new_top_bs = NULL;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002599 int ret = -EIO;
2600
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002601 if (!top->drv || !base->drv) {
2602 goto exit;
2603 }
2604
2605 new_top_bs = bdrv_find_overlay(active, top);
2606
2607 if (new_top_bs == NULL) {
2608 /* we could not find the image above 'top', this is an error */
2609 goto exit;
2610 }
2611
Kevin Wolf760e0062015-06-17 14:55:21 +02002612 /* special case of new_top_bs->backing->bs already pointing to base - nothing
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002613 * to do, no intermediate images */
Kevin Wolf760e0062015-06-17 14:55:21 +02002614 if (backing_bs(new_top_bs) == base) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002615 ret = 0;
2616 goto exit;
2617 }
2618
Kevin Wolf5db15a52015-09-14 15:33:33 +02002619 /* Make sure that base is in the backing chain of top */
2620 if (!bdrv_chain_contains(top, base)) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002621 goto exit;
2622 }
2623
2624 /* success - we can delete the intermediate states, and link top->base */
Kevin Wolf5db15a52015-09-14 15:33:33 +02002625 backing_file_str = backing_file_str ? backing_file_str : base->filename;
Jeff Cody54e26902014-06-25 15:40:10 -04002626 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Kevin Wolf5db15a52015-09-14 15:33:33 +02002627 base->drv ? base->drv->format_name : "");
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002628 if (ret) {
2629 goto exit;
2630 }
Kevin Wolf5db15a52015-09-14 15:33:33 +02002631 bdrv_set_backing_hd(new_top_bs, base);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002632
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002633 ret = 0;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002634exit:
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002635 return ret;
2636}
2637
bellard83f64092006-08-01 16:21:11 +00002638/**
bellard83f64092006-08-01 16:21:11 +00002639 * Truncate file to 'offset' bytes (needed only for file protocols)
2640 */
2641int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2642{
2643 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002644 int ret;
bellard83f64092006-08-01 16:21:11 +00002645 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002646 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002647 if (!drv->bdrv_truncate)
2648 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002649 if (bs->read_only)
2650 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002651
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002652 ret = drv->bdrv_truncate(bs, offset);
2653 if (ret == 0) {
2654 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002655 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002656 if (bs->blk) {
2657 blk_dev_resize_cb(bs->blk);
2658 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002659 }
2660 return ret;
bellard83f64092006-08-01 16:21:11 +00002661}
2662
2663/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002664 * Length of a allocated file in bytes. Sparse files are counted by actual
2665 * allocated space. Return < 0 if error or unknown.
2666 */
2667int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2668{
2669 BlockDriver *drv = bs->drv;
2670 if (!drv) {
2671 return -ENOMEDIUM;
2672 }
2673 if (drv->bdrv_get_allocated_file_size) {
2674 return drv->bdrv_get_allocated_file_size(bs);
2675 }
2676 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002677 return bdrv_get_allocated_file_size(bs->file->bs);
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002678 }
2679 return -ENOTSUP;
2680}
2681
2682/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002683 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002684 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002685int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002686{
2687 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002688
bellard83f64092006-08-01 16:21:11 +00002689 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002690 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002691
Kevin Wolfb94a2612013-10-29 12:18:58 +01002692 if (drv->has_variable_length) {
2693 int ret = refresh_total_sectors(bs, bs->total_sectors);
2694 if (ret < 0) {
2695 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002696 }
bellard83f64092006-08-01 16:21:11 +00002697 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002698 return bs->total_sectors;
2699}
2700
2701/**
2702 * Return length in bytes on success, -errno on error.
2703 * The length is always a multiple of BDRV_SECTOR_SIZE.
2704 */
2705int64_t bdrv_getlength(BlockDriverState *bs)
2706{
2707 int64_t ret = bdrv_nb_sectors(bs);
2708
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002709 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002710 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002711}
2712
bellard19cb3732006-08-19 11:45:59 +00002713/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002714void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002715{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002716 int64_t nb_sectors = bdrv_nb_sectors(bs);
2717
2718 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002719}
bellardcf989512004-02-16 21:56:36 +00002720
bellardb3380822004-03-14 21:38:54 +00002721int bdrv_is_read_only(BlockDriverState *bs)
2722{
2723 return bs->read_only;
2724}
2725
ths985a03b2007-12-24 16:10:43 +00002726int bdrv_is_sg(BlockDriverState *bs)
2727{
2728 return bs->sg;
2729}
2730
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002731int bdrv_enable_write_cache(BlockDriverState *bs)
2732{
2733 return bs->enable_write_cache;
2734}
2735
Paolo Bonzini425b0142012-06-06 00:04:52 +02002736void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2737{
2738 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002739
2740 /* so a reopen() will preserve wce */
2741 if (wce) {
2742 bs->open_flags |= BDRV_O_CACHE_WB;
2743 } else {
2744 bs->open_flags &= ~BDRV_O_CACHE_WB;
2745 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002746}
2747
bellardea2384d2004-08-01 21:59:26 +00002748int bdrv_is_encrypted(BlockDriverState *bs)
2749{
Kevin Wolf760e0062015-06-17 14:55:21 +02002750 if (bs->backing && bs->backing->bs->encrypted) {
bellardea2384d2004-08-01 21:59:26 +00002751 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002752 }
bellardea2384d2004-08-01 21:59:26 +00002753 return bs->encrypted;
2754}
2755
aliguoric0f4ce72009-03-05 23:01:01 +00002756int bdrv_key_required(BlockDriverState *bs)
2757{
Kevin Wolf760e0062015-06-17 14:55:21 +02002758 BdrvChild *backing = bs->backing;
aliguoric0f4ce72009-03-05 23:01:01 +00002759
Kevin Wolf760e0062015-06-17 14:55:21 +02002760 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
aliguoric0f4ce72009-03-05 23:01:01 +00002761 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002762 }
aliguoric0f4ce72009-03-05 23:01:01 +00002763 return (bs->encrypted && !bs->valid_key);
2764}
2765
bellardea2384d2004-08-01 21:59:26 +00002766int bdrv_set_key(BlockDriverState *bs, const char *key)
2767{
2768 int ret;
Kevin Wolf760e0062015-06-17 14:55:21 +02002769 if (bs->backing && bs->backing->bs->encrypted) {
2770 ret = bdrv_set_key(bs->backing->bs, key);
bellardea2384d2004-08-01 21:59:26 +00002771 if (ret < 0)
2772 return ret;
2773 if (!bs->encrypted)
2774 return 0;
2775 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002776 if (!bs->encrypted) {
2777 return -EINVAL;
2778 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2779 return -ENOMEDIUM;
2780 }
aliguoric0f4ce72009-03-05 23:01:01 +00002781 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002782 if (ret < 0) {
2783 bs->valid_key = 0;
2784 } else if (!bs->valid_key) {
2785 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002786 if (bs->blk) {
2787 /* call the change callback now, we skipped it on open */
2788 blk_dev_change_media_cb(bs->blk, true);
2789 }
aliguoribb5fc202009-03-05 23:01:15 +00002790 }
aliguoric0f4ce72009-03-05 23:01:01 +00002791 return ret;
bellardea2384d2004-08-01 21:59:26 +00002792}
2793
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002794/*
2795 * Provide an encryption key for @bs.
2796 * If @key is non-null:
2797 * If @bs is not encrypted, fail.
2798 * Else if the key is invalid, fail.
2799 * Else set @bs's key to @key, replacing the existing key, if any.
2800 * If @key is null:
2801 * If @bs is encrypted and still lacks a key, fail.
2802 * Else do nothing.
2803 * On failure, store an error object through @errp if non-null.
2804 */
2805void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2806{
2807 if (key) {
2808 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002809 error_setg(errp, "Node '%s' is not encrypted",
2810 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002811 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002812 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002813 }
2814 } else {
2815 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002816 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2817 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002818 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002819 bdrv_get_encrypted_filename(bs));
2820 }
2821 }
2822}
2823
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002824const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002825{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002826 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002827}
2828
Stefan Hajnocziada42402014-08-27 12:08:55 +01002829static int qsort_strcmp(const void *a, const void *b)
2830{
2831 return strcmp(a, b);
2832}
2833
ths5fafdf22007-09-16 21:08:06 +00002834void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002835 void *opaque)
2836{
2837 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002838 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002839 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002840 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002841
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002842 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002843 if (drv->format_name) {
2844 bool found = false;
2845 int i = count;
2846 while (formats && i && !found) {
2847 found = !strcmp(formats[--i], drv->format_name);
2848 }
2849
2850 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002851 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002852 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002853 }
2854 }
bellardea2384d2004-08-01 21:59:26 +00002855 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002856
2857 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2858
2859 for (i = 0; i < count; i++) {
2860 it(opaque, formats[i]);
2861 }
2862
Jeff Codye855e4f2014-04-28 18:29:54 -04002863 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002864}
2865
Benoît Canetdc364f42014-01-23 21:31:32 +01002866/* This function is to find a node in the bs graph */
2867BlockDriverState *bdrv_find_node(const char *node_name)
2868{
2869 BlockDriverState *bs;
2870
2871 assert(node_name);
2872
2873 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2874 if (!strcmp(node_name, bs->node_name)) {
2875 return bs;
2876 }
2877 }
2878 return NULL;
2879}
2880
Benoît Canetc13163f2014-01-23 21:31:34 +01002881/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002882BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002883{
2884 BlockDeviceInfoList *list, *entry;
2885 BlockDriverState *bs;
2886
2887 list = NULL;
2888 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002889 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2890 if (!info) {
2891 qapi_free_BlockDeviceInfoList(list);
2892 return NULL;
2893 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002894 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002895 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002896 entry->next = list;
2897 list = entry;
2898 }
2899
2900 return list;
2901}
2902
Benoît Canet12d3ba82014-01-23 21:31:35 +01002903BlockDriverState *bdrv_lookup_bs(const char *device,
2904 const char *node_name,
2905 Error **errp)
2906{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002907 BlockBackend *blk;
2908 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002909
Benoît Canet12d3ba82014-01-23 21:31:35 +01002910 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002911 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002912
Markus Armbruster7f06d472014-10-07 13:59:12 +02002913 if (blk) {
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002914 bs = blk_bs(blk);
2915 if (!bs) {
Max Reitz5433c242015-10-19 17:53:29 +02002916 error_setg(errp, "Device '%s' has no medium", device);
Max Reitz5433c242015-10-19 17:53:29 +02002917 }
2918
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002919 return bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002920 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002921 }
2922
Benoît Canetdd67fa52014-02-12 17:15:06 +01002923 if (node_name) {
2924 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002925
Benoît Canetdd67fa52014-02-12 17:15:06 +01002926 if (bs) {
2927 return bs;
2928 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002929 }
2930
Benoît Canetdd67fa52014-02-12 17:15:06 +01002931 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2932 device ? device : "",
2933 node_name ? node_name : "");
2934 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002935}
2936
Jeff Cody5a6684d2014-06-25 15:40:09 -04002937/* If 'base' is in the same chain as 'top', return true. Otherwise,
2938 * return false. If either argument is NULL, return false. */
2939bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2940{
2941 while (top && top != base) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002942 top = backing_bs(top);
Jeff Cody5a6684d2014-06-25 15:40:09 -04002943 }
2944
2945 return top != NULL;
2946}
2947
Fam Zheng04df7652014-10-31 11:32:54 +08002948BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2949{
2950 if (!bs) {
2951 return QTAILQ_FIRST(&graph_bdrv_states);
2952 }
2953 return QTAILQ_NEXT(bs, node_list);
2954}
2955
Max Reitz26260582016-03-16 19:54:43 +01002956/* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
2957 * the monitor or attached to a BlockBackend */
Markus Armbruster2f399b02010-06-02 18:55:20 +02002958BlockDriverState *bdrv_next(BlockDriverState *bs)
2959{
Max Reitz26260582016-03-16 19:54:43 +01002960 if (!bs || bs->blk) {
2961 bs = blk_next_root_bs(bs);
2962 if (bs) {
2963 return bs;
2964 }
Markus Armbruster2f399b02010-06-02 18:55:20 +02002965 }
Max Reitz26260582016-03-16 19:54:43 +01002966
2967 /* Ignore all BDSs that are attached to a BlockBackend here; they have been
2968 * handled by the above block already */
2969 do {
2970 bs = bdrv_next_monitor_owned(bs);
2971 } while (bs && bs->blk);
2972 return bs;
Markus Armbruster2f399b02010-06-02 18:55:20 +02002973}
2974
Fam Zheng20a9e772014-10-31 11:32:55 +08002975const char *bdrv_get_node_name(const BlockDriverState *bs)
2976{
2977 return bs->node_name;
2978}
2979
Markus Armbruster7f06d472014-10-07 13:59:12 +02002980/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002981const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002982{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002983 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002984}
2985
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002986/* This can be used to identify nodes that might not have a device
2987 * name associated. Since node and device names live in the same
2988 * namespace, the result is unambiguous. The exception is if both are
2989 * absent, then this returns an empty (non-null) string. */
2990const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2991{
2992 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2993}
2994
Markus Armbrusterc8433282012-06-05 16:49:24 +02002995int bdrv_get_flags(BlockDriverState *bs)
2996{
2997 return bs->open_flags;
2998}
2999
Peter Lieven3ac21622013-06-28 12:47:42 +02003000int bdrv_has_zero_init_1(BlockDriverState *bs)
3001{
3002 return 1;
3003}
3004
Kevin Wolff2feebb2010-04-14 17:30:35 +02003005int bdrv_has_zero_init(BlockDriverState *bs)
3006{
3007 assert(bs->drv);
3008
Paolo Bonzini11212d82013-09-04 19:00:27 +02003009 /* If BS is a copy on write image, it is initialized to
3010 the contents of the base image, which may not be zeroes. */
Kevin Wolf760e0062015-06-17 14:55:21 +02003011 if (bs->backing) {
Paolo Bonzini11212d82013-09-04 19:00:27 +02003012 return 0;
3013 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02003014 if (bs->drv->bdrv_has_zero_init) {
3015 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02003016 }
3017
Peter Lieven3ac21622013-06-28 12:47:42 +02003018 /* safe default */
3019 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02003020}
3021
Peter Lieven4ce78692013-10-24 12:06:54 +02003022bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3023{
3024 BlockDriverInfo bdi;
3025
Kevin Wolf760e0062015-06-17 14:55:21 +02003026 if (bs->backing) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003027 return false;
3028 }
3029
3030 if (bdrv_get_info(bs, &bdi) == 0) {
3031 return bdi.unallocated_blocks_are_zero;
3032 }
3033
3034 return false;
3035}
3036
3037bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3038{
3039 BlockDriverInfo bdi;
3040
Kevin Wolf760e0062015-06-17 14:55:21 +02003041 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003042 return false;
3043 }
3044
3045 if (bdrv_get_info(bs, &bdi) == 0) {
3046 return bdi.can_write_zeroes_with_unmap;
3047 }
3048
3049 return false;
3050}
3051
aliguori045df332009-03-05 23:00:48 +00003052const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3053{
Kevin Wolf760e0062015-06-17 14:55:21 +02003054 if (bs->backing && bs->backing->bs->encrypted)
aliguori045df332009-03-05 23:00:48 +00003055 return bs->backing_file;
3056 else if (bs->encrypted)
3057 return bs->filename;
3058 else
3059 return NULL;
3060}
3061
ths5fafdf22007-09-16 21:08:06 +00003062void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00003063 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00003064{
Kevin Wolf3574c602011-10-26 11:02:11 +02003065 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00003066}
3067
bellardfaea38e2006-08-05 21:31:00 +00003068int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3069{
3070 BlockDriver *drv = bs->drv;
3071 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00003072 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00003073 if (!drv->bdrv_get_info)
3074 return -ENOTSUP;
3075 memset(bdi, 0, sizeof(*bdi));
3076 return drv->bdrv_get_info(bs, bdi);
3077}
3078
Max Reitzeae041f2013-10-09 10:46:16 +02003079ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3080{
3081 BlockDriver *drv = bs->drv;
3082 if (drv && drv->bdrv_get_specific_info) {
3083 return drv->bdrv_get_specific_info(bs);
3084 }
3085 return NULL;
3086}
3087
Eric Blakea31939e2015-11-18 01:52:54 -07003088void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003089{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003090 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003091 return;
3092 }
3093
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003094 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01003095}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003096
Kevin Wolf41c695c2012-12-06 14:32:58 +01003097int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3098 const char *tag)
3099{
3100 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003101 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003102 }
3103
3104 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3105 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3106 }
3107
3108 return -ENOTSUP;
3109}
3110
Fam Zheng4cc70e92013-11-20 10:01:54 +08003111int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3112{
3113 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003114 bs = bs->file ? bs->file->bs : NULL;
Fam Zheng4cc70e92013-11-20 10:01:54 +08003115 }
3116
3117 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3118 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3119 }
3120
3121 return -ENOTSUP;
3122}
3123
Kevin Wolf41c695c2012-12-06 14:32:58 +01003124int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3125{
Max Reitz938789e2014-03-10 23:44:08 +01003126 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003127 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003128 }
3129
3130 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3131 return bs->drv->bdrv_debug_resume(bs, tag);
3132 }
3133
3134 return -ENOTSUP;
3135}
3136
3137bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3138{
3139 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003140 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003141 }
3142
3143 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3144 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3145 }
3146
3147 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003148}
3149
Blue Swirl199630b2010-07-25 20:49:34 +00003150int bdrv_is_snapshot(BlockDriverState *bs)
3151{
3152 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3153}
3154
Jeff Codyb1b1d782012-10-16 15:49:09 -04003155/* backing_file can either be relative, or absolute, or a protocol. If it is
3156 * relative, it must be relative to the chain. So, passing in bs->filename
3157 * from a BDS as backing_file should not be done, as that may be relative to
3158 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003159BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3160 const char *backing_file)
3161{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003162 char *filename_full = NULL;
3163 char *backing_file_full = NULL;
3164 char *filename_tmp = NULL;
3165 int is_protocol = 0;
3166 BlockDriverState *curr_bs = NULL;
3167 BlockDriverState *retval = NULL;
3168
3169 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003170 return NULL;
3171 }
3172
Jeff Codyb1b1d782012-10-16 15:49:09 -04003173 filename_full = g_malloc(PATH_MAX);
3174 backing_file_full = g_malloc(PATH_MAX);
3175 filename_tmp = g_malloc(PATH_MAX);
3176
3177 is_protocol = path_has_protocol(backing_file);
3178
Kevin Wolf760e0062015-06-17 14:55:21 +02003179 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003180
3181 /* If either of the filename paths is actually a protocol, then
3182 * compare unmodified paths; otherwise make paths relative */
3183 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3184 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003185 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003186 break;
3187 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003188 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003189 /* If not an absolute filename path, make it relative to the current
3190 * image's filename path */
3191 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3192 backing_file);
3193
3194 /* We are going to compare absolute pathnames */
3195 if (!realpath(filename_tmp, filename_full)) {
3196 continue;
3197 }
3198
3199 /* We need to make sure the backing filename we are comparing against
3200 * is relative to the current image filename (or absolute) */
3201 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3202 curr_bs->backing_file);
3203
3204 if (!realpath(filename_tmp, backing_file_full)) {
3205 continue;
3206 }
3207
3208 if (strcmp(backing_file_full, filename_full) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003209 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003210 break;
3211 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003212 }
3213 }
3214
Jeff Codyb1b1d782012-10-16 15:49:09 -04003215 g_free(filename_full);
3216 g_free(backing_file_full);
3217 g_free(filename_tmp);
3218 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003219}
3220
Benoît Canetf198fd12012-08-02 10:22:47 +02003221int bdrv_get_backing_file_depth(BlockDriverState *bs)
3222{
3223 if (!bs->drv) {
3224 return 0;
3225 }
3226
Kevin Wolf760e0062015-06-17 14:55:21 +02003227 if (!bs->backing) {
Benoît Canetf198fd12012-08-02 10:22:47 +02003228 return 0;
3229 }
3230
Kevin Wolf760e0062015-06-17 14:55:21 +02003231 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
Benoît Canetf198fd12012-08-02 10:22:47 +02003232}
3233
bellardea2384d2004-08-01 21:59:26 +00003234void bdrv_init(void)
3235{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003236 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003237}
pbrookce1a14d2006-08-07 02:38:06 +00003238
Markus Armbrustereb852012009-10-27 18:41:44 +01003239void bdrv_init_with_whitelist(void)
3240{
3241 use_bdrv_whitelist = 1;
3242 bdrv_init();
3243}
3244
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003245void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003246{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003247 Error *local_err = NULL;
3248 int ret;
3249
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003250 if (!bs->drv) {
3251 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003252 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003253
Kevin Wolf04c01a52016-01-13 15:56:06 +01003254 if (!(bs->open_flags & BDRV_O_INACTIVE)) {
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003255 return;
3256 }
Kevin Wolf04c01a52016-01-13 15:56:06 +01003257 bs->open_flags &= ~BDRV_O_INACTIVE;
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003258
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003259 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003260 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003261 } else if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003262 bdrv_invalidate_cache(bs->file->bs, &local_err);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003263 }
3264 if (local_err) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003265 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003266 error_propagate(errp, local_err);
3267 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003268 }
3269
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003270 ret = refresh_total_sectors(bs, bs->total_sectors);
3271 if (ret < 0) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003272 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003273 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3274 return;
3275 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003276}
3277
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003278void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003279{
Max Reitz79720af2016-03-16 19:54:44 +01003280 BlockDriverState *bs = NULL;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003281 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003282
Max Reitz79720af2016-03-16 19:54:44 +01003283 while ((bs = bdrv_next(bs)) != NULL) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003284 AioContext *aio_context = bdrv_get_aio_context(bs);
3285
3286 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003287 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003288 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003289 if (local_err) {
3290 error_propagate(errp, local_err);
3291 return;
3292 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003293 }
3294}
3295
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003296static int bdrv_inactivate(BlockDriverState *bs)
3297{
3298 int ret;
3299
3300 if (bs->drv->bdrv_inactivate) {
3301 ret = bs->drv->bdrv_inactivate(bs);
3302 if (ret < 0) {
3303 return ret;
3304 }
3305 }
3306
3307 bs->open_flags |= BDRV_O_INACTIVE;
3308 return 0;
3309}
3310
3311int bdrv_inactivate_all(void)
3312{
Max Reitz79720af2016-03-16 19:54:44 +01003313 BlockDriverState *bs = NULL;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003314 int ret;
3315
Max Reitz79720af2016-03-16 19:54:44 +01003316 while ((bs = bdrv_next(bs)) != NULL) {
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003317 AioContext *aio_context = bdrv_get_aio_context(bs);
3318
3319 aio_context_acquire(aio_context);
3320 ret = bdrv_inactivate(bs);
3321 aio_context_release(aio_context);
3322 if (ret < 0) {
3323 return ret;
3324 }
3325 }
3326
3327 return 0;
3328}
3329
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003330/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003331/* removable device support */
3332
3333/**
3334 * Return TRUE if the media is present
3335 */
Max Reitze031f752015-10-19 17:53:11 +02003336bool bdrv_is_inserted(BlockDriverState *bs)
bellard19cb3732006-08-19 11:45:59 +00003337{
3338 BlockDriver *drv = bs->drv;
Max Reitz28d7a782015-10-19 17:53:13 +02003339 BdrvChild *child;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003340
Max Reitze031f752015-10-19 17:53:11 +02003341 if (!drv) {
3342 return false;
3343 }
Max Reitz28d7a782015-10-19 17:53:13 +02003344 if (drv->bdrv_is_inserted) {
3345 return drv->bdrv_is_inserted(bs);
Max Reitze031f752015-10-19 17:53:11 +02003346 }
Max Reitz28d7a782015-10-19 17:53:13 +02003347 QLIST_FOREACH(child, &bs->children, next) {
3348 if (!bdrv_is_inserted(child->bs)) {
3349 return false;
3350 }
3351 }
3352 return true;
bellard19cb3732006-08-19 11:45:59 +00003353}
3354
3355/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003356 * Return whether the media changed since the last call to this
3357 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003358 */
3359int bdrv_media_changed(BlockDriverState *bs)
3360{
3361 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003362
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003363 if (drv && drv->bdrv_media_changed) {
3364 return drv->bdrv_media_changed(bs);
3365 }
3366 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003367}
3368
3369/**
3370 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3371 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003372void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003373{
3374 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003375 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003376
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003377 if (drv && drv->bdrv_eject) {
3378 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003379 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003380
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003381 device_name = bdrv_get_device_name(bs);
3382 if (device_name[0] != '\0') {
3383 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003384 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003385 }
bellard19cb3732006-08-19 11:45:59 +00003386}
3387
bellard19cb3732006-08-19 11:45:59 +00003388/**
3389 * Lock or unlock the media (if it is locked, the user won't be able
3390 * to eject it manually).
3391 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003392void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003393{
3394 BlockDriver *drv = bs->drv;
3395
Markus Armbruster025e8492011-09-06 18:58:47 +02003396 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003397
Markus Armbruster025e8492011-09-06 18:58:47 +02003398 if (drv && drv->bdrv_lock_medium) {
3399 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003400 }
3401}
ths985a03b2007-12-24 16:10:43 +00003402
Fam Zheng9fcb0252013-08-23 09:14:46 +08003403/* Get a reference to bs */
3404void bdrv_ref(BlockDriverState *bs)
3405{
3406 bs->refcnt++;
3407}
3408
3409/* Release a previously grabbed reference to bs.
3410 * If after releasing, reference count is zero, the BlockDriverState is
3411 * deleted. */
3412void bdrv_unref(BlockDriverState *bs)
3413{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003414 if (!bs) {
3415 return;
3416 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003417 assert(bs->refcnt > 0);
3418 if (--bs->refcnt == 0) {
3419 bdrv_delete(bs);
3420 }
3421}
3422
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003423struct BdrvOpBlocker {
3424 Error *reason;
3425 QLIST_ENTRY(BdrvOpBlocker) list;
3426};
3427
3428bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3429{
3430 BdrvOpBlocker *blocker;
3431 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3432 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3433 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3434 if (errp) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01003435 *errp = error_copy(blocker->reason);
3436 error_prepend(errp, "Node '%s' is busy: ",
3437 bdrv_get_device_or_node_name(bs));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003438 }
3439 return true;
3440 }
3441 return false;
3442}
3443
3444void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3445{
3446 BdrvOpBlocker *blocker;
3447 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3448
Markus Armbruster5839e532014-08-19 10:31:08 +02003449 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003450 blocker->reason = reason;
3451 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3452}
3453
3454void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3455{
3456 BdrvOpBlocker *blocker, *next;
3457 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3458 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3459 if (blocker->reason == reason) {
3460 QLIST_REMOVE(blocker, list);
3461 g_free(blocker);
3462 }
3463 }
3464}
3465
3466void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3467{
3468 int i;
3469 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3470 bdrv_op_block(bs, i, reason);
3471 }
3472}
3473
3474void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3475{
3476 int i;
3477 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3478 bdrv_op_unblock(bs, i, reason);
3479 }
3480}
3481
3482bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3483{
3484 int i;
3485
3486 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3487 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3488 return false;
3489 }
3490 }
3491 return true;
3492}
3493
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003494void bdrv_img_create(const char *filename, const char *fmt,
3495 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003496 char *options, uint64_t img_size, int flags,
3497 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003498{
Chunyan Liu83d05212014-06-05 17:20:51 +08003499 QemuOptsList *create_opts = NULL;
3500 QemuOpts *opts = NULL;
3501 const char *backing_fmt, *backing_file;
3502 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003503 BlockDriver *drv, *proto_drv;
Max Reitzcc84d902013-09-06 17:14:26 +02003504 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003505 int ret = 0;
3506
3507 /* Find driver and parse its options */
3508 drv = bdrv_find_format(fmt);
3509 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003510 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003511 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003512 }
3513
Max Reitzb65a5e12015-02-05 13:58:12 -05003514 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003515 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003516 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003517 }
3518
Max Reitzc6149722014-12-02 18:32:45 +01003519 if (!drv->create_opts) {
3520 error_setg(errp, "Format driver '%s' does not support image creation",
3521 drv->format_name);
3522 return;
3523 }
3524
3525 if (!proto_drv->create_opts) {
3526 error_setg(errp, "Protocol driver '%s' does not support image creation",
3527 proto_drv->format_name);
3528 return;
3529 }
3530
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003531 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3532 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003533
3534 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003535 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003536 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003537
3538 /* Parse -o options */
3539 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003540 qemu_opts_do_parse(opts, options, NULL, &local_err);
3541 if (local_err) {
3542 error_report_err(local_err);
3543 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003544 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003545 goto out;
3546 }
3547 }
3548
3549 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003550 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003551 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003552 error_setg(errp, "Backing file not supported for file format '%s'",
3553 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003554 goto out;
3555 }
3556 }
3557
3558 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003559 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003560 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003561 error_setg(errp, "Backing file format not supported for file "
3562 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003563 goto out;
3564 }
3565 }
3566
Chunyan Liu83d05212014-06-05 17:20:51 +08003567 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3568 if (backing_file) {
3569 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003570 error_setg(errp, "Error: Trying to create an image with the "
3571 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003572 goto out;
3573 }
3574 }
3575
Chunyan Liu83d05212014-06-05 17:20:51 +08003576 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003577
3578 // The size for the image must always be specified, with one exception:
3579 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003580 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3581 if (size == -1) {
3582 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003583 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003584 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003585 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003586 int back_flags;
Max Reitze6641712015-08-26 19:47:48 +02003587 QDict *backing_options = NULL;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003588
Max Reitz29168012014-11-26 17:20:27 +01003589 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3590 full_backing, PATH_MAX,
3591 &local_err);
3592 if (local_err) {
3593 g_free(full_backing);
3594 goto out;
3595 }
3596
Paolo Bonzini63090da2012-04-12 14:01:03 +02003597 /* backing files always opened read-only */
3598 back_flags =
3599 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003600
Max Reitze6641712015-08-26 19:47:48 +02003601 if (backing_fmt) {
3602 backing_options = qdict_new();
3603 qdict_put(backing_options, "driver",
3604 qstring_from_str(backing_fmt));
3605 }
3606
Max Reitzf67503e2014-02-18 18:33:05 +01003607 bs = NULL;
Max Reitze6641712015-08-26 19:47:48 +02003608 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02003609 back_flags, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003610 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003611 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003612 goto out;
3613 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003614 size = bdrv_getlength(bs);
3615 if (size < 0) {
3616 error_setg_errno(errp, -size, "Could not get size of '%s'",
3617 backing_file);
3618 bdrv_unref(bs);
3619 goto out;
3620 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003621
Markus Armbruster39101f22015-02-12 16:46:36 +01003622 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003623
3624 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003625 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003626 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003627 goto out;
3628 }
3629 }
3630
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003631 if (!quiet) {
Kővágó, Zoltánfe646692015-07-07 16:42:10 +02003632 printf("Formatting '%s', fmt=%s ", filename, fmt);
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003633 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003634 puts("");
3635 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003636
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003637 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003638
Max Reitzcc84d902013-09-06 17:14:26 +02003639 if (ret == -EFBIG) {
3640 /* This is generally a better message than whatever the driver would
3641 * deliver (especially because of the cluster_size_hint), since that
3642 * is most probably not much different from "image too large". */
3643 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003644 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003645 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003646 }
Max Reitzcc84d902013-09-06 17:14:26 +02003647 error_setg(errp, "The image size is too large for file format '%s'"
3648 "%s", fmt, cluster_size_hint);
3649 error_free(local_err);
3650 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003651 }
3652
3653out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003654 qemu_opts_del(opts);
3655 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003656 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003657 error_propagate(errp, local_err);
3658 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003659}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003660
3661AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3662{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003663 return bs->aio_context;
3664}
3665
3666void bdrv_detach_aio_context(BlockDriverState *bs)
3667{
Max Reitz33384422014-06-20 21:57:33 +02003668 BdrvAioNotifier *baf;
3669
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003670 if (!bs->drv) {
3671 return;
3672 }
3673
Max Reitz33384422014-06-20 21:57:33 +02003674 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3675 baf->detach_aio_context(baf->opaque);
3676 }
3677
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003678 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003679 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003680 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003681 if (bs->drv->bdrv_detach_aio_context) {
3682 bs->drv->bdrv_detach_aio_context(bs);
3683 }
3684 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003685 bdrv_detach_aio_context(bs->file->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003686 }
Kevin Wolf760e0062015-06-17 14:55:21 +02003687 if (bs->backing) {
3688 bdrv_detach_aio_context(bs->backing->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003689 }
3690
3691 bs->aio_context = NULL;
3692}
3693
3694void bdrv_attach_aio_context(BlockDriverState *bs,
3695 AioContext *new_context)
3696{
Max Reitz33384422014-06-20 21:57:33 +02003697 BdrvAioNotifier *ban;
3698
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003699 if (!bs->drv) {
3700 return;
3701 }
3702
3703 bs->aio_context = new_context;
3704
Kevin Wolf760e0062015-06-17 14:55:21 +02003705 if (bs->backing) {
3706 bdrv_attach_aio_context(bs->backing->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003707 }
3708 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003709 bdrv_attach_aio_context(bs->file->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003710 }
3711 if (bs->drv->bdrv_attach_aio_context) {
3712 bs->drv->bdrv_attach_aio_context(bs, new_context);
3713 }
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003714 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003715 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003716 }
Max Reitz33384422014-06-20 21:57:33 +02003717
3718 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3719 ban->attached_aio_context(new_context, ban->opaque);
3720 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003721}
3722
3723void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3724{
Fam Zheng53ec73e2015-05-29 18:53:14 +08003725 bdrv_drain(bs); /* ensure there are no in-flight requests */
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003726
3727 bdrv_detach_aio_context(bs);
3728
3729 /* This function executes in the old AioContext so acquire the new one in
3730 * case it runs in a different thread.
3731 */
3732 aio_context_acquire(new_context);
3733 bdrv_attach_aio_context(bs, new_context);
3734 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003735}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003736
Max Reitz33384422014-06-20 21:57:33 +02003737void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3738 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3739 void (*detach_aio_context)(void *opaque), void *opaque)
3740{
3741 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3742 *ban = (BdrvAioNotifier){
3743 .attached_aio_context = attached_aio_context,
3744 .detach_aio_context = detach_aio_context,
3745 .opaque = opaque
3746 };
3747
3748 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3749}
3750
3751void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3752 void (*attached_aio_context)(AioContext *,
3753 void *),
3754 void (*detach_aio_context)(void *),
3755 void *opaque)
3756{
3757 BdrvAioNotifier *ban, *ban_next;
3758
3759 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3760 if (ban->attached_aio_context == attached_aio_context &&
3761 ban->detach_aio_context == detach_aio_context &&
3762 ban->opaque == opaque)
3763 {
3764 QLIST_REMOVE(ban, list);
3765 g_free(ban);
3766
3767 return;
3768 }
3769 }
3770
3771 abort();
3772}
3773
Max Reitz77485432014-10-27 11:12:50 +01003774int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
Max Reitz8b139762015-07-27 17:51:32 +02003775 BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
Max Reitz6f176b42013-09-03 10:09:50 +02003776{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003777 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003778 return -ENOTSUP;
3779 }
Max Reitz8b139762015-07-27 17:51:32 +02003780 return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
Max Reitz6f176b42013-09-03 10:09:50 +02003781}
Benoît Canetf6186f42013-10-02 14:33:48 +02003782
Benoît Canetb5042a32014-03-03 19:11:34 +01003783/* This function will be called by the bdrv_recurse_is_first_non_filter method
3784 * of block filter and by bdrv_is_first_non_filter.
3785 * It is used to test if the given bs is the candidate or recurse more in the
3786 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003787 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003788bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3789 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003790{
Benoît Canetb5042a32014-03-03 19:11:34 +01003791 /* return false if basic checks fails */
3792 if (!bs || !bs->drv) {
3793 return false;
3794 }
3795
3796 /* the code reached a non block filter driver -> check if the bs is
3797 * the same as the candidate. It's the recursion termination condition.
3798 */
3799 if (!bs->drv->is_filter) {
3800 return bs == candidate;
3801 }
3802 /* Down this path the driver is a block filter driver */
3803
3804 /* If the block filter recursion method is defined use it to recurse down
3805 * the node graph.
3806 */
3807 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003808 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3809 }
3810
Benoît Canetb5042a32014-03-03 19:11:34 +01003811 /* the driver is a block filter but don't allow to recurse -> return false
3812 */
3813 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003814}
3815
3816/* This function checks if the candidate is the first non filter bs down it's
3817 * bs chain. Since we don't have pointers to parents it explore all bs chains
3818 * from the top. Some filters can choose not to pass down the recursion.
3819 */
3820bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3821{
Max Reitz79720af2016-03-16 19:54:44 +01003822 BlockDriverState *bs = NULL;
Benoît Canet212a5a82014-01-23 21:31:36 +01003823
3824 /* walk down the bs forest recursively */
Max Reitz79720af2016-03-16 19:54:44 +01003825 while ((bs = bdrv_next(bs)) != NULL) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003826 bool perm;
3827
Benoît Canetb5042a32014-03-03 19:11:34 +01003828 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003829 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003830
3831 /* candidate is the first non filter */
3832 if (perm) {
3833 return true;
3834 }
3835 }
3836
3837 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02003838}
Benoît Canet09158f02014-06-27 18:25:25 +02003839
Wen Congyange12f3782015-07-17 10:12:22 +08003840BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3841 const char *node_name, Error **errp)
Benoît Canet09158f02014-06-27 18:25:25 +02003842{
3843 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003844 AioContext *aio_context;
3845
Benoît Canet09158f02014-06-27 18:25:25 +02003846 if (!to_replace_bs) {
3847 error_setg(errp, "Node name '%s' not found", node_name);
3848 return NULL;
3849 }
3850
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003851 aio_context = bdrv_get_aio_context(to_replace_bs);
3852 aio_context_acquire(aio_context);
3853
Benoît Canet09158f02014-06-27 18:25:25 +02003854 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003855 to_replace_bs = NULL;
3856 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003857 }
3858
3859 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3860 * most non filter in order to prevent data corruption.
3861 * Another benefit is that this tests exclude backing files which are
3862 * blocked by the backing blockers.
3863 */
Wen Congyange12f3782015-07-17 10:12:22 +08003864 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
Benoît Canet09158f02014-06-27 18:25:25 +02003865 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003866 to_replace_bs = NULL;
3867 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003868 }
3869
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003870out:
3871 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02003872 return to_replace_bs;
3873}
Ming Lei448ad912014-07-04 18:04:33 +08003874
Max Reitz91af7012014-07-18 20:24:56 +02003875static bool append_open_options(QDict *d, BlockDriverState *bs)
3876{
3877 const QDictEntry *entry;
Kevin Wolf9e700c12015-04-24 15:20:28 +02003878 QemuOptDesc *desc;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003879 BdrvChild *child;
Max Reitz91af7012014-07-18 20:24:56 +02003880 bool found_any = false;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003881 const char *p;
Max Reitz91af7012014-07-18 20:24:56 +02003882
3883 for (entry = qdict_first(bs->options); entry;
3884 entry = qdict_next(bs->options, entry))
3885 {
Kevin Wolf260fecf2015-04-27 13:46:22 +02003886 /* Exclude options for children */
3887 QLIST_FOREACH(child, &bs->children, next) {
3888 if (strstart(qdict_entry_key(entry), child->name, &p)
3889 && (!*p || *p == '.'))
3890 {
3891 break;
3892 }
3893 }
3894 if (child) {
Kevin Wolf9e700c12015-04-24 15:20:28 +02003895 continue;
Max Reitz91af7012014-07-18 20:24:56 +02003896 }
Kevin Wolf9e700c12015-04-24 15:20:28 +02003897
3898 /* And exclude all non-driver-specific options */
3899 for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3900 if (!strcmp(qdict_entry_key(entry), desc->name)) {
3901 break;
3902 }
3903 }
3904 if (desc->name) {
3905 continue;
3906 }
3907
3908 qobject_incref(qdict_entry_value(entry));
3909 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3910 found_any = true;
Max Reitz91af7012014-07-18 20:24:56 +02003911 }
3912
3913 return found_any;
3914}
3915
3916/* Updates the following BDS fields:
3917 * - exact_filename: A filename which may be used for opening a block device
3918 * which (mostly) equals the given BDS (even without any
3919 * other options; so reading and writing must return the same
3920 * results, but caching etc. may be different)
3921 * - full_open_options: Options which, when given when opening a block device
3922 * (without a filename), result in a BDS (mostly)
3923 * equalling the given one
3924 * - filename: If exact_filename is set, it is copied here. Otherwise,
3925 * full_open_options is converted to a JSON object, prefixed with
3926 * "json:" (for use through the JSON pseudo protocol) and put here.
3927 */
3928void bdrv_refresh_filename(BlockDriverState *bs)
3929{
3930 BlockDriver *drv = bs->drv;
3931 QDict *opts;
3932
3933 if (!drv) {
3934 return;
3935 }
3936
3937 /* This BDS's file name will most probably depend on its file's name, so
3938 * refresh that first */
3939 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003940 bdrv_refresh_filename(bs->file->bs);
Max Reitz91af7012014-07-18 20:24:56 +02003941 }
3942
3943 if (drv->bdrv_refresh_filename) {
3944 /* Obsolete information is of no use here, so drop the old file name
3945 * information before refreshing it */
3946 bs->exact_filename[0] = '\0';
3947 if (bs->full_open_options) {
3948 QDECREF(bs->full_open_options);
3949 bs->full_open_options = NULL;
3950 }
3951
Kevin Wolf4cdd01d2015-04-27 13:50:54 +02003952 opts = qdict_new();
3953 append_open_options(opts, bs);
3954 drv->bdrv_refresh_filename(bs, opts);
3955 QDECREF(opts);
Max Reitz91af7012014-07-18 20:24:56 +02003956 } else if (bs->file) {
3957 /* Try to reconstruct valid information from the underlying file */
3958 bool has_open_options;
3959
3960 bs->exact_filename[0] = '\0';
3961 if (bs->full_open_options) {
3962 QDECREF(bs->full_open_options);
3963 bs->full_open_options = NULL;
3964 }
3965
3966 opts = qdict_new();
3967 has_open_options = append_open_options(opts, bs);
3968
3969 /* If no specific options have been given for this BDS, the filename of
3970 * the underlying file should suffice for this one as well */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003971 if (bs->file->bs->exact_filename[0] && !has_open_options) {
3972 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
Max Reitz91af7012014-07-18 20:24:56 +02003973 }
3974 /* Reconstructing the full options QDict is simple for most format block
3975 * drivers, as long as the full options are known for the underlying
3976 * file BDS. The full options QDict of that file BDS should somehow
3977 * contain a representation of the filename, therefore the following
3978 * suffices without querying the (exact_)filename of this BDS. */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003979 if (bs->file->bs->full_open_options) {
Max Reitz91af7012014-07-18 20:24:56 +02003980 qdict_put_obj(opts, "driver",
3981 QOBJECT(qstring_from_str(drv->format_name)));
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003982 QINCREF(bs->file->bs->full_open_options);
3983 qdict_put_obj(opts, "file",
3984 QOBJECT(bs->file->bs->full_open_options));
Max Reitz91af7012014-07-18 20:24:56 +02003985
3986 bs->full_open_options = opts;
3987 } else {
3988 QDECREF(opts);
3989 }
3990 } else if (!bs->full_open_options && qdict_size(bs->options)) {
3991 /* There is no underlying file BDS (at least referenced by BDS.file),
3992 * so the full options QDict should be equal to the options given
3993 * specifically for this block device when it was opened (plus the
3994 * driver specification).
3995 * Because those options don't change, there is no need to update
3996 * full_open_options when it's already set. */
3997
3998 opts = qdict_new();
3999 append_open_options(opts, bs);
4000 qdict_put_obj(opts, "driver",
4001 QOBJECT(qstring_from_str(drv->format_name)));
4002
4003 if (bs->exact_filename[0]) {
4004 /* This may not work for all block protocol drivers (some may
4005 * require this filename to be parsed), but we have to find some
4006 * default solution here, so just include it. If some block driver
4007 * does not support pure options without any filename at all or
4008 * needs some special format of the options QDict, it needs to
4009 * implement the driver-specific bdrv_refresh_filename() function.
4010 */
4011 qdict_put_obj(opts, "filename",
4012 QOBJECT(qstring_from_str(bs->exact_filename)));
4013 }
4014
4015 bs->full_open_options = opts;
4016 }
4017
4018 if (bs->exact_filename[0]) {
4019 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4020 } else if (bs->full_open_options) {
4021 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4022 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4023 qstring_get_str(json));
4024 QDECREF(json);
4025 }
4026}