blob: f85c5a2c9b3a398731ed7564ebc7bf05aa1c51bd [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"
Veronia Bahaaf348b6d2016-03-20 19:16:19 +020041#include "qemu/cutils.h"
42#include "qemu/id.h"
bellardfc01f7e2003-06-30 10:03:06 +000043
Juan Quintela71e72a12009-07-27 16:12:56 +020044#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000045#include <sys/ioctl.h>
Blue Swirl72cf2d42009-09-12 07:36:22 +000046#include <sys/queue.h>
blueswir1c5e97232009-03-07 20:06:23 +000047#ifndef __DragonFly__
bellard7674e7b2005-04-26 21:59:26 +000048#include <sys/disk.h>
49#endif
blueswir1c5e97232009-03-07 20:06:23 +000050#endif
bellard7674e7b2005-04-26 21:59:26 +000051
aliguori49dc7682009-03-08 16:26:59 +000052#ifdef _WIN32
53#include <windows.h>
54#endif
55
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010056#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
57
Benoît Canetdc364f42014-01-23 21:31:32 +010058static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
59 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
60
Max Reitz2c1d04e2016-01-29 16:36:11 +010061static QTAILQ_HEAD(, BlockDriverState) all_bdrv_states =
62 QTAILQ_HEAD_INITIALIZER(all_bdrv_states);
63
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010064static QLIST_HEAD(, BlockDriver) bdrv_drivers =
65 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000066
Kevin Wolff3930ed2015-04-08 13:43:47 +020067static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
68 const char *reference, QDict *options, int flags,
69 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +020070 const BdrvChildRole *child_role, Error **errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +020071
Markus Armbrustereb852012009-10-27 18:41:44 +010072/* If non-zero, use only whitelisted block drivers */
73static int use_bdrv_whitelist;
74
Max Reitz64dff522016-01-29 16:36:10 +010075static void bdrv_close(BlockDriverState *bs);
76
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000077#ifdef _WIN32
78static int is_windows_drive_prefix(const char *filename)
79{
80 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
81 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
82 filename[1] == ':');
83}
84
85int is_windows_drive(const char *filename)
86{
87 if (is_windows_drive_prefix(filename) &&
88 filename[2] == '\0')
89 return 1;
90 if (strstart(filename, "\\\\.\\", NULL) ||
91 strstart(filename, "//./", NULL))
92 return 1;
93 return 0;
94}
95#endif
96
Kevin Wolf339064d2013-11-28 10:23:32 +010097size_t bdrv_opt_mem_align(BlockDriverState *bs)
98{
99 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300100 /* page size or 4k (hdd sector size) should be on the safe side */
101 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100102 }
103
104 return bs->bl.opt_mem_alignment;
105}
106
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300107size_t bdrv_min_mem_align(BlockDriverState *bs)
108{
109 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300110 /* page size or 4k (hdd sector size) should be on the safe side */
111 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300112 }
113
114 return bs->bl.min_mem_alignment;
115}
116
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000117/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100118int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000119{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200120 const char *p;
121
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000122#ifdef _WIN32
123 if (is_windows_drive(path) ||
124 is_windows_drive_prefix(path)) {
125 return 0;
126 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200127 p = path + strcspn(path, ":/\\");
128#else
129 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000130#endif
131
Paolo Bonzini947995c2012-05-08 16:51:48 +0200132 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000133}
134
bellard83f64092006-08-01 16:21:11 +0000135int path_is_absolute(const char *path)
136{
bellard21664422007-01-07 18:22:37 +0000137#ifdef _WIN32
138 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200139 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000140 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200141 }
142 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000143#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200144 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000145#endif
bellard83f64092006-08-01 16:21:11 +0000146}
147
148/* if filename is absolute, just copy it to dest. Otherwise, build a
149 path to it by considering it is relative to base_path. URL are
150 supported. */
151void path_combine(char *dest, int dest_size,
152 const char *base_path,
153 const char *filename)
154{
155 const char *p, *p1;
156 int len;
157
158 if (dest_size <= 0)
159 return;
160 if (path_is_absolute(filename)) {
161 pstrcpy(dest, dest_size, filename);
162 } else {
163 p = strchr(base_path, ':');
164 if (p)
165 p++;
166 else
167 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000168 p1 = strrchr(base_path, '/');
169#ifdef _WIN32
170 {
171 const char *p2;
172 p2 = strrchr(base_path, '\\');
173 if (!p1 || p2 > p1)
174 p1 = p2;
175 }
176#endif
bellard83f64092006-08-01 16:21:11 +0000177 if (p1)
178 p1++;
179 else
180 p1 = base_path;
181 if (p1 > p)
182 p = p1;
183 len = p - base_path;
184 if (len > dest_size - 1)
185 len = dest_size - 1;
186 memcpy(dest, base_path, len);
187 dest[len] = '\0';
188 pstrcat(dest, dest_size, filename);
189 }
190}
191
Max Reitz0a828552014-11-26 17:20:25 +0100192void bdrv_get_full_backing_filename_from_filename(const char *backed,
193 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100194 char *dest, size_t sz,
195 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100196{
Max Reitz9f074292014-11-26 17:20:26 +0100197 if (backing[0] == '\0' || path_has_protocol(backing) ||
198 path_is_absolute(backing))
199 {
Max Reitz0a828552014-11-26 17:20:25 +0100200 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100201 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
202 error_setg(errp, "Cannot use relative backing file names for '%s'",
203 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100204 } else {
205 path_combine(dest, sz, backed, backing);
206 }
207}
208
Max Reitz9f074292014-11-26 17:20:26 +0100209void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
210 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200211{
Max Reitz9f074292014-11-26 17:20:26 +0100212 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
213
214 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
215 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200216}
217
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100218void bdrv_register(BlockDriver *bdrv)
219{
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100220 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000221}
bellardb3380822004-03-14 21:38:54 +0000222
Markus Armbruster7f06d472014-10-07 13:59:12 +0200223BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000224{
Max Reitz9aaf28c2016-03-16 19:54:45 +0100225 return bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200226}
227
228BlockDriverState *bdrv_new(void)
229{
230 BlockDriverState *bs;
231 int i;
232
Markus Armbruster5839e532014-08-19 10:31:08 +0200233 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800234 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800235 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
236 QLIST_INIT(&bs->op_blockers[i]);
237 }
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200238 notifier_with_return_list_init(&bs->before_write_notifiers);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800239 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200240 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200241
Max Reitz2c1d04e2016-01-29 16:36:11 +0100242 QTAILQ_INSERT_TAIL(&all_bdrv_states, bs, bs_list);
243
bellardb3380822004-03-14 21:38:54 +0000244 return bs;
245}
246
bellardea2384d2004-08-01 21:59:26 +0000247BlockDriver *bdrv_find_format(const char *format_name)
248{
249 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100250 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
251 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000252 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100253 }
bellardea2384d2004-08-01 21:59:26 +0000254 }
255 return NULL;
256}
257
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800258static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100259{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800260 static const char *whitelist_rw[] = {
261 CONFIG_BDRV_RW_WHITELIST
262 };
263 static const char *whitelist_ro[] = {
264 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100265 };
266 const char **p;
267
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800268 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100269 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800270 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100271
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800272 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100273 if (!strcmp(drv->format_name, *p)) {
274 return 1;
275 }
276 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800277 if (read_only) {
278 for (p = whitelist_ro; *p; p++) {
279 if (!strcmp(drv->format_name, *p)) {
280 return 1;
281 }
282 }
283 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100284 return 0;
285}
286
Daniel P. Berrangee6ff69b2016-03-21 14:11:48 +0000287bool bdrv_uses_whitelist(void)
288{
289 return use_bdrv_whitelist;
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 */
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100643int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough)
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100644{
645 *flags &= ~BDRV_O_CACHE_MASK;
646
647 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100648 *writethrough = false;
649 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100650 } else if (!strcmp(mode, "directsync")) {
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100651 *writethrough = true;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100652 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100653 } else if (!strcmp(mode, "writeback")) {
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100654 *writethrough = false;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100655 } else if (!strcmp(mode, "unsafe")) {
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100656 *writethrough = false;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100657 *flags |= BDRV_O_NO_FLUSH;
658 } else if (!strcmp(mode, "writethrough")) {
Kevin Wolf53e8ae02016-03-18 15:36:58 +0100659 *writethrough = true;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100660 } else {
661 return -1;
662 }
663
664 return 0;
665}
666
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200667/*
Kevin Wolf73176be2016-03-07 13:02:15 +0100668 * Returns the options and flags that a temporary snapshot should get, based on
669 * the originally requested flags (the originally requested image will have
670 * flags like a backing file)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200671 */
Kevin Wolf73176be2016-03-07 13:02:15 +0100672static void bdrv_temp_snapshot_options(int *child_flags, QDict *child_options,
673 int parent_flags, QDict *parent_options)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200674{
Kevin Wolf73176be2016-03-07 13:02:15 +0100675 *child_flags = (parent_flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
676
677 /* For temporary files, unconditional cache=unsafe is fine */
Kevin Wolf73176be2016-03-07 13:02:15 +0100678 qdict_set_default_str(child_options, BDRV_OPT_CACHE_DIRECT, "off");
679 qdict_set_default_str(child_options, BDRV_OPT_CACHE_NO_FLUSH, "on");
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200680}
681
682/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200683 * Returns the options and flags that bs->file should get if a protocol driver
684 * is expected, based on the given options and flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200685 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200686static void bdrv_inherited_options(int *child_flags, QDict *child_options,
687 int parent_flags, QDict *parent_options)
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200688{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200689 int flags = parent_flags;
690
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200691 /* Enable protocol handling, disable format probing for bs->file */
692 flags |= BDRV_O_PROTOCOL;
693
Kevin Wolf91a097e2015-05-08 17:49:53 +0200694 /* If the cache mode isn't explicitly set, inherit direct and no-flush from
695 * the parent. */
696 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
697 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
698
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200699 /* Our block drivers take care to send flushes and respect unmap policy,
Kevin Wolf91a097e2015-05-08 17:49:53 +0200700 * so we can default to enable both on lower layers regardless of the
701 * corresponding parent options. */
Kevin Wolf91a097e2015-05-08 17:49:53 +0200702 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 */
Daniel P. Berrangeabb06c52016-03-21 14:11:42 +0000705 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ |
706 BDRV_O_NO_IO);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200707
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200708 *child_flags = flags;
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200709}
710
Kevin Wolff3930ed2015-04-08 13:43:47 +0200711const BdrvChildRole child_file = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200712 .inherit_options = bdrv_inherited_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200713};
714
715/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200716 * Returns the options and flags that bs->file should get if the use of formats
717 * (and not only protocols) is permitted for it, based on the given options and
718 * flags for the parent BDS
Kevin Wolff3930ed2015-04-08 13:43:47 +0200719 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200720static void bdrv_inherited_fmt_options(int *child_flags, QDict *child_options,
721 int parent_flags, QDict *parent_options)
Kevin Wolff3930ed2015-04-08 13:43:47 +0200722{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200723 child_file.inherit_options(child_flags, child_options,
724 parent_flags, parent_options);
725
Daniel P. Berrangeabb06c52016-03-21 14:11:42 +0000726 *child_flags &= ~(BDRV_O_PROTOCOL | BDRV_O_NO_IO);
Kevin Wolff3930ed2015-04-08 13:43:47 +0200727}
728
729const BdrvChildRole child_format = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200730 .inherit_options = bdrv_inherited_fmt_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200731};
732
Kevin Wolf317fc442014-04-25 13:27:34 +0200733/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200734 * Returns the options and flags that bs->backing should get, based on the
735 * given options and flags for the parent BDS
Kevin Wolf317fc442014-04-25 13:27:34 +0200736 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200737static void bdrv_backing_options(int *child_flags, QDict *child_options,
738 int parent_flags, QDict *parent_options)
Kevin Wolf317fc442014-04-25 13:27:34 +0200739{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200740 int flags = parent_flags;
741
Kevin Wolfb8816a42016-03-04 14:52:32 +0100742 /* The cache mode is inherited unmodified for backing files; except WCE,
743 * which is only applied on the top level (BlockBackend) */
Kevin Wolf91a097e2015-05-08 17:49:53 +0200744 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
745 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
746
Kevin Wolf317fc442014-04-25 13:27:34 +0200747 /* backing files always opened read-only */
748 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
749
750 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200751 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200752
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200753 *child_flags = flags;
Kevin Wolf317fc442014-04-25 13:27:34 +0200754}
755
Kevin Wolff3930ed2015-04-08 13:43:47 +0200756static const BdrvChildRole child_backing = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200757 .inherit_options = bdrv_backing_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200758};
759
Kevin Wolf7b272452012-11-12 17:05:39 +0100760static int bdrv_open_flags(BlockDriverState *bs, int flags)
761{
Kevin Wolf61de4c62016-03-18 17:46:45 +0100762 int open_flags = flags;
Kevin Wolf7b272452012-11-12 17:05:39 +0100763
764 /*
765 * Clear flags that are internal to the block layer before opening the
766 * image.
767 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200768 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100769
770 /*
771 * Snapshots should be writable.
772 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200773 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100774 open_flags |= BDRV_O_RDWR;
775 }
776
777 return open_flags;
778}
779
Kevin Wolf91a097e2015-05-08 17:49:53 +0200780static void update_flags_from_options(int *flags, QemuOpts *opts)
781{
782 *flags &= ~BDRV_O_CACHE_MASK;
783
Kevin Wolf91a097e2015-05-08 17:49:53 +0200784 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_NO_FLUSH));
785 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
786 *flags |= BDRV_O_NO_FLUSH;
787 }
788
789 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_DIRECT));
790 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
791 *flags |= BDRV_O_NOCACHE;
792 }
793}
794
795static void update_options_from_flags(QDict *options, int flags)
796{
Kevin Wolf91a097e2015-05-08 17:49:53 +0200797 if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
798 qdict_put(options, BDRV_OPT_CACHE_DIRECT,
799 qbool_from_bool(flags & BDRV_O_NOCACHE));
800 }
801 if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
802 qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
803 qbool_from_bool(flags & BDRV_O_NO_FLUSH));
804 }
805}
806
Kevin Wolf636ea372014-01-24 14:11:52 +0100807static void bdrv_assign_node_name(BlockDriverState *bs,
808 const char *node_name,
809 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100810{
Jeff Cody15489c72015-10-12 19:36:50 -0400811 char *gen_node_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100812
Jeff Cody15489c72015-10-12 19:36:50 -0400813 if (!node_name) {
814 node_name = gen_node_name = id_generate(ID_BLOCK);
815 } else if (!id_wellformed(node_name)) {
816 /*
817 * Check for empty string or invalid characters, but not if it is
818 * generated (generated names use characters not available to the user)
819 */
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200820 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100821 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100822 }
823
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100824 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200825 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100826 error_setg(errp, "node-name=%s is conflicting with a device id",
827 node_name);
Jeff Cody15489c72015-10-12 19:36:50 -0400828 goto out;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100829 }
830
Benoît Canet6913c0c2014-01-23 21:31:33 +0100831 /* takes care of avoiding duplicates node names */
832 if (bdrv_find_node(node_name)) {
833 error_setg(errp, "Duplicate node name");
Jeff Cody15489c72015-10-12 19:36:50 -0400834 goto out;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100835 }
836
837 /* copy node name into the bs and insert it into the graph list */
838 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
839 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Jeff Cody15489c72015-10-12 19:36:50 -0400840out:
841 g_free(gen_node_name);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100842}
843
Kevin Wolf18edf282015-04-07 17:12:56 +0200844static QemuOptsList bdrv_runtime_opts = {
845 .name = "bdrv_common",
846 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
847 .desc = {
848 {
849 .name = "node-name",
850 .type = QEMU_OPT_STRING,
851 .help = "Node name of the block device node",
852 },
Kevin Wolf62392eb2015-04-24 16:38:02 +0200853 {
854 .name = "driver",
855 .type = QEMU_OPT_STRING,
856 .help = "Block driver to use for the node",
857 },
Kevin Wolf91a097e2015-05-08 17:49:53 +0200858 {
Kevin Wolf91a097e2015-05-08 17:49:53 +0200859 .name = BDRV_OPT_CACHE_DIRECT,
860 .type = QEMU_OPT_BOOL,
861 .help = "Bypass software writeback cache on the host",
862 },
863 {
864 .name = BDRV_OPT_CACHE_NO_FLUSH,
865 .type = QEMU_OPT_BOOL,
866 .help = "Ignore flush requests",
867 },
Kevin Wolf18edf282015-04-07 17:12:56 +0200868 { /* end of list */ }
869 },
870};
871
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200872/*
Kevin Wolf57915332010-04-14 15:24:50 +0200873 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100874 *
875 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200876 */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200877static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file,
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100878 QDict *options, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200879{
880 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200881 const char *filename;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200882 const char *driver_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100883 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200884 QemuOpts *opts;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200885 BlockDriver *drv;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200886 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200887
Paolo Bonzini64058752012-05-08 16:51:49 +0200888 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100889 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200890
Kevin Wolf62392eb2015-04-24 16:38:02 +0200891 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
892 qemu_opts_absorb_qdict(opts, options, &local_err);
893 if (local_err) {
894 error_propagate(errp, local_err);
895 ret = -EINVAL;
896 goto fail_opts;
897 }
898
899 driver_name = qemu_opt_get(opts, "driver");
900 drv = bdrv_find_format(driver_name);
901 assert(drv != NULL);
902
Kevin Wolf45673672013-04-22 17:48:40 +0200903 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200904 filename = file->bs->filename;
Kevin Wolf45673672013-04-22 17:48:40 +0200905 } else {
906 filename = qdict_get_try_str(options, "filename");
907 }
908
Kevin Wolf765003d2014-02-03 14:49:42 +0100909 if (drv->bdrv_needs_filename && !filename) {
910 error_setg(errp, "The '%s' block driver requires a file name",
911 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200912 ret = -EINVAL;
913 goto fail_opts;
914 }
915
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100916 trace_bdrv_open_common(bs, filename ?: "", bs->open_flags,
917 drv->format_name);
Kevin Wolf62392eb2015-04-24 16:38:02 +0200918
Kevin Wolf18edf282015-04-07 17:12:56 +0200919 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100920 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200921 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100922 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200923 ret = -EINVAL;
924 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100925 }
926
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100927 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800928 bs->zero_beyond_eof = true;
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100929 bs->read_only = !(bs->open_flags & BDRV_O_RDWR);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800930
931 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200932 error_setg(errp,
933 !bs->read_only && bdrv_is_whitelisted(drv, true)
934 ? "Driver '%s' can only be used for read-only devices"
935 : "Driver '%s' is not whitelisted",
936 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200937 ret = -ENOTSUP;
938 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800939 }
Kevin Wolf57915332010-04-14 15:24:50 +0200940
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000941 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100942 if (bs->open_flags & BDRV_O_COPY_ON_READ) {
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200943 if (!bs->read_only) {
944 bdrv_enable_copy_on_read(bs);
945 } else {
946 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200947 ret = -EINVAL;
948 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200949 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000950 }
951
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100952 if (filename != NULL) {
953 pstrcpy(bs->filename, sizeof(bs->filename), filename);
954 } else {
955 bs->filename[0] = '\0';
956 }
Max Reitz91af7012014-07-18 20:24:56 +0200957 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200958
Kevin Wolf57915332010-04-14 15:24:50 +0200959 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500960 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200961
Kevin Wolf91a097e2015-05-08 17:49:53 +0200962 /* Apply cache mode options */
963 update_flags_from_options(&bs->open_flags, opts);
Kevin Wolf73ac4512016-03-14 15:46:03 +0100964
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200965 /* Open the image, either directly or using a protocol */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100966 open_flags = bdrv_open_flags(bs, bs->open_flags);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200967 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100968 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200969 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200970 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100971 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200972 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200973 error_setg(errp, "Can't use '%s' as a block driver for the "
974 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +0200975 ret = -EINVAL;
976 goto free_and_fail;
977 }
Kevin Wolff500a6d2012-11-12 17:35:27 +0100978 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200979 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200980 }
981
Kevin Wolf57915332010-04-14 15:24:50 +0200982 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100983 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200984 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +0800985 } else if (bs->filename[0]) {
986 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200987 } else {
988 error_setg_errno(errp, -ret, "Could not open image");
989 }
Kevin Wolf57915332010-04-14 15:24:50 +0200990 goto free_and_fail;
991 }
992
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100993 ret = refresh_total_sectors(bs, bs->total_sectors);
994 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200995 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100996 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +0200997 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100998
Kevin Wolf3baca892014-07-16 17:48:16 +0200999 bdrv_refresh_limits(bs, &local_err);
1000 if (local_err) {
1001 error_propagate(errp, local_err);
1002 ret = -EINVAL;
1003 goto free_and_fail;
1004 }
1005
Paolo Bonzinic25f53b2011-11-29 12:42:20 +01001006 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +03001007 assert(bdrv_min_mem_align(bs) != 0);
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +03001008 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
Kevin Wolf18edf282015-04-07 17:12:56 +02001009
1010 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001011 return 0;
1012
1013free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001014 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -05001015 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +02001016 bs->opaque = NULL;
1017 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +02001018fail_opts:
1019 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001020 return ret;
1021}
1022
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001023static QDict *parse_json_filename(const char *filename, Error **errp)
1024{
1025 QObject *options_obj;
1026 QDict *options;
1027 int ret;
1028
1029 ret = strstart(filename, "json:", &filename);
1030 assert(ret);
1031
1032 options_obj = qobject_from_json(filename);
1033 if (!options_obj) {
1034 error_setg(errp, "Could not parse the JSON options");
1035 return NULL;
1036 }
1037
1038 if (qobject_type(options_obj) != QTYPE_QDICT) {
1039 qobject_decref(options_obj);
1040 error_setg(errp, "Invalid JSON object given");
1041 return NULL;
1042 }
1043
1044 options = qobject_to_qdict(options_obj);
1045 qdict_flatten(options);
1046
1047 return options;
1048}
1049
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001050static void parse_json_protocol(QDict *options, const char **pfilename,
1051 Error **errp)
1052{
1053 QDict *json_options;
1054 Error *local_err = NULL;
1055
1056 /* Parse json: pseudo-protocol */
1057 if (!*pfilename || !g_str_has_prefix(*pfilename, "json:")) {
1058 return;
1059 }
1060
1061 json_options = parse_json_filename(*pfilename, &local_err);
1062 if (local_err) {
1063 error_propagate(errp, local_err);
1064 return;
1065 }
1066
1067 /* Options given in the filename have lower priority than options
1068 * specified directly */
1069 qdict_join(options, json_options, false);
1070 QDECREF(json_options);
1071 *pfilename = NULL;
1072}
1073
Kevin Wolf57915332010-04-14 15:24:50 +02001074/*
Kevin Wolff54120f2014-05-26 11:09:59 +02001075 * Fills in default options for opening images and converts the legacy
1076 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -04001077 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
1078 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +02001079 */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001080static int bdrv_fill_options(QDict **options, const char *filename,
Max Reitz053e1572015-08-26 19:47:51 +02001081 int *flags, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001082{
1083 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001084 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001085 bool parse_filename = false;
Max Reitz053e1572015-08-26 19:47:51 +02001086 BlockDriver *drv = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001087 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001088
Max Reitz53a29512015-03-19 14:53:16 -04001089 drvname = qdict_get_try_str(*options, "driver");
Max Reitz053e1572015-08-26 19:47:51 +02001090 if (drvname) {
1091 drv = bdrv_find_format(drvname);
1092 if (!drv) {
1093 error_setg(errp, "Unknown driver '%s'", drvname);
1094 return -ENOENT;
1095 }
1096 /* If the user has explicitly specified the driver, this choice should
1097 * override the BDRV_O_PROTOCOL flag */
1098 protocol = drv->bdrv_file_open;
Max Reitz53a29512015-03-19 14:53:16 -04001099 }
1100
1101 if (protocol) {
1102 *flags |= BDRV_O_PROTOCOL;
1103 } else {
1104 *flags &= ~BDRV_O_PROTOCOL;
1105 }
1106
Kevin Wolf91a097e2015-05-08 17:49:53 +02001107 /* Translate cache options from flags into options */
1108 update_options_from_flags(*options, *flags);
1109
Kevin Wolff54120f2014-05-26 11:09:59 +02001110 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001111 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001112 if (!qdict_haskey(*options, "filename")) {
1113 qdict_put(*options, "filename", qstring_from_str(filename));
1114 parse_filename = true;
1115 } else {
1116 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1117 "the same time");
1118 return -EINVAL;
1119 }
1120 }
1121
1122 /* Find the right block driver */
1123 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001124
Max Reitz053e1572015-08-26 19:47:51 +02001125 if (!drvname && protocol) {
1126 if (filename) {
1127 drv = bdrv_find_protocol(filename, parse_filename, errp);
1128 if (!drv) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001129 return -EINVAL;
1130 }
Max Reitz053e1572015-08-26 19:47:51 +02001131
1132 drvname = drv->format_name;
1133 qdict_put(*options, "driver", qstring_from_str(drvname));
1134 } else {
1135 error_setg(errp, "Must specify either driver or file");
1136 return -EINVAL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001137 }
1138 }
1139
Kevin Wolf17b005f2014-05-27 10:50:29 +02001140 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001141
1142 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001143 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001144 drv->bdrv_parse_filename(filename, *options, &local_err);
1145 if (local_err) {
1146 error_propagate(errp, local_err);
1147 return -EINVAL;
1148 }
1149
1150 if (!drv->bdrv_needs_filename) {
1151 qdict_del(*options, "filename");
1152 }
1153 }
1154
1155 return 0;
1156}
1157
Kevin Wolff21d96d2016-03-08 13:47:46 +01001158BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
1159 const char *child_name,
1160 const BdrvChildRole *child_role)
Kevin Wolfdf581792015-06-15 11:53:47 +02001161{
1162 BdrvChild *child = g_new(BdrvChild, 1);
1163 *child = (BdrvChild) {
1164 .bs = child_bs,
Kevin Wolf260fecf2015-04-27 13:46:22 +02001165 .name = g_strdup(child_name),
Kevin Wolfdf581792015-06-15 11:53:47 +02001166 .role = child_role,
1167 };
1168
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001169 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001170
1171 return child;
Kevin Wolfdf581792015-06-15 11:53:47 +02001172}
1173
Wen Congyang98292c62016-05-10 15:36:38 +08001174BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1175 BlockDriverState *child_bs,
1176 const char *child_name,
1177 const BdrvChildRole *child_role)
Kevin Wolff21d96d2016-03-08 13:47:46 +01001178{
1179 BdrvChild *child = bdrv_root_attach_child(child_bs, child_name, child_role);
1180 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1181 return child;
1182}
1183
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02001184static void bdrv_detach_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001185{
Kevin Wolff21d96d2016-03-08 13:47:46 +01001186 if (child->next.le_prev) {
1187 QLIST_REMOVE(child, next);
1188 child->next.le_prev = NULL;
1189 }
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001190 QLIST_REMOVE(child, next_parent);
Kevin Wolf260fecf2015-04-27 13:46:22 +02001191 g_free(child->name);
Kevin Wolf33a60402015-06-15 13:51:04 +02001192 g_free(child);
1193}
1194
Kevin Wolff21d96d2016-03-08 13:47:46 +01001195void bdrv_root_unref_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001196{
Kevin Wolf779020c2015-10-13 14:09:44 +02001197 BlockDriverState *child_bs;
1198
Kevin Wolff21d96d2016-03-08 13:47:46 +01001199 child_bs = child->bs;
1200 bdrv_detach_child(child);
1201 bdrv_unref(child_bs);
1202}
1203
1204void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1205{
Kevin Wolf779020c2015-10-13 14:09:44 +02001206 if (child == NULL) {
1207 return;
1208 }
Kevin Wolf33a60402015-06-15 13:51:04 +02001209
1210 if (child->bs->inherits_from == parent) {
1211 child->bs->inherits_from = NULL;
1212 }
1213
Kevin Wolff21d96d2016-03-08 13:47:46 +01001214 bdrv_root_unref_child(child);
Kevin Wolf33a60402015-06-15 13:51:04 +02001215}
1216
Kevin Wolf5c8cab42016-02-24 15:13:35 +01001217
1218static void bdrv_parent_cb_change_media(BlockDriverState *bs, bool load)
1219{
1220 BdrvChild *c;
1221 QLIST_FOREACH(c, &bs->parents, next_parent) {
1222 if (c->role->change_media) {
1223 c->role->change_media(c, load);
1224 }
1225 }
1226}
1227
1228static void bdrv_parent_cb_resize(BlockDriverState *bs)
1229{
1230 BdrvChild *c;
1231 QLIST_FOREACH(c, &bs->parents, next_parent) {
1232 if (c->role->resize) {
1233 c->role->resize(c);
1234 }
1235 }
1236}
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
Max Reitz506f8702016-05-17 16:41:26 +02001473 bs_snapshot = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001474 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001475 flags, &local_err);
Kevin Wolf73176be2016-03-07 13:02:15 +01001476 snapshot_options = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001477 if (ret < 0) {
1478 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001479 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001480 }
1481
1482 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001483
1484out:
Kevin Wolf73176be2016-03-07 13:02:15 +01001485 QDECREF(snapshot_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001486 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001487 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001488}
1489
Max Reitzda557aa2013-12-20 19:28:11 +01001490/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001491 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001492 *
1493 * options is a QDict of options to pass to the block drivers, or NULL for an
1494 * empty set of options. The reference to the QDict belongs to the block layer
1495 * after the call (even on failure), so if the caller intends to reuse the
1496 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001497 *
1498 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1499 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001500 *
1501 * The reference parameter may be used to specify an existing block device which
1502 * should be opened. If specified, neither options nor a filename may be given,
1503 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001504 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001505static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1506 const char *reference, QDict *options, int flags,
1507 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +02001508 const BdrvChildRole *child_role, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001509{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001510 int ret;
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001511 BdrvChild *file = NULL;
1512 BlockDriverState *bs;
Max Reitzce343772015-08-26 19:47:50 +02001513 BlockDriver *drv = NULL;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001514 const char *drvname;
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001515 const char *backing;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001516 Error *local_err = NULL;
Kevin Wolf73176be2016-03-07 13:02:15 +01001517 QDict *snapshot_options = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001518 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001519
Max Reitzf67503e2014-02-18 18:33:05 +01001520 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001521 assert(!child_role || !flags);
1522 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001523
Max Reitzddf56362014-02-18 18:33:06 +01001524 if (reference) {
1525 bool options_non_empty = options ? qdict_size(options) : false;
1526 QDECREF(options);
1527
1528 if (*pbs) {
1529 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1530 "another block device");
1531 return -EINVAL;
1532 }
1533
1534 if (filename || options_non_empty) {
1535 error_setg(errp, "Cannot reference an existing block device with "
1536 "additional options or a new filename");
1537 return -EINVAL;
1538 }
1539
1540 bs = bdrv_lookup_bs(reference, reference, errp);
1541 if (!bs) {
1542 return -ENODEV;
1543 }
Kevin Wolf76b22322016-04-04 17:11:13 +02001544
Max Reitzddf56362014-02-18 18:33:06 +01001545 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)) {
Kevin Wolf5c8cab42016-02-24 15:13:35 +01001696 bdrv_parent_cb_change_media(bs, true);
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001697 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1698 && !runstate_check(RUN_STATE_INMIGRATE)
1699 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1700 error_setg(errp,
1701 "Guest must be stopped for opening of encrypted image");
1702 ret = -EBUSY;
1703 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001704 }
1705
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001706 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001707 *pbs = bs;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001708
1709 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1710 * temporary snapshot afterwards. */
1711 if (snapshot_flags) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001712 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, snapshot_options,
1713 &local_err);
1714 snapshot_options = NULL;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001715 if (local_err) {
1716 goto close_and_fail;
1717 }
1718 }
1719
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001720 return 0;
1721
Kevin Wolf8bfea152014-04-11 19:16:36 +02001722fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001723 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001724 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001725 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001726 QDECREF(snapshot_options);
Kevin Wolf145f5982015-05-08 16:15:03 +02001727 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001728 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001729 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001730 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001731 if (!*pbs) {
1732 /* If *pbs is NULL, a new BDS has been created in this function and
1733 needs to be freed now. Otherwise, it does not need to be closed,
1734 since it has not really been opened yet. */
1735 bdrv_unref(bs);
1736 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001737 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001738 error_propagate(errp, local_err);
1739 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001740 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001741
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001742close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001743 /* See fail path, but now the BDS has to be always closed */
1744 if (*pbs) {
1745 bdrv_close(bs);
1746 } else {
1747 bdrv_unref(bs);
1748 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001749 QDECREF(snapshot_options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001750 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001751 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001752 error_propagate(errp, local_err);
1753 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001754 return ret;
1755}
1756
Kevin Wolff3930ed2015-04-08 13:43:47 +02001757int bdrv_open(BlockDriverState **pbs, const char *filename,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001758 const char *reference, QDict *options, int flags, Error **errp)
Kevin Wolff3930ed2015-04-08 13:43:47 +02001759{
1760 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
Max Reitzce343772015-08-26 19:47:50 +02001761 NULL, errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001762}
1763
Jeff Codye971aa12012-09-20 15:13:19 -04001764typedef struct BlockReopenQueueEntry {
1765 bool prepared;
1766 BDRVReopenState state;
1767 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1768} BlockReopenQueueEntry;
1769
1770/*
1771 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1772 * reopen of multiple devices.
1773 *
1774 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1775 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1776 * be created and initialized. This newly created BlockReopenQueue should be
1777 * passed back in for subsequent calls that are intended to be of the same
1778 * atomic 'set'.
1779 *
1780 * bs is the BlockDriverState to add to the reopen queue.
1781 *
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001782 * options contains the changed options for the associated bs
1783 * (the BlockReopenQueue takes ownership)
1784 *
Jeff Codye971aa12012-09-20 15:13:19 -04001785 * flags contains the open flags for the associated bs
1786 *
1787 * returns a pointer to bs_queue, which is either the newly allocated
1788 * bs_queue, or the existing bs_queue being used.
1789 *
1790 */
Kevin Wolf28518102015-05-08 17:07:31 +02001791static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
1792 BlockDriverState *bs,
1793 QDict *options,
1794 int flags,
1795 const BdrvChildRole *role,
1796 QDict *parent_options,
1797 int parent_flags)
Jeff Codye971aa12012-09-20 15:13:19 -04001798{
1799 assert(bs != NULL);
1800
1801 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001802 BdrvChild *child;
Kevin Wolf145f5982015-05-08 16:15:03 +02001803 QDict *old_options, *explicit_options;
Kevin Wolf67251a32015-04-09 18:54:04 +02001804
Jeff Codye971aa12012-09-20 15:13:19 -04001805 if (bs_queue == NULL) {
1806 bs_queue = g_new0(BlockReopenQueue, 1);
1807 QSIMPLEQ_INIT(bs_queue);
1808 }
1809
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001810 if (!options) {
1811 options = qdict_new();
1812 }
1813
Kevin Wolf28518102015-05-08 17:07:31 +02001814 /*
1815 * Precedence of options:
1816 * 1. Explicitly passed in options (highest)
Kevin Wolf91a097e2015-05-08 17:49:53 +02001817 * 2. Set in flags (only for top level)
Kevin Wolf145f5982015-05-08 16:15:03 +02001818 * 3. Retained from explicitly set options of bs
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001819 * 4. Inherited from parent node
Kevin Wolf28518102015-05-08 17:07:31 +02001820 * 5. Retained from effective options of bs
1821 */
1822
Kevin Wolf91a097e2015-05-08 17:49:53 +02001823 if (!parent_options) {
1824 /*
1825 * Any setting represented by flags is always updated. If the
1826 * corresponding QDict option is set, it takes precedence. Otherwise
1827 * the flag is translated into a QDict option. The old setting of bs is
1828 * not considered.
1829 */
1830 update_options_from_flags(options, flags);
1831 }
1832
Kevin Wolf145f5982015-05-08 16:15:03 +02001833 /* Old explicitly set values (don't overwrite by inherited value) */
1834 old_options = qdict_clone_shallow(bs->explicit_options);
1835 bdrv_join_options(bs, options, old_options);
1836 QDECREF(old_options);
1837
1838 explicit_options = qdict_clone_shallow(options);
1839
Kevin Wolf28518102015-05-08 17:07:31 +02001840 /* Inherit from parent node */
1841 if (parent_options) {
1842 assert(!flags);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001843 role->inherit_options(&flags, options, parent_flags, parent_options);
Kevin Wolf28518102015-05-08 17:07:31 +02001844 }
1845
1846 /* Old values are used for options that aren't set yet */
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001847 old_options = qdict_clone_shallow(bs->options);
Kevin Wolfcddff5b2015-11-16 16:43:27 +01001848 bdrv_join_options(bs, options, old_options);
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001849 QDECREF(old_options);
1850
Kevin Wolff1f25a22014-04-25 19:04:55 +02001851 /* bdrv_open() masks this flag out */
1852 flags &= ~BDRV_O_PROTOCOL;
1853
Kevin Wolf67251a32015-04-09 18:54:04 +02001854 QLIST_FOREACH(child, &bs->children, next) {
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001855 QDict *new_child_options;
1856 char *child_key_dot;
Kevin Wolf67251a32015-04-09 18:54:04 +02001857
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001858 /* reopen can only change the options of block devices that were
1859 * implicitly created and inherited options. For other (referenced)
1860 * block devices, a syntax like "backing.foo" results in an error. */
Kevin Wolf67251a32015-04-09 18:54:04 +02001861 if (child->bs->inherits_from != bs) {
1862 continue;
1863 }
1864
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001865 child_key_dot = g_strdup_printf("%s.", child->name);
1866 qdict_extract_subqdict(options, &new_child_options, child_key_dot);
1867 g_free(child_key_dot);
1868
Kevin Wolf28518102015-05-08 17:07:31 +02001869 bdrv_reopen_queue_child(bs_queue, child->bs, new_child_options, 0,
1870 child->role, options, flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001871 }
1872
1873 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1874 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1875
1876 bs_entry->state.bs = bs;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001877 bs_entry->state.options = options;
Kevin Wolf145f5982015-05-08 16:15:03 +02001878 bs_entry->state.explicit_options = explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04001879 bs_entry->state.flags = flags;
1880
1881 return bs_queue;
1882}
1883
Kevin Wolf28518102015-05-08 17:07:31 +02001884BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1885 BlockDriverState *bs,
1886 QDict *options, int flags)
1887{
1888 return bdrv_reopen_queue_child(bs_queue, bs, options, flags,
1889 NULL, NULL, 0);
1890}
1891
Jeff Codye971aa12012-09-20 15:13:19 -04001892/*
1893 * Reopen multiple BlockDriverStates atomically & transactionally.
1894 *
1895 * The queue passed in (bs_queue) must have been built up previous
1896 * via bdrv_reopen_queue().
1897 *
1898 * Reopens all BDS specified in the queue, with the appropriate
1899 * flags. All devices are prepared for reopen, and failure of any
1900 * device will cause all device changes to be abandonded, and intermediate
1901 * data cleaned up.
1902 *
1903 * If all devices prepare successfully, then the changes are committed
1904 * to all devices.
1905 *
1906 */
1907int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1908{
1909 int ret = -1;
1910 BlockReopenQueueEntry *bs_entry, *next;
1911 Error *local_err = NULL;
1912
1913 assert(bs_queue != NULL);
1914
1915 bdrv_drain_all();
1916
1917 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1918 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1919 error_propagate(errp, local_err);
1920 goto cleanup;
1921 }
1922 bs_entry->prepared = true;
1923 }
1924
1925 /* If we reach this point, we have success and just need to apply the
1926 * changes
1927 */
1928 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1929 bdrv_reopen_commit(&bs_entry->state);
1930 }
1931
1932 ret = 0;
1933
1934cleanup:
1935 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1936 if (ret && bs_entry->prepared) {
1937 bdrv_reopen_abort(&bs_entry->state);
Kevin Wolf145f5982015-05-08 16:15:03 +02001938 } else if (ret) {
1939 QDECREF(bs_entry->state.explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04001940 }
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001941 QDECREF(bs_entry->state.options);
Jeff Codye971aa12012-09-20 15:13:19 -04001942 g_free(bs_entry);
1943 }
1944 g_free(bs_queue);
1945 return ret;
1946}
1947
1948
1949/* Reopen a single BlockDriverState with the specified flags. */
1950int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1951{
1952 int ret = -1;
1953 Error *local_err = NULL;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001954 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001955
1956 ret = bdrv_reopen_multiple(queue, &local_err);
1957 if (local_err != NULL) {
1958 error_propagate(errp, local_err);
1959 }
1960 return ret;
1961}
1962
1963
1964/*
1965 * Prepares a BlockDriverState for reopen. All changes are staged in the
1966 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1967 * the block driver layer .bdrv_reopen_prepare()
1968 *
1969 * bs is the BlockDriverState to reopen
1970 * flags are the new open flags
1971 * queue is the reopen queue
1972 *
1973 * Returns 0 on success, non-zero on error. On error errp will be set
1974 * as well.
1975 *
1976 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1977 * It is the responsibility of the caller to then call the abort() or
1978 * commit() for any other BDS that have been left in a prepare() state
1979 *
1980 */
1981int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1982 Error **errp)
1983{
1984 int ret = -1;
1985 Error *local_err = NULL;
1986 BlockDriver *drv;
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001987 QemuOpts *opts;
1988 const char *value;
Jeff Codye971aa12012-09-20 15:13:19 -04001989
1990 assert(reopen_state != NULL);
1991 assert(reopen_state->bs->drv != NULL);
1992 drv = reopen_state->bs->drv;
1993
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001994 /* Process generic block layer options */
1995 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
1996 qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
1997 if (local_err) {
1998 error_propagate(errp, local_err);
1999 ret = -EINVAL;
2000 goto error;
2001 }
2002
Kevin Wolf91a097e2015-05-08 17:49:53 +02002003 update_flags_from_options(&reopen_state->flags, opts);
2004
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002005 /* node-name and driver must be unchanged. Put them back into the QDict, so
2006 * that they are checked at the end of this function. */
2007 value = qemu_opt_get(opts, "node-name");
2008 if (value) {
2009 qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2010 }
2011
2012 value = qemu_opt_get(opts, "driver");
2013 if (value) {
2014 qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2015 }
2016
Jeff Codye971aa12012-09-20 15:13:19 -04002017 /* if we are to stay read-only, do not allow permission change
2018 * to r/w */
2019 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2020 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002021 error_setg(errp, "Node '%s' is read only",
2022 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002023 goto error;
2024 }
2025
2026
2027 ret = bdrv_flush(reopen_state->bs);
2028 if (ret) {
Eric Blake455b0fd2015-11-10 23:51:20 -07002029 error_setg_errno(errp, -ret, "Error flushing drive");
Jeff Codye971aa12012-09-20 15:13:19 -04002030 goto error;
2031 }
2032
2033 if (drv->bdrv_reopen_prepare) {
2034 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2035 if (ret) {
2036 if (local_err != NULL) {
2037 error_propagate(errp, local_err);
2038 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04002039 error_setg(errp, "failed while preparing to reopen image '%s'",
2040 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04002041 }
2042 goto error;
2043 }
2044 } else {
2045 /* It is currently mandatory to have a bdrv_reopen_prepare()
2046 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03002047 error_setg(errp, "Block format '%s' used by node '%s' "
2048 "does not support reopening files", drv->format_name,
2049 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002050 ret = -1;
2051 goto error;
2052 }
2053
Kevin Wolf4d2cb092015-04-10 17:50:50 +02002054 /* Options that are not handled are only okay if they are unchanged
2055 * compared to the old state. It is expected that some options are only
2056 * used for the initial open, but not reopen (e.g. filename) */
2057 if (qdict_size(reopen_state->options)) {
2058 const QDictEntry *entry = qdict_first(reopen_state->options);
2059
2060 do {
2061 QString *new_obj = qobject_to_qstring(entry->value);
2062 const char *new = qstring_get_str(new_obj);
2063 const char *old = qdict_get_try_str(reopen_state->bs->options,
2064 entry->key);
2065
2066 if (!old || strcmp(new, old)) {
2067 error_setg(errp, "Cannot change the option '%s'", entry->key);
2068 ret = -EINVAL;
2069 goto error;
2070 }
2071 } while ((entry = qdict_next(reopen_state->options, entry)));
2072 }
2073
Jeff Codye971aa12012-09-20 15:13:19 -04002074 ret = 0;
2075
2076error:
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002077 qemu_opts_del(opts);
Jeff Codye971aa12012-09-20 15:13:19 -04002078 return ret;
2079}
2080
2081/*
2082 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2083 * makes them final by swapping the staging BlockDriverState contents into
2084 * the active BlockDriverState contents.
2085 */
2086void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2087{
2088 BlockDriver *drv;
2089
2090 assert(reopen_state != NULL);
2091 drv = reopen_state->bs->drv;
2092 assert(drv != NULL);
2093
2094 /* If there are any driver level actions to take */
2095 if (drv->bdrv_reopen_commit) {
2096 drv->bdrv_reopen_commit(reopen_state);
2097 }
2098
2099 /* set BDS specific flags now */
Kevin Wolf145f5982015-05-08 16:15:03 +02002100 QDECREF(reopen_state->bs->explicit_options);
2101
2102 reopen_state->bs->explicit_options = reopen_state->explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04002103 reopen_state->bs->open_flags = reopen_state->flags;
Jeff Codye971aa12012-09-20 15:13:19 -04002104 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01002105
Kevin Wolf3baca892014-07-16 17:48:16 +02002106 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04002107}
2108
2109/*
2110 * Abort the reopen, and delete and free the staged changes in
2111 * reopen_state
2112 */
2113void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2114{
2115 BlockDriver *drv;
2116
2117 assert(reopen_state != NULL);
2118 drv = reopen_state->bs->drv;
2119 assert(drv != NULL);
2120
2121 if (drv->bdrv_reopen_abort) {
2122 drv->bdrv_reopen_abort(reopen_state);
2123 }
Kevin Wolf145f5982015-05-08 16:15:03 +02002124
2125 QDECREF(reopen_state->explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04002126}
2127
2128
Max Reitz64dff522016-01-29 16:36:10 +01002129static void bdrv_close(BlockDriverState *bs)
bellardfc01f7e2003-06-30 10:03:06 +00002130{
Max Reitz33384422014-06-20 21:57:33 +02002131 BdrvAioNotifier *ban, *ban_next;
2132
Max Reitzca9bd242016-01-29 16:36:14 +01002133 assert(!bs->job);
Alberto Garcia99b7e772015-09-25 16:41:44 +03002134
Paolo Bonzinifc272912015-12-23 11:48:24 +01002135 bdrv_drained_begin(bs); /* complete I/O */
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02002136 bdrv_flush(bs);
Fam Zheng53ec73e2015-05-29 18:53:14 +08002137 bdrv_drain(bs); /* in case flush left pending I/O */
Paolo Bonzinifc272912015-12-23 11:48:24 +01002138
Max Reitzc5acdc92016-01-29 16:36:01 +01002139 bdrv_release_named_dirty_bitmaps(bs);
2140 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2141
Kevin Wolf5c8cab42016-02-24 15:13:35 +01002142 bdrv_parent_cb_change_media(bs, false);
Max Reitzb4d02822015-10-19 17:53:15 +02002143
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02002144 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002145 BdrvChild *child, *next;
2146
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002147 bs->drv->bdrv_close(bs);
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002148 bs->drv = NULL;
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002149
Kevin Wolf5db15a52015-09-14 15:33:33 +02002150 bdrv_set_backing_hd(bs, NULL);
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002151
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002152 if (bs->file != NULL) {
2153 bdrv_unref_child(bs, bs->file);
2154 bs->file = NULL;
2155 }
2156
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002157 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolf33a60402015-06-15 13:51:04 +02002158 /* TODO Remove bdrv_unref() from drivers' close function and use
2159 * bdrv_unref_child() here */
Kevin Wolfbddcec32015-04-09 18:47:50 +02002160 if (child->bs->inherits_from == bs) {
2161 child->bs->inherits_from = NULL;
2162 }
Kevin Wolf33a60402015-06-15 13:51:04 +02002163 bdrv_detach_child(child);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002164 }
2165
Anthony Liguori7267c092011-08-20 22:09:37 -05002166 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00002167 bs->opaque = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00002168 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02002169 bs->backing_file[0] = '\0';
2170 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02002171 bs->total_sectors = 0;
2172 bs->encrypted = 0;
2173 bs->valid_key = 0;
2174 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08002175 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002176 QDECREF(bs->options);
Kevin Wolf145f5982015-05-08 16:15:03 +02002177 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002178 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02002179 QDECREF(bs->full_open_options);
2180 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00002181 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08002182
Max Reitz33384422014-06-20 21:57:33 +02002183 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2184 g_free(ban);
2185 }
2186 QLIST_INIT(&bs->aio_notifiers);
Paolo Bonzinifc272912015-12-23 11:48:24 +01002187 bdrv_drained_end(bs);
bellardb3380822004-03-14 21:38:54 +00002188}
2189
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002190void bdrv_close_all(void)
2191{
2192 BlockDriverState *bs;
Max Reitzca9bd242016-01-29 16:36:14 +01002193 AioContext *aio_context;
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002194
Max Reitzca9bd242016-01-29 16:36:14 +01002195 /* Drop references from requests still in flight, such as canceled block
2196 * jobs whose AIO context has not been polled yet */
2197 bdrv_drain_all();
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002198
Max Reitzca9bd242016-01-29 16:36:14 +01002199 blk_remove_all_bs();
2200 blockdev_close_all_bdrv_states();
2201
2202 /* Cancel all block jobs */
2203 while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2204 QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2205 aio_context = bdrv_get_aio_context(bs);
2206
2207 aio_context_acquire(aio_context);
2208 if (bs->job) {
2209 block_job_cancel_sync(bs->job);
2210 aio_context_release(aio_context);
2211 break;
2212 }
2213 aio_context_release(aio_context);
2214 }
2215
2216 /* All the remaining BlockDriverStates are referenced directly or
2217 * indirectly from block jobs, so there needs to be at least one BDS
2218 * directly used by a block job */
2219 assert(bs);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002220 }
2221}
2222
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002223static void change_parent_backing_link(BlockDriverState *from,
2224 BlockDriverState *to)
2225{
2226 BdrvChild *c, *next;
2227
2228 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2229 assert(c->role != &child_backing);
2230 c->bs = to;
2231 QLIST_REMOVE(c, next_parent);
2232 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2233 bdrv_ref(to);
2234 bdrv_unref(from);
2235 }
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002236}
2237
Jeff Cody8802d1f2012-02-28 15:54:06 -05002238/*
2239 * Add new bs contents at the top of an image chain while the chain is
2240 * live, while keeping required fields on the top layer.
2241 *
2242 * This will modify the BlockDriverState fields, and swap contents
2243 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2244 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002245 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002246 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002247 * This function does not create any image files.
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002248 *
2249 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2250 * that's what the callers commonly need. bs_new will be referenced by the old
2251 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2252 * reference of its own, it must call bdrv_ref().
Jeff Cody8802d1f2012-02-28 15:54:06 -05002253 */
2254void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2255{
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002256 assert(!bdrv_requests_pending(bs_top));
2257 assert(!bdrv_requests_pending(bs_new));
Jeff Cody8802d1f2012-02-28 15:54:06 -05002258
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002259 bdrv_ref(bs_top);
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002260
Kevin Wolf27ccdd52016-03-21 12:56:44 +01002261 change_parent_backing_link(bs_top, bs_new);
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002262 bdrv_set_backing_hd(bs_new, bs_top);
2263 bdrv_unref(bs_top);
2264
2265 /* bs_new is now referenced by its new parents, we don't need the
2266 * additional reference any more. */
2267 bdrv_unref(bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002268}
2269
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02002270void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2271{
2272 assert(!bdrv_requests_pending(old));
2273 assert(!bdrv_requests_pending(new));
2274
2275 bdrv_ref(old);
2276
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02002277 change_parent_backing_link(old, new);
2278
2279 /* Change backing files if a previously independent node is added to the
2280 * chain. For active commit, we replace top by its own (indirect) backing
2281 * file and don't do anything here so we don't build a loop. */
2282 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2283 bdrv_set_backing_hd(new, backing_bs(old));
2284 bdrv_set_backing_hd(old, NULL);
2285 }
2286
2287 bdrv_unref(old);
2288}
2289
Fam Zheng4f6fd342013-08-23 09:14:47 +08002290static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002291{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002292 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002293 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002294 assert(!bs->refcnt);
Markus Armbruster18846de2010-06-29 16:58:30 +02002295
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002296 bdrv_close(bs);
2297
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002298 /* remove from list, if necessary */
Kevin Wolf63eaaae2016-03-18 10:46:57 +01002299 if (bs->node_name[0] != '\0') {
2300 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2301 }
Max Reitz2c1d04e2016-01-29 16:36:11 +01002302 QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2303
Anthony Liguori7267c092011-08-20 22:09:37 -05002304 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002305}
2306
aliguorie97fc192009-04-21 23:11:50 +00002307/*
2308 * Run consistency checks on an image
2309 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002310 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002311 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002312 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002313 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002314int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002315{
Max Reitz908bcd52014-08-07 22:47:55 +02002316 if (bs->drv == NULL) {
2317 return -ENOMEDIUM;
2318 }
aliguorie97fc192009-04-21 23:11:50 +00002319 if (bs->drv->bdrv_check == NULL) {
2320 return -ENOTSUP;
2321 }
2322
Kevin Wolfe076f332010-06-29 11:43:13 +02002323 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002324 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002325}
2326
Kevin Wolf8a426612010-07-16 17:17:01 +02002327#define COMMIT_BUF_SECTORS 2048
2328
bellard33e39632003-07-06 17:15:21 +00002329/* commit COW file into the raw image */
2330int bdrv_commit(BlockDriverState *bs)
2331{
bellard19cb3732006-08-19 11:45:59 +00002332 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002333 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002334 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002335 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002336 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002337
bellard19cb3732006-08-19 11:45:59 +00002338 if (!drv)
2339 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002340
Kevin Wolf760e0062015-06-17 14:55:21 +02002341 if (!bs->backing) {
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002342 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002343 }
2344
Fam Zhengbb000212014-09-11 13:14:00 +08002345 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
Kevin Wolf760e0062015-06-17 14:55:21 +02002346 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002347 return -EBUSY;
2348 }
2349
Kevin Wolf760e0062015-06-17 14:55:21 +02002350 ro = bs->backing->bs->read_only;
2351 open_flags = bs->backing->bs->open_flags;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002352
2353 if (ro) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002354 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002355 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002356 }
bellard33e39632003-07-06 17:15:21 +00002357 }
bellardea2384d2004-08-01 21:59:26 +00002358
Jeff Cody72706ea2014-01-24 09:02:35 -05002359 length = bdrv_getlength(bs);
2360 if (length < 0) {
2361 ret = length;
2362 goto ro_cleanup;
2363 }
2364
Kevin Wolf760e0062015-06-17 14:55:21 +02002365 backing_length = bdrv_getlength(bs->backing->bs);
Jeff Cody72706ea2014-01-24 09:02:35 -05002366 if (backing_length < 0) {
2367 ret = backing_length;
2368 goto ro_cleanup;
2369 }
2370
2371 /* If our top snapshot is larger than the backing file image,
2372 * grow the backing file image if possible. If not possible,
2373 * we must return an error */
2374 if (length > backing_length) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002375 ret = bdrv_truncate(bs->backing->bs, length);
Jeff Cody72706ea2014-01-24 09:02:35 -05002376 if (ret < 0) {
2377 goto ro_cleanup;
2378 }
2379 }
2380
2381 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002382
2383 /* qemu_try_blockalign() for bs will choose an alignment that works for
Kevin Wolf760e0062015-06-17 14:55:21 +02002384 * bs->backing->bs as well, so no need to compare the alignment manually. */
Kevin Wolf857d4f42014-05-20 13:16:51 +02002385 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2386 if (buf == NULL) {
2387 ret = -ENOMEM;
2388 goto ro_cleanup;
2389 }
bellardea2384d2004-08-01 21:59:26 +00002390
Kevin Wolf8a426612010-07-16 17:17:01 +02002391 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002392 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2393 if (ret < 0) {
2394 goto ro_cleanup;
2395 }
2396 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002397 ret = bdrv_read(bs, sector, buf, n);
2398 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002399 goto ro_cleanup;
2400 }
2401
Kevin Wolf760e0062015-06-17 14:55:21 +02002402 ret = bdrv_write(bs->backing->bs, sector, buf, n);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002403 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002404 goto ro_cleanup;
2405 }
bellardea2384d2004-08-01 21:59:26 +00002406 }
2407 }
bellard95389c82005-12-18 18:28:15 +00002408
Christoph Hellwig1d449522010-01-17 12:32:30 +01002409 if (drv->bdrv_make_empty) {
2410 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002411 if (ret < 0) {
2412 goto ro_cleanup;
2413 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002414 bdrv_flush(bs);
2415 }
bellard95389c82005-12-18 18:28:15 +00002416
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002417 /*
2418 * Make sure all data we wrote to the backing device is actually
2419 * stable on disk.
2420 */
Kevin Wolf760e0062015-06-17 14:55:21 +02002421 if (bs->backing) {
2422 bdrv_flush(bs->backing->bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002423 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002424
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002425 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002426ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002427 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002428
2429 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002430 /* ignoring error return here */
Kevin Wolf760e0062015-06-17 14:55:21 +02002431 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002432 }
2433
Christoph Hellwig1d449522010-01-17 12:32:30 +01002434 return ret;
bellard33e39632003-07-06 17:15:21 +00002435}
2436
Kevin Wolf756e6732010-01-12 12:55:17 +01002437/*
2438 * Return values:
2439 * 0 - success
2440 * -EINVAL - backing format specified, but no file
2441 * -ENOSPC - can't update the backing file because no space is left in the
2442 * image file header
2443 * -ENOTSUP - format driver doesn't support changing the backing file
2444 */
2445int bdrv_change_backing_file(BlockDriverState *bs,
2446 const char *backing_file, const char *backing_fmt)
2447{
2448 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002449 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002450
Paolo Bonzini5f377792012-04-12 14:01:01 +02002451 /* Backing file format doesn't make sense without a backing file */
2452 if (backing_fmt && !backing_file) {
2453 return -EINVAL;
2454 }
2455
Kevin Wolf756e6732010-01-12 12:55:17 +01002456 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002457 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002458 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002459 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002460 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002461
2462 if (ret == 0) {
2463 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2464 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2465 }
2466 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002467}
2468
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002469/*
2470 * Finds the image layer in the chain that has 'bs' as its backing file.
2471 *
2472 * active is the current topmost image.
2473 *
2474 * Returns NULL if bs is not found in active's image chain,
2475 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002476 *
2477 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002478 */
2479BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2480 BlockDriverState *bs)
2481{
Kevin Wolf760e0062015-06-17 14:55:21 +02002482 while (active && bs != backing_bs(active)) {
2483 active = backing_bs(active);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002484 }
2485
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002486 return active;
2487}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002488
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002489/* Given a BDS, searches for the base layer. */
2490BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2491{
2492 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002493}
2494
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002495/*
2496 * Drops images above 'base' up to and including 'top', and sets the image
2497 * above 'top' to have base as its backing file.
2498 *
2499 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2500 * information in 'bs' can be properly updated.
2501 *
2502 * E.g., this will convert the following chain:
2503 * bottom <- base <- intermediate <- top <- active
2504 *
2505 * to
2506 *
2507 * bottom <- base <- active
2508 *
2509 * It is allowed for bottom==base, in which case it converts:
2510 *
2511 * base <- intermediate <- top <- active
2512 *
2513 * to
2514 *
2515 * base <- active
2516 *
Jeff Cody54e26902014-06-25 15:40:10 -04002517 * If backing_file_str is non-NULL, it will be used when modifying top's
2518 * overlay image metadata.
2519 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002520 * Error conditions:
2521 * if active == top, that is considered an error
2522 *
2523 */
2524int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002525 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002526{
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002527 BlockDriverState *new_top_bs = NULL;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002528 int ret = -EIO;
2529
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002530 if (!top->drv || !base->drv) {
2531 goto exit;
2532 }
2533
2534 new_top_bs = bdrv_find_overlay(active, top);
2535
2536 if (new_top_bs == NULL) {
2537 /* we could not find the image above 'top', this is an error */
2538 goto exit;
2539 }
2540
Kevin Wolf760e0062015-06-17 14:55:21 +02002541 /* special case of new_top_bs->backing->bs already pointing to base - nothing
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002542 * to do, no intermediate images */
Kevin Wolf760e0062015-06-17 14:55:21 +02002543 if (backing_bs(new_top_bs) == base) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002544 ret = 0;
2545 goto exit;
2546 }
2547
Kevin Wolf5db15a52015-09-14 15:33:33 +02002548 /* Make sure that base is in the backing chain of top */
2549 if (!bdrv_chain_contains(top, base)) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002550 goto exit;
2551 }
2552
2553 /* success - we can delete the intermediate states, and link top->base */
Kevin Wolf5db15a52015-09-14 15:33:33 +02002554 backing_file_str = backing_file_str ? backing_file_str : base->filename;
Jeff Cody54e26902014-06-25 15:40:10 -04002555 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Kevin Wolf5db15a52015-09-14 15:33:33 +02002556 base->drv ? base->drv->format_name : "");
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002557 if (ret) {
2558 goto exit;
2559 }
Kevin Wolf5db15a52015-09-14 15:33:33 +02002560 bdrv_set_backing_hd(new_top_bs, base);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002561
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002562 ret = 0;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002563exit:
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002564 return ret;
2565}
2566
bellard83f64092006-08-01 16:21:11 +00002567/**
bellard83f64092006-08-01 16:21:11 +00002568 * Truncate file to 'offset' bytes (needed only for file protocols)
2569 */
2570int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2571{
2572 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002573 int ret;
bellard83f64092006-08-01 16:21:11 +00002574 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002575 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002576 if (!drv->bdrv_truncate)
2577 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002578 if (bs->read_only)
2579 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002580
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002581 ret = drv->bdrv_truncate(bs, offset);
2582 if (ret == 0) {
2583 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002584 bdrv_dirty_bitmap_truncate(bs);
Kevin Wolf5c8cab42016-02-24 15:13:35 +01002585 bdrv_parent_cb_resize(bs);
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002586 }
2587 return ret;
bellard83f64092006-08-01 16:21:11 +00002588}
2589
2590/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002591 * Length of a allocated file in bytes. Sparse files are counted by actual
2592 * allocated space. Return < 0 if error or unknown.
2593 */
2594int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2595{
2596 BlockDriver *drv = bs->drv;
2597 if (!drv) {
2598 return -ENOMEDIUM;
2599 }
2600 if (drv->bdrv_get_allocated_file_size) {
2601 return drv->bdrv_get_allocated_file_size(bs);
2602 }
2603 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002604 return bdrv_get_allocated_file_size(bs->file->bs);
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002605 }
2606 return -ENOTSUP;
2607}
2608
2609/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002610 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002611 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002612int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002613{
2614 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002615
bellard83f64092006-08-01 16:21:11 +00002616 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002617 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002618
Kevin Wolfb94a2612013-10-29 12:18:58 +01002619 if (drv->has_variable_length) {
2620 int ret = refresh_total_sectors(bs, bs->total_sectors);
2621 if (ret < 0) {
2622 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002623 }
bellard83f64092006-08-01 16:21:11 +00002624 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002625 return bs->total_sectors;
2626}
2627
2628/**
2629 * Return length in bytes on success, -errno on error.
2630 * The length is always a multiple of BDRV_SECTOR_SIZE.
2631 */
2632int64_t bdrv_getlength(BlockDriverState *bs)
2633{
2634 int64_t ret = bdrv_nb_sectors(bs);
2635
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002636 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002637 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002638}
2639
bellard19cb3732006-08-19 11:45:59 +00002640/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002641void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002642{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002643 int64_t nb_sectors = bdrv_nb_sectors(bs);
2644
2645 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002646}
bellardcf989512004-02-16 21:56:36 +00002647
bellardb3380822004-03-14 21:38:54 +00002648int bdrv_is_read_only(BlockDriverState *bs)
2649{
2650 return bs->read_only;
2651}
2652
ths985a03b2007-12-24 16:10:43 +00002653int bdrv_is_sg(BlockDriverState *bs)
2654{
2655 return bs->sg;
2656}
2657
bellardea2384d2004-08-01 21:59:26 +00002658int bdrv_is_encrypted(BlockDriverState *bs)
2659{
Kevin Wolf760e0062015-06-17 14:55:21 +02002660 if (bs->backing && bs->backing->bs->encrypted) {
bellardea2384d2004-08-01 21:59:26 +00002661 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002662 }
bellardea2384d2004-08-01 21:59:26 +00002663 return bs->encrypted;
2664}
2665
aliguoric0f4ce72009-03-05 23:01:01 +00002666int bdrv_key_required(BlockDriverState *bs)
2667{
Kevin Wolf760e0062015-06-17 14:55:21 +02002668 BdrvChild *backing = bs->backing;
aliguoric0f4ce72009-03-05 23:01:01 +00002669
Kevin Wolf760e0062015-06-17 14:55:21 +02002670 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
aliguoric0f4ce72009-03-05 23:01:01 +00002671 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002672 }
aliguoric0f4ce72009-03-05 23:01:01 +00002673 return (bs->encrypted && !bs->valid_key);
2674}
2675
bellardea2384d2004-08-01 21:59:26 +00002676int bdrv_set_key(BlockDriverState *bs, const char *key)
2677{
2678 int ret;
Kevin Wolf760e0062015-06-17 14:55:21 +02002679 if (bs->backing && bs->backing->bs->encrypted) {
2680 ret = bdrv_set_key(bs->backing->bs, key);
bellardea2384d2004-08-01 21:59:26 +00002681 if (ret < 0)
2682 return ret;
2683 if (!bs->encrypted)
2684 return 0;
2685 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002686 if (!bs->encrypted) {
2687 return -EINVAL;
2688 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2689 return -ENOMEDIUM;
2690 }
aliguoric0f4ce72009-03-05 23:01:01 +00002691 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002692 if (ret < 0) {
2693 bs->valid_key = 0;
2694 } else if (!bs->valid_key) {
Kevin Wolf5c8cab42016-02-24 15:13:35 +01002695 /* call the change callback now, we skipped it on open */
aliguoribb5fc202009-03-05 23:01:15 +00002696 bs->valid_key = 1;
Kevin Wolf5c8cab42016-02-24 15:13:35 +01002697 bdrv_parent_cb_change_media(bs, true);
aliguoribb5fc202009-03-05 23:01:15 +00002698 }
aliguoric0f4ce72009-03-05 23:01:01 +00002699 return ret;
bellardea2384d2004-08-01 21:59:26 +00002700}
2701
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002702/*
2703 * Provide an encryption key for @bs.
2704 * If @key is non-null:
2705 * If @bs is not encrypted, fail.
2706 * Else if the key is invalid, fail.
2707 * Else set @bs's key to @key, replacing the existing key, if any.
2708 * If @key is null:
2709 * If @bs is encrypted and still lacks a key, fail.
2710 * Else do nothing.
2711 * On failure, store an error object through @errp if non-null.
2712 */
2713void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2714{
2715 if (key) {
2716 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002717 error_setg(errp, "Node '%s' is not encrypted",
2718 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002719 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002720 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002721 }
2722 } else {
2723 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002724 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2725 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002726 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002727 bdrv_get_encrypted_filename(bs));
2728 }
2729 }
2730}
2731
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002732const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002733{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002734 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002735}
2736
Stefan Hajnocziada42402014-08-27 12:08:55 +01002737static int qsort_strcmp(const void *a, const void *b)
2738{
2739 return strcmp(a, b);
2740}
2741
ths5fafdf22007-09-16 21:08:06 +00002742void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002743 void *opaque)
2744{
2745 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002746 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002747 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002748 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002749
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002750 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002751 if (drv->format_name) {
2752 bool found = false;
2753 int i = count;
2754 while (formats && i && !found) {
2755 found = !strcmp(formats[--i], drv->format_name);
2756 }
2757
2758 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002759 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002760 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002761 }
2762 }
bellardea2384d2004-08-01 21:59:26 +00002763 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002764
2765 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2766
2767 for (i = 0; i < count; i++) {
2768 it(opaque, formats[i]);
2769 }
2770
Jeff Codye855e4f2014-04-28 18:29:54 -04002771 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002772}
2773
Benoît Canetdc364f42014-01-23 21:31:32 +01002774/* This function is to find a node in the bs graph */
2775BlockDriverState *bdrv_find_node(const char *node_name)
2776{
2777 BlockDriverState *bs;
2778
2779 assert(node_name);
2780
2781 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2782 if (!strcmp(node_name, bs->node_name)) {
2783 return bs;
2784 }
2785 }
2786 return NULL;
2787}
2788
Benoît Canetc13163f2014-01-23 21:31:34 +01002789/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002790BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002791{
2792 BlockDeviceInfoList *list, *entry;
2793 BlockDriverState *bs;
2794
2795 list = NULL;
2796 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Kevin Wolfc83f9fb2016-03-03 11:37:48 +01002797 BlockDeviceInfo *info = bdrv_block_device_info(NULL, bs, errp);
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002798 if (!info) {
2799 qapi_free_BlockDeviceInfoList(list);
2800 return NULL;
2801 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002802 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002803 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002804 entry->next = list;
2805 list = entry;
2806 }
2807
2808 return list;
2809}
2810
Benoît Canet12d3ba82014-01-23 21:31:35 +01002811BlockDriverState *bdrv_lookup_bs(const char *device,
2812 const char *node_name,
2813 Error **errp)
2814{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002815 BlockBackend *blk;
2816 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002817
Benoît Canet12d3ba82014-01-23 21:31:35 +01002818 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002819 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002820
Markus Armbruster7f06d472014-10-07 13:59:12 +02002821 if (blk) {
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002822 bs = blk_bs(blk);
2823 if (!bs) {
Max Reitz5433c242015-10-19 17:53:29 +02002824 error_setg(errp, "Device '%s' has no medium", device);
Max Reitz5433c242015-10-19 17:53:29 +02002825 }
2826
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002827 return bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002828 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002829 }
2830
Benoît Canetdd67fa52014-02-12 17:15:06 +01002831 if (node_name) {
2832 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002833
Benoît Canetdd67fa52014-02-12 17:15:06 +01002834 if (bs) {
2835 return bs;
2836 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002837 }
2838
Benoît Canetdd67fa52014-02-12 17:15:06 +01002839 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2840 device ? device : "",
2841 node_name ? node_name : "");
2842 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002843}
2844
Jeff Cody5a6684d2014-06-25 15:40:09 -04002845/* If 'base' is in the same chain as 'top', return true. Otherwise,
2846 * return false. If either argument is NULL, return false. */
2847bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2848{
2849 while (top && top != base) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002850 top = backing_bs(top);
Jeff Cody5a6684d2014-06-25 15:40:09 -04002851 }
2852
2853 return top != NULL;
2854}
2855
Fam Zheng04df7652014-10-31 11:32:54 +08002856BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2857{
2858 if (!bs) {
2859 return QTAILQ_FIRST(&graph_bdrv_states);
2860 }
2861 return QTAILQ_NEXT(bs, node_list);
2862}
2863
Fam Zheng20a9e772014-10-31 11:32:55 +08002864const char *bdrv_get_node_name(const BlockDriverState *bs)
2865{
2866 return bs->node_name;
2867}
2868
Kevin Wolf1f0c4612016-03-22 18:38:44 +01002869const char *bdrv_get_parent_name(const BlockDriverState *bs)
Kevin Wolf4c265bf2016-02-26 10:22:16 +01002870{
2871 BdrvChild *c;
2872 const char *name;
2873
2874 /* If multiple parents have a name, just pick the first one. */
2875 QLIST_FOREACH(c, &bs->parents, next_parent) {
2876 if (c->role->get_name) {
2877 name = c->role->get_name(c);
2878 if (name && *name) {
2879 return name;
2880 }
2881 }
2882 }
2883
2884 return NULL;
2885}
2886
Markus Armbruster7f06d472014-10-07 13:59:12 +02002887/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002888const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002889{
Kevin Wolf4c265bf2016-02-26 10:22:16 +01002890 return bdrv_get_parent_name(bs) ?: "";
bellardea2384d2004-08-01 21:59:26 +00002891}
2892
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002893/* This can be used to identify nodes that might not have a device
2894 * name associated. Since node and device names live in the same
2895 * namespace, the result is unambiguous. The exception is if both are
2896 * absent, then this returns an empty (non-null) string. */
2897const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2898{
Kevin Wolf4c265bf2016-02-26 10:22:16 +01002899 return bdrv_get_parent_name(bs) ?: bs->node_name;
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002900}
2901
Markus Armbrusterc8433282012-06-05 16:49:24 +02002902int bdrv_get_flags(BlockDriverState *bs)
2903{
2904 return bs->open_flags;
2905}
2906
Peter Lieven3ac21622013-06-28 12:47:42 +02002907int bdrv_has_zero_init_1(BlockDriverState *bs)
2908{
2909 return 1;
2910}
2911
Kevin Wolff2feebb2010-04-14 17:30:35 +02002912int bdrv_has_zero_init(BlockDriverState *bs)
2913{
2914 assert(bs->drv);
2915
Paolo Bonzini11212d82013-09-04 19:00:27 +02002916 /* If BS is a copy on write image, it is initialized to
2917 the contents of the base image, which may not be zeroes. */
Kevin Wolf760e0062015-06-17 14:55:21 +02002918 if (bs->backing) {
Paolo Bonzini11212d82013-09-04 19:00:27 +02002919 return 0;
2920 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02002921 if (bs->drv->bdrv_has_zero_init) {
2922 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02002923 }
2924
Peter Lieven3ac21622013-06-28 12:47:42 +02002925 /* safe default */
2926 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02002927}
2928
Peter Lieven4ce78692013-10-24 12:06:54 +02002929bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
2930{
2931 BlockDriverInfo bdi;
2932
Kevin Wolf760e0062015-06-17 14:55:21 +02002933 if (bs->backing) {
Peter Lieven4ce78692013-10-24 12:06:54 +02002934 return false;
2935 }
2936
2937 if (bdrv_get_info(bs, &bdi) == 0) {
2938 return bdi.unallocated_blocks_are_zero;
2939 }
2940
2941 return false;
2942}
2943
2944bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
2945{
2946 BlockDriverInfo bdi;
2947
Kevin Wolf760e0062015-06-17 14:55:21 +02002948 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
Peter Lieven4ce78692013-10-24 12:06:54 +02002949 return false;
2950 }
2951
2952 if (bdrv_get_info(bs, &bdi) == 0) {
2953 return bdi.can_write_zeroes_with_unmap;
2954 }
2955
2956 return false;
2957}
2958
aliguori045df332009-03-05 23:00:48 +00002959const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
2960{
Kevin Wolf760e0062015-06-17 14:55:21 +02002961 if (bs->backing && bs->backing->bs->encrypted)
aliguori045df332009-03-05 23:00:48 +00002962 return bs->backing_file;
2963 else if (bs->encrypted)
2964 return bs->filename;
2965 else
2966 return NULL;
2967}
2968
ths5fafdf22007-09-16 21:08:06 +00002969void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00002970 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00002971{
Kevin Wolf3574c602011-10-26 11:02:11 +02002972 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00002973}
2974
bellardfaea38e2006-08-05 21:31:00 +00002975int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
2976{
2977 BlockDriver *drv = bs->drv;
2978 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002979 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00002980 if (!drv->bdrv_get_info)
2981 return -ENOTSUP;
2982 memset(bdi, 0, sizeof(*bdi));
2983 return drv->bdrv_get_info(bs, bdi);
2984}
2985
Max Reitzeae041f2013-10-09 10:46:16 +02002986ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
2987{
2988 BlockDriver *drv = bs->drv;
2989 if (drv && drv->bdrv_get_specific_info) {
2990 return drv->bdrv_get_specific_info(bs);
2991 }
2992 return NULL;
2993}
2994
Eric Blakea31939e2015-11-18 01:52:54 -07002995void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002996{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02002997 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01002998 return;
2999 }
3000
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003001 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01003002}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003003
Kevin Wolf41c695c2012-12-06 14:32:58 +01003004int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3005 const char *tag)
3006{
3007 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003008 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003009 }
3010
3011 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3012 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3013 }
3014
3015 return -ENOTSUP;
3016}
3017
Fam Zheng4cc70e92013-11-20 10:01:54 +08003018int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3019{
3020 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003021 bs = bs->file ? bs->file->bs : NULL;
Fam Zheng4cc70e92013-11-20 10:01:54 +08003022 }
3023
3024 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3025 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3026 }
3027
3028 return -ENOTSUP;
3029}
3030
Kevin Wolf41c695c2012-12-06 14:32:58 +01003031int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3032{
Max Reitz938789e2014-03-10 23:44:08 +01003033 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003034 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003035 }
3036
3037 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3038 return bs->drv->bdrv_debug_resume(bs, tag);
3039 }
3040
3041 return -ENOTSUP;
3042}
3043
3044bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3045{
3046 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003047 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003048 }
3049
3050 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3051 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3052 }
3053
3054 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003055}
3056
Blue Swirl199630b2010-07-25 20:49:34 +00003057int bdrv_is_snapshot(BlockDriverState *bs)
3058{
3059 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3060}
3061
Jeff Codyb1b1d782012-10-16 15:49:09 -04003062/* backing_file can either be relative, or absolute, or a protocol. If it is
3063 * relative, it must be relative to the chain. So, passing in bs->filename
3064 * from a BDS as backing_file should not be done, as that may be relative to
3065 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003066BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3067 const char *backing_file)
3068{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003069 char *filename_full = NULL;
3070 char *backing_file_full = NULL;
3071 char *filename_tmp = NULL;
3072 int is_protocol = 0;
3073 BlockDriverState *curr_bs = NULL;
3074 BlockDriverState *retval = NULL;
3075
3076 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003077 return NULL;
3078 }
3079
Jeff Codyb1b1d782012-10-16 15:49:09 -04003080 filename_full = g_malloc(PATH_MAX);
3081 backing_file_full = g_malloc(PATH_MAX);
3082 filename_tmp = g_malloc(PATH_MAX);
3083
3084 is_protocol = path_has_protocol(backing_file);
3085
Kevin Wolf760e0062015-06-17 14:55:21 +02003086 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003087
3088 /* If either of the filename paths is actually a protocol, then
3089 * compare unmodified paths; otherwise make paths relative */
3090 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3091 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003092 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003093 break;
3094 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003095 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003096 /* If not an absolute filename path, make it relative to the current
3097 * image's filename path */
3098 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3099 backing_file);
3100
3101 /* We are going to compare absolute pathnames */
3102 if (!realpath(filename_tmp, filename_full)) {
3103 continue;
3104 }
3105
3106 /* We need to make sure the backing filename we are comparing against
3107 * is relative to the current image filename (or absolute) */
3108 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3109 curr_bs->backing_file);
3110
3111 if (!realpath(filename_tmp, backing_file_full)) {
3112 continue;
3113 }
3114
3115 if (strcmp(backing_file_full, filename_full) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003116 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003117 break;
3118 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003119 }
3120 }
3121
Jeff Codyb1b1d782012-10-16 15:49:09 -04003122 g_free(filename_full);
3123 g_free(backing_file_full);
3124 g_free(filename_tmp);
3125 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003126}
3127
Benoît Canetf198fd12012-08-02 10:22:47 +02003128int bdrv_get_backing_file_depth(BlockDriverState *bs)
3129{
3130 if (!bs->drv) {
3131 return 0;
3132 }
3133
Kevin Wolf760e0062015-06-17 14:55:21 +02003134 if (!bs->backing) {
Benoît Canetf198fd12012-08-02 10:22:47 +02003135 return 0;
3136 }
3137
Kevin Wolf760e0062015-06-17 14:55:21 +02003138 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
Benoît Canetf198fd12012-08-02 10:22:47 +02003139}
3140
bellardea2384d2004-08-01 21:59:26 +00003141void bdrv_init(void)
3142{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003143 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003144}
pbrookce1a14d2006-08-07 02:38:06 +00003145
Markus Armbrustereb852012009-10-27 18:41:44 +01003146void bdrv_init_with_whitelist(void)
3147{
3148 use_bdrv_whitelist = 1;
3149 bdrv_init();
3150}
3151
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003152void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003153{
Fam Zheng0d1c5c92016-05-11 10:45:33 +08003154 BdrvChild *child;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003155 Error *local_err = NULL;
3156 int ret;
3157
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003158 if (!bs->drv) {
3159 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003160 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003161
Kevin Wolf04c01a52016-01-13 15:56:06 +01003162 if (!(bs->open_flags & BDRV_O_INACTIVE)) {
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003163 return;
3164 }
Kevin Wolf04c01a52016-01-13 15:56:06 +01003165 bs->open_flags &= ~BDRV_O_INACTIVE;
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003166
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003167 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003168 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Fam Zheng0d1c5c92016-05-11 10:45:33 +08003169 if (local_err) {
3170 bs->open_flags |= BDRV_O_INACTIVE;
3171 error_propagate(errp, local_err);
3172 return;
3173 }
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003174 }
Fam Zheng0d1c5c92016-05-11 10:45:33 +08003175
3176 QLIST_FOREACH(child, &bs->children, next) {
3177 bdrv_invalidate_cache(child->bs, &local_err);
3178 if (local_err) {
3179 bs->open_flags |= BDRV_O_INACTIVE;
3180 error_propagate(errp, local_err);
3181 return;
3182 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003183 }
3184
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003185 ret = refresh_total_sectors(bs, bs->total_sectors);
3186 if (ret < 0) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003187 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003188 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3189 return;
3190 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003191}
3192
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003193void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003194{
Kevin Wolf7c8eece2016-03-22 18:58:50 +01003195 BlockDriverState *bs;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003196 Error *local_err = NULL;
Kevin Wolf88be7b42016-05-20 18:49:07 +02003197 BdrvNextIterator it;
Anthony Liguori0f154232011-11-14 15:09:45 -06003198
Kevin Wolf88be7b42016-05-20 18:49:07 +02003199 for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003200 AioContext *aio_context = bdrv_get_aio_context(bs);
3201
3202 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003203 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003204 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003205 if (local_err) {
3206 error_propagate(errp, local_err);
3207 return;
3208 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003209 }
3210}
3211
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003212static int bdrv_inactivate_recurse(BlockDriverState *bs,
3213 bool setting_flag)
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003214{
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003215 BdrvChild *child;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003216 int ret;
3217
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003218 if (!setting_flag && bs->drv->bdrv_inactivate) {
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003219 ret = bs->drv->bdrv_inactivate(bs);
3220 if (ret < 0) {
3221 return ret;
3222 }
3223 }
3224
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003225 QLIST_FOREACH(child, &bs->children, next) {
3226 ret = bdrv_inactivate_recurse(child->bs, setting_flag);
3227 if (ret < 0) {
3228 return ret;
3229 }
3230 }
3231
3232 if (setting_flag) {
3233 bs->open_flags |= BDRV_O_INACTIVE;
3234 }
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003235 return 0;
3236}
3237
3238int bdrv_inactivate_all(void)
3239{
Max Reitz79720af2016-03-16 19:54:44 +01003240 BlockDriverState *bs = NULL;
Kevin Wolf88be7b42016-05-20 18:49:07 +02003241 BdrvNextIterator it;
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003242 int ret = 0;
3243 int pass;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003244
Kevin Wolf88be7b42016-05-20 18:49:07 +02003245 for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003246 aio_context_acquire(bdrv_get_aio_context(bs));
3247 }
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003248
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003249 /* We do two passes of inactivation. The first pass calls to drivers'
3250 * .bdrv_inactivate callbacks recursively so all cache is flushed to disk;
3251 * the second pass sets the BDRV_O_INACTIVE flag so that no further write
3252 * is allowed. */
3253 for (pass = 0; pass < 2; pass++) {
Kevin Wolf88be7b42016-05-20 18:49:07 +02003254 for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003255 ret = bdrv_inactivate_recurse(bs, pass);
3256 if (ret < 0) {
3257 goto out;
3258 }
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003259 }
3260 }
3261
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003262out:
Kevin Wolf88be7b42016-05-20 18:49:07 +02003263 for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
Fam Zhengaad0b7a2016-05-11 10:45:35 +08003264 aio_context_release(bdrv_get_aio_context(bs));
3265 }
3266
3267 return ret;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003268}
3269
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003270/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003271/* removable device support */
3272
3273/**
3274 * Return TRUE if the media is present
3275 */
Max Reitze031f752015-10-19 17:53:11 +02003276bool bdrv_is_inserted(BlockDriverState *bs)
bellard19cb3732006-08-19 11:45:59 +00003277{
3278 BlockDriver *drv = bs->drv;
Max Reitz28d7a782015-10-19 17:53:13 +02003279 BdrvChild *child;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003280
Max Reitze031f752015-10-19 17:53:11 +02003281 if (!drv) {
3282 return false;
3283 }
Max Reitz28d7a782015-10-19 17:53:13 +02003284 if (drv->bdrv_is_inserted) {
3285 return drv->bdrv_is_inserted(bs);
Max Reitze031f752015-10-19 17:53:11 +02003286 }
Max Reitz28d7a782015-10-19 17:53:13 +02003287 QLIST_FOREACH(child, &bs->children, next) {
3288 if (!bdrv_is_inserted(child->bs)) {
3289 return false;
3290 }
3291 }
3292 return true;
bellard19cb3732006-08-19 11:45:59 +00003293}
3294
3295/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003296 * Return whether the media changed since the last call to this
3297 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003298 */
3299int bdrv_media_changed(BlockDriverState *bs)
3300{
3301 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003302
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003303 if (drv && drv->bdrv_media_changed) {
3304 return drv->bdrv_media_changed(bs);
3305 }
3306 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003307}
3308
3309/**
3310 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3311 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003312void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003313{
3314 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003315 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003316
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003317 if (drv && drv->bdrv_eject) {
3318 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003319 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003320
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003321 device_name = bdrv_get_device_name(bs);
3322 if (device_name[0] != '\0') {
3323 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003324 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003325 }
bellard19cb3732006-08-19 11:45:59 +00003326}
3327
bellard19cb3732006-08-19 11:45:59 +00003328/**
3329 * Lock or unlock the media (if it is locked, the user won't be able
3330 * to eject it manually).
3331 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003332void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003333{
3334 BlockDriver *drv = bs->drv;
3335
Markus Armbruster025e8492011-09-06 18:58:47 +02003336 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003337
Markus Armbruster025e8492011-09-06 18:58:47 +02003338 if (drv && drv->bdrv_lock_medium) {
3339 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003340 }
3341}
ths985a03b2007-12-24 16:10:43 +00003342
Fam Zheng9fcb0252013-08-23 09:14:46 +08003343/* Get a reference to bs */
3344void bdrv_ref(BlockDriverState *bs)
3345{
3346 bs->refcnt++;
3347}
3348
3349/* Release a previously grabbed reference to bs.
3350 * If after releasing, reference count is zero, the BlockDriverState is
3351 * deleted. */
3352void bdrv_unref(BlockDriverState *bs)
3353{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003354 if (!bs) {
3355 return;
3356 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003357 assert(bs->refcnt > 0);
3358 if (--bs->refcnt == 0) {
3359 bdrv_delete(bs);
3360 }
3361}
3362
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003363struct BdrvOpBlocker {
3364 Error *reason;
3365 QLIST_ENTRY(BdrvOpBlocker) list;
3366};
3367
3368bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3369{
3370 BdrvOpBlocker *blocker;
3371 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3372 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3373 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3374 if (errp) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01003375 *errp = error_copy(blocker->reason);
3376 error_prepend(errp, "Node '%s' is busy: ",
3377 bdrv_get_device_or_node_name(bs));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003378 }
3379 return true;
3380 }
3381 return false;
3382}
3383
3384void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3385{
3386 BdrvOpBlocker *blocker;
3387 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3388
Markus Armbruster5839e532014-08-19 10:31:08 +02003389 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003390 blocker->reason = reason;
3391 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3392}
3393
3394void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3395{
3396 BdrvOpBlocker *blocker, *next;
3397 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3398 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3399 if (blocker->reason == reason) {
3400 QLIST_REMOVE(blocker, list);
3401 g_free(blocker);
3402 }
3403 }
3404}
3405
3406void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3407{
3408 int i;
3409 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3410 bdrv_op_block(bs, i, reason);
3411 }
3412}
3413
3414void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3415{
3416 int i;
3417 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3418 bdrv_op_unblock(bs, i, reason);
3419 }
3420}
3421
3422bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3423{
3424 int i;
3425
3426 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3427 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3428 return false;
3429 }
3430 }
3431 return true;
3432}
3433
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003434void bdrv_img_create(const char *filename, const char *fmt,
3435 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003436 char *options, uint64_t img_size, int flags,
3437 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003438{
Chunyan Liu83d05212014-06-05 17:20:51 +08003439 QemuOptsList *create_opts = NULL;
3440 QemuOpts *opts = NULL;
3441 const char *backing_fmt, *backing_file;
3442 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003443 BlockDriver *drv, *proto_drv;
Max Reitzcc84d902013-09-06 17:14:26 +02003444 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003445 int ret = 0;
3446
3447 /* Find driver and parse its options */
3448 drv = bdrv_find_format(fmt);
3449 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003450 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003451 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003452 }
3453
Max Reitzb65a5e12015-02-05 13:58:12 -05003454 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003455 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003456 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003457 }
3458
Max Reitzc6149722014-12-02 18:32:45 +01003459 if (!drv->create_opts) {
3460 error_setg(errp, "Format driver '%s' does not support image creation",
3461 drv->format_name);
3462 return;
3463 }
3464
3465 if (!proto_drv->create_opts) {
3466 error_setg(errp, "Protocol driver '%s' does not support image creation",
3467 proto_drv->format_name);
3468 return;
3469 }
3470
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003471 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3472 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003473
3474 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003475 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003476 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003477
3478 /* Parse -o options */
3479 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003480 qemu_opts_do_parse(opts, options, NULL, &local_err);
3481 if (local_err) {
3482 error_report_err(local_err);
3483 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003484 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003485 goto out;
3486 }
3487 }
3488
3489 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003490 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003491 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003492 error_setg(errp, "Backing file not supported for file format '%s'",
3493 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003494 goto out;
3495 }
3496 }
3497
3498 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003499 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003500 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003501 error_setg(errp, "Backing file format not supported for file "
3502 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003503 goto out;
3504 }
3505 }
3506
Chunyan Liu83d05212014-06-05 17:20:51 +08003507 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3508 if (backing_file) {
3509 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003510 error_setg(errp, "Error: Trying to create an image with the "
3511 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003512 goto out;
3513 }
3514 }
3515
Chunyan Liu83d05212014-06-05 17:20:51 +08003516 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003517
3518 // The size for the image must always be specified, with one exception:
3519 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003520 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3521 if (size == -1) {
3522 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003523 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003524 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003525 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003526 int back_flags;
Max Reitze6641712015-08-26 19:47:48 +02003527 QDict *backing_options = NULL;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003528
Max Reitz29168012014-11-26 17:20:27 +01003529 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3530 full_backing, PATH_MAX,
3531 &local_err);
3532 if (local_err) {
3533 g_free(full_backing);
3534 goto out;
3535 }
3536
Paolo Bonzini63090da2012-04-12 14:01:03 +02003537 /* backing files always opened read-only */
Kevin Wolf61de4c62016-03-18 17:46:45 +01003538 back_flags = flags;
Kevin Wolfbfd18d12016-03-04 14:28:01 +01003539 back_flags &= ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003540
Max Reitze6641712015-08-26 19:47:48 +02003541 if (backing_fmt) {
3542 backing_options = qdict_new();
3543 qdict_put(backing_options, "driver",
3544 qstring_from_str(backing_fmt));
3545 }
3546
Max Reitzf67503e2014-02-18 18:33:05 +01003547 bs = NULL;
Max Reitze6641712015-08-26 19:47:48 +02003548 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02003549 back_flags, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003550 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003551 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003552 goto out;
3553 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003554 size = bdrv_getlength(bs);
3555 if (size < 0) {
3556 error_setg_errno(errp, -size, "Could not get size of '%s'",
3557 backing_file);
3558 bdrv_unref(bs);
3559 goto out;
3560 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003561
Markus Armbruster39101f22015-02-12 16:46:36 +01003562 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003563
3564 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003565 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003566 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003567 goto out;
3568 }
3569 }
3570
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003571 if (!quiet) {
Kővágó, Zoltánfe646692015-07-07 16:42:10 +02003572 printf("Formatting '%s', fmt=%s ", filename, fmt);
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003573 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003574 puts("");
3575 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003576
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003577 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003578
Max Reitzcc84d902013-09-06 17:14:26 +02003579 if (ret == -EFBIG) {
3580 /* This is generally a better message than whatever the driver would
3581 * deliver (especially because of the cluster_size_hint), since that
3582 * is most probably not much different from "image too large". */
3583 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003584 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003585 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003586 }
Max Reitzcc84d902013-09-06 17:14:26 +02003587 error_setg(errp, "The image size is too large for file format '%s'"
3588 "%s", fmt, cluster_size_hint);
3589 error_free(local_err);
3590 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003591 }
3592
3593out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003594 qemu_opts_del(opts);
3595 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003596 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003597 error_propagate(errp, local_err);
3598 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003599}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003600
3601AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3602{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003603 return bs->aio_context;
3604}
3605
3606void bdrv_detach_aio_context(BlockDriverState *bs)
3607{
Max Reitz33384422014-06-20 21:57:33 +02003608 BdrvAioNotifier *baf;
Max Reitzb97511c2016-05-17 13:38:04 +02003609 BdrvChild *child;
Max Reitz33384422014-06-20 21:57:33 +02003610
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003611 if (!bs->drv) {
3612 return;
3613 }
3614
Max Reitz33384422014-06-20 21:57:33 +02003615 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3616 baf->detach_aio_context(baf->opaque);
3617 }
3618
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003619 if (bs->drv->bdrv_detach_aio_context) {
3620 bs->drv->bdrv_detach_aio_context(bs);
3621 }
Max Reitzb97511c2016-05-17 13:38:04 +02003622 QLIST_FOREACH(child, &bs->children, next) {
3623 bdrv_detach_aio_context(child->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003624 }
3625
3626 bs->aio_context = NULL;
3627}
3628
3629void bdrv_attach_aio_context(BlockDriverState *bs,
3630 AioContext *new_context)
3631{
Max Reitz33384422014-06-20 21:57:33 +02003632 BdrvAioNotifier *ban;
Max Reitzb97511c2016-05-17 13:38:04 +02003633 BdrvChild *child;
Max Reitz33384422014-06-20 21:57:33 +02003634
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003635 if (!bs->drv) {
3636 return;
3637 }
3638
3639 bs->aio_context = new_context;
3640
Max Reitzb97511c2016-05-17 13:38:04 +02003641 QLIST_FOREACH(child, &bs->children, next) {
3642 bdrv_attach_aio_context(child->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003643 }
3644 if (bs->drv->bdrv_attach_aio_context) {
3645 bs->drv->bdrv_attach_aio_context(bs, new_context);
3646 }
Max Reitz33384422014-06-20 21:57:33 +02003647
3648 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3649 ban->attached_aio_context(new_context, ban->opaque);
3650 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003651}
3652
3653void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3654{
Fam Zheng53ec73e2015-05-29 18:53:14 +08003655 bdrv_drain(bs); /* ensure there are no in-flight requests */
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003656
3657 bdrv_detach_aio_context(bs);
3658
3659 /* This function executes in the old AioContext so acquire the new one in
3660 * case it runs in a different thread.
3661 */
3662 aio_context_acquire(new_context);
3663 bdrv_attach_aio_context(bs, new_context);
3664 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003665}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003666
Max Reitz33384422014-06-20 21:57:33 +02003667void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3668 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3669 void (*detach_aio_context)(void *opaque), void *opaque)
3670{
3671 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3672 *ban = (BdrvAioNotifier){
3673 .attached_aio_context = attached_aio_context,
3674 .detach_aio_context = detach_aio_context,
3675 .opaque = opaque
3676 };
3677
3678 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3679}
3680
3681void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3682 void (*attached_aio_context)(AioContext *,
3683 void *),
3684 void (*detach_aio_context)(void *),
3685 void *opaque)
3686{
3687 BdrvAioNotifier *ban, *ban_next;
3688
3689 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3690 if (ban->attached_aio_context == attached_aio_context &&
3691 ban->detach_aio_context == detach_aio_context &&
3692 ban->opaque == opaque)
3693 {
3694 QLIST_REMOVE(ban, list);
3695 g_free(ban);
3696
3697 return;
3698 }
3699 }
3700
3701 abort();
3702}
3703
Max Reitz77485432014-10-27 11:12:50 +01003704int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
Max Reitz8b139762015-07-27 17:51:32 +02003705 BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
Max Reitz6f176b42013-09-03 10:09:50 +02003706{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003707 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003708 return -ENOTSUP;
3709 }
Max Reitz8b139762015-07-27 17:51:32 +02003710 return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
Max Reitz6f176b42013-09-03 10:09:50 +02003711}
Benoît Canetf6186f42013-10-02 14:33:48 +02003712
Benoît Canetb5042a32014-03-03 19:11:34 +01003713/* This function will be called by the bdrv_recurse_is_first_non_filter method
3714 * of block filter and by bdrv_is_first_non_filter.
3715 * It is used to test if the given bs is the candidate or recurse more in the
3716 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003717 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003718bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3719 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003720{
Benoît Canetb5042a32014-03-03 19:11:34 +01003721 /* return false if basic checks fails */
3722 if (!bs || !bs->drv) {
3723 return false;
3724 }
3725
3726 /* the code reached a non block filter driver -> check if the bs is
3727 * the same as the candidate. It's the recursion termination condition.
3728 */
3729 if (!bs->drv->is_filter) {
3730 return bs == candidate;
3731 }
3732 /* Down this path the driver is a block filter driver */
3733
3734 /* If the block filter recursion method is defined use it to recurse down
3735 * the node graph.
3736 */
3737 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003738 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3739 }
3740
Benoît Canetb5042a32014-03-03 19:11:34 +01003741 /* the driver is a block filter but don't allow to recurse -> return false
3742 */
3743 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003744}
3745
3746/* This function checks if the candidate is the first non filter bs down it's
3747 * bs chain. Since we don't have pointers to parents it explore all bs chains
3748 * from the top. Some filters can choose not to pass down the recursion.
3749 */
3750bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3751{
Kevin Wolf7c8eece2016-03-22 18:58:50 +01003752 BlockDriverState *bs;
Kevin Wolf88be7b42016-05-20 18:49:07 +02003753 BdrvNextIterator it;
Benoît Canet212a5a82014-01-23 21:31:36 +01003754
3755 /* walk down the bs forest recursively */
Kevin Wolf88be7b42016-05-20 18:49:07 +02003756 for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003757 bool perm;
3758
Benoît Canetb5042a32014-03-03 19:11:34 +01003759 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003760 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003761
3762 /* candidate is the first non filter */
3763 if (perm) {
3764 return true;
3765 }
3766 }
3767
3768 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02003769}
Benoît Canet09158f02014-06-27 18:25:25 +02003770
Wen Congyange12f3782015-07-17 10:12:22 +08003771BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3772 const char *node_name, Error **errp)
Benoît Canet09158f02014-06-27 18:25:25 +02003773{
3774 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003775 AioContext *aio_context;
3776
Benoît Canet09158f02014-06-27 18:25:25 +02003777 if (!to_replace_bs) {
3778 error_setg(errp, "Node name '%s' not found", node_name);
3779 return NULL;
3780 }
3781
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003782 aio_context = bdrv_get_aio_context(to_replace_bs);
3783 aio_context_acquire(aio_context);
3784
Benoît Canet09158f02014-06-27 18:25:25 +02003785 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003786 to_replace_bs = NULL;
3787 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003788 }
3789
3790 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3791 * most non filter in order to prevent data corruption.
3792 * Another benefit is that this tests exclude backing files which are
3793 * blocked by the backing blockers.
3794 */
Wen Congyange12f3782015-07-17 10:12:22 +08003795 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
Benoît Canet09158f02014-06-27 18:25:25 +02003796 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003797 to_replace_bs = NULL;
3798 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003799 }
3800
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003801out:
3802 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02003803 return to_replace_bs;
3804}
Ming Lei448ad912014-07-04 18:04:33 +08003805
Max Reitz91af7012014-07-18 20:24:56 +02003806static bool append_open_options(QDict *d, BlockDriverState *bs)
3807{
3808 const QDictEntry *entry;
Kevin Wolf9e700c12015-04-24 15:20:28 +02003809 QemuOptDesc *desc;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003810 BdrvChild *child;
Max Reitz91af7012014-07-18 20:24:56 +02003811 bool found_any = false;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003812 const char *p;
Max Reitz91af7012014-07-18 20:24:56 +02003813
3814 for (entry = qdict_first(bs->options); entry;
3815 entry = qdict_next(bs->options, entry))
3816 {
Kevin Wolf260fecf2015-04-27 13:46:22 +02003817 /* Exclude options for children */
3818 QLIST_FOREACH(child, &bs->children, next) {
3819 if (strstart(qdict_entry_key(entry), child->name, &p)
3820 && (!*p || *p == '.'))
3821 {
3822 break;
3823 }
3824 }
3825 if (child) {
Kevin Wolf9e700c12015-04-24 15:20:28 +02003826 continue;
Max Reitz91af7012014-07-18 20:24:56 +02003827 }
Kevin Wolf9e700c12015-04-24 15:20:28 +02003828
3829 /* And exclude all non-driver-specific options */
3830 for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3831 if (!strcmp(qdict_entry_key(entry), desc->name)) {
3832 break;
3833 }
3834 }
3835 if (desc->name) {
3836 continue;
3837 }
3838
3839 qobject_incref(qdict_entry_value(entry));
3840 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3841 found_any = true;
Max Reitz91af7012014-07-18 20:24:56 +02003842 }
3843
3844 return found_any;
3845}
3846
3847/* Updates the following BDS fields:
3848 * - exact_filename: A filename which may be used for opening a block device
3849 * which (mostly) equals the given BDS (even without any
3850 * other options; so reading and writing must return the same
3851 * results, but caching etc. may be different)
3852 * - full_open_options: Options which, when given when opening a block device
3853 * (without a filename), result in a BDS (mostly)
3854 * equalling the given one
3855 * - filename: If exact_filename is set, it is copied here. Otherwise,
3856 * full_open_options is converted to a JSON object, prefixed with
3857 * "json:" (for use through the JSON pseudo protocol) and put here.
3858 */
3859void bdrv_refresh_filename(BlockDriverState *bs)
3860{
3861 BlockDriver *drv = bs->drv;
3862 QDict *opts;
3863
3864 if (!drv) {
3865 return;
3866 }
3867
3868 /* This BDS's file name will most probably depend on its file's name, so
3869 * refresh that first */
3870 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003871 bdrv_refresh_filename(bs->file->bs);
Max Reitz91af7012014-07-18 20:24:56 +02003872 }
3873
3874 if (drv->bdrv_refresh_filename) {
3875 /* Obsolete information is of no use here, so drop the old file name
3876 * information before refreshing it */
3877 bs->exact_filename[0] = '\0';
3878 if (bs->full_open_options) {
3879 QDECREF(bs->full_open_options);
3880 bs->full_open_options = NULL;
3881 }
3882
Kevin Wolf4cdd01d2015-04-27 13:50:54 +02003883 opts = qdict_new();
3884 append_open_options(opts, bs);
3885 drv->bdrv_refresh_filename(bs, opts);
3886 QDECREF(opts);
Max Reitz91af7012014-07-18 20:24:56 +02003887 } else if (bs->file) {
3888 /* Try to reconstruct valid information from the underlying file */
3889 bool has_open_options;
3890
3891 bs->exact_filename[0] = '\0';
3892 if (bs->full_open_options) {
3893 QDECREF(bs->full_open_options);
3894 bs->full_open_options = NULL;
3895 }
3896
3897 opts = qdict_new();
3898 has_open_options = append_open_options(opts, bs);
3899
3900 /* If no specific options have been given for this BDS, the filename of
3901 * the underlying file should suffice for this one as well */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003902 if (bs->file->bs->exact_filename[0] && !has_open_options) {
3903 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
Max Reitz91af7012014-07-18 20:24:56 +02003904 }
3905 /* Reconstructing the full options QDict is simple for most format block
3906 * drivers, as long as the full options are known for the underlying
3907 * file BDS. The full options QDict of that file BDS should somehow
3908 * contain a representation of the filename, therefore the following
3909 * suffices without querying the (exact_)filename of this BDS. */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003910 if (bs->file->bs->full_open_options) {
Max Reitz91af7012014-07-18 20:24:56 +02003911 qdict_put_obj(opts, "driver",
3912 QOBJECT(qstring_from_str(drv->format_name)));
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003913 QINCREF(bs->file->bs->full_open_options);
3914 qdict_put_obj(opts, "file",
3915 QOBJECT(bs->file->bs->full_open_options));
Max Reitz91af7012014-07-18 20:24:56 +02003916
3917 bs->full_open_options = opts;
3918 } else {
3919 QDECREF(opts);
3920 }
3921 } else if (!bs->full_open_options && qdict_size(bs->options)) {
3922 /* There is no underlying file BDS (at least referenced by BDS.file),
3923 * so the full options QDict should be equal to the options given
3924 * specifically for this block device when it was opened (plus the
3925 * driver specification).
3926 * Because those options don't change, there is no need to update
3927 * full_open_options when it's already set. */
3928
3929 opts = qdict_new();
3930 append_open_options(opts, bs);
3931 qdict_put_obj(opts, "driver",
3932 QOBJECT(qstring_from_str(drv->format_name)));
3933
3934 if (bs->exact_filename[0]) {
3935 /* This may not work for all block protocol drivers (some may
3936 * require this filename to be parsed), but we have to find some
3937 * default solution here, so just include it. If some block driver
3938 * does not support pure options without any filename at all or
3939 * needs some special format of the options QDict, it needs to
3940 * implement the driver-specific bdrv_refresh_filename() function.
3941 */
3942 qdict_put_obj(opts, "filename",
3943 QOBJECT(qstring_from_str(bs->exact_filename)));
3944 }
3945
3946 bs->full_open_options = opts;
3947 }
3948
3949 if (bs->exact_filename[0]) {
3950 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
3951 } else if (bs->full_open_options) {
3952 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
3953 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
3954 qstring_get_str(json));
3955 QDECREF(json);
3956 }
3957}
Wen Congyange06018a2016-05-10 15:36:37 +08003958
3959/*
3960 * Hot add/remove a BDS's child. So the user can take a child offline when
3961 * it is broken and take a new child online
3962 */
3963void bdrv_add_child(BlockDriverState *parent_bs, BlockDriverState *child_bs,
3964 Error **errp)
3965{
3966
3967 if (!parent_bs->drv || !parent_bs->drv->bdrv_add_child) {
3968 error_setg(errp, "The node %s does not support adding a child",
3969 bdrv_get_device_or_node_name(parent_bs));
3970 return;
3971 }
3972
3973 if (!QLIST_EMPTY(&child_bs->parents)) {
3974 error_setg(errp, "The node %s already has a parent",
3975 child_bs->node_name);
3976 return;
3977 }
3978
3979 parent_bs->drv->bdrv_add_child(parent_bs, child_bs, errp);
3980}
3981
3982void bdrv_del_child(BlockDriverState *parent_bs, BdrvChild *child, Error **errp)
3983{
3984 BdrvChild *tmp;
3985
3986 if (!parent_bs->drv || !parent_bs->drv->bdrv_del_child) {
3987 error_setg(errp, "The node %s does not support removing a child",
3988 bdrv_get_device_or_node_name(parent_bs));
3989 return;
3990 }
3991
3992 QLIST_FOREACH(tmp, &parent_bs->children, next) {
3993 if (tmp == child) {
3994 break;
3995 }
3996 }
3997
3998 if (!tmp) {
3999 error_setg(errp, "The node %s does not have a child named %s",
4000 bdrv_get_device_or_node_name(parent_bs),
4001 bdrv_get_device_or_node_name(child->bs));
4002 return;
4003 }
4004
4005 parent_bs->drv->bdrv_del_child(parent_bs, child, errp);
4006}