blob: 2a09403649e89c779cae87c9986f16ca8125db9e [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 Wolf91a097e2015-05-08 17:49:53 +0200741 /* The cache mode is inherited unmodified for backing files */
742 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_WB);
743 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
744 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
745
Kevin Wolf317fc442014-04-25 13:27:34 +0200746 /* backing files always opened read-only */
747 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
748
749 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200750 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200751
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200752 *child_flags = flags;
Kevin Wolf317fc442014-04-25 13:27:34 +0200753}
754
Kevin Wolff3930ed2015-04-08 13:43:47 +0200755static const BdrvChildRole child_backing = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200756 .inherit_options = bdrv_backing_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200757};
758
Kevin Wolf7b272452012-11-12 17:05:39 +0100759static int bdrv_open_flags(BlockDriverState *bs, int flags)
760{
761 int open_flags = flags | BDRV_O_CACHE_WB;
762
763 /*
764 * Clear flags that are internal to the block layer before opening the
765 * image.
766 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200767 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100768
769 /*
770 * Snapshots should be writable.
771 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200772 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100773 open_flags |= BDRV_O_RDWR;
774 }
775
776 return open_flags;
777}
778
Kevin Wolf91a097e2015-05-08 17:49:53 +0200779static void update_flags_from_options(int *flags, QemuOpts *opts)
780{
781 *flags &= ~BDRV_O_CACHE_MASK;
782
783 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_WB));
784 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, false)) {
785 *flags |= BDRV_O_CACHE_WB;
786 }
787
788 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_NO_FLUSH));
789 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
790 *flags |= BDRV_O_NO_FLUSH;
791 }
792
793 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_DIRECT));
794 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
795 *flags |= BDRV_O_NOCACHE;
796 }
797}
798
799static void update_options_from_flags(QDict *options, int flags)
800{
801 if (!qdict_haskey(options, BDRV_OPT_CACHE_WB)) {
802 qdict_put(options, BDRV_OPT_CACHE_WB,
803 qbool_from_bool(flags & BDRV_O_CACHE_WB));
804 }
805 if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
806 qdict_put(options, BDRV_OPT_CACHE_DIRECT,
807 qbool_from_bool(flags & BDRV_O_NOCACHE));
808 }
809 if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
810 qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
811 qbool_from_bool(flags & BDRV_O_NO_FLUSH));
812 }
813}
814
Kevin Wolf636ea372014-01-24 14:11:52 +0100815static void bdrv_assign_node_name(BlockDriverState *bs,
816 const char *node_name,
817 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100818{
Jeff Cody15489c72015-10-12 19:36:50 -0400819 char *gen_node_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100820
Jeff Cody15489c72015-10-12 19:36:50 -0400821 if (!node_name) {
822 node_name = gen_node_name = id_generate(ID_BLOCK);
823 } else if (!id_wellformed(node_name)) {
824 /*
825 * Check for empty string or invalid characters, but not if it is
826 * generated (generated names use characters not available to the user)
827 */
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200828 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100829 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100830 }
831
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100832 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200833 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100834 error_setg(errp, "node-name=%s is conflicting with a device id",
835 node_name);
Jeff Cody15489c72015-10-12 19:36:50 -0400836 goto out;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100837 }
838
Benoît Canet6913c0c2014-01-23 21:31:33 +0100839 /* takes care of avoiding duplicates node names */
840 if (bdrv_find_node(node_name)) {
841 error_setg(errp, "Duplicate node name");
Jeff Cody15489c72015-10-12 19:36:50 -0400842 goto out;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100843 }
844
845 /* copy node name into the bs and insert it into the graph list */
846 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
847 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Jeff Cody15489c72015-10-12 19:36:50 -0400848out:
849 g_free(gen_node_name);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100850}
851
Kevin Wolf18edf282015-04-07 17:12:56 +0200852static QemuOptsList bdrv_runtime_opts = {
853 .name = "bdrv_common",
854 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
855 .desc = {
856 {
857 .name = "node-name",
858 .type = QEMU_OPT_STRING,
859 .help = "Node name of the block device node",
860 },
Kevin Wolf62392eb2015-04-24 16:38:02 +0200861 {
862 .name = "driver",
863 .type = QEMU_OPT_STRING,
864 .help = "Block driver to use for the node",
865 },
Kevin Wolf91a097e2015-05-08 17:49:53 +0200866 {
867 .name = BDRV_OPT_CACHE_WB,
868 .type = QEMU_OPT_BOOL,
869 .help = "Enable writeback mode",
870 },
871 {
872 .name = BDRV_OPT_CACHE_DIRECT,
873 .type = QEMU_OPT_BOOL,
874 .help = "Bypass software writeback cache on the host",
875 },
876 {
877 .name = BDRV_OPT_CACHE_NO_FLUSH,
878 .type = QEMU_OPT_BOOL,
879 .help = "Ignore flush requests",
880 },
Kevin Wolf18edf282015-04-07 17:12:56 +0200881 { /* end of list */ }
882 },
883};
884
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200885/*
Kevin Wolf57915332010-04-14 15:24:50 +0200886 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100887 *
888 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200889 */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200890static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file,
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100891 QDict *options, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200892{
893 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200894 const char *filename;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200895 const char *driver_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100896 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200897 QemuOpts *opts;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200898 BlockDriver *drv;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200899 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200900
Paolo Bonzini64058752012-05-08 16:51:49 +0200901 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100902 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200903
Kevin Wolf62392eb2015-04-24 16:38:02 +0200904 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
905 qemu_opts_absorb_qdict(opts, options, &local_err);
906 if (local_err) {
907 error_propagate(errp, local_err);
908 ret = -EINVAL;
909 goto fail_opts;
910 }
911
912 driver_name = qemu_opt_get(opts, "driver");
913 drv = bdrv_find_format(driver_name);
914 assert(drv != NULL);
915
Kevin Wolf45673672013-04-22 17:48:40 +0200916 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200917 filename = file->bs->filename;
Kevin Wolf45673672013-04-22 17:48:40 +0200918 } else {
919 filename = qdict_get_try_str(options, "filename");
920 }
921
Kevin Wolf765003d2014-02-03 14:49:42 +0100922 if (drv->bdrv_needs_filename && !filename) {
923 error_setg(errp, "The '%s' block driver requires a file name",
924 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200925 ret = -EINVAL;
926 goto fail_opts;
927 }
928
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100929 trace_bdrv_open_common(bs, filename ?: "", bs->open_flags,
930 drv->format_name);
Kevin Wolf62392eb2015-04-24 16:38:02 +0200931
Kevin Wolf18edf282015-04-07 17:12:56 +0200932 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100933 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200934 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100935 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200936 ret = -EINVAL;
937 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100938 }
939
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100940 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800941 bs->zero_beyond_eof = true;
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100942 bs->read_only = !(bs->open_flags & BDRV_O_RDWR);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800943
944 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200945 error_setg(errp,
946 !bs->read_only && bdrv_is_whitelisted(drv, true)
947 ? "Driver '%s' can only be used for read-only devices"
948 : "Driver '%s' is not whitelisted",
949 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200950 ret = -ENOTSUP;
951 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800952 }
Kevin Wolf57915332010-04-14 15:24:50 +0200953
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000954 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100955 if (bs->open_flags & BDRV_O_COPY_ON_READ) {
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200956 if (!bs->read_only) {
957 bdrv_enable_copy_on_read(bs);
958 } else {
959 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200960 ret = -EINVAL;
961 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200962 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000963 }
964
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100965 if (filename != NULL) {
966 pstrcpy(bs->filename, sizeof(bs->filename), filename);
967 } else {
968 bs->filename[0] = '\0';
969 }
Max Reitz91af7012014-07-18 20:24:56 +0200970 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200971
Kevin Wolf57915332010-04-14 15:24:50 +0200972 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500973 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200974
Kevin Wolf91a097e2015-05-08 17:49:53 +0200975 /* Apply cache mode options */
976 update_flags_from_options(&bs->open_flags, opts);
977 bdrv_set_enable_write_cache(bs, bs->open_flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100978
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200979 /* Open the image, either directly or using a protocol */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100980 open_flags = bdrv_open_flags(bs, bs->open_flags);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200981 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100982 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200983 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200984 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100985 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200986 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200987 error_setg(errp, "Can't use '%s' as a block driver for the "
988 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200989 ret = -EINVAL;
990 goto free_and_fail;
991 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100992 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200993 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200994 }
995
Kevin Wolf57915332010-04-14 15:24:50 +0200996 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100997 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200998 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800999 } else if (bs->filename[0]) {
1000 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +02001001 } else {
1002 error_setg_errno(errp, -ret, "Could not open image");
1003 }
Kevin Wolf57915332010-04-14 15:24:50 +02001004 goto free_and_fail;
1005 }
1006
Markus Armbrustera1f688f2015-03-13 21:09:40 +01001007 if (bs->encrypted) {
1008 error_report("Encrypted images are deprecated");
1009 error_printf("Support for them will be removed in a future release.\n"
1010 "You can use 'qemu-img convert' to convert your image"
1011 " to an unencrypted one.\n");
1012 }
1013
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001014 ret = refresh_total_sectors(bs, bs->total_sectors);
1015 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001016 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001017 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +02001018 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001019
Kevin Wolf3baca892014-07-16 17:48:16 +02001020 bdrv_refresh_limits(bs, &local_err);
1021 if (local_err) {
1022 error_propagate(errp, local_err);
1023 ret = -EINVAL;
1024 goto free_and_fail;
1025 }
1026
Paolo Bonzinic25f53b2011-11-29 12:42:20 +01001027 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +03001028 assert(bdrv_min_mem_align(bs) != 0);
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +03001029 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
Kevin Wolf18edf282015-04-07 17:12:56 +02001030
1031 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001032 return 0;
1033
1034free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001035 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -05001036 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +02001037 bs->opaque = NULL;
1038 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +02001039fail_opts:
1040 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001041 return ret;
1042}
1043
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001044static QDict *parse_json_filename(const char *filename, Error **errp)
1045{
1046 QObject *options_obj;
1047 QDict *options;
1048 int ret;
1049
1050 ret = strstart(filename, "json:", &filename);
1051 assert(ret);
1052
1053 options_obj = qobject_from_json(filename);
1054 if (!options_obj) {
1055 error_setg(errp, "Could not parse the JSON options");
1056 return NULL;
1057 }
1058
1059 if (qobject_type(options_obj) != QTYPE_QDICT) {
1060 qobject_decref(options_obj);
1061 error_setg(errp, "Invalid JSON object given");
1062 return NULL;
1063 }
1064
1065 options = qobject_to_qdict(options_obj);
1066 qdict_flatten(options);
1067
1068 return options;
1069}
1070
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001071static void parse_json_protocol(QDict *options, const char **pfilename,
1072 Error **errp)
1073{
1074 QDict *json_options;
1075 Error *local_err = NULL;
1076
1077 /* Parse json: pseudo-protocol */
1078 if (!*pfilename || !g_str_has_prefix(*pfilename, "json:")) {
1079 return;
1080 }
1081
1082 json_options = parse_json_filename(*pfilename, &local_err);
1083 if (local_err) {
1084 error_propagate(errp, local_err);
1085 return;
1086 }
1087
1088 /* Options given in the filename have lower priority than options
1089 * specified directly */
1090 qdict_join(options, json_options, false);
1091 QDECREF(json_options);
1092 *pfilename = NULL;
1093}
1094
Kevin Wolf57915332010-04-14 15:24:50 +02001095/*
Kevin Wolff54120f2014-05-26 11:09:59 +02001096 * Fills in default options for opening images and converts the legacy
1097 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -04001098 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
1099 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +02001100 */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001101static int bdrv_fill_options(QDict **options, const char *filename,
Max Reitz053e1572015-08-26 19:47:51 +02001102 int *flags, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001103{
1104 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001105 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001106 bool parse_filename = false;
Max Reitz053e1572015-08-26 19:47:51 +02001107 BlockDriver *drv = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001108 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001109
Max Reitz53a29512015-03-19 14:53:16 -04001110 drvname = qdict_get_try_str(*options, "driver");
Max Reitz053e1572015-08-26 19:47:51 +02001111 if (drvname) {
1112 drv = bdrv_find_format(drvname);
1113 if (!drv) {
1114 error_setg(errp, "Unknown driver '%s'", drvname);
1115 return -ENOENT;
1116 }
1117 /* If the user has explicitly specified the driver, this choice should
1118 * override the BDRV_O_PROTOCOL flag */
1119 protocol = drv->bdrv_file_open;
Max Reitz53a29512015-03-19 14:53:16 -04001120 }
1121
1122 if (protocol) {
1123 *flags |= BDRV_O_PROTOCOL;
1124 } else {
1125 *flags &= ~BDRV_O_PROTOCOL;
1126 }
1127
Kevin Wolf91a097e2015-05-08 17:49:53 +02001128 /* Translate cache options from flags into options */
1129 update_options_from_flags(*options, *flags);
1130
Kevin Wolff54120f2014-05-26 11:09:59 +02001131 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001132 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001133 if (!qdict_haskey(*options, "filename")) {
1134 qdict_put(*options, "filename", qstring_from_str(filename));
1135 parse_filename = true;
1136 } else {
1137 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1138 "the same time");
1139 return -EINVAL;
1140 }
1141 }
1142
1143 /* Find the right block driver */
1144 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001145
Max Reitz053e1572015-08-26 19:47:51 +02001146 if (!drvname && protocol) {
1147 if (filename) {
1148 drv = bdrv_find_protocol(filename, parse_filename, errp);
1149 if (!drv) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001150 return -EINVAL;
1151 }
Max Reitz053e1572015-08-26 19:47:51 +02001152
1153 drvname = drv->format_name;
1154 qdict_put(*options, "driver", qstring_from_str(drvname));
1155 } else {
1156 error_setg(errp, "Must specify either driver or file");
1157 return -EINVAL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001158 }
1159 }
1160
Kevin Wolf17b005f2014-05-27 10:50:29 +02001161 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001162
1163 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001164 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001165 drv->bdrv_parse_filename(filename, *options, &local_err);
1166 if (local_err) {
1167 error_propagate(errp, local_err);
1168 return -EINVAL;
1169 }
1170
1171 if (!drv->bdrv_needs_filename) {
1172 qdict_del(*options, "filename");
1173 }
1174 }
1175
1176 return 0;
1177}
1178
Kevin Wolff21d96d2016-03-08 13:47:46 +01001179BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
1180 const char *child_name,
1181 const BdrvChildRole *child_role)
Kevin Wolfdf581792015-06-15 11:53:47 +02001182{
1183 BdrvChild *child = g_new(BdrvChild, 1);
1184 *child = (BdrvChild) {
1185 .bs = child_bs,
Kevin Wolf260fecf2015-04-27 13:46:22 +02001186 .name = g_strdup(child_name),
Kevin Wolfdf581792015-06-15 11:53:47 +02001187 .role = child_role,
1188 };
1189
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001190 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001191
1192 return child;
Kevin Wolfdf581792015-06-15 11:53:47 +02001193}
1194
Kevin Wolff21d96d2016-03-08 13:47:46 +01001195static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1196 BlockDriverState *child_bs,
1197 const char *child_name,
1198 const BdrvChildRole *child_role)
1199{
1200 BdrvChild *child = bdrv_root_attach_child(child_bs, child_name, child_role);
1201 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1202 return child;
1203}
1204
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02001205static void bdrv_detach_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001206{
Kevin Wolff21d96d2016-03-08 13:47:46 +01001207 if (child->next.le_prev) {
1208 QLIST_REMOVE(child, next);
1209 child->next.le_prev = NULL;
1210 }
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001211 QLIST_REMOVE(child, next_parent);
Kevin Wolf260fecf2015-04-27 13:46:22 +02001212 g_free(child->name);
Kevin Wolf33a60402015-06-15 13:51:04 +02001213 g_free(child);
1214}
1215
Kevin Wolff21d96d2016-03-08 13:47:46 +01001216void bdrv_root_unref_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001217{
Kevin Wolf779020c2015-10-13 14:09:44 +02001218 BlockDriverState *child_bs;
1219
Kevin Wolff21d96d2016-03-08 13:47:46 +01001220 child_bs = child->bs;
1221 bdrv_detach_child(child);
1222 bdrv_unref(child_bs);
1223}
1224
1225void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1226{
Kevin Wolf779020c2015-10-13 14:09:44 +02001227 if (child == NULL) {
1228 return;
1229 }
Kevin Wolf33a60402015-06-15 13:51:04 +02001230
1231 if (child->bs->inherits_from == parent) {
1232 child->bs->inherits_from = NULL;
1233 }
1234
Kevin Wolff21d96d2016-03-08 13:47:46 +01001235 bdrv_root_unref_child(child);
Kevin Wolf33a60402015-06-15 13:51:04 +02001236}
1237
Kevin Wolf5db15a52015-09-14 15:33:33 +02001238/*
1239 * Sets the backing file link of a BDS. A new reference is created; callers
1240 * which don't need their own reference any more must call bdrv_unref().
1241 */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001242void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1243{
Kevin Wolf5db15a52015-09-14 15:33:33 +02001244 if (backing_hd) {
1245 bdrv_ref(backing_hd);
1246 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001247
Kevin Wolf760e0062015-06-17 14:55:21 +02001248 if (bs->backing) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001249 assert(bs->backing_blocker);
Kevin Wolf760e0062015-06-17 14:55:21 +02001250 bdrv_op_unblock_all(bs->backing->bs, bs->backing_blocker);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001251 bdrv_unref_child(bs, bs->backing);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001252 } else if (backing_hd) {
1253 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001254 "node is used as backing hd of '%s'",
1255 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001256 }
1257
Fam Zheng8d24cce2014-05-23 21:29:45 +08001258 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001259 error_free(bs->backing_blocker);
1260 bs->backing_blocker = NULL;
Kevin Wolf760e0062015-06-17 14:55:21 +02001261 bs->backing = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001262 goto out;
1263 }
Kevin Wolf260fecf2015-04-27 13:46:22 +02001264 bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_backing);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001265 bs->open_flags &= ~BDRV_O_NO_BACKING;
1266 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1267 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1268 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001269
Kevin Wolf760e0062015-06-17 14:55:21 +02001270 bdrv_op_block_all(backing_hd, bs->backing_blocker);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001271 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Kevin Wolf760e0062015-06-17 14:55:21 +02001272 bdrv_op_unblock(backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001273 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001274out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001275 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001276}
1277
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001278/*
1279 * Opens the backing file for a BlockDriverState if not yet open
1280 *
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001281 * bdref_key specifies the key for the image's BlockdevRef in the options QDict.
1282 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1283 * itself, all options starting with "${bdref_key}." are considered part of the
1284 * BlockdevRef.
1285 *
1286 * TODO Can this be unified with bdrv_open_image()?
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001287 */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001288int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
1289 const char *bdref_key, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001290{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001291 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001292 char *bdref_key_dot;
1293 const char *reference = NULL;
Kevin Wolf317fc442014-04-25 13:27:34 +02001294 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001295 BlockDriverState *backing_hd;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001296 QDict *options;
1297 QDict *tmp_parent_options = NULL;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001298 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001299
Kevin Wolf760e0062015-06-17 14:55:21 +02001300 if (bs->backing != NULL) {
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001301 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001302 }
1303
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001304 /* NULL means an empty set of options */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001305 if (parent_options == NULL) {
1306 tmp_parent_options = qdict_new();
1307 parent_options = tmp_parent_options;
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001308 }
1309
Paolo Bonzini9156df12012-10-18 16:49:17 +02001310 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001311
1312 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1313 qdict_extract_subqdict(parent_options, &options, bdref_key_dot);
1314 g_free(bdref_key_dot);
1315
1316 reference = qdict_get_try_str(parent_options, bdref_key);
1317 if (reference || qdict_haskey(options, "file.filename")) {
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001318 backing_filename[0] = '\0';
1319 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001320 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001321 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001322 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001323 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1324 &local_err);
1325 if (local_err) {
1326 ret = -EINVAL;
1327 error_propagate(errp, local_err);
1328 QDECREF(options);
1329 goto free_exit;
1330 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001331 }
1332
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001333 if (!bs->drv || !bs->drv->supports_backing) {
1334 ret = -EINVAL;
1335 error_setg(errp, "Driver doesn't support backing files");
1336 QDECREF(options);
1337 goto free_exit;
1338 }
1339
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001340 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1341 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001342 }
1343
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001344 backing_hd = NULL;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001345 ret = bdrv_open_inherit(&backing_hd,
1346 *backing_filename ? backing_filename : NULL,
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001347 reference, options, 0, bs, &child_backing,
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001348 errp);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001349 if (ret < 0) {
Paolo Bonzini9156df12012-10-18 16:49:17 +02001350 bs->open_flags |= BDRV_O_NO_BACKING;
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001351 error_prepend(errp, "Could not open backing file: ");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001352 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001353 }
Kevin Wolfdf581792015-06-15 11:53:47 +02001354
Kevin Wolf5db15a52015-09-14 15:33:33 +02001355 /* Hook up the backing file link; drop our reference, bs owns the
1356 * backing_hd reference now */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001357 bdrv_set_backing_hd(bs, backing_hd);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001358 bdrv_unref(backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001359
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001360 qdict_del(parent_options, bdref_key);
1361
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001362free_exit:
1363 g_free(backing_filename);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001364 QDECREF(tmp_parent_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001365 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001366}
1367
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001368/*
Max Reitzda557aa2013-12-20 19:28:11 +01001369 * Opens a disk image whose options are given as BlockdevRef in another block
1370 * device's options.
1371 *
Max Reitzda557aa2013-12-20 19:28:11 +01001372 * If allow_none is true, no image will be opened if filename is false and no
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001373 * BlockdevRef is given. NULL will be returned, but errp remains unset.
Max Reitzda557aa2013-12-20 19:28:11 +01001374 *
1375 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1376 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1377 * itself, all options starting with "${bdref_key}." are considered part of the
1378 * BlockdevRef.
1379 *
1380 * The BlockdevRef will be removed from the options QDict.
1381 */
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001382BdrvChild *bdrv_open_child(const char *filename,
1383 QDict *options, const char *bdref_key,
1384 BlockDriverState* parent,
1385 const BdrvChildRole *child_role,
1386 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001387{
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001388 BdrvChild *c = NULL;
1389 BlockDriverState *bs;
Max Reitzda557aa2013-12-20 19:28:11 +01001390 QDict *image_options;
1391 int ret;
1392 char *bdref_key_dot;
1393 const char *reference;
1394
Kevin Wolfdf581792015-06-15 11:53:47 +02001395 assert(child_role != NULL);
Max Reitzf67503e2014-02-18 18:33:05 +01001396
Max Reitzda557aa2013-12-20 19:28:11 +01001397 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1398 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1399 g_free(bdref_key_dot);
1400
1401 reference = qdict_get_try_str(options, bdref_key);
1402 if (!filename && !reference && !qdict_size(image_options)) {
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001403 if (!allow_none) {
Max Reitzda557aa2013-12-20 19:28:11 +01001404 error_setg(errp, "A block device must be specified for \"%s\"",
1405 bdref_key);
Max Reitzda557aa2013-12-20 19:28:11 +01001406 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001407 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001408 goto done;
1409 }
1410
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001411 bs = NULL;
1412 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0,
Max Reitzce343772015-08-26 19:47:50 +02001413 parent, child_role, errp);
Kevin Wolfdf581792015-06-15 11:53:47 +02001414 if (ret < 0) {
1415 goto done;
1416 }
1417
Kevin Wolf260fecf2015-04-27 13:46:22 +02001418 c = bdrv_attach_child(parent, bs, bdref_key, child_role);
Max Reitzda557aa2013-12-20 19:28:11 +01001419
1420done:
1421 qdict_del(options, bdref_key);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001422 return c;
1423}
1424
Kevin Wolf73176be2016-03-07 13:02:15 +01001425static int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags,
1426 QDict *snapshot_options, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001427{
1428 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001429 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001430 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001431 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001432 BlockDriverState *bs_snapshot;
Fam Zhengc2e0dbb2015-07-06 12:24:44 +08001433 Error *local_err = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001434 int ret;
1435
1436 /* if snapshot, we create a temporary backing file and open it
1437 instead of opening 'filename' directly */
1438
1439 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001440 total_size = bdrv_getlength(bs);
1441 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001442 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001443 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001444 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001445 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001446
1447 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001448 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001449 if (ret < 0) {
1450 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001451 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001452 }
1453
Max Reitzef810432014-12-02 18:32:42 +01001454 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001455 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001456 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001457 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, errp);
Chunyan Liu83d05212014-06-05 17:20:51 +08001458 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001459 if (ret < 0) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001460 error_prepend(errp, "Could not create temporary overlay '%s': ",
1461 tmp_filename);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001462 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001463 }
1464
Kevin Wolf73176be2016-03-07 13:02:15 +01001465 /* Prepare options QDict for the temporary file */
Kevin Wolfb9988752014-04-03 12:09:34 +02001466 qdict_put(snapshot_options, "file.driver",
1467 qstring_from_str("file"));
1468 qdict_put(snapshot_options, "file.filename",
1469 qstring_from_str(tmp_filename));
Max Reitze6641712015-08-26 19:47:48 +02001470 qdict_put(snapshot_options, "driver",
1471 qstring_from_str("qcow2"));
Kevin Wolfb9988752014-04-03 12:09:34 +02001472
Markus Armbrustere4e99862014-10-07 13:59:03 +02001473 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001474
1475 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001476 flags, &local_err);
Kevin Wolf73176be2016-03-07 13:02:15 +01001477 snapshot_options = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001478 if (ret < 0) {
1479 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001480 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001481 }
1482
1483 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001484
1485out:
Kevin Wolf73176be2016-03-07 13:02:15 +01001486 QDECREF(snapshot_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001487 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001488 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001489}
1490
Max Reitzda557aa2013-12-20 19:28:11 +01001491/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001492 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001493 *
1494 * options is a QDict of options to pass to the block drivers, or NULL for an
1495 * empty set of options. The reference to the QDict belongs to the block layer
1496 * after the call (even on failure), so if the caller intends to reuse the
1497 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001498 *
1499 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1500 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001501 *
1502 * The reference parameter may be used to specify an existing block device which
1503 * should be opened. If specified, neither options nor a filename may be given,
1504 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001505 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001506static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1507 const char *reference, QDict *options, int flags,
1508 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +02001509 const BdrvChildRole *child_role, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001510{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001511 int ret;
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001512 BdrvChild *file = NULL;
1513 BlockDriverState *bs;
Max Reitzce343772015-08-26 19:47:50 +02001514 BlockDriver *drv = NULL;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001515 const char *drvname;
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001516 const char *backing;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001517 Error *local_err = NULL;
Kevin Wolf73176be2016-03-07 13:02:15 +01001518 QDict *snapshot_options = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001519 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001520
Max Reitzf67503e2014-02-18 18:33:05 +01001521 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001522 assert(!child_role || !flags);
1523 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001524
Max Reitzddf56362014-02-18 18:33:06 +01001525 if (reference) {
1526 bool options_non_empty = options ? qdict_size(options) : false;
1527 QDECREF(options);
1528
1529 if (*pbs) {
1530 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1531 "another block device");
1532 return -EINVAL;
1533 }
1534
1535 if (filename || options_non_empty) {
1536 error_setg(errp, "Cannot reference an existing block device with "
1537 "additional options or a new filename");
1538 return -EINVAL;
1539 }
1540
1541 bs = bdrv_lookup_bs(reference, reference, errp);
1542 if (!bs) {
1543 return -ENODEV;
1544 }
1545 bdrv_ref(bs);
1546 *pbs = bs;
1547 return 0;
1548 }
1549
Max Reitzf67503e2014-02-18 18:33:05 +01001550 if (*pbs) {
1551 bs = *pbs;
1552 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001553 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001554 }
1555
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001556 /* NULL means an empty set of options */
1557 if (options == NULL) {
1558 options = qdict_new();
1559 }
1560
Kevin Wolf145f5982015-05-08 16:15:03 +02001561 /* json: syntax counts as explicit options, as if in the QDict */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001562 parse_json_protocol(options, &filename, &local_err);
1563 if (local_err) {
1564 ret = -EINVAL;
1565 goto fail;
1566 }
1567
Kevin Wolf145f5982015-05-08 16:15:03 +02001568 bs->explicit_options = qdict_clone_shallow(options);
1569
Kevin Wolff3930ed2015-04-08 13:43:47 +02001570 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001571 bs->inherits_from = parent;
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001572 child_role->inherit_options(&flags, options,
1573 parent->open_flags, parent->options);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001574 }
1575
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001576 ret = bdrv_fill_options(&options, filename, &flags, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001577 if (local_err) {
1578 goto fail;
1579 }
1580
Kevin Wolf62392eb2015-04-24 16:38:02 +02001581 bs->open_flags = flags;
1582 bs->options = options;
1583 options = qdict_clone_shallow(options);
1584
Kevin Wolf76c591b2014-06-04 14:19:44 +02001585 /* Find the right image format driver */
Kevin Wolf76c591b2014-06-04 14:19:44 +02001586 drvname = qdict_get_try_str(options, "driver");
1587 if (drvname) {
1588 drv = bdrv_find_format(drvname);
Kevin Wolf76c591b2014-06-04 14:19:44 +02001589 if (!drv) {
1590 error_setg(errp, "Unknown driver: '%s'", drvname);
1591 ret = -EINVAL;
1592 goto fail;
1593 }
1594 }
1595
1596 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001597
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001598 backing = qdict_get_try_str(options, "backing");
1599 if (backing && *backing == '\0') {
1600 flags |= BDRV_O_NO_BACKING;
1601 qdict_del(options, "backing");
1602 }
1603
Kevin Wolff4788ad2014-06-03 16:44:19 +02001604 /* Open image file without format layer */
1605 if ((flags & BDRV_O_PROTOCOL) == 0) {
1606 if (flags & BDRV_O_RDWR) {
1607 flags |= BDRV_O_ALLOW_RDWR;
1608 }
1609 if (flags & BDRV_O_SNAPSHOT) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001610 snapshot_options = qdict_new();
1611 bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
1612 flags, options);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001613 bdrv_backing_options(&flags, options, flags, options);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001614 }
1615
Kevin Wolff3930ed2015-04-08 13:43:47 +02001616 bs->open_flags = flags;
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001617
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001618 file = bdrv_open_child(filename, options, "file", bs,
1619 &child_file, true, &local_err);
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001620 if (local_err) {
1621 ret = -EINVAL;
Max Reitz5469a2a2014-02-18 18:33:10 +01001622 goto fail;
1623 }
1624 }
1625
Kevin Wolf76c591b2014-06-04 14:19:44 +02001626 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001627 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001628 if (!drv && file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001629 ret = find_image_format(file->bs, filename, &drv, &local_err);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001630 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001631 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001632 }
Kevin Wolf62392eb2015-04-24 16:38:02 +02001633 /*
1634 * This option update would logically belong in bdrv_fill_options(),
1635 * but we first need to open bs->file for the probing to work, while
1636 * opening bs->file already requires the (mostly) final set of options
1637 * so that cache mode etc. can be inherited.
1638 *
1639 * Adding the driver later is somewhat ugly, but it's not an option
1640 * that would ever be inherited, so it's correct. We just need to make
1641 * sure to update both bs->options (which has the full effective
1642 * options for bs) and options (which has file.* already removed).
1643 */
1644 qdict_put(bs->options, "driver", qstring_from_str(drv->format_name));
1645 qdict_put(options, "driver", qstring_from_str(drv->format_name));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001646 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001647 error_setg(errp, "Must specify either driver or file");
1648 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001649 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001650 }
1651
Max Reitz53a29512015-03-19 14:53:16 -04001652 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1653 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1654 /* file must be NULL if a protocol BDS is about to be created
1655 * (the inverse results in an error message from bdrv_open_common()) */
1656 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1657
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001658 /* Open the image */
Kevin Wolf82dc8b42016-01-11 19:07:50 +01001659 ret = bdrv_open_common(bs, file, options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001660 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001661 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001662 }
1663
Max Reitz2a05cbe2013-12-20 19:28:10 +01001664 if (file && (bs->file != file)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001665 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001666 file = NULL;
1667 }
1668
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001669 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001670 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001671 ret = bdrv_open_backing_file(bs, options, "backing", &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001672 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001673 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001674 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001675 }
1676
Max Reitz91af7012014-07-18 20:24:56 +02001677 bdrv_refresh_filename(bs);
1678
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001679 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001680 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001681 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001682 if (flags & BDRV_O_PROTOCOL) {
1683 error_setg(errp, "Block protocol '%s' doesn't support the option "
1684 "'%s'", drv->format_name, entry->key);
1685 } else {
Max Reitzd0e46a52016-03-16 19:54:34 +01001686 error_setg(errp,
1687 "Block format '%s' does not support the option '%s'",
1688 drv->format_name, entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001689 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001690
1691 ret = -EINVAL;
1692 goto close_and_fail;
1693 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001694
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001695 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001696 if (bs->blk) {
1697 blk_dev_change_media_cb(bs->blk, true);
1698 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001699 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1700 && !runstate_check(RUN_STATE_INMIGRATE)
1701 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1702 error_setg(errp,
1703 "Guest must be stopped for opening of encrypted image");
1704 ret = -EBUSY;
1705 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001706 }
1707
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001708 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001709 *pbs = bs;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001710
1711 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1712 * temporary snapshot afterwards. */
1713 if (snapshot_flags) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001714 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, snapshot_options,
1715 &local_err);
1716 snapshot_options = NULL;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001717 if (local_err) {
1718 goto close_and_fail;
1719 }
1720 }
1721
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001722 return 0;
1723
Kevin Wolf8bfea152014-04-11 19:16:36 +02001724fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001725 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001726 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001727 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001728 QDECREF(snapshot_options);
Kevin Wolf145f5982015-05-08 16:15:03 +02001729 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001730 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001731 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001732 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001733 if (!*pbs) {
1734 /* If *pbs is NULL, a new BDS has been created in this function and
1735 needs to be freed now. Otherwise, it does not need to be closed,
1736 since it has not really been opened yet. */
1737 bdrv_unref(bs);
1738 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001739 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001740 error_propagate(errp, local_err);
1741 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001742 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001743
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001744close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001745 /* See fail path, but now the BDS has to be always closed */
1746 if (*pbs) {
1747 bdrv_close(bs);
1748 } else {
1749 bdrv_unref(bs);
1750 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001751 QDECREF(snapshot_options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001752 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001753 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001754 error_propagate(errp, local_err);
1755 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001756 return ret;
1757}
1758
Kevin Wolff3930ed2015-04-08 13:43:47 +02001759int bdrv_open(BlockDriverState **pbs, const char *filename,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001760 const char *reference, QDict *options, int flags, Error **errp)
Kevin Wolff3930ed2015-04-08 13:43:47 +02001761{
1762 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
Max Reitzce343772015-08-26 19:47:50 +02001763 NULL, errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001764}
1765
Jeff Codye971aa12012-09-20 15:13:19 -04001766typedef struct BlockReopenQueueEntry {
1767 bool prepared;
1768 BDRVReopenState state;
1769 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1770} BlockReopenQueueEntry;
1771
1772/*
1773 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1774 * reopen of multiple devices.
1775 *
1776 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1777 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1778 * be created and initialized. This newly created BlockReopenQueue should be
1779 * passed back in for subsequent calls that are intended to be of the same
1780 * atomic 'set'.
1781 *
1782 * bs is the BlockDriverState to add to the reopen queue.
1783 *
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001784 * options contains the changed options for the associated bs
1785 * (the BlockReopenQueue takes ownership)
1786 *
Jeff Codye971aa12012-09-20 15:13:19 -04001787 * flags contains the open flags for the associated bs
1788 *
1789 * returns a pointer to bs_queue, which is either the newly allocated
1790 * bs_queue, or the existing bs_queue being used.
1791 *
1792 */
Kevin Wolf28518102015-05-08 17:07:31 +02001793static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
1794 BlockDriverState *bs,
1795 QDict *options,
1796 int flags,
1797 const BdrvChildRole *role,
1798 QDict *parent_options,
1799 int parent_flags)
Jeff Codye971aa12012-09-20 15:13:19 -04001800{
1801 assert(bs != NULL);
1802
1803 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001804 BdrvChild *child;
Kevin Wolf145f5982015-05-08 16:15:03 +02001805 QDict *old_options, *explicit_options;
Kevin Wolf67251a32015-04-09 18:54:04 +02001806
Jeff Codye971aa12012-09-20 15:13:19 -04001807 if (bs_queue == NULL) {
1808 bs_queue = g_new0(BlockReopenQueue, 1);
1809 QSIMPLEQ_INIT(bs_queue);
1810 }
1811
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001812 if (!options) {
1813 options = qdict_new();
1814 }
1815
Kevin Wolf28518102015-05-08 17:07:31 +02001816 /*
1817 * Precedence of options:
1818 * 1. Explicitly passed in options (highest)
Kevin Wolf91a097e2015-05-08 17:49:53 +02001819 * 2. Set in flags (only for top level)
Kevin Wolf145f5982015-05-08 16:15:03 +02001820 * 3. Retained from explicitly set options of bs
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001821 * 4. Inherited from parent node
Kevin Wolf28518102015-05-08 17:07:31 +02001822 * 5. Retained from effective options of bs
1823 */
1824
Kevin Wolf91a097e2015-05-08 17:49:53 +02001825 if (!parent_options) {
1826 /*
1827 * Any setting represented by flags is always updated. If the
1828 * corresponding QDict option is set, it takes precedence. Otherwise
1829 * the flag is translated into a QDict option. The old setting of bs is
1830 * not considered.
1831 */
1832 update_options_from_flags(options, flags);
1833 }
1834
Kevin Wolf145f5982015-05-08 16:15:03 +02001835 /* Old explicitly set values (don't overwrite by inherited value) */
1836 old_options = qdict_clone_shallow(bs->explicit_options);
1837 bdrv_join_options(bs, options, old_options);
1838 QDECREF(old_options);
1839
1840 explicit_options = qdict_clone_shallow(options);
1841
Kevin Wolf28518102015-05-08 17:07:31 +02001842 /* Inherit from parent node */
1843 if (parent_options) {
1844 assert(!flags);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001845 role->inherit_options(&flags, options, parent_flags, parent_options);
Kevin Wolf28518102015-05-08 17:07:31 +02001846 }
1847
1848 /* Old values are used for options that aren't set yet */
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001849 old_options = qdict_clone_shallow(bs->options);
Kevin Wolfcddff5b2015-11-16 16:43:27 +01001850 bdrv_join_options(bs, options, old_options);
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001851 QDECREF(old_options);
1852
Kevin Wolff1f25a22014-04-25 19:04:55 +02001853 /* bdrv_open() masks this flag out */
1854 flags &= ~BDRV_O_PROTOCOL;
1855
Kevin Wolf67251a32015-04-09 18:54:04 +02001856 QLIST_FOREACH(child, &bs->children, next) {
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001857 QDict *new_child_options;
1858 char *child_key_dot;
Kevin Wolf67251a32015-04-09 18:54:04 +02001859
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001860 /* reopen can only change the options of block devices that were
1861 * implicitly created and inherited options. For other (referenced)
1862 * block devices, a syntax like "backing.foo" results in an error. */
Kevin Wolf67251a32015-04-09 18:54:04 +02001863 if (child->bs->inherits_from != bs) {
1864 continue;
1865 }
1866
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001867 child_key_dot = g_strdup_printf("%s.", child->name);
1868 qdict_extract_subqdict(options, &new_child_options, child_key_dot);
1869 g_free(child_key_dot);
1870
Kevin Wolf28518102015-05-08 17:07:31 +02001871 bdrv_reopen_queue_child(bs_queue, child->bs, new_child_options, 0,
1872 child->role, options, flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001873 }
1874
1875 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1876 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1877
1878 bs_entry->state.bs = bs;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001879 bs_entry->state.options = options;
Kevin Wolf145f5982015-05-08 16:15:03 +02001880 bs_entry->state.explicit_options = explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04001881 bs_entry->state.flags = flags;
1882
1883 return bs_queue;
1884}
1885
Kevin Wolf28518102015-05-08 17:07:31 +02001886BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1887 BlockDriverState *bs,
1888 QDict *options, int flags)
1889{
1890 return bdrv_reopen_queue_child(bs_queue, bs, options, flags,
1891 NULL, NULL, 0);
1892}
1893
Jeff Codye971aa12012-09-20 15:13:19 -04001894/*
1895 * Reopen multiple BlockDriverStates atomically & transactionally.
1896 *
1897 * The queue passed in (bs_queue) must have been built up previous
1898 * via bdrv_reopen_queue().
1899 *
1900 * Reopens all BDS specified in the queue, with the appropriate
1901 * flags. All devices are prepared for reopen, and failure of any
1902 * device will cause all device changes to be abandonded, and intermediate
1903 * data cleaned up.
1904 *
1905 * If all devices prepare successfully, then the changes are committed
1906 * to all devices.
1907 *
1908 */
1909int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1910{
1911 int ret = -1;
1912 BlockReopenQueueEntry *bs_entry, *next;
1913 Error *local_err = NULL;
1914
1915 assert(bs_queue != NULL);
1916
1917 bdrv_drain_all();
1918
1919 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1920 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1921 error_propagate(errp, local_err);
1922 goto cleanup;
1923 }
1924 bs_entry->prepared = true;
1925 }
1926
1927 /* If we reach this point, we have success and just need to apply the
1928 * changes
1929 */
1930 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1931 bdrv_reopen_commit(&bs_entry->state);
1932 }
1933
1934 ret = 0;
1935
1936cleanup:
1937 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1938 if (ret && bs_entry->prepared) {
1939 bdrv_reopen_abort(&bs_entry->state);
Kevin Wolf145f5982015-05-08 16:15:03 +02001940 } else if (ret) {
1941 QDECREF(bs_entry->state.explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04001942 }
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001943 QDECREF(bs_entry->state.options);
Jeff Codye971aa12012-09-20 15:13:19 -04001944 g_free(bs_entry);
1945 }
1946 g_free(bs_queue);
1947 return ret;
1948}
1949
1950
1951/* Reopen a single BlockDriverState with the specified flags. */
1952int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1953{
1954 int ret = -1;
1955 Error *local_err = NULL;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001956 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001957
1958 ret = bdrv_reopen_multiple(queue, &local_err);
1959 if (local_err != NULL) {
1960 error_propagate(errp, local_err);
1961 }
1962 return ret;
1963}
1964
1965
1966/*
1967 * Prepares a BlockDriverState for reopen. All changes are staged in the
1968 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1969 * the block driver layer .bdrv_reopen_prepare()
1970 *
1971 * bs is the BlockDriverState to reopen
1972 * flags are the new open flags
1973 * queue is the reopen queue
1974 *
1975 * Returns 0 on success, non-zero on error. On error errp will be set
1976 * as well.
1977 *
1978 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1979 * It is the responsibility of the caller to then call the abort() or
1980 * commit() for any other BDS that have been left in a prepare() state
1981 *
1982 */
1983int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1984 Error **errp)
1985{
1986 int ret = -1;
1987 Error *local_err = NULL;
1988 BlockDriver *drv;
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001989 QemuOpts *opts;
1990 const char *value;
Jeff Codye971aa12012-09-20 15:13:19 -04001991
1992 assert(reopen_state != NULL);
1993 assert(reopen_state->bs->drv != NULL);
1994 drv = reopen_state->bs->drv;
1995
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001996 /* Process generic block layer options */
1997 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
1998 qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
1999 if (local_err) {
2000 error_propagate(errp, local_err);
2001 ret = -EINVAL;
2002 goto error;
2003 }
2004
Kevin Wolf91a097e2015-05-08 17:49:53 +02002005 update_flags_from_options(&reopen_state->flags, opts);
2006
2007 /* If a guest device is attached, it owns WCE */
2008 if (reopen_state->bs->blk && blk_get_attached_dev(reopen_state->bs->blk)) {
2009 bool old_wce = bdrv_enable_write_cache(reopen_state->bs);
2010 bool new_wce = (reopen_state->flags & BDRV_O_CACHE_WB);
2011 if (old_wce != new_wce) {
2012 error_setg(errp, "Cannot change cache.writeback: Device attached");
2013 ret = -EINVAL;
2014 goto error;
2015 }
2016 }
2017
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002018 /* node-name and driver must be unchanged. Put them back into the QDict, so
2019 * that they are checked at the end of this function. */
2020 value = qemu_opt_get(opts, "node-name");
2021 if (value) {
2022 qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2023 }
2024
2025 value = qemu_opt_get(opts, "driver");
2026 if (value) {
2027 qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2028 }
2029
Jeff Codye971aa12012-09-20 15:13:19 -04002030 /* if we are to stay read-only, do not allow permission change
2031 * to r/w */
2032 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2033 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002034 error_setg(errp, "Node '%s' is read only",
2035 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002036 goto error;
2037 }
2038
2039
2040 ret = bdrv_flush(reopen_state->bs);
2041 if (ret) {
Eric Blake455b0fd2015-11-10 23:51:20 -07002042 error_setg_errno(errp, -ret, "Error flushing drive");
Jeff Codye971aa12012-09-20 15:13:19 -04002043 goto error;
2044 }
2045
2046 if (drv->bdrv_reopen_prepare) {
2047 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2048 if (ret) {
2049 if (local_err != NULL) {
2050 error_propagate(errp, local_err);
2051 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04002052 error_setg(errp, "failed while preparing to reopen image '%s'",
2053 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04002054 }
2055 goto error;
2056 }
2057 } else {
2058 /* It is currently mandatory to have a bdrv_reopen_prepare()
2059 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03002060 error_setg(errp, "Block format '%s' used by node '%s' "
2061 "does not support reopening files", drv->format_name,
2062 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002063 ret = -1;
2064 goto error;
2065 }
2066
Kevin Wolf4d2cb092015-04-10 17:50:50 +02002067 /* Options that are not handled are only okay if they are unchanged
2068 * compared to the old state. It is expected that some options are only
2069 * used for the initial open, but not reopen (e.g. filename) */
2070 if (qdict_size(reopen_state->options)) {
2071 const QDictEntry *entry = qdict_first(reopen_state->options);
2072
2073 do {
2074 QString *new_obj = qobject_to_qstring(entry->value);
2075 const char *new = qstring_get_str(new_obj);
2076 const char *old = qdict_get_try_str(reopen_state->bs->options,
2077 entry->key);
2078
2079 if (!old || strcmp(new, old)) {
2080 error_setg(errp, "Cannot change the option '%s'", entry->key);
2081 ret = -EINVAL;
2082 goto error;
2083 }
2084 } while ((entry = qdict_next(reopen_state->options, entry)));
2085 }
2086
Jeff Codye971aa12012-09-20 15:13:19 -04002087 ret = 0;
2088
2089error:
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002090 qemu_opts_del(opts);
Jeff Codye971aa12012-09-20 15:13:19 -04002091 return ret;
2092}
2093
2094/*
2095 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2096 * makes them final by swapping the staging BlockDriverState contents into
2097 * the active BlockDriverState contents.
2098 */
2099void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2100{
2101 BlockDriver *drv;
2102
2103 assert(reopen_state != NULL);
2104 drv = reopen_state->bs->drv;
2105 assert(drv != NULL);
2106
2107 /* If there are any driver level actions to take */
2108 if (drv->bdrv_reopen_commit) {
2109 drv->bdrv_reopen_commit(reopen_state);
2110 }
2111
2112 /* set BDS specific flags now */
Kevin Wolf145f5982015-05-08 16:15:03 +02002113 QDECREF(reopen_state->bs->explicit_options);
2114
2115 reopen_state->bs->explicit_options = reopen_state->explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04002116 reopen_state->bs->open_flags = reopen_state->flags;
2117 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
2118 BDRV_O_CACHE_WB);
2119 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01002120
Kevin Wolf3baca892014-07-16 17:48:16 +02002121 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04002122}
2123
2124/*
2125 * Abort the reopen, and delete and free the staged changes in
2126 * reopen_state
2127 */
2128void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2129{
2130 BlockDriver *drv;
2131
2132 assert(reopen_state != NULL);
2133 drv = reopen_state->bs->drv;
2134 assert(drv != NULL);
2135
2136 if (drv->bdrv_reopen_abort) {
2137 drv->bdrv_reopen_abort(reopen_state);
2138 }
Kevin Wolf145f5982015-05-08 16:15:03 +02002139
2140 QDECREF(reopen_state->explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04002141}
2142
2143
Max Reitz64dff522016-01-29 16:36:10 +01002144static void bdrv_close(BlockDriverState *bs)
bellardfc01f7e2003-06-30 10:03:06 +00002145{
Max Reitz33384422014-06-20 21:57:33 +02002146 BdrvAioNotifier *ban, *ban_next;
2147
Max Reitzca9bd242016-01-29 16:36:14 +01002148 assert(!bs->job);
Alberto Garcia99b7e772015-09-25 16:41:44 +03002149
2150 /* Disable I/O limits and drain all pending throttled requests */
Alberto Garciaa0d64a62015-11-04 15:15:36 +02002151 if (bs->throttle_state) {
Alberto Garcia99b7e772015-09-25 16:41:44 +03002152 bdrv_io_limits_disable(bs);
2153 }
2154
Paolo Bonzinifc272912015-12-23 11:48:24 +01002155 bdrv_drained_begin(bs); /* complete I/O */
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02002156 bdrv_flush(bs);
Fam Zheng53ec73e2015-05-29 18:53:14 +08002157 bdrv_drain(bs); /* in case flush left pending I/O */
Paolo Bonzinifc272912015-12-23 11:48:24 +01002158
Max Reitzc5acdc92016-01-29 16:36:01 +01002159 bdrv_release_named_dirty_bitmaps(bs);
2160 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2161
Max Reitzb4d02822015-10-19 17:53:15 +02002162 if (bs->blk) {
2163 blk_dev_change_media_cb(bs->blk, false);
2164 }
2165
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02002166 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002167 BdrvChild *child, *next;
2168
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002169 bs->drv->bdrv_close(bs);
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002170 bs->drv = NULL;
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002171
Kevin Wolf5db15a52015-09-14 15:33:33 +02002172 bdrv_set_backing_hd(bs, NULL);
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002173
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002174 if (bs->file != NULL) {
2175 bdrv_unref_child(bs, bs->file);
2176 bs->file = NULL;
2177 }
2178
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002179 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolf33a60402015-06-15 13:51:04 +02002180 /* TODO Remove bdrv_unref() from drivers' close function and use
2181 * bdrv_unref_child() here */
Kevin Wolfbddcec32015-04-09 18:47:50 +02002182 if (child->bs->inherits_from == bs) {
2183 child->bs->inherits_from = NULL;
2184 }
Kevin Wolf33a60402015-06-15 13:51:04 +02002185 bdrv_detach_child(child);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002186 }
2187
Anthony Liguori7267c092011-08-20 22:09:37 -05002188 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00002189 bs->opaque = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00002190 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02002191 bs->backing_file[0] = '\0';
2192 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02002193 bs->total_sectors = 0;
2194 bs->encrypted = 0;
2195 bs->valid_key = 0;
2196 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08002197 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002198 QDECREF(bs->options);
Kevin Wolf145f5982015-05-08 16:15:03 +02002199 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002200 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02002201 QDECREF(bs->full_open_options);
2202 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00002203 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08002204
Max Reitz33384422014-06-20 21:57:33 +02002205 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2206 g_free(ban);
2207 }
2208 QLIST_INIT(&bs->aio_notifiers);
Paolo Bonzinifc272912015-12-23 11:48:24 +01002209 bdrv_drained_end(bs);
bellardb3380822004-03-14 21:38:54 +00002210}
2211
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002212void bdrv_close_all(void)
2213{
2214 BlockDriverState *bs;
Max Reitzca9bd242016-01-29 16:36:14 +01002215 AioContext *aio_context;
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002216
Max Reitzca9bd242016-01-29 16:36:14 +01002217 /* Drop references from requests still in flight, such as canceled block
2218 * jobs whose AIO context has not been polled yet */
2219 bdrv_drain_all();
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002220
Max Reitzca9bd242016-01-29 16:36:14 +01002221 blk_remove_all_bs();
2222 blockdev_close_all_bdrv_states();
2223
2224 /* Cancel all block jobs */
2225 while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2226 QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2227 aio_context = bdrv_get_aio_context(bs);
2228
2229 aio_context_acquire(aio_context);
2230 if (bs->job) {
2231 block_job_cancel_sync(bs->job);
2232 aio_context_release(aio_context);
2233 break;
2234 }
2235 aio_context_release(aio_context);
2236 }
2237
2238 /* All the remaining BlockDriverStates are referenced directly or
2239 * indirectly from block jobs, so there needs to be at least one BDS
2240 * directly used by a block job */
2241 assert(bs);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002242 }
2243}
2244
Max Reitz9aaf28c2016-03-16 19:54:45 +01002245/* make a BlockDriverState anonymous by removing from graph_bdrv_state list.
2246 * Also, NULL terminate the device_name to prevent double remove */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002247void bdrv_make_anon(BlockDriverState *bs)
2248{
Benoît Canetdc364f42014-01-23 21:31:32 +01002249 if (bs->node_name[0] != '\0') {
2250 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2251 }
2252 bs->node_name[0] = '\0';
Ryan Harperd22b2f42011-03-29 20:51:47 -05002253}
2254
Kevin Wolf8e419ae2015-09-16 16:18:38 +02002255/* Fields that need to stay with the top-level BDS */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002256static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2257 BlockDriverState *bs_src)
2258{
2259 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002260
2261 /* dev info */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002262 bs_dest->copy_on_read = bs_src->copy_on_read;
2263
2264 bs_dest->enable_write_cache = bs_src->enable_write_cache;
2265
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002266 /* dirty bitmap */
2267 bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
2268}
2269
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002270static void change_parent_backing_link(BlockDriverState *from,
2271 BlockDriverState *to)
2272{
2273 BdrvChild *c, *next;
2274
Kevin Wolff21d96d2016-03-08 13:47:46 +01002275 if (from->blk) {
2276 /* FIXME We bypass blk_set_bs(), so we need to make these updates
2277 * manually. The root problem is not in this change function, but the
2278 * existence of BlockDriverState.blk. */
2279 to->blk = from->blk;
2280 from->blk = NULL;
2281 }
2282
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002283 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2284 assert(c->role != &child_backing);
2285 c->bs = to;
2286 QLIST_REMOVE(c, next_parent);
2287 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2288 bdrv_ref(to);
2289 bdrv_unref(from);
2290 }
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002291}
2292
2293static void swap_feature_fields(BlockDriverState *bs_top,
2294 BlockDriverState *bs_new)
2295{
2296 BlockDriverState tmp;
2297
2298 bdrv_move_feature_fields(&tmp, bs_top);
2299 bdrv_move_feature_fields(bs_top, bs_new);
2300 bdrv_move_feature_fields(bs_new, &tmp);
2301
2302 assert(!bs_new->throttle_state);
2303 if (bs_top->throttle_state) {
2304 assert(bs_top->io_limits_enabled);
2305 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2306 bdrv_io_limits_disable(bs_top);
2307 }
2308}
2309
Jeff Cody8802d1f2012-02-28 15:54:06 -05002310/*
2311 * Add new bs contents at the top of an image chain while the chain is
2312 * live, while keeping required fields on the top layer.
2313 *
2314 * This will modify the BlockDriverState fields, and swap contents
2315 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2316 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002317 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002318 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002319 * This function does not create any image files.
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002320 *
2321 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2322 * that's what the callers commonly need. bs_new will be referenced by the old
2323 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2324 * reference of its own, it must call bdrv_ref().
Jeff Cody8802d1f2012-02-28 15:54:06 -05002325 */
2326void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2327{
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002328 assert(!bdrv_requests_pending(bs_top));
2329 assert(!bdrv_requests_pending(bs_new));
Jeff Cody8802d1f2012-02-28 15:54:06 -05002330
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002331 bdrv_ref(bs_top);
2332 change_parent_backing_link(bs_top, bs_new);
2333
2334 /* Some fields always stay on top of the backing file chain */
2335 swap_feature_fields(bs_top, bs_new);
2336
2337 bdrv_set_backing_hd(bs_new, bs_top);
2338 bdrv_unref(bs_top);
2339
2340 /* bs_new is now referenced by its new parents, we don't need the
2341 * additional reference any more. */
2342 bdrv_unref(bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002343}
2344
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02002345void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2346{
2347 assert(!bdrv_requests_pending(old));
2348 assert(!bdrv_requests_pending(new));
2349
2350 bdrv_ref(old);
2351
2352 if (old->blk) {
2353 /* As long as these fields aren't in BlockBackend, but in the top-level
2354 * BlockDriverState, it's not possible for a BDS to have two BBs.
2355 *
2356 * We really want to copy the fields from old to new, but we go for a
2357 * swap instead so that pointers aren't duplicated and cause trouble.
2358 * (Also, bdrv_swap() used to do the same.) */
2359 assert(!new->blk);
2360 swap_feature_fields(old, new);
2361 }
2362 change_parent_backing_link(old, new);
2363
2364 /* Change backing files if a previously independent node is added to the
2365 * chain. For active commit, we replace top by its own (indirect) backing
2366 * file and don't do anything here so we don't build a loop. */
2367 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2368 bdrv_set_backing_hd(new, backing_bs(old));
2369 bdrv_set_backing_hd(old, NULL);
2370 }
2371
2372 bdrv_unref(old);
2373}
2374
Fam Zheng4f6fd342013-08-23 09:14:47 +08002375static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002376{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002377 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002378 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002379 assert(!bs->refcnt);
Markus Armbruster18846de2010-06-29 16:58:30 +02002380
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002381 bdrv_close(bs);
2382
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002383 /* remove from list, if necessary */
Ryan Harperd22b2f42011-03-29 20:51:47 -05002384 bdrv_make_anon(bs);
aurel3234c6f052008-04-08 19:51:21 +00002385
Max Reitz2c1d04e2016-01-29 16:36:11 +01002386 QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2387
Anthony Liguori7267c092011-08-20 22:09:37 -05002388 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002389}
2390
aliguorie97fc192009-04-21 23:11:50 +00002391/*
2392 * Run consistency checks on an image
2393 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002394 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002395 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002396 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002397 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002398int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002399{
Max Reitz908bcd52014-08-07 22:47:55 +02002400 if (bs->drv == NULL) {
2401 return -ENOMEDIUM;
2402 }
aliguorie97fc192009-04-21 23:11:50 +00002403 if (bs->drv->bdrv_check == NULL) {
2404 return -ENOTSUP;
2405 }
2406
Kevin Wolfe076f332010-06-29 11:43:13 +02002407 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002408 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002409}
2410
Kevin Wolf8a426612010-07-16 17:17:01 +02002411#define COMMIT_BUF_SECTORS 2048
2412
bellard33e39632003-07-06 17:15:21 +00002413/* commit COW file into the raw image */
2414int bdrv_commit(BlockDriverState *bs)
2415{
bellard19cb3732006-08-19 11:45:59 +00002416 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002417 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002418 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002419 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002420 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002421
bellard19cb3732006-08-19 11:45:59 +00002422 if (!drv)
2423 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002424
Kevin Wolf760e0062015-06-17 14:55:21 +02002425 if (!bs->backing) {
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002426 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002427 }
2428
Fam Zhengbb000212014-09-11 13:14:00 +08002429 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
Kevin Wolf760e0062015-06-17 14:55:21 +02002430 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002431 return -EBUSY;
2432 }
2433
Kevin Wolf760e0062015-06-17 14:55:21 +02002434 ro = bs->backing->bs->read_only;
2435 open_flags = bs->backing->bs->open_flags;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002436
2437 if (ro) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002438 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002439 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002440 }
bellard33e39632003-07-06 17:15:21 +00002441 }
bellardea2384d2004-08-01 21:59:26 +00002442
Jeff Cody72706ea2014-01-24 09:02:35 -05002443 length = bdrv_getlength(bs);
2444 if (length < 0) {
2445 ret = length;
2446 goto ro_cleanup;
2447 }
2448
Kevin Wolf760e0062015-06-17 14:55:21 +02002449 backing_length = bdrv_getlength(bs->backing->bs);
Jeff Cody72706ea2014-01-24 09:02:35 -05002450 if (backing_length < 0) {
2451 ret = backing_length;
2452 goto ro_cleanup;
2453 }
2454
2455 /* If our top snapshot is larger than the backing file image,
2456 * grow the backing file image if possible. If not possible,
2457 * we must return an error */
2458 if (length > backing_length) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002459 ret = bdrv_truncate(bs->backing->bs, length);
Jeff Cody72706ea2014-01-24 09:02:35 -05002460 if (ret < 0) {
2461 goto ro_cleanup;
2462 }
2463 }
2464
2465 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002466
2467 /* qemu_try_blockalign() for bs will choose an alignment that works for
Kevin Wolf760e0062015-06-17 14:55:21 +02002468 * bs->backing->bs as well, so no need to compare the alignment manually. */
Kevin Wolf857d4f42014-05-20 13:16:51 +02002469 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2470 if (buf == NULL) {
2471 ret = -ENOMEM;
2472 goto ro_cleanup;
2473 }
bellardea2384d2004-08-01 21:59:26 +00002474
Kevin Wolf8a426612010-07-16 17:17:01 +02002475 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002476 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2477 if (ret < 0) {
2478 goto ro_cleanup;
2479 }
2480 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002481 ret = bdrv_read(bs, sector, buf, n);
2482 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002483 goto ro_cleanup;
2484 }
2485
Kevin Wolf760e0062015-06-17 14:55:21 +02002486 ret = bdrv_write(bs->backing->bs, sector, buf, n);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002487 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002488 goto ro_cleanup;
2489 }
bellardea2384d2004-08-01 21:59:26 +00002490 }
2491 }
bellard95389c82005-12-18 18:28:15 +00002492
Christoph Hellwig1d449522010-01-17 12:32:30 +01002493 if (drv->bdrv_make_empty) {
2494 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002495 if (ret < 0) {
2496 goto ro_cleanup;
2497 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002498 bdrv_flush(bs);
2499 }
bellard95389c82005-12-18 18:28:15 +00002500
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002501 /*
2502 * Make sure all data we wrote to the backing device is actually
2503 * stable on disk.
2504 */
Kevin Wolf760e0062015-06-17 14:55:21 +02002505 if (bs->backing) {
2506 bdrv_flush(bs->backing->bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002507 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002508
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002509 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002510ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002511 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002512
2513 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002514 /* ignoring error return here */
Kevin Wolf760e0062015-06-17 14:55:21 +02002515 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002516 }
2517
Christoph Hellwig1d449522010-01-17 12:32:30 +01002518 return ret;
bellard33e39632003-07-06 17:15:21 +00002519}
2520
Kevin Wolf756e6732010-01-12 12:55:17 +01002521/*
2522 * Return values:
2523 * 0 - success
2524 * -EINVAL - backing format specified, but no file
2525 * -ENOSPC - can't update the backing file because no space is left in the
2526 * image file header
2527 * -ENOTSUP - format driver doesn't support changing the backing file
2528 */
2529int bdrv_change_backing_file(BlockDriverState *bs,
2530 const char *backing_file, const char *backing_fmt)
2531{
2532 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002533 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002534
Paolo Bonzini5f377792012-04-12 14:01:01 +02002535 /* Backing file format doesn't make sense without a backing file */
2536 if (backing_fmt && !backing_file) {
2537 return -EINVAL;
2538 }
2539
Kevin Wolf756e6732010-01-12 12:55:17 +01002540 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002541 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002542 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002543 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002544 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002545
2546 if (ret == 0) {
2547 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2548 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2549 }
2550 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002551}
2552
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002553/*
2554 * Finds the image layer in the chain that has 'bs' as its backing file.
2555 *
2556 * active is the current topmost image.
2557 *
2558 * Returns NULL if bs is not found in active's image chain,
2559 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002560 *
2561 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002562 */
2563BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2564 BlockDriverState *bs)
2565{
Kevin Wolf760e0062015-06-17 14:55:21 +02002566 while (active && bs != backing_bs(active)) {
2567 active = backing_bs(active);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002568 }
2569
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002570 return active;
2571}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002572
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002573/* Given a BDS, searches for the base layer. */
2574BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2575{
2576 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002577}
2578
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002579/*
2580 * Drops images above 'base' up to and including 'top', and sets the image
2581 * above 'top' to have base as its backing file.
2582 *
2583 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2584 * information in 'bs' can be properly updated.
2585 *
2586 * E.g., this will convert the following chain:
2587 * bottom <- base <- intermediate <- top <- active
2588 *
2589 * to
2590 *
2591 * bottom <- base <- active
2592 *
2593 * It is allowed for bottom==base, in which case it converts:
2594 *
2595 * base <- intermediate <- top <- active
2596 *
2597 * to
2598 *
2599 * base <- active
2600 *
Jeff Cody54e26902014-06-25 15:40:10 -04002601 * If backing_file_str is non-NULL, it will be used when modifying top's
2602 * overlay image metadata.
2603 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002604 * Error conditions:
2605 * if active == top, that is considered an error
2606 *
2607 */
2608int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002609 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002610{
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002611 BlockDriverState *new_top_bs = NULL;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002612 int ret = -EIO;
2613
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002614 if (!top->drv || !base->drv) {
2615 goto exit;
2616 }
2617
2618 new_top_bs = bdrv_find_overlay(active, top);
2619
2620 if (new_top_bs == NULL) {
2621 /* we could not find the image above 'top', this is an error */
2622 goto exit;
2623 }
2624
Kevin Wolf760e0062015-06-17 14:55:21 +02002625 /* special case of new_top_bs->backing->bs already pointing to base - nothing
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002626 * to do, no intermediate images */
Kevin Wolf760e0062015-06-17 14:55:21 +02002627 if (backing_bs(new_top_bs) == base) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002628 ret = 0;
2629 goto exit;
2630 }
2631
Kevin Wolf5db15a52015-09-14 15:33:33 +02002632 /* Make sure that base is in the backing chain of top */
2633 if (!bdrv_chain_contains(top, base)) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002634 goto exit;
2635 }
2636
2637 /* success - we can delete the intermediate states, and link top->base */
Kevin Wolf5db15a52015-09-14 15:33:33 +02002638 backing_file_str = backing_file_str ? backing_file_str : base->filename;
Jeff Cody54e26902014-06-25 15:40:10 -04002639 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Kevin Wolf5db15a52015-09-14 15:33:33 +02002640 base->drv ? base->drv->format_name : "");
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002641 if (ret) {
2642 goto exit;
2643 }
Kevin Wolf5db15a52015-09-14 15:33:33 +02002644 bdrv_set_backing_hd(new_top_bs, base);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002645
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002646 ret = 0;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002647exit:
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002648 return ret;
2649}
2650
bellard83f64092006-08-01 16:21:11 +00002651/**
bellard83f64092006-08-01 16:21:11 +00002652 * Truncate file to 'offset' bytes (needed only for file protocols)
2653 */
2654int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2655{
2656 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002657 int ret;
bellard83f64092006-08-01 16:21:11 +00002658 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002659 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002660 if (!drv->bdrv_truncate)
2661 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002662 if (bs->read_only)
2663 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002664
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002665 ret = drv->bdrv_truncate(bs, offset);
2666 if (ret == 0) {
2667 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002668 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002669 if (bs->blk) {
2670 blk_dev_resize_cb(bs->blk);
2671 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002672 }
2673 return ret;
bellard83f64092006-08-01 16:21:11 +00002674}
2675
2676/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002677 * Length of a allocated file in bytes. Sparse files are counted by actual
2678 * allocated space. Return < 0 if error or unknown.
2679 */
2680int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2681{
2682 BlockDriver *drv = bs->drv;
2683 if (!drv) {
2684 return -ENOMEDIUM;
2685 }
2686 if (drv->bdrv_get_allocated_file_size) {
2687 return drv->bdrv_get_allocated_file_size(bs);
2688 }
2689 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002690 return bdrv_get_allocated_file_size(bs->file->bs);
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002691 }
2692 return -ENOTSUP;
2693}
2694
2695/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002696 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002697 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002698int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002699{
2700 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002701
bellard83f64092006-08-01 16:21:11 +00002702 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002703 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002704
Kevin Wolfb94a2612013-10-29 12:18:58 +01002705 if (drv->has_variable_length) {
2706 int ret = refresh_total_sectors(bs, bs->total_sectors);
2707 if (ret < 0) {
2708 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002709 }
bellard83f64092006-08-01 16:21:11 +00002710 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002711 return bs->total_sectors;
2712}
2713
2714/**
2715 * Return length in bytes on success, -errno on error.
2716 * The length is always a multiple of BDRV_SECTOR_SIZE.
2717 */
2718int64_t bdrv_getlength(BlockDriverState *bs)
2719{
2720 int64_t ret = bdrv_nb_sectors(bs);
2721
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002722 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002723 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002724}
2725
bellard19cb3732006-08-19 11:45:59 +00002726/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002727void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002728{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002729 int64_t nb_sectors = bdrv_nb_sectors(bs);
2730
2731 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002732}
bellardcf989512004-02-16 21:56:36 +00002733
bellardb3380822004-03-14 21:38:54 +00002734int bdrv_is_read_only(BlockDriverState *bs)
2735{
2736 return bs->read_only;
2737}
2738
ths985a03b2007-12-24 16:10:43 +00002739int bdrv_is_sg(BlockDriverState *bs)
2740{
2741 return bs->sg;
2742}
2743
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002744int bdrv_enable_write_cache(BlockDriverState *bs)
2745{
2746 return bs->enable_write_cache;
2747}
2748
Paolo Bonzini425b0142012-06-06 00:04:52 +02002749void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2750{
2751 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002752
2753 /* so a reopen() will preserve wce */
2754 if (wce) {
2755 bs->open_flags |= BDRV_O_CACHE_WB;
2756 } else {
2757 bs->open_flags &= ~BDRV_O_CACHE_WB;
2758 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002759}
2760
bellardea2384d2004-08-01 21:59:26 +00002761int bdrv_is_encrypted(BlockDriverState *bs)
2762{
Kevin Wolf760e0062015-06-17 14:55:21 +02002763 if (bs->backing && bs->backing->bs->encrypted) {
bellardea2384d2004-08-01 21:59:26 +00002764 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002765 }
bellardea2384d2004-08-01 21:59:26 +00002766 return bs->encrypted;
2767}
2768
aliguoric0f4ce72009-03-05 23:01:01 +00002769int bdrv_key_required(BlockDriverState *bs)
2770{
Kevin Wolf760e0062015-06-17 14:55:21 +02002771 BdrvChild *backing = bs->backing;
aliguoric0f4ce72009-03-05 23:01:01 +00002772
Kevin Wolf760e0062015-06-17 14:55:21 +02002773 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
aliguoric0f4ce72009-03-05 23:01:01 +00002774 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002775 }
aliguoric0f4ce72009-03-05 23:01:01 +00002776 return (bs->encrypted && !bs->valid_key);
2777}
2778
bellardea2384d2004-08-01 21:59:26 +00002779int bdrv_set_key(BlockDriverState *bs, const char *key)
2780{
2781 int ret;
Kevin Wolf760e0062015-06-17 14:55:21 +02002782 if (bs->backing && bs->backing->bs->encrypted) {
2783 ret = bdrv_set_key(bs->backing->bs, key);
bellardea2384d2004-08-01 21:59:26 +00002784 if (ret < 0)
2785 return ret;
2786 if (!bs->encrypted)
2787 return 0;
2788 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002789 if (!bs->encrypted) {
2790 return -EINVAL;
2791 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2792 return -ENOMEDIUM;
2793 }
aliguoric0f4ce72009-03-05 23:01:01 +00002794 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002795 if (ret < 0) {
2796 bs->valid_key = 0;
2797 } else if (!bs->valid_key) {
2798 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002799 if (bs->blk) {
2800 /* call the change callback now, we skipped it on open */
2801 blk_dev_change_media_cb(bs->blk, true);
2802 }
aliguoribb5fc202009-03-05 23:01:15 +00002803 }
aliguoric0f4ce72009-03-05 23:01:01 +00002804 return ret;
bellardea2384d2004-08-01 21:59:26 +00002805}
2806
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002807/*
2808 * Provide an encryption key for @bs.
2809 * If @key is non-null:
2810 * If @bs is not encrypted, fail.
2811 * Else if the key is invalid, fail.
2812 * Else set @bs's key to @key, replacing the existing key, if any.
2813 * If @key is null:
2814 * If @bs is encrypted and still lacks a key, fail.
2815 * Else do nothing.
2816 * On failure, store an error object through @errp if non-null.
2817 */
2818void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2819{
2820 if (key) {
2821 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002822 error_setg(errp, "Node '%s' is not encrypted",
2823 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002824 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002825 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002826 }
2827 } else {
2828 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002829 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2830 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002831 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002832 bdrv_get_encrypted_filename(bs));
2833 }
2834 }
2835}
2836
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002837const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002838{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002839 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002840}
2841
Stefan Hajnocziada42402014-08-27 12:08:55 +01002842static int qsort_strcmp(const void *a, const void *b)
2843{
2844 return strcmp(a, b);
2845}
2846
ths5fafdf22007-09-16 21:08:06 +00002847void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002848 void *opaque)
2849{
2850 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002851 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002852 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002853 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002854
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002855 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002856 if (drv->format_name) {
2857 bool found = false;
2858 int i = count;
2859 while (formats && i && !found) {
2860 found = !strcmp(formats[--i], drv->format_name);
2861 }
2862
2863 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002864 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002865 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002866 }
2867 }
bellardea2384d2004-08-01 21:59:26 +00002868 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002869
2870 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2871
2872 for (i = 0; i < count; i++) {
2873 it(opaque, formats[i]);
2874 }
2875
Jeff Codye855e4f2014-04-28 18:29:54 -04002876 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002877}
2878
Benoît Canetdc364f42014-01-23 21:31:32 +01002879/* This function is to find a node in the bs graph */
2880BlockDriverState *bdrv_find_node(const char *node_name)
2881{
2882 BlockDriverState *bs;
2883
2884 assert(node_name);
2885
2886 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2887 if (!strcmp(node_name, bs->node_name)) {
2888 return bs;
2889 }
2890 }
2891 return NULL;
2892}
2893
Benoît Canetc13163f2014-01-23 21:31:34 +01002894/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002895BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002896{
2897 BlockDeviceInfoList *list, *entry;
2898 BlockDriverState *bs;
2899
2900 list = NULL;
2901 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002902 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2903 if (!info) {
2904 qapi_free_BlockDeviceInfoList(list);
2905 return NULL;
2906 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002907 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002908 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002909 entry->next = list;
2910 list = entry;
2911 }
2912
2913 return list;
2914}
2915
Benoît Canet12d3ba82014-01-23 21:31:35 +01002916BlockDriverState *bdrv_lookup_bs(const char *device,
2917 const char *node_name,
2918 Error **errp)
2919{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002920 BlockBackend *blk;
2921 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002922
Benoît Canet12d3ba82014-01-23 21:31:35 +01002923 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002924 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002925
Markus Armbruster7f06d472014-10-07 13:59:12 +02002926 if (blk) {
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002927 bs = blk_bs(blk);
2928 if (!bs) {
Max Reitz5433c242015-10-19 17:53:29 +02002929 error_setg(errp, "Device '%s' has no medium", device);
Max Reitz5433c242015-10-19 17:53:29 +02002930 }
2931
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002932 return bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002933 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002934 }
2935
Benoît Canetdd67fa52014-02-12 17:15:06 +01002936 if (node_name) {
2937 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002938
Benoît Canetdd67fa52014-02-12 17:15:06 +01002939 if (bs) {
2940 return bs;
2941 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002942 }
2943
Benoît Canetdd67fa52014-02-12 17:15:06 +01002944 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2945 device ? device : "",
2946 node_name ? node_name : "");
2947 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002948}
2949
Jeff Cody5a6684d2014-06-25 15:40:09 -04002950/* If 'base' is in the same chain as 'top', return true. Otherwise,
2951 * return false. If either argument is NULL, return false. */
2952bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2953{
2954 while (top && top != base) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002955 top = backing_bs(top);
Jeff Cody5a6684d2014-06-25 15:40:09 -04002956 }
2957
2958 return top != NULL;
2959}
2960
Fam Zheng04df7652014-10-31 11:32:54 +08002961BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2962{
2963 if (!bs) {
2964 return QTAILQ_FIRST(&graph_bdrv_states);
2965 }
2966 return QTAILQ_NEXT(bs, node_list);
2967}
2968
Max Reitz26260582016-03-16 19:54:43 +01002969/* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
2970 * the monitor or attached to a BlockBackend */
Markus Armbruster2f399b02010-06-02 18:55:20 +02002971BlockDriverState *bdrv_next(BlockDriverState *bs)
2972{
Max Reitz26260582016-03-16 19:54:43 +01002973 if (!bs || bs->blk) {
2974 bs = blk_next_root_bs(bs);
2975 if (bs) {
2976 return bs;
2977 }
Markus Armbruster2f399b02010-06-02 18:55:20 +02002978 }
Max Reitz26260582016-03-16 19:54:43 +01002979
2980 /* Ignore all BDSs that are attached to a BlockBackend here; they have been
2981 * handled by the above block already */
2982 do {
2983 bs = bdrv_next_monitor_owned(bs);
2984 } while (bs && bs->blk);
2985 return bs;
Markus Armbruster2f399b02010-06-02 18:55:20 +02002986}
2987
Fam Zheng20a9e772014-10-31 11:32:55 +08002988const char *bdrv_get_node_name(const BlockDriverState *bs)
2989{
2990 return bs->node_name;
2991}
2992
Markus Armbruster7f06d472014-10-07 13:59:12 +02002993/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002994const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002995{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002996 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002997}
2998
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002999/* This can be used to identify nodes that might not have a device
3000 * name associated. Since node and device names live in the same
3001 * namespace, the result is unambiguous. The exception is if both are
3002 * absent, then this returns an empty (non-null) string. */
3003const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
3004{
3005 return bs->blk ? blk_name(bs->blk) : bs->node_name;
3006}
3007
Markus Armbrusterc8433282012-06-05 16:49:24 +02003008int bdrv_get_flags(BlockDriverState *bs)
3009{
3010 return bs->open_flags;
3011}
3012
Peter Lieven3ac21622013-06-28 12:47:42 +02003013int bdrv_has_zero_init_1(BlockDriverState *bs)
3014{
3015 return 1;
3016}
3017
Kevin Wolff2feebb2010-04-14 17:30:35 +02003018int bdrv_has_zero_init(BlockDriverState *bs)
3019{
3020 assert(bs->drv);
3021
Paolo Bonzini11212d82013-09-04 19:00:27 +02003022 /* If BS is a copy on write image, it is initialized to
3023 the contents of the base image, which may not be zeroes. */
Kevin Wolf760e0062015-06-17 14:55:21 +02003024 if (bs->backing) {
Paolo Bonzini11212d82013-09-04 19:00:27 +02003025 return 0;
3026 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02003027 if (bs->drv->bdrv_has_zero_init) {
3028 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02003029 }
3030
Peter Lieven3ac21622013-06-28 12:47:42 +02003031 /* safe default */
3032 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02003033}
3034
Peter Lieven4ce78692013-10-24 12:06:54 +02003035bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3036{
3037 BlockDriverInfo bdi;
3038
Kevin Wolf760e0062015-06-17 14:55:21 +02003039 if (bs->backing) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003040 return false;
3041 }
3042
3043 if (bdrv_get_info(bs, &bdi) == 0) {
3044 return bdi.unallocated_blocks_are_zero;
3045 }
3046
3047 return false;
3048}
3049
3050bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3051{
3052 BlockDriverInfo bdi;
3053
Kevin Wolf760e0062015-06-17 14:55:21 +02003054 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003055 return false;
3056 }
3057
3058 if (bdrv_get_info(bs, &bdi) == 0) {
3059 return bdi.can_write_zeroes_with_unmap;
3060 }
3061
3062 return false;
3063}
3064
aliguori045df332009-03-05 23:00:48 +00003065const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3066{
Kevin Wolf760e0062015-06-17 14:55:21 +02003067 if (bs->backing && bs->backing->bs->encrypted)
aliguori045df332009-03-05 23:00:48 +00003068 return bs->backing_file;
3069 else if (bs->encrypted)
3070 return bs->filename;
3071 else
3072 return NULL;
3073}
3074
ths5fafdf22007-09-16 21:08:06 +00003075void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00003076 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00003077{
Kevin Wolf3574c602011-10-26 11:02:11 +02003078 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00003079}
3080
bellardfaea38e2006-08-05 21:31:00 +00003081int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3082{
3083 BlockDriver *drv = bs->drv;
3084 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00003085 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00003086 if (!drv->bdrv_get_info)
3087 return -ENOTSUP;
3088 memset(bdi, 0, sizeof(*bdi));
3089 return drv->bdrv_get_info(bs, bdi);
3090}
3091
Max Reitzeae041f2013-10-09 10:46:16 +02003092ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3093{
3094 BlockDriver *drv = bs->drv;
3095 if (drv && drv->bdrv_get_specific_info) {
3096 return drv->bdrv_get_specific_info(bs);
3097 }
3098 return NULL;
3099}
3100
Eric Blakea31939e2015-11-18 01:52:54 -07003101void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003102{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003103 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003104 return;
3105 }
3106
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003107 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01003108}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003109
Kevin Wolf41c695c2012-12-06 14:32:58 +01003110int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3111 const char *tag)
3112{
3113 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003114 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003115 }
3116
3117 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3118 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3119 }
3120
3121 return -ENOTSUP;
3122}
3123
Fam Zheng4cc70e92013-11-20 10:01:54 +08003124int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3125{
3126 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003127 bs = bs->file ? bs->file->bs : NULL;
Fam Zheng4cc70e92013-11-20 10:01:54 +08003128 }
3129
3130 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3131 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3132 }
3133
3134 return -ENOTSUP;
3135}
3136
Kevin Wolf41c695c2012-12-06 14:32:58 +01003137int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3138{
Max Reitz938789e2014-03-10 23:44:08 +01003139 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
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_resume) {
3144 return bs->drv->bdrv_debug_resume(bs, tag);
3145 }
3146
3147 return -ENOTSUP;
3148}
3149
3150bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3151{
3152 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003153 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003154 }
3155
3156 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3157 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3158 }
3159
3160 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003161}
3162
Blue Swirl199630b2010-07-25 20:49:34 +00003163int bdrv_is_snapshot(BlockDriverState *bs)
3164{
3165 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3166}
3167
Jeff Codyb1b1d782012-10-16 15:49:09 -04003168/* backing_file can either be relative, or absolute, or a protocol. If it is
3169 * relative, it must be relative to the chain. So, passing in bs->filename
3170 * from a BDS as backing_file should not be done, as that may be relative to
3171 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003172BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3173 const char *backing_file)
3174{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003175 char *filename_full = NULL;
3176 char *backing_file_full = NULL;
3177 char *filename_tmp = NULL;
3178 int is_protocol = 0;
3179 BlockDriverState *curr_bs = NULL;
3180 BlockDriverState *retval = NULL;
3181
3182 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003183 return NULL;
3184 }
3185
Jeff Codyb1b1d782012-10-16 15:49:09 -04003186 filename_full = g_malloc(PATH_MAX);
3187 backing_file_full = g_malloc(PATH_MAX);
3188 filename_tmp = g_malloc(PATH_MAX);
3189
3190 is_protocol = path_has_protocol(backing_file);
3191
Kevin Wolf760e0062015-06-17 14:55:21 +02003192 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003193
3194 /* If either of the filename paths is actually a protocol, then
3195 * compare unmodified paths; otherwise make paths relative */
3196 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3197 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003198 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003199 break;
3200 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003201 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003202 /* If not an absolute filename path, make it relative to the current
3203 * image's filename path */
3204 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3205 backing_file);
3206
3207 /* We are going to compare absolute pathnames */
3208 if (!realpath(filename_tmp, filename_full)) {
3209 continue;
3210 }
3211
3212 /* We need to make sure the backing filename we are comparing against
3213 * is relative to the current image filename (or absolute) */
3214 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3215 curr_bs->backing_file);
3216
3217 if (!realpath(filename_tmp, backing_file_full)) {
3218 continue;
3219 }
3220
3221 if (strcmp(backing_file_full, filename_full) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003222 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003223 break;
3224 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003225 }
3226 }
3227
Jeff Codyb1b1d782012-10-16 15:49:09 -04003228 g_free(filename_full);
3229 g_free(backing_file_full);
3230 g_free(filename_tmp);
3231 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003232}
3233
Benoît Canetf198fd12012-08-02 10:22:47 +02003234int bdrv_get_backing_file_depth(BlockDriverState *bs)
3235{
3236 if (!bs->drv) {
3237 return 0;
3238 }
3239
Kevin Wolf760e0062015-06-17 14:55:21 +02003240 if (!bs->backing) {
Benoît Canetf198fd12012-08-02 10:22:47 +02003241 return 0;
3242 }
3243
Kevin Wolf760e0062015-06-17 14:55:21 +02003244 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
Benoît Canetf198fd12012-08-02 10:22:47 +02003245}
3246
bellardea2384d2004-08-01 21:59:26 +00003247void bdrv_init(void)
3248{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003249 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003250}
pbrookce1a14d2006-08-07 02:38:06 +00003251
Markus Armbrustereb852012009-10-27 18:41:44 +01003252void bdrv_init_with_whitelist(void)
3253{
3254 use_bdrv_whitelist = 1;
3255 bdrv_init();
3256}
3257
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003258void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003259{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003260 Error *local_err = NULL;
3261 int ret;
3262
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003263 if (!bs->drv) {
3264 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003265 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003266
Kevin Wolf04c01a52016-01-13 15:56:06 +01003267 if (!(bs->open_flags & BDRV_O_INACTIVE)) {
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003268 return;
3269 }
Kevin Wolf04c01a52016-01-13 15:56:06 +01003270 bs->open_flags &= ~BDRV_O_INACTIVE;
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003271
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003272 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003273 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003274 } else if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003275 bdrv_invalidate_cache(bs->file->bs, &local_err);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003276 }
3277 if (local_err) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003278 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003279 error_propagate(errp, local_err);
3280 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003281 }
3282
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003283 ret = refresh_total_sectors(bs, bs->total_sectors);
3284 if (ret < 0) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003285 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003286 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3287 return;
3288 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003289}
3290
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003291void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003292{
Max Reitz79720af2016-03-16 19:54:44 +01003293 BlockDriverState *bs = NULL;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003294 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003295
Max Reitz79720af2016-03-16 19:54:44 +01003296 while ((bs = bdrv_next(bs)) != NULL) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003297 AioContext *aio_context = bdrv_get_aio_context(bs);
3298
3299 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003300 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003301 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003302 if (local_err) {
3303 error_propagate(errp, local_err);
3304 return;
3305 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003306 }
3307}
3308
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003309static int bdrv_inactivate(BlockDriverState *bs)
3310{
3311 int ret;
3312
3313 if (bs->drv->bdrv_inactivate) {
3314 ret = bs->drv->bdrv_inactivate(bs);
3315 if (ret < 0) {
3316 return ret;
3317 }
3318 }
3319
3320 bs->open_flags |= BDRV_O_INACTIVE;
3321 return 0;
3322}
3323
3324int bdrv_inactivate_all(void)
3325{
Max Reitz79720af2016-03-16 19:54:44 +01003326 BlockDriverState *bs = NULL;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003327 int ret;
3328
Max Reitz79720af2016-03-16 19:54:44 +01003329 while ((bs = bdrv_next(bs)) != NULL) {
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003330 AioContext *aio_context = bdrv_get_aio_context(bs);
3331
3332 aio_context_acquire(aio_context);
3333 ret = bdrv_inactivate(bs);
3334 aio_context_release(aio_context);
3335 if (ret < 0) {
3336 return ret;
3337 }
3338 }
3339
3340 return 0;
3341}
3342
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003343/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003344/* removable device support */
3345
3346/**
3347 * Return TRUE if the media is present
3348 */
Max Reitze031f752015-10-19 17:53:11 +02003349bool bdrv_is_inserted(BlockDriverState *bs)
bellard19cb3732006-08-19 11:45:59 +00003350{
3351 BlockDriver *drv = bs->drv;
Max Reitz28d7a782015-10-19 17:53:13 +02003352 BdrvChild *child;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003353
Max Reitze031f752015-10-19 17:53:11 +02003354 if (!drv) {
3355 return false;
3356 }
Max Reitz28d7a782015-10-19 17:53:13 +02003357 if (drv->bdrv_is_inserted) {
3358 return drv->bdrv_is_inserted(bs);
Max Reitze031f752015-10-19 17:53:11 +02003359 }
Max Reitz28d7a782015-10-19 17:53:13 +02003360 QLIST_FOREACH(child, &bs->children, next) {
3361 if (!bdrv_is_inserted(child->bs)) {
3362 return false;
3363 }
3364 }
3365 return true;
bellard19cb3732006-08-19 11:45:59 +00003366}
3367
3368/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003369 * Return whether the media changed since the last call to this
3370 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003371 */
3372int bdrv_media_changed(BlockDriverState *bs)
3373{
3374 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003375
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003376 if (drv && drv->bdrv_media_changed) {
3377 return drv->bdrv_media_changed(bs);
3378 }
3379 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003380}
3381
3382/**
3383 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3384 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003385void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003386{
3387 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003388 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003389
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003390 if (drv && drv->bdrv_eject) {
3391 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003392 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003393
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003394 device_name = bdrv_get_device_name(bs);
3395 if (device_name[0] != '\0') {
3396 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003397 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003398 }
bellard19cb3732006-08-19 11:45:59 +00003399}
3400
bellard19cb3732006-08-19 11:45:59 +00003401/**
3402 * Lock or unlock the media (if it is locked, the user won't be able
3403 * to eject it manually).
3404 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003405void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003406{
3407 BlockDriver *drv = bs->drv;
3408
Markus Armbruster025e8492011-09-06 18:58:47 +02003409 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003410
Markus Armbruster025e8492011-09-06 18:58:47 +02003411 if (drv && drv->bdrv_lock_medium) {
3412 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003413 }
3414}
ths985a03b2007-12-24 16:10:43 +00003415
Fam Zheng9fcb0252013-08-23 09:14:46 +08003416/* Get a reference to bs */
3417void bdrv_ref(BlockDriverState *bs)
3418{
3419 bs->refcnt++;
3420}
3421
3422/* Release a previously grabbed reference to bs.
3423 * If after releasing, reference count is zero, the BlockDriverState is
3424 * deleted. */
3425void bdrv_unref(BlockDriverState *bs)
3426{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003427 if (!bs) {
3428 return;
3429 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003430 assert(bs->refcnt > 0);
3431 if (--bs->refcnt == 0) {
3432 bdrv_delete(bs);
3433 }
3434}
3435
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003436struct BdrvOpBlocker {
3437 Error *reason;
3438 QLIST_ENTRY(BdrvOpBlocker) list;
3439};
3440
3441bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3442{
3443 BdrvOpBlocker *blocker;
3444 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3445 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3446 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3447 if (errp) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01003448 *errp = error_copy(blocker->reason);
3449 error_prepend(errp, "Node '%s' is busy: ",
3450 bdrv_get_device_or_node_name(bs));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003451 }
3452 return true;
3453 }
3454 return false;
3455}
3456
3457void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3458{
3459 BdrvOpBlocker *blocker;
3460 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3461
Markus Armbruster5839e532014-08-19 10:31:08 +02003462 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003463 blocker->reason = reason;
3464 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3465}
3466
3467void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3468{
3469 BdrvOpBlocker *blocker, *next;
3470 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3471 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3472 if (blocker->reason == reason) {
3473 QLIST_REMOVE(blocker, list);
3474 g_free(blocker);
3475 }
3476 }
3477}
3478
3479void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3480{
3481 int i;
3482 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3483 bdrv_op_block(bs, i, reason);
3484 }
3485}
3486
3487void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3488{
3489 int i;
3490 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3491 bdrv_op_unblock(bs, i, reason);
3492 }
3493}
3494
3495bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3496{
3497 int i;
3498
3499 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3500 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3501 return false;
3502 }
3503 }
3504 return true;
3505}
3506
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003507void bdrv_img_create(const char *filename, const char *fmt,
3508 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003509 char *options, uint64_t img_size, int flags,
3510 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003511{
Chunyan Liu83d05212014-06-05 17:20:51 +08003512 QemuOptsList *create_opts = NULL;
3513 QemuOpts *opts = NULL;
3514 const char *backing_fmt, *backing_file;
3515 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003516 BlockDriver *drv, *proto_drv;
Max Reitzcc84d902013-09-06 17:14:26 +02003517 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003518 int ret = 0;
3519
3520 /* Find driver and parse its options */
3521 drv = bdrv_find_format(fmt);
3522 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003523 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003524 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003525 }
3526
Max Reitzb65a5e12015-02-05 13:58:12 -05003527 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003528 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003529 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003530 }
3531
Max Reitzc6149722014-12-02 18:32:45 +01003532 if (!drv->create_opts) {
3533 error_setg(errp, "Format driver '%s' does not support image creation",
3534 drv->format_name);
3535 return;
3536 }
3537
3538 if (!proto_drv->create_opts) {
3539 error_setg(errp, "Protocol driver '%s' does not support image creation",
3540 proto_drv->format_name);
3541 return;
3542 }
3543
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003544 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3545 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003546
3547 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003548 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003549 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003550
3551 /* Parse -o options */
3552 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003553 qemu_opts_do_parse(opts, options, NULL, &local_err);
3554 if (local_err) {
3555 error_report_err(local_err);
3556 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003557 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003558 goto out;
3559 }
3560 }
3561
3562 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003563 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003564 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003565 error_setg(errp, "Backing file not supported for file format '%s'",
3566 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003567 goto out;
3568 }
3569 }
3570
3571 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003572 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003573 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003574 error_setg(errp, "Backing file format not supported for file "
3575 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003576 goto out;
3577 }
3578 }
3579
Chunyan Liu83d05212014-06-05 17:20:51 +08003580 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3581 if (backing_file) {
3582 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003583 error_setg(errp, "Error: Trying to create an image with the "
3584 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003585 goto out;
3586 }
3587 }
3588
Chunyan Liu83d05212014-06-05 17:20:51 +08003589 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003590
3591 // The size for the image must always be specified, with one exception:
3592 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003593 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3594 if (size == -1) {
3595 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003596 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003597 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003598 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003599 int back_flags;
Max Reitze6641712015-08-26 19:47:48 +02003600 QDict *backing_options = NULL;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003601
Max Reitz29168012014-11-26 17:20:27 +01003602 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3603 full_backing, PATH_MAX,
3604 &local_err);
3605 if (local_err) {
3606 g_free(full_backing);
3607 goto out;
3608 }
3609
Paolo Bonzini63090da2012-04-12 14:01:03 +02003610 /* backing files always opened read-only */
3611 back_flags =
3612 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003613
Max Reitze6641712015-08-26 19:47:48 +02003614 if (backing_fmt) {
3615 backing_options = qdict_new();
3616 qdict_put(backing_options, "driver",
3617 qstring_from_str(backing_fmt));
3618 }
3619
Max Reitzf67503e2014-02-18 18:33:05 +01003620 bs = NULL;
Max Reitze6641712015-08-26 19:47:48 +02003621 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02003622 back_flags, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003623 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003624 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003625 goto out;
3626 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003627 size = bdrv_getlength(bs);
3628 if (size < 0) {
3629 error_setg_errno(errp, -size, "Could not get size of '%s'",
3630 backing_file);
3631 bdrv_unref(bs);
3632 goto out;
3633 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003634
Markus Armbruster39101f22015-02-12 16:46:36 +01003635 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003636
3637 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003638 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003639 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003640 goto out;
3641 }
3642 }
3643
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003644 if (!quiet) {
Kővágó, Zoltánfe646692015-07-07 16:42:10 +02003645 printf("Formatting '%s', fmt=%s ", filename, fmt);
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003646 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003647 puts("");
3648 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003649
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003650 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003651
Max Reitzcc84d902013-09-06 17:14:26 +02003652 if (ret == -EFBIG) {
3653 /* This is generally a better message than whatever the driver would
3654 * deliver (especially because of the cluster_size_hint), since that
3655 * is most probably not much different from "image too large". */
3656 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003657 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003658 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003659 }
Max Reitzcc84d902013-09-06 17:14:26 +02003660 error_setg(errp, "The image size is too large for file format '%s'"
3661 "%s", fmt, cluster_size_hint);
3662 error_free(local_err);
3663 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003664 }
3665
3666out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003667 qemu_opts_del(opts);
3668 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003669 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003670 error_propagate(errp, local_err);
3671 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003672}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003673
3674AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3675{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003676 return bs->aio_context;
3677}
3678
3679void bdrv_detach_aio_context(BlockDriverState *bs)
3680{
Max Reitz33384422014-06-20 21:57:33 +02003681 BdrvAioNotifier *baf;
3682
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003683 if (!bs->drv) {
3684 return;
3685 }
3686
Max Reitz33384422014-06-20 21:57:33 +02003687 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3688 baf->detach_aio_context(baf->opaque);
3689 }
3690
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003691 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003692 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003693 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003694 if (bs->drv->bdrv_detach_aio_context) {
3695 bs->drv->bdrv_detach_aio_context(bs);
3696 }
3697 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003698 bdrv_detach_aio_context(bs->file->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003699 }
Kevin Wolf760e0062015-06-17 14:55:21 +02003700 if (bs->backing) {
3701 bdrv_detach_aio_context(bs->backing->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003702 }
3703
3704 bs->aio_context = NULL;
3705}
3706
3707void bdrv_attach_aio_context(BlockDriverState *bs,
3708 AioContext *new_context)
3709{
Max Reitz33384422014-06-20 21:57:33 +02003710 BdrvAioNotifier *ban;
3711
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003712 if (!bs->drv) {
3713 return;
3714 }
3715
3716 bs->aio_context = new_context;
3717
Kevin Wolf760e0062015-06-17 14:55:21 +02003718 if (bs->backing) {
3719 bdrv_attach_aio_context(bs->backing->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003720 }
3721 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003722 bdrv_attach_aio_context(bs->file->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003723 }
3724 if (bs->drv->bdrv_attach_aio_context) {
3725 bs->drv->bdrv_attach_aio_context(bs, new_context);
3726 }
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003727 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003728 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003729 }
Max Reitz33384422014-06-20 21:57:33 +02003730
3731 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3732 ban->attached_aio_context(new_context, ban->opaque);
3733 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003734}
3735
3736void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3737{
Fam Zheng53ec73e2015-05-29 18:53:14 +08003738 bdrv_drain(bs); /* ensure there are no in-flight requests */
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003739
3740 bdrv_detach_aio_context(bs);
3741
3742 /* This function executes in the old AioContext so acquire the new one in
3743 * case it runs in a different thread.
3744 */
3745 aio_context_acquire(new_context);
3746 bdrv_attach_aio_context(bs, new_context);
3747 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003748}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003749
Max Reitz33384422014-06-20 21:57:33 +02003750void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3751 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3752 void (*detach_aio_context)(void *opaque), void *opaque)
3753{
3754 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3755 *ban = (BdrvAioNotifier){
3756 .attached_aio_context = attached_aio_context,
3757 .detach_aio_context = detach_aio_context,
3758 .opaque = opaque
3759 };
3760
3761 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3762}
3763
3764void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3765 void (*attached_aio_context)(AioContext *,
3766 void *),
3767 void (*detach_aio_context)(void *),
3768 void *opaque)
3769{
3770 BdrvAioNotifier *ban, *ban_next;
3771
3772 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3773 if (ban->attached_aio_context == attached_aio_context &&
3774 ban->detach_aio_context == detach_aio_context &&
3775 ban->opaque == opaque)
3776 {
3777 QLIST_REMOVE(ban, list);
3778 g_free(ban);
3779
3780 return;
3781 }
3782 }
3783
3784 abort();
3785}
3786
Max Reitz77485432014-10-27 11:12:50 +01003787int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
Max Reitz8b139762015-07-27 17:51:32 +02003788 BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
Max Reitz6f176b42013-09-03 10:09:50 +02003789{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003790 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003791 return -ENOTSUP;
3792 }
Max Reitz8b139762015-07-27 17:51:32 +02003793 return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
Max Reitz6f176b42013-09-03 10:09:50 +02003794}
Benoît Canetf6186f42013-10-02 14:33:48 +02003795
Benoît Canetb5042a32014-03-03 19:11:34 +01003796/* This function will be called by the bdrv_recurse_is_first_non_filter method
3797 * of block filter and by bdrv_is_first_non_filter.
3798 * It is used to test if the given bs is the candidate or recurse more in the
3799 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003800 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003801bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3802 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003803{
Benoît Canetb5042a32014-03-03 19:11:34 +01003804 /* return false if basic checks fails */
3805 if (!bs || !bs->drv) {
3806 return false;
3807 }
3808
3809 /* the code reached a non block filter driver -> check if the bs is
3810 * the same as the candidate. It's the recursion termination condition.
3811 */
3812 if (!bs->drv->is_filter) {
3813 return bs == candidate;
3814 }
3815 /* Down this path the driver is a block filter driver */
3816
3817 /* If the block filter recursion method is defined use it to recurse down
3818 * the node graph.
3819 */
3820 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003821 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3822 }
3823
Benoît Canetb5042a32014-03-03 19:11:34 +01003824 /* the driver is a block filter but don't allow to recurse -> return false
3825 */
3826 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003827}
3828
3829/* This function checks if the candidate is the first non filter bs down it's
3830 * bs chain. Since we don't have pointers to parents it explore all bs chains
3831 * from the top. Some filters can choose not to pass down the recursion.
3832 */
3833bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3834{
Max Reitz79720af2016-03-16 19:54:44 +01003835 BlockDriverState *bs = NULL;
Benoît Canet212a5a82014-01-23 21:31:36 +01003836
3837 /* walk down the bs forest recursively */
Max Reitz79720af2016-03-16 19:54:44 +01003838 while ((bs = bdrv_next(bs)) != NULL) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003839 bool perm;
3840
Benoît Canetb5042a32014-03-03 19:11:34 +01003841 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003842 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003843
3844 /* candidate is the first non filter */
3845 if (perm) {
3846 return true;
3847 }
3848 }
3849
3850 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02003851}
Benoît Canet09158f02014-06-27 18:25:25 +02003852
Wen Congyange12f3782015-07-17 10:12:22 +08003853BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3854 const char *node_name, Error **errp)
Benoît Canet09158f02014-06-27 18:25:25 +02003855{
3856 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003857 AioContext *aio_context;
3858
Benoît Canet09158f02014-06-27 18:25:25 +02003859 if (!to_replace_bs) {
3860 error_setg(errp, "Node name '%s' not found", node_name);
3861 return NULL;
3862 }
3863
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003864 aio_context = bdrv_get_aio_context(to_replace_bs);
3865 aio_context_acquire(aio_context);
3866
Benoît Canet09158f02014-06-27 18:25:25 +02003867 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003868 to_replace_bs = NULL;
3869 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003870 }
3871
3872 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3873 * most non filter in order to prevent data corruption.
3874 * Another benefit is that this tests exclude backing files which are
3875 * blocked by the backing blockers.
3876 */
Wen Congyange12f3782015-07-17 10:12:22 +08003877 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
Benoît Canet09158f02014-06-27 18:25:25 +02003878 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003879 to_replace_bs = NULL;
3880 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003881 }
3882
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003883out:
3884 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02003885 return to_replace_bs;
3886}
Ming Lei448ad912014-07-04 18:04:33 +08003887
Max Reitz91af7012014-07-18 20:24:56 +02003888static bool append_open_options(QDict *d, BlockDriverState *bs)
3889{
3890 const QDictEntry *entry;
Kevin Wolf9e700c12015-04-24 15:20:28 +02003891 QemuOptDesc *desc;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003892 BdrvChild *child;
Max Reitz91af7012014-07-18 20:24:56 +02003893 bool found_any = false;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003894 const char *p;
Max Reitz91af7012014-07-18 20:24:56 +02003895
3896 for (entry = qdict_first(bs->options); entry;
3897 entry = qdict_next(bs->options, entry))
3898 {
Kevin Wolf260fecf2015-04-27 13:46:22 +02003899 /* Exclude options for children */
3900 QLIST_FOREACH(child, &bs->children, next) {
3901 if (strstart(qdict_entry_key(entry), child->name, &p)
3902 && (!*p || *p == '.'))
3903 {
3904 break;
3905 }
3906 }
3907 if (child) {
Kevin Wolf9e700c12015-04-24 15:20:28 +02003908 continue;
Max Reitz91af7012014-07-18 20:24:56 +02003909 }
Kevin Wolf9e700c12015-04-24 15:20:28 +02003910
3911 /* And exclude all non-driver-specific options */
3912 for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3913 if (!strcmp(qdict_entry_key(entry), desc->name)) {
3914 break;
3915 }
3916 }
3917 if (desc->name) {
3918 continue;
3919 }
3920
3921 qobject_incref(qdict_entry_value(entry));
3922 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3923 found_any = true;
Max Reitz91af7012014-07-18 20:24:56 +02003924 }
3925
3926 return found_any;
3927}
3928
3929/* Updates the following BDS fields:
3930 * - exact_filename: A filename which may be used for opening a block device
3931 * which (mostly) equals the given BDS (even without any
3932 * other options; so reading and writing must return the same
3933 * results, but caching etc. may be different)
3934 * - full_open_options: Options which, when given when opening a block device
3935 * (without a filename), result in a BDS (mostly)
3936 * equalling the given one
3937 * - filename: If exact_filename is set, it is copied here. Otherwise,
3938 * full_open_options is converted to a JSON object, prefixed with
3939 * "json:" (for use through the JSON pseudo protocol) and put here.
3940 */
3941void bdrv_refresh_filename(BlockDriverState *bs)
3942{
3943 BlockDriver *drv = bs->drv;
3944 QDict *opts;
3945
3946 if (!drv) {
3947 return;
3948 }
3949
3950 /* This BDS's file name will most probably depend on its file's name, so
3951 * refresh that first */
3952 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003953 bdrv_refresh_filename(bs->file->bs);
Max Reitz91af7012014-07-18 20:24:56 +02003954 }
3955
3956 if (drv->bdrv_refresh_filename) {
3957 /* Obsolete information is of no use here, so drop the old file name
3958 * information before refreshing it */
3959 bs->exact_filename[0] = '\0';
3960 if (bs->full_open_options) {
3961 QDECREF(bs->full_open_options);
3962 bs->full_open_options = NULL;
3963 }
3964
Kevin Wolf4cdd01d2015-04-27 13:50:54 +02003965 opts = qdict_new();
3966 append_open_options(opts, bs);
3967 drv->bdrv_refresh_filename(bs, opts);
3968 QDECREF(opts);
Max Reitz91af7012014-07-18 20:24:56 +02003969 } else if (bs->file) {
3970 /* Try to reconstruct valid information from the underlying file */
3971 bool has_open_options;
3972
3973 bs->exact_filename[0] = '\0';
3974 if (bs->full_open_options) {
3975 QDECREF(bs->full_open_options);
3976 bs->full_open_options = NULL;
3977 }
3978
3979 opts = qdict_new();
3980 has_open_options = append_open_options(opts, bs);
3981
3982 /* If no specific options have been given for this BDS, the filename of
3983 * the underlying file should suffice for this one as well */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003984 if (bs->file->bs->exact_filename[0] && !has_open_options) {
3985 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
Max Reitz91af7012014-07-18 20:24:56 +02003986 }
3987 /* Reconstructing the full options QDict is simple for most format block
3988 * drivers, as long as the full options are known for the underlying
3989 * file BDS. The full options QDict of that file BDS should somehow
3990 * contain a representation of the filename, therefore the following
3991 * suffices without querying the (exact_)filename of this BDS. */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003992 if (bs->file->bs->full_open_options) {
Max Reitz91af7012014-07-18 20:24:56 +02003993 qdict_put_obj(opts, "driver",
3994 QOBJECT(qstring_from_str(drv->format_name)));
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003995 QINCREF(bs->file->bs->full_open_options);
3996 qdict_put_obj(opts, "file",
3997 QOBJECT(bs->file->bs->full_open_options));
Max Reitz91af7012014-07-18 20:24:56 +02003998
3999 bs->full_open_options = opts;
4000 } else {
4001 QDECREF(opts);
4002 }
4003 } else if (!bs->full_open_options && qdict_size(bs->options)) {
4004 /* There is no underlying file BDS (at least referenced by BDS.file),
4005 * so the full options QDict should be equal to the options given
4006 * specifically for this block device when it was opened (plus the
4007 * driver specification).
4008 * Because those options don't change, there is no need to update
4009 * full_open_options when it's already set. */
4010
4011 opts = qdict_new();
4012 append_open_options(opts, bs);
4013 qdict_put_obj(opts, "driver",
4014 QOBJECT(qstring_from_str(drv->format_name)));
4015
4016 if (bs->exact_filename[0]) {
4017 /* This may not work for all block protocol drivers (some may
4018 * require this filename to be parsed), but we have to find some
4019 * default solution here, so just include it. If some block driver
4020 * does not support pure options without any filename at all or
4021 * needs some special format of the options QDict, it needs to
4022 * implement the driver-specific bdrv_refresh_filename() function.
4023 */
4024 qdict_put_obj(opts, "filename",
4025 QOBJECT(qstring_from_str(bs->exact_filename)));
4026 }
4027
4028 bs->full_open_options = opts;
4029 }
4030
4031 if (bs->exact_filename[0]) {
4032 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4033 } else if (bs->full_open_options) {
4034 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4035 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4036 qstring_get_str(json));
4037 QDECREF(json);
4038 }
4039}