blob: af3584389de67bd668b8444d4bfa31c57866db3b [file] [log] [blame]
bellardfc01f7e2003-06-30 10:03:06 +00001/*
2 * QEMU System Emulator block driver
ths5fafdf22007-09-16 21:08:06 +00003 *
bellardfc01f7e2003-06-30 10:03:06 +00004 * Copyright (c) 2003 Fabrice Bellard
ths5fafdf22007-09-16 21:08:06 +00005 *
bellardfc01f7e2003-06-30 10:03:06 +00006 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
Peter Maydelld38ea872016-01-29 17:50:05 +000024#include "qemu/osdep.h"
Stefan Hajnoczi6d519a52010-05-22 18:15:08 +010025#include "trace.h"
Paolo Bonzini737e1502012-12-17 18:19:44 +010026#include "block/block_int.h"
27#include "block/blockjob.h"
Markus Armbrusterd49b6832015-03-17 18:29:20 +010028#include "qemu/error-report.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010029#include "qemu/module.h"
Markus Armbrustercc7a8ea2015-03-17 17:22:46 +010030#include "qapi/qmp/qerror.h"
Kevin Wolf91a097e2015-05-08 17:49:53 +020031#include "qapi/qmp/qbool.h"
Paolo Bonzini7b1b5d12012-12-17 18:19:43 +010032#include "qapi/qmp/qjson.h"
Markus Armbrusterbfb197e2014-10-07 13:59:11 +020033#include "sysemu/block-backend.h"
Paolo Bonzini9c17d612012-12-17 18:20:04 +010034#include "sysemu/sysemu.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010035#include "qemu/notify.h"
Daniel P. Berrange10817bf2015-09-01 14:48:02 +010036#include "qemu/coroutine.h"
Benoît Canetc13163f2014-01-23 21:31:34 +010037#include "block/qapi.h"
Luiz Capitulinob2023812011-09-21 17:16:47 -030038#include "qmp-commands.h"
Paolo Bonzini1de7afc2012-12-17 18:20:00 +010039#include "qemu/timer.h"
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +020040#include "qapi-event.h"
Alberto Garciadb628332015-06-08 18:17:45 +020041#include "block/throttle-groups.h"
Veronia Bahaaf348b6d2016-03-20 19:16:19 +020042#include "qemu/cutils.h"
43#include "qemu/id.h"
bellardfc01f7e2003-06-30 10:03:06 +000044
Juan Quintela71e72a12009-07-27 16:12:56 +020045#ifdef CONFIG_BSD
bellard7674e7b2005-04-26 21:59:26 +000046#include <sys/ioctl.h>
Blue Swirl72cf2d42009-09-12 07:36:22 +000047#include <sys/queue.h>
blueswir1c5e97232009-03-07 20:06:23 +000048#ifndef __DragonFly__
bellard7674e7b2005-04-26 21:59:26 +000049#include <sys/disk.h>
50#endif
blueswir1c5e97232009-03-07 20:06:23 +000051#endif
bellard7674e7b2005-04-26 21:59:26 +000052
aliguori49dc7682009-03-08 16:26:59 +000053#ifdef _WIN32
54#include <windows.h>
55#endif
56
Stefan Hajnoczi1c9805a2011-10-13 13:08:22 +010057#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
58
Benoît Canetdc364f42014-01-23 21:31:32 +010059static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
60 QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
61
Max Reitz2c1d04e2016-01-29 16:36:11 +010062static QTAILQ_HEAD(, BlockDriverState) all_bdrv_states =
63 QTAILQ_HEAD_INITIALIZER(all_bdrv_states);
64
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +010065static QLIST_HEAD(, BlockDriver) bdrv_drivers =
66 QLIST_HEAD_INITIALIZER(bdrv_drivers);
bellardea2384d2004-08-01 21:59:26 +000067
Kevin Wolff3930ed2015-04-08 13:43:47 +020068static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
69 const char *reference, QDict *options, int flags,
70 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +020071 const BdrvChildRole *child_role, Error **errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +020072
Markus Armbrustereb852012009-10-27 18:41:44 +010073/* If non-zero, use only whitelisted block drivers */
74static int use_bdrv_whitelist;
75
Max Reitz64dff522016-01-29 16:36:10 +010076static void bdrv_close(BlockDriverState *bs);
77
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +000078#ifdef _WIN32
79static int is_windows_drive_prefix(const char *filename)
80{
81 return (((filename[0] >= 'a' && filename[0] <= 'z') ||
82 (filename[0] >= 'A' && filename[0] <= 'Z')) &&
83 filename[1] == ':');
84}
85
86int is_windows_drive(const char *filename)
87{
88 if (is_windows_drive_prefix(filename) &&
89 filename[2] == '\0')
90 return 1;
91 if (strstart(filename, "\\\\.\\", NULL) ||
92 strstart(filename, "//./", NULL))
93 return 1;
94 return 0;
95}
96#endif
97
Kevin Wolf339064d2013-11-28 10:23:32 +010098size_t bdrv_opt_mem_align(BlockDriverState *bs)
99{
100 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300101 /* page size or 4k (hdd sector size) should be on the safe side */
102 return MAX(4096, getpagesize());
Kevin Wolf339064d2013-11-28 10:23:32 +0100103 }
104
105 return bs->bl.opt_mem_alignment;
106}
107
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300108size_t bdrv_min_mem_align(BlockDriverState *bs)
109{
110 if (!bs || !bs->drv) {
Denis V. Lunev459b4e62015-05-12 17:30:56 +0300111 /* page size or 4k (hdd sector size) should be on the safe side */
112 return MAX(4096, getpagesize());
Denis V. Lunev4196d2f2015-05-12 17:30:55 +0300113 }
114
115 return bs->bl.min_mem_alignment;
116}
117
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000118/* check if the path starts with "<protocol>:" */
Max Reitz5c984152014-12-03 14:57:22 +0100119int path_has_protocol(const char *path)
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000120{
Paolo Bonzini947995c2012-05-08 16:51:48 +0200121 const char *p;
122
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000123#ifdef _WIN32
124 if (is_windows_drive(path) ||
125 is_windows_drive_prefix(path)) {
126 return 0;
127 }
Paolo Bonzini947995c2012-05-08 16:51:48 +0200128 p = path + strcspn(path, ":/\\");
129#else
130 p = path + strcspn(path, ":/");
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000131#endif
132
Paolo Bonzini947995c2012-05-08 16:51:48 +0200133 return *p == ':';
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000134}
135
bellard83f64092006-08-01 16:21:11 +0000136int path_is_absolute(const char *path)
137{
bellard21664422007-01-07 18:22:37 +0000138#ifdef _WIN32
139 /* specific case for names like: "\\.\d:" */
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200140 if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
bellard21664422007-01-07 18:22:37 +0000141 return 1;
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200142 }
143 return (*path == '/' || *path == '\\');
bellard3b9f94e2007-01-07 17:27:07 +0000144#else
Paolo Bonzinif53f4da2012-05-08 16:51:47 +0200145 return (*path == '/');
bellard3b9f94e2007-01-07 17:27:07 +0000146#endif
bellard83f64092006-08-01 16:21:11 +0000147}
148
149/* if filename is absolute, just copy it to dest. Otherwise, build a
150 path to it by considering it is relative to base_path. URL are
151 supported. */
152void path_combine(char *dest, int dest_size,
153 const char *base_path,
154 const char *filename)
155{
156 const char *p, *p1;
157 int len;
158
159 if (dest_size <= 0)
160 return;
161 if (path_is_absolute(filename)) {
162 pstrcpy(dest, dest_size, filename);
163 } else {
164 p = strchr(base_path, ':');
165 if (p)
166 p++;
167 else
168 p = base_path;
bellard3b9f94e2007-01-07 17:27:07 +0000169 p1 = strrchr(base_path, '/');
170#ifdef _WIN32
171 {
172 const char *p2;
173 p2 = strrchr(base_path, '\\');
174 if (!p1 || p2 > p1)
175 p1 = p2;
176 }
177#endif
bellard83f64092006-08-01 16:21:11 +0000178 if (p1)
179 p1++;
180 else
181 p1 = base_path;
182 if (p1 > p)
183 p = p1;
184 len = p - base_path;
185 if (len > dest_size - 1)
186 len = dest_size - 1;
187 memcpy(dest, base_path, len);
188 dest[len] = '\0';
189 pstrcat(dest, dest_size, filename);
190 }
191}
192
Max Reitz0a828552014-11-26 17:20:25 +0100193void bdrv_get_full_backing_filename_from_filename(const char *backed,
194 const char *backing,
Max Reitz9f074292014-11-26 17:20:26 +0100195 char *dest, size_t sz,
196 Error **errp)
Max Reitz0a828552014-11-26 17:20:25 +0100197{
Max Reitz9f074292014-11-26 17:20:26 +0100198 if (backing[0] == '\0' || path_has_protocol(backing) ||
199 path_is_absolute(backing))
200 {
Max Reitz0a828552014-11-26 17:20:25 +0100201 pstrcpy(dest, sz, backing);
Max Reitz9f074292014-11-26 17:20:26 +0100202 } else if (backed[0] == '\0' || strstart(backed, "json:", NULL)) {
203 error_setg(errp, "Cannot use relative backing file names for '%s'",
204 backed);
Max Reitz0a828552014-11-26 17:20:25 +0100205 } else {
206 path_combine(dest, sz, backed, backing);
207 }
208}
209
Max Reitz9f074292014-11-26 17:20:26 +0100210void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz,
211 Error **errp)
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200212{
Max Reitz9f074292014-11-26 17:20:26 +0100213 char *backed = bs->exact_filename[0] ? bs->exact_filename : bs->filename;
214
215 bdrv_get_full_backing_filename_from_filename(backed, bs->backing_file,
216 dest, sz, errp);
Paolo Bonzinidc5a1372012-05-08 16:51:50 +0200217}
218
Stefan Hajnoczi0eb72172015-04-28 14:27:51 +0100219void bdrv_register(BlockDriver *bdrv)
220{
221 bdrv_setup_io_funcs(bdrv);
Christoph Hellwigb2e12bc2009-09-04 19:01:49 +0200222
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100223 QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
bellardea2384d2004-08-01 21:59:26 +0000224}
bellardb3380822004-03-14 21:38:54 +0000225
Markus Armbruster7f06d472014-10-07 13:59:12 +0200226BlockDriverState *bdrv_new_root(void)
bellardfc01f7e2003-06-30 10:03:06 +0000227{
Max Reitz9aaf28c2016-03-16 19:54:45 +0100228 return bdrv_new();
Markus Armbrustere4e99862014-10-07 13:59:03 +0200229}
230
231BlockDriverState *bdrv_new(void)
232{
233 BlockDriverState *bs;
234 int i;
235
Markus Armbruster5839e532014-08-19 10:31:08 +0200236 bs = g_new0(BlockDriverState, 1);
Fam Zhenge4654d22013-11-13 18:29:43 +0800237 QLIST_INIT(&bs->dirty_bitmaps);
Fam Zhengfbe40ff2014-05-23 21:29:42 +0800238 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
239 QLIST_INIT(&bs->op_blockers[i]);
240 }
Stefan Hajnoczid616b222013-06-24 17:13:10 +0200241 notifier_with_return_list_init(&bs->before_write_notifiers);
Benoît Canetcc0681c2013-09-02 14:14:39 +0200242 qemu_co_queue_init(&bs->throttled_reqs[0]);
243 qemu_co_queue_init(&bs->throttled_reqs[1]);
Fam Zheng9fcb0252013-08-23 09:14:46 +0800244 bs->refcnt = 1;
Stefan Hajnoczidcd04222014-05-08 16:34:37 +0200245 bs->aio_context = qemu_get_aio_context();
Paolo Bonzinid7d512f2012-08-23 11:20:36 +0200246
Max Reitz2c1d04e2016-01-29 16:36:11 +0100247 QTAILQ_INSERT_TAIL(&all_bdrv_states, bs, bs_list);
248
bellardb3380822004-03-14 21:38:54 +0000249 return bs;
250}
251
bellardea2384d2004-08-01 21:59:26 +0000252BlockDriver *bdrv_find_format(const char *format_name)
253{
254 BlockDriver *drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100255 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
256 if (!strcmp(drv1->format_name, format_name)) {
bellardea2384d2004-08-01 21:59:26 +0000257 return drv1;
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100258 }
bellardea2384d2004-08-01 21:59:26 +0000259 }
260 return NULL;
261}
262
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800263static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
Markus Armbrustereb852012009-10-27 18:41:44 +0100264{
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800265 static const char *whitelist_rw[] = {
266 CONFIG_BDRV_RW_WHITELIST
267 };
268 static const char *whitelist_ro[] = {
269 CONFIG_BDRV_RO_WHITELIST
Markus Armbrustereb852012009-10-27 18:41:44 +0100270 };
271 const char **p;
272
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800273 if (!whitelist_rw[0] && !whitelist_ro[0]) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100274 return 1; /* no whitelist, anything goes */
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800275 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100276
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800277 for (p = whitelist_rw; *p; p++) {
Markus Armbrustereb852012009-10-27 18:41:44 +0100278 if (!strcmp(drv->format_name, *p)) {
279 return 1;
280 }
281 }
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800282 if (read_only) {
283 for (p = whitelist_ro; *p; p++) {
284 if (!strcmp(drv->format_name, *p)) {
285 return 1;
286 }
287 }
288 }
Markus Armbrustereb852012009-10-27 18:41:44 +0100289 return 0;
290}
291
Daniel P. Berrangee6ff69b2016-03-21 14:11:48 +0000292bool bdrv_uses_whitelist(void)
293{
294 return use_bdrv_whitelist;
295}
296
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800297typedef struct CreateCo {
298 BlockDriver *drv;
299 char *filename;
Chunyan Liu83d05212014-06-05 17:20:51 +0800300 QemuOpts *opts;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800301 int ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200302 Error *err;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800303} CreateCo;
304
305static void coroutine_fn bdrv_create_co_entry(void *opaque)
306{
Max Reitzcc84d902013-09-06 17:14:26 +0200307 Error *local_err = NULL;
308 int ret;
309
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800310 CreateCo *cco = opaque;
311 assert(cco->drv);
312
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800313 ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100314 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200315 error_propagate(&cco->err, local_err);
316 }
317 cco->ret = ret;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800318}
319
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200320int bdrv_create(BlockDriver *drv, const char* filename,
Chunyan Liu83d05212014-06-05 17:20:51 +0800321 QemuOpts *opts, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000322{
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800323 int ret;
Kevin Wolf0e7e1982009-05-18 16:42:10 +0200324
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800325 Coroutine *co;
326 CreateCo cco = {
327 .drv = drv,
328 .filename = g_strdup(filename),
Chunyan Liu83d05212014-06-05 17:20:51 +0800329 .opts = opts,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800330 .ret = NOT_DONE,
Max Reitzcc84d902013-09-06 17:14:26 +0200331 .err = NULL,
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800332 };
333
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800334 if (!drv->bdrv_create) {
Max Reitzcc84d902013-09-06 17:14:26 +0200335 error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300336 ret = -ENOTSUP;
337 goto out;
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800338 }
339
340 if (qemu_in_coroutine()) {
341 /* Fast-path if already in coroutine context */
342 bdrv_create_co_entry(&cco);
343 } else {
344 co = qemu_coroutine_create(bdrv_create_co_entry);
345 qemu_coroutine_enter(co, &cco);
346 while (cco.ret == NOT_DONE) {
Paolo Bonzinib47ec2c2014-07-07 15:18:01 +0200347 aio_poll(qemu_get_aio_context(), true);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800348 }
349 }
350
351 ret = cco.ret;
Max Reitzcc84d902013-09-06 17:14:26 +0200352 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +0100353 if (cco.err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200354 error_propagate(errp, cco.err);
355 } else {
356 error_setg_errno(errp, -ret, "Could not create image");
357 }
358 }
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800359
Luiz Capitulino80168bf2012-10-17 16:45:25 -0300360out:
361 g_free(cco.filename);
Zhi Yong Wu5b7e1542012-05-07 16:50:42 +0800362 return ret;
bellardea2384d2004-08-01 21:59:26 +0000363}
364
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800365int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200366{
367 BlockDriver *drv;
Max Reitzcc84d902013-09-06 17:14:26 +0200368 Error *local_err = NULL;
369 int ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200370
Max Reitzb65a5e12015-02-05 13:58:12 -0500371 drv = bdrv_find_protocol(filename, true, errp);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200372 if (drv == NULL) {
Stefan Hajnoczi16905d72010-11-30 15:14:14 +0000373 return -ENOENT;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200374 }
375
Chunyan Liuc282e1f2014-06-05 17:21:11 +0800376 ret = bdrv_create(drv, filename, opts, &local_err);
Markus Armbruster84d18f02014-01-30 15:07:28 +0100377 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +0200378 error_propagate(errp, local_err);
379 }
380 return ret;
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200381}
382
Ekaterina Tumanova892b7de2015-02-16 12:47:54 +0100383/**
384 * Try to get @bs's logical and physical block size.
385 * On success, store them in @bsz struct and return 0.
386 * On failure return -errno.
387 * @bs must not be empty.
388 */
389int bdrv_probe_blocksizes(BlockDriverState *bs, BlockSizes *bsz)
390{
391 BlockDriver *drv = bs->drv;
392
393 if (drv && drv->bdrv_probe_blocksizes) {
394 return drv->bdrv_probe_blocksizes(bs, bsz);
395 }
396
397 return -ENOTSUP;
398}
399
400/**
401 * Try to get @bs's geometry (cyls, heads, sectors).
402 * On success, store them in @geo struct and return 0.
403 * On failure return -errno.
404 * @bs must not be empty.
405 */
406int bdrv_probe_geometry(BlockDriverState *bs, HDGeometry *geo)
407{
408 BlockDriver *drv = bs->drv;
409
410 if (drv && drv->bdrv_probe_geometry) {
411 return drv->bdrv_probe_geometry(bs, geo);
412 }
413
414 return -ENOTSUP;
415}
416
Jim Meyeringeba25052012-05-28 09:27:54 +0200417/*
418 * Create a uniquely-named empty temporary file.
419 * Return 0 upon success, otherwise a negative errno value.
420 */
421int get_tmp_filename(char *filename, int size)
422{
bellardd5249392004-08-03 21:14:23 +0000423#ifdef _WIN32
bellard3b9f94e2007-01-07 17:27:07 +0000424 char temp_dir[MAX_PATH];
Jim Meyeringeba25052012-05-28 09:27:54 +0200425 /* GetTempFileName requires that its output buffer (4th param)
426 have length MAX_PATH or greater. */
427 assert(size >= MAX_PATH);
428 return (GetTempPath(MAX_PATH, temp_dir)
429 && GetTempFileName(temp_dir, "qem", 0, filename)
430 ? 0 : -GetLastError());
bellardd5249392004-08-03 21:14:23 +0000431#else
bellardea2384d2004-08-01 21:59:26 +0000432 int fd;
blueswir17ccfb2e2008-09-14 06:45:34 +0000433 const char *tmpdir;
aurel320badc1e2008-03-10 00:05:34 +0000434 tmpdir = getenv("TMPDIR");
Amit Shah69bef792014-02-26 15:12:37 +0530435 if (!tmpdir) {
436 tmpdir = "/var/tmp";
437 }
Jim Meyeringeba25052012-05-28 09:27:54 +0200438 if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
439 return -EOVERFLOW;
440 }
bellardea2384d2004-08-01 21:59:26 +0000441 fd = mkstemp(filename);
Dunrong Huangfe235a02012-09-05 21:26:22 +0800442 if (fd < 0) {
443 return -errno;
444 }
445 if (close(fd) != 0) {
446 unlink(filename);
Jim Meyeringeba25052012-05-28 09:27:54 +0200447 return -errno;
448 }
449 return 0;
bellardd5249392004-08-03 21:14:23 +0000450#endif
Jim Meyeringeba25052012-05-28 09:27:54 +0200451}
bellardea2384d2004-08-01 21:59:26 +0000452
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200453/*
454 * Detect host devices. By convention, /dev/cdrom[N] is always
455 * recognized as a host CDROM.
456 */
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200457static BlockDriver *find_hdev_driver(const char *filename)
458{
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200459 int score_max = 0, score;
460 BlockDriver *drv = NULL, *d;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200461
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +0100462 QLIST_FOREACH(d, &bdrv_drivers, list) {
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200463 if (d->bdrv_probe_device) {
464 score = d->bdrv_probe_device(filename);
465 if (score > score_max) {
466 score_max = score;
467 drv = d;
468 }
469 }
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200470 }
471
Christoph Hellwig508c7cb2009-06-15 14:04:22 +0200472 return drv;
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200473}
Christoph Hellwigf3a5d3f2009-06-15 13:55:19 +0200474
Kevin Wolf98289622013-07-10 15:47:39 +0200475BlockDriver *bdrv_find_protocol(const char *filename,
Max Reitzb65a5e12015-02-05 13:58:12 -0500476 bool allow_protocol_prefix,
477 Error **errp)
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200478{
479 BlockDriver *drv1;
480 char protocol[128];
481 int len;
482 const char *p;
483
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200484 /* TODO Drivers without bdrv_file_open must be specified explicitly */
485
Christoph Hellwig39508e72010-06-23 12:25:17 +0200486 /*
487 * XXX(hch): we really should not let host device detection
488 * override an explicit protocol specification, but moving this
489 * later breaks access to device names with colons in them.
490 * Thanks to the brain-dead persistent naming schemes on udev-
491 * based Linux systems those actually are quite common.
492 */
493 drv1 = find_hdev_driver(filename);
494 if (drv1) {
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200495 return drv1;
496 }
Christoph Hellwig39508e72010-06-23 12:25:17 +0200497
Kevin Wolf98289622013-07-10 15:47:39 +0200498 if (!path_has_protocol(filename) || !allow_protocol_prefix) {
Max Reitzef810432014-12-02 18:32:42 +0100499 return &bdrv_file;
Christoph Hellwig39508e72010-06-23 12:25:17 +0200500 }
Kevin Wolf98289622013-07-10 15:47:39 +0200501
Stefan Hajnoczi9e0b22f2010-12-09 11:53:00 +0000502 p = strchr(filename, ':');
503 assert(p != NULL);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200504 len = p - filename;
505 if (len > sizeof(protocol) - 1)
506 len = sizeof(protocol) - 1;
507 memcpy(protocol, filename, len);
508 protocol[len] = '\0';
509 QLIST_FOREACH(drv1, &bdrv_drivers, list) {
510 if (drv1->protocol_name &&
511 !strcmp(drv1->protocol_name, protocol)) {
512 return drv1;
513 }
514 }
Max Reitzb65a5e12015-02-05 13:58:12 -0500515
516 error_setg(errp, "Unknown protocol '%s'", protocol);
Christoph Hellwig84a12e62010-04-07 22:30:24 +0200517 return NULL;
518}
519
Markus Armbrusterc6684242014-11-20 16:27:10 +0100520/*
521 * Guess image format by probing its contents.
522 * This is not a good idea when your image is raw (CVE-2008-2004), but
523 * we do it anyway for backward compatibility.
524 *
525 * @buf contains the image's first @buf_size bytes.
Kevin Wolf7cddd372014-11-20 16:27:11 +0100526 * @buf_size is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
527 * but can be smaller if the image file is smaller)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100528 * @filename is its filename.
529 *
530 * For all block drivers, call the bdrv_probe() method to get its
531 * probing score.
532 * Return the first block driver with the highest probing score.
533 */
Kevin Wolf38f3ef52014-11-20 16:27:12 +0100534BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
535 const char *filename)
Markus Armbrusterc6684242014-11-20 16:27:10 +0100536{
537 int score_max = 0, score;
538 BlockDriver *drv = NULL, *d;
539
540 QLIST_FOREACH(d, &bdrv_drivers, list) {
541 if (d->bdrv_probe) {
542 score = d->bdrv_probe(buf, buf_size, filename);
543 if (score > score_max) {
544 score_max = score;
545 drv = d;
546 }
547 }
548 }
549
550 return drv;
551}
552
Kevin Wolff500a6d2012-11-12 17:35:27 +0100553static int find_image_format(BlockDriverState *bs, const char *filename,
Max Reitz34b5d2c2013-09-05 14:45:29 +0200554 BlockDriver **pdrv, Error **errp)
bellardea2384d2004-08-01 21:59:26 +0000555{
Markus Armbrusterc6684242014-11-20 16:27:10 +0100556 BlockDriver *drv;
Kevin Wolf7cddd372014-11-20 16:27:11 +0100557 uint8_t buf[BLOCK_PROBE_BUF_SIZE];
Kevin Wolff500a6d2012-11-12 17:35:27 +0100558 int ret = 0;
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700559
Kevin Wolf08a00552010-06-01 18:37:31 +0200560 /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300561 if (bdrv_is_sg(bs) || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
Max Reitzef810432014-12-02 18:32:42 +0100562 *pdrv = &bdrv_raw;
Stefan Weilc98ac352010-07-21 21:51:51 +0200563 return ret;
Nicholas A. Bellinger1a396852010-05-27 08:56:28 -0700564 }
Nicholas Bellingerf8ea0b02010-05-17 09:45:57 -0700565
bellard83f64092006-08-01 16:21:11 +0000566 ret = bdrv_pread(bs, 0, buf, sizeof(buf));
bellard83f64092006-08-01 16:21:11 +0000567 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200568 error_setg_errno(errp, -ret, "Could not read image for determining its "
569 "format");
Stefan Weilc98ac352010-07-21 21:51:51 +0200570 *pdrv = NULL;
571 return ret;
bellard83f64092006-08-01 16:21:11 +0000572 }
573
Markus Armbrusterc6684242014-11-20 16:27:10 +0100574 drv = bdrv_probe_all(buf, ret, filename);
Stefan Weilc98ac352010-07-21 21:51:51 +0200575 if (!drv) {
Max Reitz34b5d2c2013-09-05 14:45:29 +0200576 error_setg(errp, "Could not determine image format: No compatible "
577 "driver found");
Stefan Weilc98ac352010-07-21 21:51:51 +0200578 ret = -ENOENT;
579 }
580 *pdrv = drv;
581 return ret;
bellardea2384d2004-08-01 21:59:26 +0000582}
583
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100584/**
585 * Set the current 'total_sectors' value
Markus Armbruster65a9bb22014-06-26 13:23:17 +0200586 * Return 0 on success, -errno on error.
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100587 */
588static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
589{
590 BlockDriver *drv = bs->drv;
591
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700592 /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +0300593 if (bdrv_is_sg(bs))
Nicholas Bellinger396759a2010-05-17 09:46:04 -0700594 return 0;
595
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100596 /* query actual device if possible, otherwise just trust the hint */
597 if (drv->bdrv_getlength) {
598 int64_t length = drv->bdrv_getlength(bs);
599 if (length < 0) {
600 return length;
601 }
Fam Zheng7e382002013-11-06 19:48:06 +0800602 hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
Stefan Hajnoczi51762282010-04-19 16:56:41 +0100603 }
604
605 bs->total_sectors = hint;
606 return 0;
607}
608
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100609/**
Kevin Wolfcddff5b2015-11-16 16:43:27 +0100610 * Combines a QDict of new block driver @options with any missing options taken
611 * from @old_options, so that leaving out an option defaults to its old value.
612 */
613static void bdrv_join_options(BlockDriverState *bs, QDict *options,
614 QDict *old_options)
615{
616 if (bs->drv && bs->drv->bdrv_join_options) {
617 bs->drv->bdrv_join_options(options, old_options);
618 } else {
619 qdict_join(options, old_options, false);
620 }
621}
622
623/**
Paolo Bonzini9e8f1832013-02-08 14:06:11 +0100624 * Set open flags for a given discard mode
625 *
626 * Return 0 on success, -1 if the discard mode was invalid.
627 */
628int bdrv_parse_discard_flags(const char *mode, int *flags)
629{
630 *flags &= ~BDRV_O_UNMAP;
631
632 if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
633 /* do nothing */
634 } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
635 *flags |= BDRV_O_UNMAP;
636 } else {
637 return -1;
638 }
639
640 return 0;
641}
642
643/**
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100644 * Set open flags for a given cache mode
645 *
646 * Return 0 on success, -1 if the cache mode was invalid.
647 */
648int bdrv_parse_cache_flags(const char *mode, int *flags)
649{
650 *flags &= ~BDRV_O_CACHE_MASK;
651
652 if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
653 *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
Stefan Hajnoczi92196b22011-08-04 12:26:52 +0100654 } else if (!strcmp(mode, "directsync")) {
655 *flags |= BDRV_O_NOCACHE;
Stefan Hajnoczic3993cd2011-08-04 12:26:51 +0100656 } else if (!strcmp(mode, "writeback")) {
657 *flags |= BDRV_O_CACHE_WB;
658 } else if (!strcmp(mode, "unsafe")) {
659 *flags |= BDRV_O_CACHE_WB;
660 *flags |= BDRV_O_NO_FLUSH;
661 } else if (!strcmp(mode, "writethrough")) {
662 /* this is the default */
663 } else {
664 return -1;
665 }
666
667 return 0;
668}
669
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200670/*
Kevin Wolf73176be2016-03-07 13:02:15 +0100671 * Returns the options and flags that a temporary snapshot should get, based on
672 * the originally requested flags (the originally requested image will have
673 * flags like a backing file)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200674 */
Kevin Wolf73176be2016-03-07 13:02:15 +0100675static void bdrv_temp_snapshot_options(int *child_flags, QDict *child_options,
676 int parent_flags, QDict *parent_options)
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200677{
Kevin Wolf73176be2016-03-07 13:02:15 +0100678 *child_flags = (parent_flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
679
680 /* For temporary files, unconditional cache=unsafe is fine */
681 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
682 qdict_set_default_str(child_options, BDRV_OPT_CACHE_DIRECT, "off");
683 qdict_set_default_str(child_options, BDRV_OPT_CACHE_NO_FLUSH, "on");
Kevin Wolfb1e6fc02014-05-06 12:11:42 +0200684}
685
686/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200687 * Returns the options and flags that bs->file should get if a protocol driver
688 * is expected, based on the given options and flags for the parent BDS
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200689 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200690static void bdrv_inherited_options(int *child_flags, QDict *child_options,
691 int parent_flags, QDict *parent_options)
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200692{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200693 int flags = parent_flags;
694
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200695 /* Enable protocol handling, disable format probing for bs->file */
696 flags |= BDRV_O_PROTOCOL;
697
Kevin Wolf91a097e2015-05-08 17:49:53 +0200698 /* If the cache mode isn't explicitly set, inherit direct and no-flush from
699 * the parent. */
700 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
701 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
702
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200703 /* Our block drivers take care to send flushes and respect unmap policy,
Kevin Wolf91a097e2015-05-08 17:49:53 +0200704 * so we can default to enable both on lower layers regardless of the
705 * corresponding parent options. */
706 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
707 flags |= BDRV_O_UNMAP;
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200708
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200709 /* Clear flags that only apply to the top layer */
Daniel P. Berrangeabb06c52016-03-21 14:11:42 +0000710 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ |
711 BDRV_O_NO_IO);
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200712
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200713 *child_flags = flags;
Kevin Wolf0b50cc82014-04-11 21:29:52 +0200714}
715
Kevin Wolff3930ed2015-04-08 13:43:47 +0200716const BdrvChildRole child_file = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200717 .inherit_options = bdrv_inherited_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200718};
719
720/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200721 * Returns the options and flags that bs->file should get if the use of formats
722 * (and not only protocols) is permitted for it, based on the given options and
723 * flags for the parent BDS
Kevin Wolff3930ed2015-04-08 13:43:47 +0200724 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200725static void bdrv_inherited_fmt_options(int *child_flags, QDict *child_options,
726 int parent_flags, QDict *parent_options)
Kevin Wolff3930ed2015-04-08 13:43:47 +0200727{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200728 child_file.inherit_options(child_flags, child_options,
729 parent_flags, parent_options);
730
Daniel P. Berrangeabb06c52016-03-21 14:11:42 +0000731 *child_flags &= ~(BDRV_O_PROTOCOL | BDRV_O_NO_IO);
Kevin Wolff3930ed2015-04-08 13:43:47 +0200732}
733
734const BdrvChildRole child_format = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200735 .inherit_options = bdrv_inherited_fmt_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200736};
737
Kevin Wolf317fc442014-04-25 13:27:34 +0200738/*
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200739 * Returns the options and flags that bs->backing should get, based on the
740 * given options and flags for the parent BDS
Kevin Wolf317fc442014-04-25 13:27:34 +0200741 */
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200742static void bdrv_backing_options(int *child_flags, QDict *child_options,
743 int parent_flags, QDict *parent_options)
Kevin Wolf317fc442014-04-25 13:27:34 +0200744{
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200745 int flags = parent_flags;
746
Kevin Wolfb8816a42016-03-04 14:52:32 +0100747 /* The cache mode is inherited unmodified for backing files; except WCE,
748 * which is only applied on the top level (BlockBackend) */
749 qdict_set_default_str(child_options, BDRV_OPT_CACHE_WB, "on");
Kevin Wolf91a097e2015-05-08 17:49:53 +0200750 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
751 qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
752
Kevin Wolf317fc442014-04-25 13:27:34 +0200753 /* backing files always opened read-only */
754 flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
755
756 /* snapshot=on is handled on the top layer */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200757 flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
Kevin Wolf317fc442014-04-25 13:27:34 +0200758
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200759 *child_flags = flags;
Kevin Wolf317fc442014-04-25 13:27:34 +0200760}
761
Kevin Wolff3930ed2015-04-08 13:43:47 +0200762static const BdrvChildRole child_backing = {
Kevin Wolf8e2160e2015-04-29 17:29:39 +0200763 .inherit_options = bdrv_backing_options,
Kevin Wolff3930ed2015-04-08 13:43:47 +0200764};
765
Kevin Wolf7b272452012-11-12 17:05:39 +0100766static int bdrv_open_flags(BlockDriverState *bs, int flags)
767{
768 int open_flags = flags | BDRV_O_CACHE_WB;
769
770 /*
771 * Clear flags that are internal to the block layer before opening the
772 * image.
773 */
Kevin Wolf20cca272014-06-04 14:33:27 +0200774 open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
Kevin Wolf7b272452012-11-12 17:05:39 +0100775
776 /*
777 * Snapshots should be writable.
778 */
Kevin Wolf8bfea152014-04-11 19:16:36 +0200779 if (flags & BDRV_O_TEMPORARY) {
Kevin Wolf7b272452012-11-12 17:05:39 +0100780 open_flags |= BDRV_O_RDWR;
781 }
782
783 return open_flags;
784}
785
Kevin Wolf91a097e2015-05-08 17:49:53 +0200786static void update_flags_from_options(int *flags, QemuOpts *opts)
787{
788 *flags &= ~BDRV_O_CACHE_MASK;
789
790 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_WB));
791 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, false)) {
792 *flags |= BDRV_O_CACHE_WB;
793 }
794
795 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_NO_FLUSH));
796 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
797 *flags |= BDRV_O_NO_FLUSH;
798 }
799
800 assert(qemu_opt_find(opts, BDRV_OPT_CACHE_DIRECT));
801 if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
802 *flags |= BDRV_O_NOCACHE;
803 }
804}
805
806static void update_options_from_flags(QDict *options, int flags)
807{
808 if (!qdict_haskey(options, BDRV_OPT_CACHE_WB)) {
809 qdict_put(options, BDRV_OPT_CACHE_WB,
810 qbool_from_bool(flags & BDRV_O_CACHE_WB));
811 }
812 if (!qdict_haskey(options, BDRV_OPT_CACHE_DIRECT)) {
813 qdict_put(options, BDRV_OPT_CACHE_DIRECT,
814 qbool_from_bool(flags & BDRV_O_NOCACHE));
815 }
816 if (!qdict_haskey(options, BDRV_OPT_CACHE_NO_FLUSH)) {
817 qdict_put(options, BDRV_OPT_CACHE_NO_FLUSH,
818 qbool_from_bool(flags & BDRV_O_NO_FLUSH));
819 }
820}
821
Kevin Wolf636ea372014-01-24 14:11:52 +0100822static void bdrv_assign_node_name(BlockDriverState *bs,
823 const char *node_name,
824 Error **errp)
Benoît Canet6913c0c2014-01-23 21:31:33 +0100825{
Jeff Cody15489c72015-10-12 19:36:50 -0400826 char *gen_node_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100827
Jeff Cody15489c72015-10-12 19:36:50 -0400828 if (!node_name) {
829 node_name = gen_node_name = id_generate(ID_BLOCK);
830 } else if (!id_wellformed(node_name)) {
831 /*
832 * Check for empty string or invalid characters, but not if it is
833 * generated (generated names use characters not available to the user)
834 */
Kevin Wolf9aebf3b2014-09-25 09:54:02 +0200835 error_setg(errp, "Invalid node name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100836 return;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100837 }
838
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100839 /* takes care of avoiding namespaces collisions */
Markus Armbruster7f06d472014-10-07 13:59:12 +0200840 if (blk_by_name(node_name)) {
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100841 error_setg(errp, "node-name=%s is conflicting with a device id",
842 node_name);
Jeff Cody15489c72015-10-12 19:36:50 -0400843 goto out;
Benoît Canet0c5e94e2014-02-12 17:15:07 +0100844 }
845
Benoît Canet6913c0c2014-01-23 21:31:33 +0100846 /* takes care of avoiding duplicates node names */
847 if (bdrv_find_node(node_name)) {
848 error_setg(errp, "Duplicate node name");
Jeff Cody15489c72015-10-12 19:36:50 -0400849 goto out;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100850 }
851
852 /* copy node name into the bs and insert it into the graph list */
853 pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
854 QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
Jeff Cody15489c72015-10-12 19:36:50 -0400855out:
856 g_free(gen_node_name);
Benoît Canet6913c0c2014-01-23 21:31:33 +0100857}
858
Kevin Wolf18edf282015-04-07 17:12:56 +0200859static QemuOptsList bdrv_runtime_opts = {
860 .name = "bdrv_common",
861 .head = QTAILQ_HEAD_INITIALIZER(bdrv_runtime_opts.head),
862 .desc = {
863 {
864 .name = "node-name",
865 .type = QEMU_OPT_STRING,
866 .help = "Node name of the block device node",
867 },
Kevin Wolf62392eb2015-04-24 16:38:02 +0200868 {
869 .name = "driver",
870 .type = QEMU_OPT_STRING,
871 .help = "Block driver to use for the node",
872 },
Kevin Wolf91a097e2015-05-08 17:49:53 +0200873 {
874 .name = BDRV_OPT_CACHE_WB,
875 .type = QEMU_OPT_BOOL,
876 .help = "Enable writeback mode",
877 },
878 {
879 .name = BDRV_OPT_CACHE_DIRECT,
880 .type = QEMU_OPT_BOOL,
881 .help = "Bypass software writeback cache on the host",
882 },
883 {
884 .name = BDRV_OPT_CACHE_NO_FLUSH,
885 .type = QEMU_OPT_BOOL,
886 .help = "Ignore flush requests",
887 },
Kevin Wolf18edf282015-04-07 17:12:56 +0200888 { /* end of list */ }
889 },
890};
891
Kevin Wolfb6ce07a2010-04-12 16:37:13 +0200892/*
Kevin Wolf57915332010-04-14 15:24:50 +0200893 * Common part for opening disk images and files
Kevin Wolfb6ad4912013-03-15 10:35:04 +0100894 *
895 * Removes all processed options from *options.
Kevin Wolf57915332010-04-14 15:24:50 +0200896 */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200897static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file,
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100898 QDict *options, Error **errp)
Kevin Wolf57915332010-04-14 15:24:50 +0200899{
900 int ret, open_flags;
Kevin Wolf035fccd2013-04-09 14:34:19 +0200901 const char *filename;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200902 const char *driver_name = NULL;
Benoît Canet6913c0c2014-01-23 21:31:33 +0100903 const char *node_name = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +0200904 QemuOpts *opts;
Kevin Wolf62392eb2015-04-24 16:38:02 +0200905 BlockDriver *drv;
Max Reitz34b5d2c2013-09-05 14:45:29 +0200906 Error *local_err = NULL;
Kevin Wolf57915332010-04-14 15:24:50 +0200907
Paolo Bonzini64058752012-05-08 16:51:49 +0200908 assert(bs->file == NULL);
Kevin Wolf707ff822013-03-06 12:20:31 +0100909 assert(options != NULL && bs->options != options);
Kevin Wolf57915332010-04-14 15:24:50 +0200910
Kevin Wolf62392eb2015-04-24 16:38:02 +0200911 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
912 qemu_opts_absorb_qdict(opts, options, &local_err);
913 if (local_err) {
914 error_propagate(errp, local_err);
915 ret = -EINVAL;
916 goto fail_opts;
917 }
918
919 driver_name = qemu_opt_get(opts, "driver");
920 drv = bdrv_find_format(driver_name);
921 assert(drv != NULL);
922
Kevin Wolf45673672013-04-22 17:48:40 +0200923 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +0200924 filename = file->bs->filename;
Kevin Wolf45673672013-04-22 17:48:40 +0200925 } else {
926 filename = qdict_get_try_str(options, "filename");
927 }
928
Kevin Wolf765003d2014-02-03 14:49:42 +0100929 if (drv->bdrv_needs_filename && !filename) {
930 error_setg(errp, "The '%s' block driver requires a file name",
931 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200932 ret = -EINVAL;
933 goto fail_opts;
934 }
935
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100936 trace_bdrv_open_common(bs, filename ?: "", bs->open_flags,
937 drv->format_name);
Kevin Wolf62392eb2015-04-24 16:38:02 +0200938
Kevin Wolf18edf282015-04-07 17:12:56 +0200939 node_name = qemu_opt_get(opts, "node-name");
Kevin Wolf636ea372014-01-24 14:11:52 +0100940 bdrv_assign_node_name(bs, node_name, &local_err);
Markus Armbruster0fb63952014-04-25 16:50:31 +0200941 if (local_err) {
Kevin Wolf636ea372014-01-24 14:11:52 +0100942 error_propagate(errp, local_err);
Kevin Wolf18edf282015-04-07 17:12:56 +0200943 ret = -EINVAL;
944 goto fail_opts;
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100945 }
946
Paolo Bonzinic25f53b2011-11-29 12:42:20 +0100947 bs->request_alignment = 512;
Asias He0d51b4d2013-08-22 15:24:14 +0800948 bs->zero_beyond_eof = true;
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100949 bs->read_only = !(bs->open_flags & BDRV_O_RDWR);
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800950
951 if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
Kevin Wolf8f94a6e2013-10-10 11:45:55 +0200952 error_setg(errp,
953 !bs->read_only && bdrv_is_whitelisted(drv, true)
954 ? "Driver '%s' can only be used for read-only devices"
955 : "Driver '%s' is not whitelisted",
956 drv->format_name);
Kevin Wolf18edf282015-04-07 17:12:56 +0200957 ret = -ENOTSUP;
958 goto fail_opts;
Fam Zhengb64ec4e2013-05-29 19:35:40 +0800959 }
Kevin Wolf57915332010-04-14 15:24:50 +0200960
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000961 assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100962 if (bs->open_flags & BDRV_O_COPY_ON_READ) {
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200963 if (!bs->read_only) {
964 bdrv_enable_copy_on_read(bs);
965 } else {
966 error_setg(errp, "Can't use copy-on-read on read-only device");
Kevin Wolf18edf282015-04-07 17:12:56 +0200967 ret = -EINVAL;
968 goto fail_opts;
Kevin Wolf0ebd24e2013-09-19 15:12:18 +0200969 }
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +0000970 }
971
Kevin Wolfc2ad1b02013-03-18 16:40:51 +0100972 if (filename != NULL) {
973 pstrcpy(bs->filename, sizeof(bs->filename), filename);
974 } else {
975 bs->filename[0] = '\0';
976 }
Max Reitz91af7012014-07-18 20:24:56 +0200977 pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
Kevin Wolf57915332010-04-14 15:24:50 +0200978
Kevin Wolf57915332010-04-14 15:24:50 +0200979 bs->drv = drv;
Anthony Liguori7267c092011-08-20 22:09:37 -0500980 bs->opaque = g_malloc0(drv->instance_size);
Kevin Wolf57915332010-04-14 15:24:50 +0200981
Kevin Wolf91a097e2015-05-08 17:49:53 +0200982 /* Apply cache mode options */
983 update_flags_from_options(&bs->open_flags, opts);
Kevin Wolf73ac4512016-03-14 15:46:03 +0100984
985 if (!bs->blk && (bs->open_flags & BDRV_O_CACHE_WB) == 0) {
986 error_setg(errp, "Can't set writethrough mode except for the root");
987 ret = -EINVAL;
988 goto free_and_fail;
989 }
990
Kevin Wolf91a097e2015-05-08 17:49:53 +0200991 bdrv_set_enable_write_cache(bs, bs->open_flags & BDRV_O_CACHE_WB);
Stefan Hajnoczie7c63792011-10-27 10:54:27 +0100992
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200993 /* Open the image, either directly or using a protocol */
Kevin Wolf82dc8b42016-01-11 19:07:50 +0100994 open_flags = bdrv_open_flags(bs, bs->open_flags);
Kevin Wolf66f82ce2010-04-14 14:17:38 +0200995 if (drv->bdrv_file_open) {
Kevin Wolf5d186eb2013-03-27 17:28:18 +0100996 assert(file == NULL);
Benoît Canet030be322013-09-24 17:07:04 +0200997 assert(!drv->bdrv_needs_filename || filename != NULL);
Max Reitz34b5d2c2013-09-05 14:45:29 +0200998 ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
Kevin Wolff500a6d2012-11-12 17:35:27 +0100999 } else {
Kevin Wolf2af5ef72013-04-09 13:19:18 +02001000 if (file == NULL) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001001 error_setg(errp, "Can't use '%s' as a block driver for the "
1002 "protocol level", drv->format_name);
Kevin Wolf2af5ef72013-04-09 13:19:18 +02001003 ret = -EINVAL;
1004 goto free_and_fail;
1005 }
Kevin Wolff500a6d2012-11-12 17:35:27 +01001006 bs->file = file;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001007 ret = drv->bdrv_open(bs, options, open_flags, &local_err);
Kevin Wolf66f82ce2010-04-14 14:17:38 +02001008 }
1009
Kevin Wolf57915332010-04-14 15:24:50 +02001010 if (ret < 0) {
Markus Armbruster84d18f02014-01-30 15:07:28 +01001011 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001012 error_propagate(errp, local_err);
Dunrong Huang2fa9aa52013-09-24 18:14:01 +08001013 } else if (bs->filename[0]) {
1014 error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
Max Reitz34b5d2c2013-09-05 14:45:29 +02001015 } else {
1016 error_setg_errno(errp, -ret, "Could not open image");
1017 }
Kevin Wolf57915332010-04-14 15:24:50 +02001018 goto free_and_fail;
1019 }
1020
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001021 ret = refresh_total_sectors(bs, bs->total_sectors);
1022 if (ret < 0) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001023 error_setg_errno(errp, -ret, "Could not refresh total sector count");
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001024 goto free_and_fail;
Kevin Wolf57915332010-04-14 15:24:50 +02001025 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01001026
Kevin Wolf3baca892014-07-16 17:48:16 +02001027 bdrv_refresh_limits(bs, &local_err);
1028 if (local_err) {
1029 error_propagate(errp, local_err);
1030 ret = -EINVAL;
1031 goto free_and_fail;
1032 }
1033
Paolo Bonzinic25f53b2011-11-29 12:42:20 +01001034 assert(bdrv_opt_mem_align(bs) != 0);
Denis V. Lunev4196d2f2015-05-12 17:30:55 +03001035 assert(bdrv_min_mem_align(bs) != 0);
Dimitris Aragiorgisb192af82015-06-23 13:44:56 +03001036 assert((bs->request_alignment != 0) || bdrv_is_sg(bs));
Kevin Wolf18edf282015-04-07 17:12:56 +02001037
1038 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001039 return 0;
1040
1041free_and_fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001042 bs->file = NULL;
Anthony Liguori7267c092011-08-20 22:09:37 -05001043 g_free(bs->opaque);
Kevin Wolf57915332010-04-14 15:24:50 +02001044 bs->opaque = NULL;
1045 bs->drv = NULL;
Kevin Wolf18edf282015-04-07 17:12:56 +02001046fail_opts:
1047 qemu_opts_del(opts);
Kevin Wolf57915332010-04-14 15:24:50 +02001048 return ret;
1049}
1050
Kevin Wolf5e5c4f62014-05-26 11:45:08 +02001051static QDict *parse_json_filename(const char *filename, Error **errp)
1052{
1053 QObject *options_obj;
1054 QDict *options;
1055 int ret;
1056
1057 ret = strstart(filename, "json:", &filename);
1058 assert(ret);
1059
1060 options_obj = qobject_from_json(filename);
1061 if (!options_obj) {
1062 error_setg(errp, "Could not parse the JSON options");
1063 return NULL;
1064 }
1065
1066 if (qobject_type(options_obj) != QTYPE_QDICT) {
1067 qobject_decref(options_obj);
1068 error_setg(errp, "Invalid JSON object given");
1069 return NULL;
1070 }
1071
1072 options = qobject_to_qdict(options_obj);
1073 qdict_flatten(options);
1074
1075 return options;
1076}
1077
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001078static void parse_json_protocol(QDict *options, const char **pfilename,
1079 Error **errp)
1080{
1081 QDict *json_options;
1082 Error *local_err = NULL;
1083
1084 /* Parse json: pseudo-protocol */
1085 if (!*pfilename || !g_str_has_prefix(*pfilename, "json:")) {
1086 return;
1087 }
1088
1089 json_options = parse_json_filename(*pfilename, &local_err);
1090 if (local_err) {
1091 error_propagate(errp, local_err);
1092 return;
1093 }
1094
1095 /* Options given in the filename have lower priority than options
1096 * specified directly */
1097 qdict_join(options, json_options, false);
1098 QDECREF(json_options);
1099 *pfilename = NULL;
1100}
1101
Kevin Wolf57915332010-04-14 15:24:50 +02001102/*
Kevin Wolff54120f2014-05-26 11:09:59 +02001103 * Fills in default options for opening images and converts the legacy
1104 * filename/flags pair to option QDict entries.
Max Reitz53a29512015-03-19 14:53:16 -04001105 * The BDRV_O_PROTOCOL flag in *flags will be set or cleared accordingly if a
1106 * block driver has been specified explicitly.
Kevin Wolff54120f2014-05-26 11:09:59 +02001107 */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001108static int bdrv_fill_options(QDict **options, const char *filename,
Max Reitz053e1572015-08-26 19:47:51 +02001109 int *flags, Error **errp)
Kevin Wolff54120f2014-05-26 11:09:59 +02001110{
1111 const char *drvname;
Max Reitz53a29512015-03-19 14:53:16 -04001112 bool protocol = *flags & BDRV_O_PROTOCOL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001113 bool parse_filename = false;
Max Reitz053e1572015-08-26 19:47:51 +02001114 BlockDriver *drv = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001115 Error *local_err = NULL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001116
Max Reitz53a29512015-03-19 14:53:16 -04001117 drvname = qdict_get_try_str(*options, "driver");
Max Reitz053e1572015-08-26 19:47:51 +02001118 if (drvname) {
1119 drv = bdrv_find_format(drvname);
1120 if (!drv) {
1121 error_setg(errp, "Unknown driver '%s'", drvname);
1122 return -ENOENT;
1123 }
1124 /* If the user has explicitly specified the driver, this choice should
1125 * override the BDRV_O_PROTOCOL flag */
1126 protocol = drv->bdrv_file_open;
Max Reitz53a29512015-03-19 14:53:16 -04001127 }
1128
1129 if (protocol) {
1130 *flags |= BDRV_O_PROTOCOL;
1131 } else {
1132 *flags &= ~BDRV_O_PROTOCOL;
1133 }
1134
Kevin Wolf91a097e2015-05-08 17:49:53 +02001135 /* Translate cache options from flags into options */
1136 update_options_from_flags(*options, *flags);
1137
Kevin Wolff54120f2014-05-26 11:09:59 +02001138 /* Fetch the file name from the options QDict if necessary */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001139 if (protocol && filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001140 if (!qdict_haskey(*options, "filename")) {
1141 qdict_put(*options, "filename", qstring_from_str(filename));
1142 parse_filename = true;
1143 } else {
1144 error_setg(errp, "Can't specify 'file' and 'filename' options at "
1145 "the same time");
1146 return -EINVAL;
1147 }
1148 }
1149
1150 /* Find the right block driver */
1151 filename = qdict_get_try_str(*options, "filename");
Kevin Wolff54120f2014-05-26 11:09:59 +02001152
Max Reitz053e1572015-08-26 19:47:51 +02001153 if (!drvname && protocol) {
1154 if (filename) {
1155 drv = bdrv_find_protocol(filename, parse_filename, errp);
1156 if (!drv) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001157 return -EINVAL;
1158 }
Max Reitz053e1572015-08-26 19:47:51 +02001159
1160 drvname = drv->format_name;
1161 qdict_put(*options, "driver", qstring_from_str(drvname));
1162 } else {
1163 error_setg(errp, "Must specify either driver or file");
1164 return -EINVAL;
Kevin Wolff54120f2014-05-26 11:09:59 +02001165 }
1166 }
1167
Kevin Wolf17b005f2014-05-27 10:50:29 +02001168 assert(drv || !protocol);
Kevin Wolff54120f2014-05-26 11:09:59 +02001169
1170 /* Driver-specific filename parsing */
Kevin Wolf17b005f2014-05-27 10:50:29 +02001171 if (drv && drv->bdrv_parse_filename && parse_filename) {
Kevin Wolff54120f2014-05-26 11:09:59 +02001172 drv->bdrv_parse_filename(filename, *options, &local_err);
1173 if (local_err) {
1174 error_propagate(errp, local_err);
1175 return -EINVAL;
1176 }
1177
1178 if (!drv->bdrv_needs_filename) {
1179 qdict_del(*options, "filename");
1180 }
1181 }
1182
1183 return 0;
1184}
1185
Kevin Wolff21d96d2016-03-08 13:47:46 +01001186BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
1187 const char *child_name,
1188 const BdrvChildRole *child_role)
Kevin Wolfdf581792015-06-15 11:53:47 +02001189{
1190 BdrvChild *child = g_new(BdrvChild, 1);
1191 *child = (BdrvChild) {
1192 .bs = child_bs,
Kevin Wolf260fecf2015-04-27 13:46:22 +02001193 .name = g_strdup(child_name),
Kevin Wolfdf581792015-06-15 11:53:47 +02001194 .role = child_role,
1195 };
1196
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001197 QLIST_INSERT_HEAD(&child_bs->parents, child, next_parent);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001198
1199 return child;
Kevin Wolfdf581792015-06-15 11:53:47 +02001200}
1201
Kevin Wolff21d96d2016-03-08 13:47:46 +01001202static BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
1203 BlockDriverState *child_bs,
1204 const char *child_name,
1205 const BdrvChildRole *child_role)
1206{
1207 BdrvChild *child = bdrv_root_attach_child(child_bs, child_name, child_role);
1208 QLIST_INSERT_HEAD(&parent_bs->children, child, next);
1209 return child;
1210}
1211
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02001212static void bdrv_detach_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001213{
Kevin Wolff21d96d2016-03-08 13:47:46 +01001214 if (child->next.le_prev) {
1215 QLIST_REMOVE(child, next);
1216 child->next.le_prev = NULL;
1217 }
Kevin Wolfd42a8a92015-09-17 13:18:23 +02001218 QLIST_REMOVE(child, next_parent);
Kevin Wolf260fecf2015-04-27 13:46:22 +02001219 g_free(child->name);
Kevin Wolf33a60402015-06-15 13:51:04 +02001220 g_free(child);
1221}
1222
Kevin Wolff21d96d2016-03-08 13:47:46 +01001223void bdrv_root_unref_child(BdrvChild *child)
Kevin Wolf33a60402015-06-15 13:51:04 +02001224{
Kevin Wolf779020c2015-10-13 14:09:44 +02001225 BlockDriverState *child_bs;
1226
Kevin Wolff21d96d2016-03-08 13:47:46 +01001227 child_bs = child->bs;
1228 bdrv_detach_child(child);
1229 bdrv_unref(child_bs);
1230}
1231
1232void bdrv_unref_child(BlockDriverState *parent, BdrvChild *child)
1233{
Kevin Wolf779020c2015-10-13 14:09:44 +02001234 if (child == NULL) {
1235 return;
1236 }
Kevin Wolf33a60402015-06-15 13:51:04 +02001237
1238 if (child->bs->inherits_from == parent) {
1239 child->bs->inherits_from = NULL;
1240 }
1241
Kevin Wolff21d96d2016-03-08 13:47:46 +01001242 bdrv_root_unref_child(child);
Kevin Wolf33a60402015-06-15 13:51:04 +02001243}
1244
Kevin Wolf5db15a52015-09-14 15:33:33 +02001245/*
1246 * Sets the backing file link of a BDS. A new reference is created; callers
1247 * which don't need their own reference any more must call bdrv_unref().
1248 */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001249void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1250{
Kevin Wolf5db15a52015-09-14 15:33:33 +02001251 if (backing_hd) {
1252 bdrv_ref(backing_hd);
1253 }
Fam Zheng8d24cce2014-05-23 21:29:45 +08001254
Kevin Wolf760e0062015-06-17 14:55:21 +02001255 if (bs->backing) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001256 assert(bs->backing_blocker);
Kevin Wolf760e0062015-06-17 14:55:21 +02001257 bdrv_op_unblock_all(bs->backing->bs, bs->backing_blocker);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001258 bdrv_unref_child(bs, bs->backing);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001259 } else if (backing_hd) {
1260 error_setg(&bs->backing_blocker,
Alberto Garcia81e5f782015-04-08 12:29:19 +03001261 "node is used as backing hd of '%s'",
1262 bdrv_get_device_or_node_name(bs));
Fam Zheng826b6ca2014-05-23 21:29:47 +08001263 }
1264
Fam Zheng8d24cce2014-05-23 21:29:45 +08001265 if (!backing_hd) {
Fam Zheng826b6ca2014-05-23 21:29:47 +08001266 error_free(bs->backing_blocker);
1267 bs->backing_blocker = NULL;
Kevin Wolf760e0062015-06-17 14:55:21 +02001268 bs->backing = NULL;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001269 goto out;
1270 }
Kevin Wolf260fecf2015-04-27 13:46:22 +02001271 bs->backing = bdrv_attach_child(bs, backing_hd, "backing", &child_backing);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001272 bs->open_flags &= ~BDRV_O_NO_BACKING;
1273 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1274 pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1275 backing_hd->drv ? backing_hd->drv->format_name : "");
Fam Zheng826b6ca2014-05-23 21:29:47 +08001276
Kevin Wolf760e0062015-06-17 14:55:21 +02001277 bdrv_op_block_all(backing_hd, bs->backing_blocker);
Fam Zheng826b6ca2014-05-23 21:29:47 +08001278 /* Otherwise we won't be able to commit due to check in bdrv_commit */
Kevin Wolf760e0062015-06-17 14:55:21 +02001279 bdrv_op_unblock(backing_hd, BLOCK_OP_TYPE_COMMIT_TARGET,
Fam Zheng826b6ca2014-05-23 21:29:47 +08001280 bs->backing_blocker);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001281out:
Kevin Wolf3baca892014-07-16 17:48:16 +02001282 bdrv_refresh_limits(bs, NULL);
Fam Zheng8d24cce2014-05-23 21:29:45 +08001283}
1284
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001285/*
1286 * Opens the backing file for a BlockDriverState if not yet open
1287 *
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001288 * bdref_key specifies the key for the image's BlockdevRef in the options QDict.
1289 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1290 * itself, all options starting with "${bdref_key}." are considered part of the
1291 * BlockdevRef.
1292 *
1293 * TODO Can this be unified with bdrv_open_image()?
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001294 */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001295int bdrv_open_backing_file(BlockDriverState *bs, QDict *parent_options,
1296 const char *bdref_key, Error **errp)
Paolo Bonzini9156df12012-10-18 16:49:17 +02001297{
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001298 char *backing_filename = g_malloc0(PATH_MAX);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001299 char *bdref_key_dot;
1300 const char *reference = NULL;
Kevin Wolf317fc442014-04-25 13:27:34 +02001301 int ret = 0;
Fam Zheng8d24cce2014-05-23 21:29:45 +08001302 BlockDriverState *backing_hd;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001303 QDict *options;
1304 QDict *tmp_parent_options = NULL;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001305 Error *local_err = NULL;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001306
Kevin Wolf760e0062015-06-17 14:55:21 +02001307 if (bs->backing != NULL) {
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001308 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001309 }
1310
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001311 /* NULL means an empty set of options */
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001312 if (parent_options == NULL) {
1313 tmp_parent_options = qdict_new();
1314 parent_options = tmp_parent_options;
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001315 }
1316
Paolo Bonzini9156df12012-10-18 16:49:17 +02001317 bs->open_flags &= ~BDRV_O_NO_BACKING;
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001318
1319 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1320 qdict_extract_subqdict(parent_options, &options, bdref_key_dot);
1321 g_free(bdref_key_dot);
1322
1323 reference = qdict_get_try_str(parent_options, bdref_key);
1324 if (reference || qdict_haskey(options, "file.filename")) {
Kevin Wolf1cb6f502013-04-12 20:27:07 +02001325 backing_filename[0] = '\0';
1326 } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
Kevin Wolf31ca6d02013-03-28 15:29:24 +01001327 QDECREF(options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001328 goto free_exit;
Fam Zhengdbecebd2013-09-22 20:05:06 +08001329 } else {
Max Reitz9f074292014-11-26 17:20:26 +01001330 bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX,
1331 &local_err);
1332 if (local_err) {
1333 ret = -EINVAL;
1334 error_propagate(errp, local_err);
1335 QDECREF(options);
1336 goto free_exit;
1337 }
Paolo Bonzini9156df12012-10-18 16:49:17 +02001338 }
1339
Kevin Wolf8ee79e72014-06-04 15:09:35 +02001340 if (!bs->drv || !bs->drv->supports_backing) {
1341 ret = -EINVAL;
1342 error_setg(errp, "Driver doesn't support backing files");
1343 QDECREF(options);
1344 goto free_exit;
1345 }
1346
Kevin Wolfc5f6e492014-11-25 18:12:42 +01001347 if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1348 qdict_put(options, "driver", qstring_from_str(bs->backing_format));
Paolo Bonzini9156df12012-10-18 16:49:17 +02001349 }
1350
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001351 backing_hd = NULL;
Kevin Wolff3930ed2015-04-08 13:43:47 +02001352 ret = bdrv_open_inherit(&backing_hd,
1353 *backing_filename ? backing_filename : NULL,
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001354 reference, options, 0, bs, &child_backing,
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001355 errp);
Paolo Bonzini9156df12012-10-18 16:49:17 +02001356 if (ret < 0) {
Paolo Bonzini9156df12012-10-18 16:49:17 +02001357 bs->open_flags |= BDRV_O_NO_BACKING;
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001358 error_prepend(errp, "Could not open backing file: ");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001359 goto free_exit;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001360 }
Kevin Wolfdf581792015-06-15 11:53:47 +02001361
Kevin Wolf5db15a52015-09-14 15:33:33 +02001362 /* Hook up the backing file link; drop our reference, bs owns the
1363 * backing_hd reference now */
Fam Zheng8d24cce2014-05-23 21:29:45 +08001364 bdrv_set_backing_hd(bs, backing_hd);
Kevin Wolf5db15a52015-09-14 15:33:33 +02001365 bdrv_unref(backing_hd);
Peter Feinerd80ac652014-01-08 19:43:25 +00001366
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001367 qdict_del(parent_options, bdref_key);
1368
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001369free_exit:
1370 g_free(backing_filename);
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001371 QDECREF(tmp_parent_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001372 return ret;
Paolo Bonzini9156df12012-10-18 16:49:17 +02001373}
1374
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001375/*
Max Reitzda557aa2013-12-20 19:28:11 +01001376 * Opens a disk image whose options are given as BlockdevRef in another block
1377 * device's options.
1378 *
Max Reitzda557aa2013-12-20 19:28:11 +01001379 * If allow_none is true, no image will be opened if filename is false and no
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001380 * BlockdevRef is given. NULL will be returned, but errp remains unset.
Max Reitzda557aa2013-12-20 19:28:11 +01001381 *
1382 * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1383 * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1384 * itself, all options starting with "${bdref_key}." are considered part of the
1385 * BlockdevRef.
1386 *
1387 * The BlockdevRef will be removed from the options QDict.
1388 */
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001389BdrvChild *bdrv_open_child(const char *filename,
1390 QDict *options, const char *bdref_key,
1391 BlockDriverState* parent,
1392 const BdrvChildRole *child_role,
1393 bool allow_none, Error **errp)
Max Reitzda557aa2013-12-20 19:28:11 +01001394{
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001395 BdrvChild *c = NULL;
1396 BlockDriverState *bs;
Max Reitzda557aa2013-12-20 19:28:11 +01001397 QDict *image_options;
1398 int ret;
1399 char *bdref_key_dot;
1400 const char *reference;
1401
Kevin Wolfdf581792015-06-15 11:53:47 +02001402 assert(child_role != NULL);
Max Reitzf67503e2014-02-18 18:33:05 +01001403
Max Reitzda557aa2013-12-20 19:28:11 +01001404 bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1405 qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1406 g_free(bdref_key_dot);
1407
1408 reference = qdict_get_try_str(options, bdref_key);
1409 if (!filename && !reference && !qdict_size(image_options)) {
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001410 if (!allow_none) {
Max Reitzda557aa2013-12-20 19:28:11 +01001411 error_setg(errp, "A block device must be specified for \"%s\"",
1412 bdref_key);
Max Reitzda557aa2013-12-20 19:28:11 +01001413 }
Markus Armbrusterb20e61e2014-05-28 11:16:57 +02001414 QDECREF(image_options);
Max Reitzda557aa2013-12-20 19:28:11 +01001415 goto done;
1416 }
1417
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001418 bs = NULL;
1419 ret = bdrv_open_inherit(&bs, filename, reference, image_options, 0,
Max Reitzce343772015-08-26 19:47:50 +02001420 parent, child_role, errp);
Kevin Wolfdf581792015-06-15 11:53:47 +02001421 if (ret < 0) {
1422 goto done;
1423 }
1424
Kevin Wolf260fecf2015-04-27 13:46:22 +02001425 c = bdrv_attach_child(parent, bs, bdref_key, child_role);
Max Reitzda557aa2013-12-20 19:28:11 +01001426
1427done:
1428 qdict_del(options, bdref_key);
Kevin Wolfb4b059f2015-06-15 13:24:19 +02001429 return c;
1430}
1431
Kevin Wolf73176be2016-03-07 13:02:15 +01001432static int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags,
1433 QDict *snapshot_options, Error **errp)
Kevin Wolfb9988752014-04-03 12:09:34 +02001434{
1435 /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001436 char *tmp_filename = g_malloc0(PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001437 int64_t total_size;
Chunyan Liu83d05212014-06-05 17:20:51 +08001438 QemuOpts *opts = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001439 BlockDriverState *bs_snapshot;
Fam Zhengc2e0dbb2015-07-06 12:24:44 +08001440 Error *local_err = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001441 int ret;
1442
1443 /* if snapshot, we create a temporary backing file and open it
1444 instead of opening 'filename' directly */
1445
1446 /* Get the required size from the image */
Kevin Wolff1877432014-04-04 17:07:19 +02001447 total_size = bdrv_getlength(bs);
1448 if (total_size < 0) {
Chen Gang6b8aeca2014-06-23 23:28:23 +08001449 ret = total_size;
Kevin Wolff1877432014-04-04 17:07:19 +02001450 error_setg_errno(errp, -total_size, "Could not get image size");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001451 goto out;
Kevin Wolff1877432014-04-04 17:07:19 +02001452 }
Kevin Wolfb9988752014-04-03 12:09:34 +02001453
1454 /* Create the temporary image */
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001455 ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
Kevin Wolfb9988752014-04-03 12:09:34 +02001456 if (ret < 0) {
1457 error_setg_errno(errp, -ret, "Could not get temporary filename");
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001458 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001459 }
1460
Max Reitzef810432014-12-02 18:32:42 +01001461 opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
Chunyan Liuc282e1f2014-06-05 17:21:11 +08001462 &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01001463 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size, &error_abort);
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001464 ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, errp);
Chunyan Liu83d05212014-06-05 17:20:51 +08001465 qemu_opts_del(opts);
Kevin Wolfb9988752014-04-03 12:09:34 +02001466 if (ret < 0) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01001467 error_prepend(errp, "Could not create temporary overlay '%s': ",
1468 tmp_filename);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001469 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001470 }
1471
Kevin Wolf73176be2016-03-07 13:02:15 +01001472 /* Prepare options QDict for the temporary file */
Kevin Wolfb9988752014-04-03 12:09:34 +02001473 qdict_put(snapshot_options, "file.driver",
1474 qstring_from_str("file"));
1475 qdict_put(snapshot_options, "file.filename",
1476 qstring_from_str(tmp_filename));
Max Reitze6641712015-08-26 19:47:48 +02001477 qdict_put(snapshot_options, "driver",
1478 qstring_from_str("qcow2"));
Kevin Wolfb9988752014-04-03 12:09:34 +02001479
Markus Armbrustere4e99862014-10-07 13:59:03 +02001480 bs_snapshot = bdrv_new();
Kevin Wolfb9988752014-04-03 12:09:34 +02001481
1482 ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001483 flags, &local_err);
Kevin Wolf73176be2016-03-07 13:02:15 +01001484 snapshot_options = NULL;
Kevin Wolfb9988752014-04-03 12:09:34 +02001485 if (ret < 0) {
1486 error_propagate(errp, local_err);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001487 goto out;
Kevin Wolfb9988752014-04-03 12:09:34 +02001488 }
1489
1490 bdrv_append(bs_snapshot, bs);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001491
1492out:
Kevin Wolf73176be2016-03-07 13:02:15 +01001493 QDECREF(snapshot_options);
Benoît Canet1ba4b6a2014-04-22 17:05:27 +02001494 g_free(tmp_filename);
Chen Gang6b8aeca2014-06-23 23:28:23 +08001495 return ret;
Kevin Wolfb9988752014-04-03 12:09:34 +02001496}
1497
Max Reitzda557aa2013-12-20 19:28:11 +01001498/*
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001499 * Opens a disk image (raw, qcow2, vmdk, ...)
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001500 *
1501 * options is a QDict of options to pass to the block drivers, or NULL for an
1502 * empty set of options. The reference to the QDict belongs to the block layer
1503 * after the call (even on failure), so if the caller intends to reuse the
1504 * dictionary, it needs to use QINCREF() before calling bdrv_open.
Max Reitzf67503e2014-02-18 18:33:05 +01001505 *
1506 * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1507 * If it is not NULL, the referenced BDS will be reused.
Max Reitzddf56362014-02-18 18:33:06 +01001508 *
1509 * The reference parameter may be used to specify an existing block device which
1510 * should be opened. If specified, neither options nor a filename may be given,
1511 * nor can an existing BDS be reused (that is, *pbs has to be NULL).
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001512 */
Kevin Wolff3930ed2015-04-08 13:43:47 +02001513static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
1514 const char *reference, QDict *options, int flags,
1515 BlockDriverState *parent,
Max Reitzce343772015-08-26 19:47:50 +02001516 const BdrvChildRole *child_role, Error **errp)
bellardea2384d2004-08-01 21:59:26 +00001517{
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001518 int ret;
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001519 BdrvChild *file = NULL;
1520 BlockDriverState *bs;
Max Reitzce343772015-08-26 19:47:50 +02001521 BlockDriver *drv = NULL;
Kevin Wolf74fe54f2013-07-09 11:09:02 +02001522 const char *drvname;
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001523 const char *backing;
Max Reitz34b5d2c2013-09-05 14:45:29 +02001524 Error *local_err = NULL;
Kevin Wolf73176be2016-03-07 13:02:15 +01001525 QDict *snapshot_options = NULL;
Kevin Wolfb1e6fc02014-05-06 12:11:42 +02001526 int snapshot_flags = 0;
bellard712e7872005-04-28 21:09:32 +00001527
Max Reitzf67503e2014-02-18 18:33:05 +01001528 assert(pbs);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001529 assert(!child_role || !flags);
1530 assert(!child_role == !parent);
Max Reitzf67503e2014-02-18 18:33:05 +01001531
Max Reitzddf56362014-02-18 18:33:06 +01001532 if (reference) {
1533 bool options_non_empty = options ? qdict_size(options) : false;
1534 QDECREF(options);
1535
1536 if (*pbs) {
1537 error_setg(errp, "Cannot reuse an existing BDS when referencing "
1538 "another block device");
1539 return -EINVAL;
1540 }
1541
1542 if (filename || options_non_empty) {
1543 error_setg(errp, "Cannot reference an existing block device with "
1544 "additional options or a new filename");
1545 return -EINVAL;
1546 }
1547
1548 bs = bdrv_lookup_bs(reference, reference, errp);
1549 if (!bs) {
1550 return -ENODEV;
1551 }
1552 bdrv_ref(bs);
1553 *pbs = bs;
1554 return 0;
1555 }
1556
Max Reitzf67503e2014-02-18 18:33:05 +01001557 if (*pbs) {
1558 bs = *pbs;
1559 } else {
Markus Armbrustere4e99862014-10-07 13:59:03 +02001560 bs = bdrv_new();
Max Reitzf67503e2014-02-18 18:33:05 +01001561 }
1562
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001563 /* NULL means an empty set of options */
1564 if (options == NULL) {
1565 options = qdict_new();
1566 }
1567
Kevin Wolf145f5982015-05-08 16:15:03 +02001568 /* json: syntax counts as explicit options, as if in the QDict */
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001569 parse_json_protocol(options, &filename, &local_err);
1570 if (local_err) {
1571 ret = -EINVAL;
1572 goto fail;
1573 }
1574
Kevin Wolf145f5982015-05-08 16:15:03 +02001575 bs->explicit_options = qdict_clone_shallow(options);
1576
Kevin Wolff3930ed2015-04-08 13:43:47 +02001577 if (child_role) {
Kevin Wolfbddcec32015-04-09 18:47:50 +02001578 bs->inherits_from = parent;
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001579 child_role->inherit_options(&flags, options,
1580 parent->open_flags, parent->options);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001581 }
1582
Kevin Wolfde3b53f2015-10-29 15:24:41 +01001583 ret = bdrv_fill_options(&options, filename, &flags, &local_err);
Kevin Wolf462f5bc2014-05-26 11:39:55 +02001584 if (local_err) {
1585 goto fail;
1586 }
1587
Kevin Wolf62392eb2015-04-24 16:38:02 +02001588 bs->open_flags = flags;
1589 bs->options = options;
1590 options = qdict_clone_shallow(options);
1591
Kevin Wolf76c591b2014-06-04 14:19:44 +02001592 /* Find the right image format driver */
Kevin Wolf76c591b2014-06-04 14:19:44 +02001593 drvname = qdict_get_try_str(options, "driver");
1594 if (drvname) {
1595 drv = bdrv_find_format(drvname);
Kevin Wolf76c591b2014-06-04 14:19:44 +02001596 if (!drv) {
1597 error_setg(errp, "Unknown driver: '%s'", drvname);
1598 ret = -EINVAL;
1599 goto fail;
1600 }
1601 }
1602
1603 assert(drvname || !(flags & BDRV_O_PROTOCOL));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001604
Alberto Garcia3e8c2e52015-10-26 14:27:15 +02001605 backing = qdict_get_try_str(options, "backing");
1606 if (backing && *backing == '\0') {
1607 flags |= BDRV_O_NO_BACKING;
1608 qdict_del(options, "backing");
1609 }
1610
Kevin Wolff4788ad2014-06-03 16:44:19 +02001611 /* Open image file without format layer */
1612 if ((flags & BDRV_O_PROTOCOL) == 0) {
1613 if (flags & BDRV_O_RDWR) {
1614 flags |= BDRV_O_ALLOW_RDWR;
1615 }
1616 if (flags & BDRV_O_SNAPSHOT) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001617 snapshot_options = qdict_new();
1618 bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
1619 flags, options);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001620 bdrv_backing_options(&flags, options, flags, options);
Kevin Wolff4788ad2014-06-03 16:44:19 +02001621 }
1622
Kevin Wolff3930ed2015-04-08 13:43:47 +02001623 bs->open_flags = flags;
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001624
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001625 file = bdrv_open_child(filename, options, "file", bs,
1626 &child_file, true, &local_err);
Kevin Wolf1fdd6932015-06-15 14:11:51 +02001627 if (local_err) {
1628 ret = -EINVAL;
Max Reitz5469a2a2014-02-18 18:33:10 +01001629 goto fail;
1630 }
1631 }
1632
Kevin Wolf76c591b2014-06-04 14:19:44 +02001633 /* Image format probing */
Kevin Wolf38f3ef52014-11-20 16:27:12 +01001634 bs->probed = !drv;
Kevin Wolf76c591b2014-06-04 14:19:44 +02001635 if (!drv && file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001636 ret = find_image_format(file->bs, filename, &drv, &local_err);
Kevin Wolf17b005f2014-05-27 10:50:29 +02001637 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001638 goto fail;
Max Reitz2a05cbe2013-12-20 19:28:10 +01001639 }
Kevin Wolf62392eb2015-04-24 16:38:02 +02001640 /*
1641 * This option update would logically belong in bdrv_fill_options(),
1642 * but we first need to open bs->file for the probing to work, while
1643 * opening bs->file already requires the (mostly) final set of options
1644 * so that cache mode etc. can be inherited.
1645 *
1646 * Adding the driver later is somewhat ugly, but it's not an option
1647 * that would ever be inherited, so it's correct. We just need to make
1648 * sure to update both bs->options (which has the full effective
1649 * options for bs) and options (which has file.* already removed).
1650 */
1651 qdict_put(bs->options, "driver", qstring_from_str(drv->format_name));
1652 qdict_put(options, "driver", qstring_from_str(drv->format_name));
Kevin Wolf76c591b2014-06-04 14:19:44 +02001653 } else if (!drv) {
Kevin Wolf17b005f2014-05-27 10:50:29 +02001654 error_setg(errp, "Must specify either driver or file");
1655 ret = -EINVAL;
Kevin Wolf8bfea152014-04-11 19:16:36 +02001656 goto fail;
Kevin Wolff500a6d2012-11-12 17:35:27 +01001657 }
1658
Max Reitz53a29512015-03-19 14:53:16 -04001659 /* BDRV_O_PROTOCOL must be set iff a protocol BDS is about to be created */
1660 assert(!!(flags & BDRV_O_PROTOCOL) == !!drv->bdrv_file_open);
1661 /* file must be NULL if a protocol BDS is about to be created
1662 * (the inverse results in an error message from bdrv_open_common()) */
1663 assert(!(flags & BDRV_O_PROTOCOL) || !file);
1664
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001665 /* Open the image */
Kevin Wolf82dc8b42016-01-11 19:07:50 +01001666 ret = bdrv_open_common(bs, file, options, &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001667 if (ret < 0) {
Kevin Wolf8bfea152014-04-11 19:16:36 +02001668 goto fail;
Christoph Hellwig69873072010-01-20 18:13:25 +01001669 }
1670
Max Reitz2a05cbe2013-12-20 19:28:10 +01001671 if (file && (bs->file != file)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001672 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001673 file = NULL;
1674 }
1675
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001676 /* If there is a backing file, use it */
Paolo Bonzini9156df12012-10-18 16:49:17 +02001677 if ((flags & BDRV_O_NO_BACKING) == 0) {
Kevin Wolfd9b7b052015-01-16 18:23:41 +01001678 ret = bdrv_open_backing_file(bs, options, "backing", &local_err);
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001679 if (ret < 0) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001680 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001681 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001682 }
1683
Max Reitz91af7012014-07-18 20:24:56 +02001684 bdrv_refresh_filename(bs);
1685
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001686 /* Check if any unknown options were used */
Max Reitz5acd9d82014-02-18 18:33:11 +01001687 if (options && (qdict_size(options) != 0)) {
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001688 const QDictEntry *entry = qdict_first(options);
Max Reitz5acd9d82014-02-18 18:33:11 +01001689 if (flags & BDRV_O_PROTOCOL) {
1690 error_setg(errp, "Block protocol '%s' doesn't support the option "
1691 "'%s'", drv->format_name, entry->key);
1692 } else {
Max Reitzd0e46a52016-03-16 19:54:34 +01001693 error_setg(errp,
1694 "Block format '%s' does not support the option '%s'",
1695 drv->format_name, entry->key);
Max Reitz5acd9d82014-02-18 18:33:11 +01001696 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001697
1698 ret = -EINVAL;
1699 goto close_and_fail;
1700 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001701
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001702 if (!bdrv_key_required(bs)) {
Markus Armbrustera7f53e22014-10-07 13:59:25 +02001703 if (bs->blk) {
1704 blk_dev_change_media_cb(bs->blk, true);
1705 }
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001706 } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1707 && !runstate_check(RUN_STATE_INMIGRATE)
1708 && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1709 error_setg(errp,
1710 "Guest must be stopped for opening of encrypted image");
1711 ret = -EBUSY;
1712 goto close_and_fail;
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001713 }
1714
Markus Armbrusterc3adb582014-03-14 09:22:48 +01001715 QDECREF(options);
Max Reitzf67503e2014-02-18 18:33:05 +01001716 *pbs = bs;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001717
1718 /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1719 * temporary snapshot afterwards. */
1720 if (snapshot_flags) {
Kevin Wolf73176be2016-03-07 13:02:15 +01001721 ret = bdrv_append_temp_snapshot(bs, snapshot_flags, snapshot_options,
1722 &local_err);
1723 snapshot_options = NULL;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02001724 if (local_err) {
1725 goto close_and_fail;
1726 }
1727 }
1728
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001729 return 0;
1730
Kevin Wolf8bfea152014-04-11 19:16:36 +02001731fail:
Kevin Wolff500a6d2012-11-12 17:35:27 +01001732 if (file != NULL) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02001733 bdrv_unref_child(bs, file);
Kevin Wolff500a6d2012-11-12 17:35:27 +01001734 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001735 QDECREF(snapshot_options);
Kevin Wolf145f5982015-05-08 16:15:03 +02001736 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001737 QDECREF(bs->options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001738 QDECREF(options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001739 bs->options = NULL;
Max Reitzf67503e2014-02-18 18:33:05 +01001740 if (!*pbs) {
1741 /* If *pbs is NULL, a new BDS has been created in this function and
1742 needs to be freed now. Otherwise, it does not need to be closed,
1743 since it has not really been opened yet. */
1744 bdrv_unref(bs);
1745 }
Markus Armbruster84d18f02014-01-30 15:07:28 +01001746 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001747 error_propagate(errp, local_err);
1748 }
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001749 return ret;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01001750
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001751close_and_fail:
Max Reitzf67503e2014-02-18 18:33:05 +01001752 /* See fail path, but now the BDS has to be always closed */
1753 if (*pbs) {
1754 bdrv_close(bs);
1755 } else {
1756 bdrv_unref(bs);
1757 }
Kevin Wolf73176be2016-03-07 13:02:15 +01001758 QDECREF(snapshot_options);
Kevin Wolfb6ad4912013-03-15 10:35:04 +01001759 QDECREF(options);
Markus Armbruster84d18f02014-01-30 15:07:28 +01001760 if (local_err) {
Max Reitz34b5d2c2013-09-05 14:45:29 +02001761 error_propagate(errp, local_err);
1762 }
Kevin Wolfb6ce07a2010-04-12 16:37:13 +02001763 return ret;
1764}
1765
Kevin Wolff3930ed2015-04-08 13:43:47 +02001766int bdrv_open(BlockDriverState **pbs, const char *filename,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02001767 const char *reference, QDict *options, int flags, Error **errp)
Kevin Wolff3930ed2015-04-08 13:43:47 +02001768{
1769 return bdrv_open_inherit(pbs, filename, reference, options, flags, NULL,
Max Reitzce343772015-08-26 19:47:50 +02001770 NULL, errp);
Kevin Wolff3930ed2015-04-08 13:43:47 +02001771}
1772
Jeff Codye971aa12012-09-20 15:13:19 -04001773typedef struct BlockReopenQueueEntry {
1774 bool prepared;
1775 BDRVReopenState state;
1776 QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1777} BlockReopenQueueEntry;
1778
1779/*
1780 * Adds a BlockDriverState to a simple queue for an atomic, transactional
1781 * reopen of multiple devices.
1782 *
1783 * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1784 * already performed, or alternatively may be NULL a new BlockReopenQueue will
1785 * be created and initialized. This newly created BlockReopenQueue should be
1786 * passed back in for subsequent calls that are intended to be of the same
1787 * atomic 'set'.
1788 *
1789 * bs is the BlockDriverState to add to the reopen queue.
1790 *
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001791 * options contains the changed options for the associated bs
1792 * (the BlockReopenQueue takes ownership)
1793 *
Jeff Codye971aa12012-09-20 15:13:19 -04001794 * flags contains the open flags for the associated bs
1795 *
1796 * returns a pointer to bs_queue, which is either the newly allocated
1797 * bs_queue, or the existing bs_queue being used.
1798 *
1799 */
Kevin Wolf28518102015-05-08 17:07:31 +02001800static BlockReopenQueue *bdrv_reopen_queue_child(BlockReopenQueue *bs_queue,
1801 BlockDriverState *bs,
1802 QDict *options,
1803 int flags,
1804 const BdrvChildRole *role,
1805 QDict *parent_options,
1806 int parent_flags)
Jeff Codye971aa12012-09-20 15:13:19 -04001807{
1808 assert(bs != NULL);
1809
1810 BlockReopenQueueEntry *bs_entry;
Kevin Wolf67251a32015-04-09 18:54:04 +02001811 BdrvChild *child;
Kevin Wolf145f5982015-05-08 16:15:03 +02001812 QDict *old_options, *explicit_options;
Kevin Wolf67251a32015-04-09 18:54:04 +02001813
Jeff Codye971aa12012-09-20 15:13:19 -04001814 if (bs_queue == NULL) {
1815 bs_queue = g_new0(BlockReopenQueue, 1);
1816 QSIMPLEQ_INIT(bs_queue);
1817 }
1818
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001819 if (!options) {
1820 options = qdict_new();
1821 }
1822
Kevin Wolf28518102015-05-08 17:07:31 +02001823 /*
1824 * Precedence of options:
1825 * 1. Explicitly passed in options (highest)
Kevin Wolf91a097e2015-05-08 17:49:53 +02001826 * 2. Set in flags (only for top level)
Kevin Wolf145f5982015-05-08 16:15:03 +02001827 * 3. Retained from explicitly set options of bs
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001828 * 4. Inherited from parent node
Kevin Wolf28518102015-05-08 17:07:31 +02001829 * 5. Retained from effective options of bs
1830 */
1831
Kevin Wolf91a097e2015-05-08 17:49:53 +02001832 if (!parent_options) {
1833 /*
1834 * Any setting represented by flags is always updated. If the
1835 * corresponding QDict option is set, it takes precedence. Otherwise
1836 * the flag is translated into a QDict option. The old setting of bs is
1837 * not considered.
1838 */
1839 update_options_from_flags(options, flags);
1840 }
1841
Kevin Wolf145f5982015-05-08 16:15:03 +02001842 /* Old explicitly set values (don't overwrite by inherited value) */
1843 old_options = qdict_clone_shallow(bs->explicit_options);
1844 bdrv_join_options(bs, options, old_options);
1845 QDECREF(old_options);
1846
1847 explicit_options = qdict_clone_shallow(options);
1848
Kevin Wolf28518102015-05-08 17:07:31 +02001849 /* Inherit from parent node */
1850 if (parent_options) {
1851 assert(!flags);
Kevin Wolf8e2160e2015-04-29 17:29:39 +02001852 role->inherit_options(&flags, options, parent_flags, parent_options);
Kevin Wolf28518102015-05-08 17:07:31 +02001853 }
1854
1855 /* Old values are used for options that aren't set yet */
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001856 old_options = qdict_clone_shallow(bs->options);
Kevin Wolfcddff5b2015-11-16 16:43:27 +01001857 bdrv_join_options(bs, options, old_options);
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001858 QDECREF(old_options);
1859
Kevin Wolff1f25a22014-04-25 19:04:55 +02001860 /* bdrv_open() masks this flag out */
1861 flags &= ~BDRV_O_PROTOCOL;
1862
Kevin Wolf67251a32015-04-09 18:54:04 +02001863 QLIST_FOREACH(child, &bs->children, next) {
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001864 QDict *new_child_options;
1865 char *child_key_dot;
Kevin Wolf67251a32015-04-09 18:54:04 +02001866
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001867 /* reopen can only change the options of block devices that were
1868 * implicitly created and inherited options. For other (referenced)
1869 * block devices, a syntax like "backing.foo" results in an error. */
Kevin Wolf67251a32015-04-09 18:54:04 +02001870 if (child->bs->inherits_from != bs) {
1871 continue;
1872 }
1873
Kevin Wolf4c9dfe52015-05-08 15:14:15 +02001874 child_key_dot = g_strdup_printf("%s.", child->name);
1875 qdict_extract_subqdict(options, &new_child_options, child_key_dot);
1876 g_free(child_key_dot);
1877
Kevin Wolf28518102015-05-08 17:07:31 +02001878 bdrv_reopen_queue_child(bs_queue, child->bs, new_child_options, 0,
1879 child->role, options, flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001880 }
1881
1882 bs_entry = g_new0(BlockReopenQueueEntry, 1);
1883 QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1884
1885 bs_entry->state.bs = bs;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001886 bs_entry->state.options = options;
Kevin Wolf145f5982015-05-08 16:15:03 +02001887 bs_entry->state.explicit_options = explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04001888 bs_entry->state.flags = flags;
1889
1890 return bs_queue;
1891}
1892
Kevin Wolf28518102015-05-08 17:07:31 +02001893BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1894 BlockDriverState *bs,
1895 QDict *options, int flags)
1896{
1897 return bdrv_reopen_queue_child(bs_queue, bs, options, flags,
1898 NULL, NULL, 0);
1899}
1900
Jeff Codye971aa12012-09-20 15:13:19 -04001901/*
1902 * Reopen multiple BlockDriverStates atomically & transactionally.
1903 *
1904 * The queue passed in (bs_queue) must have been built up previous
1905 * via bdrv_reopen_queue().
1906 *
1907 * Reopens all BDS specified in the queue, with the appropriate
1908 * flags. All devices are prepared for reopen, and failure of any
1909 * device will cause all device changes to be abandonded, and intermediate
1910 * data cleaned up.
1911 *
1912 * If all devices prepare successfully, then the changes are committed
1913 * to all devices.
1914 *
1915 */
1916int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1917{
1918 int ret = -1;
1919 BlockReopenQueueEntry *bs_entry, *next;
1920 Error *local_err = NULL;
1921
1922 assert(bs_queue != NULL);
1923
1924 bdrv_drain_all();
1925
1926 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1927 if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1928 error_propagate(errp, local_err);
1929 goto cleanup;
1930 }
1931 bs_entry->prepared = true;
1932 }
1933
1934 /* If we reach this point, we have success and just need to apply the
1935 * changes
1936 */
1937 QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1938 bdrv_reopen_commit(&bs_entry->state);
1939 }
1940
1941 ret = 0;
1942
1943cleanup:
1944 QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1945 if (ret && bs_entry->prepared) {
1946 bdrv_reopen_abort(&bs_entry->state);
Kevin Wolf145f5982015-05-08 16:15:03 +02001947 } else if (ret) {
1948 QDECREF(bs_entry->state.explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04001949 }
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001950 QDECREF(bs_entry->state.options);
Jeff Codye971aa12012-09-20 15:13:19 -04001951 g_free(bs_entry);
1952 }
1953 g_free(bs_queue);
1954 return ret;
1955}
1956
1957
1958/* Reopen a single BlockDriverState with the specified flags. */
1959int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1960{
1961 int ret = -1;
1962 Error *local_err = NULL;
Kevin Wolf4d2cb092015-04-10 17:50:50 +02001963 BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, NULL, bdrv_flags);
Jeff Codye971aa12012-09-20 15:13:19 -04001964
1965 ret = bdrv_reopen_multiple(queue, &local_err);
1966 if (local_err != NULL) {
1967 error_propagate(errp, local_err);
1968 }
1969 return ret;
1970}
1971
1972
1973/*
1974 * Prepares a BlockDriverState for reopen. All changes are staged in the
1975 * 'opaque' field of the BDRVReopenState, which is used and allocated by
1976 * the block driver layer .bdrv_reopen_prepare()
1977 *
1978 * bs is the BlockDriverState to reopen
1979 * flags are the new open flags
1980 * queue is the reopen queue
1981 *
1982 * Returns 0 on success, non-zero on error. On error errp will be set
1983 * as well.
1984 *
1985 * On failure, bdrv_reopen_abort() will be called to clean up any data.
1986 * It is the responsibility of the caller to then call the abort() or
1987 * commit() for any other BDS that have been left in a prepare() state
1988 *
1989 */
1990int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1991 Error **errp)
1992{
1993 int ret = -1;
1994 Error *local_err = NULL;
1995 BlockDriver *drv;
Kevin Wolfccf9dc02015-05-08 17:24:56 +02001996 QemuOpts *opts;
1997 const char *value;
Jeff Codye971aa12012-09-20 15:13:19 -04001998
1999 assert(reopen_state != NULL);
2000 assert(reopen_state->bs->drv != NULL);
2001 drv = reopen_state->bs->drv;
2002
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002003 /* Process generic block layer options */
2004 opts = qemu_opts_create(&bdrv_runtime_opts, NULL, 0, &error_abort);
2005 qemu_opts_absorb_qdict(opts, reopen_state->options, &local_err);
2006 if (local_err) {
2007 error_propagate(errp, local_err);
2008 ret = -EINVAL;
2009 goto error;
2010 }
2011
Kevin Wolf91a097e2015-05-08 17:49:53 +02002012 update_flags_from_options(&reopen_state->flags, opts);
2013
2014 /* If a guest device is attached, it owns WCE */
2015 if (reopen_state->bs->blk && blk_get_attached_dev(reopen_state->bs->blk)) {
2016 bool old_wce = bdrv_enable_write_cache(reopen_state->bs);
2017 bool new_wce = (reopen_state->flags & BDRV_O_CACHE_WB);
2018 if (old_wce != new_wce) {
2019 error_setg(errp, "Cannot change cache.writeback: Device attached");
2020 ret = -EINVAL;
2021 goto error;
2022 }
2023 }
2024
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002025 /* node-name and driver must be unchanged. Put them back into the QDict, so
2026 * that they are checked at the end of this function. */
2027 value = qemu_opt_get(opts, "node-name");
2028 if (value) {
2029 qdict_put(reopen_state->options, "node-name", qstring_from_str(value));
2030 }
2031
2032 value = qemu_opt_get(opts, "driver");
2033 if (value) {
2034 qdict_put(reopen_state->options, "driver", qstring_from_str(value));
2035 }
2036
Jeff Codye971aa12012-09-20 15:13:19 -04002037 /* if we are to stay read-only, do not allow permission change
2038 * to r/w */
2039 if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
2040 reopen_state->flags & BDRV_O_RDWR) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002041 error_setg(errp, "Node '%s' is read only",
2042 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002043 goto error;
2044 }
2045
2046
2047 ret = bdrv_flush(reopen_state->bs);
2048 if (ret) {
Eric Blake455b0fd2015-11-10 23:51:20 -07002049 error_setg_errno(errp, -ret, "Error flushing drive");
Jeff Codye971aa12012-09-20 15:13:19 -04002050 goto error;
2051 }
2052
2053 if (drv->bdrv_reopen_prepare) {
2054 ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
2055 if (ret) {
2056 if (local_err != NULL) {
2057 error_propagate(errp, local_err);
2058 } else {
Luiz Capitulinod8b68952013-06-10 11:29:27 -04002059 error_setg(errp, "failed while preparing to reopen image '%s'",
2060 reopen_state->bs->filename);
Jeff Codye971aa12012-09-20 15:13:19 -04002061 }
2062 goto error;
2063 }
2064 } else {
2065 /* It is currently mandatory to have a bdrv_reopen_prepare()
2066 * handler for each supported drv. */
Alberto Garcia81e5f782015-04-08 12:29:19 +03002067 error_setg(errp, "Block format '%s' used by node '%s' "
2068 "does not support reopening files", drv->format_name,
2069 bdrv_get_device_or_node_name(reopen_state->bs));
Jeff Codye971aa12012-09-20 15:13:19 -04002070 ret = -1;
2071 goto error;
2072 }
2073
Kevin Wolf4d2cb092015-04-10 17:50:50 +02002074 /* Options that are not handled are only okay if they are unchanged
2075 * compared to the old state. It is expected that some options are only
2076 * used for the initial open, but not reopen (e.g. filename) */
2077 if (qdict_size(reopen_state->options)) {
2078 const QDictEntry *entry = qdict_first(reopen_state->options);
2079
2080 do {
2081 QString *new_obj = qobject_to_qstring(entry->value);
2082 const char *new = qstring_get_str(new_obj);
2083 const char *old = qdict_get_try_str(reopen_state->bs->options,
2084 entry->key);
2085
2086 if (!old || strcmp(new, old)) {
2087 error_setg(errp, "Cannot change the option '%s'", entry->key);
2088 ret = -EINVAL;
2089 goto error;
2090 }
2091 } while ((entry = qdict_next(reopen_state->options, entry)));
2092 }
2093
Jeff Codye971aa12012-09-20 15:13:19 -04002094 ret = 0;
2095
2096error:
Kevin Wolfccf9dc02015-05-08 17:24:56 +02002097 qemu_opts_del(opts);
Jeff Codye971aa12012-09-20 15:13:19 -04002098 return ret;
2099}
2100
2101/*
2102 * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
2103 * makes them final by swapping the staging BlockDriverState contents into
2104 * the active BlockDriverState contents.
2105 */
2106void bdrv_reopen_commit(BDRVReopenState *reopen_state)
2107{
2108 BlockDriver *drv;
2109
2110 assert(reopen_state != NULL);
2111 drv = reopen_state->bs->drv;
2112 assert(drv != NULL);
2113
2114 /* If there are any driver level actions to take */
2115 if (drv->bdrv_reopen_commit) {
2116 drv->bdrv_reopen_commit(reopen_state);
2117 }
2118
2119 /* set BDS specific flags now */
Kevin Wolf145f5982015-05-08 16:15:03 +02002120 QDECREF(reopen_state->bs->explicit_options);
2121
2122 reopen_state->bs->explicit_options = reopen_state->explicit_options;
Jeff Codye971aa12012-09-20 15:13:19 -04002123 reopen_state->bs->open_flags = reopen_state->flags;
2124 reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
2125 BDRV_O_CACHE_WB);
2126 reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
Kevin Wolf355ef4a2013-12-11 20:14:09 +01002127
Kevin Wolf3baca892014-07-16 17:48:16 +02002128 bdrv_refresh_limits(reopen_state->bs, NULL);
Jeff Codye971aa12012-09-20 15:13:19 -04002129}
2130
2131/*
2132 * Abort the reopen, and delete and free the staged changes in
2133 * reopen_state
2134 */
2135void bdrv_reopen_abort(BDRVReopenState *reopen_state)
2136{
2137 BlockDriver *drv;
2138
2139 assert(reopen_state != NULL);
2140 drv = reopen_state->bs->drv;
2141 assert(drv != NULL);
2142
2143 if (drv->bdrv_reopen_abort) {
2144 drv->bdrv_reopen_abort(reopen_state);
2145 }
Kevin Wolf145f5982015-05-08 16:15:03 +02002146
2147 QDECREF(reopen_state->explicit_options);
Jeff Codye971aa12012-09-20 15:13:19 -04002148}
2149
2150
Max Reitz64dff522016-01-29 16:36:10 +01002151static void bdrv_close(BlockDriverState *bs)
bellardfc01f7e2003-06-30 10:03:06 +00002152{
Max Reitz33384422014-06-20 21:57:33 +02002153 BdrvAioNotifier *ban, *ban_next;
2154
Max Reitzca9bd242016-01-29 16:36:14 +01002155 assert(!bs->job);
Alberto Garcia99b7e772015-09-25 16:41:44 +03002156
2157 /* Disable I/O limits and drain all pending throttled requests */
Alberto Garciaa0d64a62015-11-04 15:15:36 +02002158 if (bs->throttle_state) {
Alberto Garcia99b7e772015-09-25 16:41:44 +03002159 bdrv_io_limits_disable(bs);
2160 }
2161
Paolo Bonzinifc272912015-12-23 11:48:24 +01002162 bdrv_drained_begin(bs); /* complete I/O */
Stefan Hajnoczi58fda172013-07-02 15:36:25 +02002163 bdrv_flush(bs);
Fam Zheng53ec73e2015-05-29 18:53:14 +08002164 bdrv_drain(bs); /* in case flush left pending I/O */
Paolo Bonzinifc272912015-12-23 11:48:24 +01002165
Max Reitzc5acdc92016-01-29 16:36:01 +01002166 bdrv_release_named_dirty_bitmaps(bs);
2167 assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2168
Max Reitzb4d02822015-10-19 17:53:15 +02002169 if (bs->blk) {
2170 blk_dev_change_media_cb(bs->blk, false);
2171 }
2172
Paolo Bonzini3cbc0022012-10-19 11:36:48 +02002173 if (bs->drv) {
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002174 BdrvChild *child, *next;
2175
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002176 bs->drv->bdrv_close(bs);
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002177 bs->drv = NULL;
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002178
Kevin Wolf5db15a52015-09-14 15:33:33 +02002179 bdrv_set_backing_hd(bs, NULL);
Kevin Wolf9a7dedb2015-06-16 10:58:20 +02002180
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002181 if (bs->file != NULL) {
2182 bdrv_unref_child(bs, bs->file);
2183 bs->file = NULL;
2184 }
2185
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002186 QLIST_FOREACH_SAFE(child, &bs->children, next, next) {
Kevin Wolf33a60402015-06-15 13:51:04 +02002187 /* TODO Remove bdrv_unref() from drivers' close function and use
2188 * bdrv_unref_child() here */
Kevin Wolfbddcec32015-04-09 18:47:50 +02002189 if (child->bs->inherits_from == bs) {
2190 child->bs->inherits_from = NULL;
2191 }
Kevin Wolf33a60402015-06-15 13:51:04 +02002192 bdrv_detach_child(child);
Kevin Wolf6e93e7c2015-04-08 13:49:41 +02002193 }
2194
Anthony Liguori7267c092011-08-20 22:09:37 -05002195 g_free(bs->opaque);
bellardea2384d2004-08-01 21:59:26 +00002196 bs->opaque = NULL;
Stefan Hajnoczi53fec9d2011-11-28 16:08:47 +00002197 bs->copy_on_read = 0;
Paolo Bonzinia275fa42012-05-08 16:51:43 +02002198 bs->backing_file[0] = '\0';
2199 bs->backing_format[0] = '\0';
Paolo Bonzini64058752012-05-08 16:51:49 +02002200 bs->total_sectors = 0;
2201 bs->encrypted = 0;
2202 bs->valid_key = 0;
2203 bs->sg = 0;
Asias He0d51b4d2013-08-22 15:24:14 +08002204 bs->zero_beyond_eof = false;
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002205 QDECREF(bs->options);
Kevin Wolf145f5982015-05-08 16:15:03 +02002206 QDECREF(bs->explicit_options);
Kevin Wolfde9c0ce2013-03-15 10:35:02 +01002207 bs->options = NULL;
Max Reitz91af7012014-07-18 20:24:56 +02002208 QDECREF(bs->full_open_options);
2209 bs->full_open_options = NULL;
bellardb3380822004-03-14 21:38:54 +00002210 }
Zhi Yong Wu98f90db2011-11-08 13:00:14 +08002211
Max Reitz33384422014-06-20 21:57:33 +02002212 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
2213 g_free(ban);
2214 }
2215 QLIST_INIT(&bs->aio_notifiers);
Paolo Bonzinifc272912015-12-23 11:48:24 +01002216 bdrv_drained_end(bs);
bellardb3380822004-03-14 21:38:54 +00002217}
2218
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002219void bdrv_close_all(void)
2220{
2221 BlockDriverState *bs;
Max Reitzca9bd242016-01-29 16:36:14 +01002222 AioContext *aio_context;
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002223
Max Reitzca9bd242016-01-29 16:36:14 +01002224 /* Drop references from requests still in flight, such as canceled block
2225 * jobs whose AIO context has not been polled yet */
2226 bdrv_drain_all();
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02002227
Max Reitzca9bd242016-01-29 16:36:14 +01002228 blk_remove_all_bs();
2229 blockdev_close_all_bdrv_states();
2230
2231 /* Cancel all block jobs */
2232 while (!QTAILQ_EMPTY(&all_bdrv_states)) {
2233 QTAILQ_FOREACH(bs, &all_bdrv_states, bs_list) {
2234 aio_context = bdrv_get_aio_context(bs);
2235
2236 aio_context_acquire(aio_context);
2237 if (bs->job) {
2238 block_job_cancel_sync(bs->job);
2239 aio_context_release(aio_context);
2240 break;
2241 }
2242 aio_context_release(aio_context);
2243 }
2244
2245 /* All the remaining BlockDriverStates are referenced directly or
2246 * indirectly from block jobs, so there needs to be at least one BDS
2247 * directly used by a block job */
2248 assert(bs);
MORITA Kazutaka2bc93fe2010-05-28 11:44:57 +09002249 }
2250}
2251
Kevin Wolf8e419ae2015-09-16 16:18:38 +02002252/* Fields that need to stay with the top-level BDS */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002253static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2254 BlockDriverState *bs_src)
2255{
2256 /* move some fields that need to stay attached to the device */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002257
2258 /* dev info */
Paolo Bonzini4ddc07c2012-06-14 16:55:02 +02002259 bs_dest->enable_write_cache = bs_src->enable_write_cache;
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002260}
2261
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002262static void change_parent_backing_link(BlockDriverState *from,
2263 BlockDriverState *to)
2264{
2265 BdrvChild *c, *next;
2266
Kevin Wolff21d96d2016-03-08 13:47:46 +01002267 if (from->blk) {
2268 /* FIXME We bypass blk_set_bs(), so we need to make these updates
2269 * manually. The root problem is not in this change function, but the
2270 * existence of BlockDriverState.blk. */
2271 to->blk = from->blk;
2272 from->blk = NULL;
2273 }
2274
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002275 QLIST_FOREACH_SAFE(c, &from->parents, next_parent, next) {
2276 assert(c->role != &child_backing);
2277 c->bs = to;
2278 QLIST_REMOVE(c, next_parent);
2279 QLIST_INSERT_HEAD(&to->parents, c, next_parent);
2280 bdrv_ref(to);
2281 bdrv_unref(from);
2282 }
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002283}
2284
2285static void swap_feature_fields(BlockDriverState *bs_top,
2286 BlockDriverState *bs_new)
2287{
2288 BlockDriverState tmp;
2289
2290 bdrv_move_feature_fields(&tmp, bs_top);
2291 bdrv_move_feature_fields(bs_top, bs_new);
2292 bdrv_move_feature_fields(bs_new, &tmp);
2293
2294 assert(!bs_new->throttle_state);
2295 if (bs_top->throttle_state) {
2296 assert(bs_top->io_limits_enabled);
2297 bdrv_io_limits_enable(bs_new, throttle_group_get_name(bs_top));
2298 bdrv_io_limits_disable(bs_top);
2299 }
2300}
2301
Jeff Cody8802d1f2012-02-28 15:54:06 -05002302/*
2303 * Add new bs contents at the top of an image chain while the chain is
2304 * live, while keeping required fields on the top layer.
2305 *
2306 * This will modify the BlockDriverState fields, and swap contents
2307 * between bs_new and bs_top. Both bs_new and bs_top are modified.
2308 *
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002309 * bs_new must not be attached to a BlockBackend.
Jeff Codyf6801b82012-03-27 16:30:19 -04002310 *
Jeff Cody8802d1f2012-02-28 15:54:06 -05002311 * This function does not create any image files.
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002312 *
2313 * bdrv_append() takes ownership of a bs_new reference and unrefs it because
2314 * that's what the callers commonly need. bs_new will be referenced by the old
2315 * parents of bs_top after bdrv_append() returns. If the caller needs to keep a
2316 * reference of its own, it must call bdrv_ref().
Jeff Cody8802d1f2012-02-28 15:54:06 -05002317 */
2318void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2319{
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002320 assert(!bdrv_requests_pending(bs_top));
2321 assert(!bdrv_requests_pending(bs_new));
Jeff Cody8802d1f2012-02-28 15:54:06 -05002322
Kevin Wolfdd62f1c2015-06-18 14:09:57 +02002323 bdrv_ref(bs_top);
2324 change_parent_backing_link(bs_top, bs_new);
2325
2326 /* Some fields always stay on top of the backing file chain */
2327 swap_feature_fields(bs_top, bs_new);
2328
2329 bdrv_set_backing_hd(bs_new, bs_top);
2330 bdrv_unref(bs_top);
2331
2332 /* bs_new is now referenced by its new parents, we don't need the
2333 * additional reference any more. */
2334 bdrv_unref(bs_new);
Jeff Cody8802d1f2012-02-28 15:54:06 -05002335}
2336
Kevin Wolf3f09bfb2015-09-15 11:58:23 +02002337void bdrv_replace_in_backing_chain(BlockDriverState *old, BlockDriverState *new)
2338{
2339 assert(!bdrv_requests_pending(old));
2340 assert(!bdrv_requests_pending(new));
2341
2342 bdrv_ref(old);
2343
2344 if (old->blk) {
2345 /* As long as these fields aren't in BlockBackend, but in the top-level
2346 * BlockDriverState, it's not possible for a BDS to have two BBs.
2347 *
2348 * We really want to copy the fields from old to new, but we go for a
2349 * swap instead so that pointers aren't duplicated and cause trouble.
2350 * (Also, bdrv_swap() used to do the same.) */
2351 assert(!new->blk);
2352 swap_feature_fields(old, new);
2353 }
2354 change_parent_backing_link(old, new);
2355
2356 /* Change backing files if a previously independent node is added to the
2357 * chain. For active commit, we replace top by its own (indirect) backing
2358 * file and don't do anything here so we don't build a loop. */
2359 if (new->backing == NULL && !bdrv_chain_contains(backing_bs(old), new)) {
2360 bdrv_set_backing_hd(new, backing_bs(old));
2361 bdrv_set_backing_hd(old, NULL);
2362 }
2363
2364 bdrv_unref(old);
2365}
2366
Fam Zheng4f6fd342013-08-23 09:14:47 +08002367static void bdrv_delete(BlockDriverState *bs)
bellardb3380822004-03-14 21:38:54 +00002368{
Paolo Bonzini3e914652012-03-30 13:17:11 +02002369 assert(!bs->job);
Fam Zheng3718d8a2014-05-23 21:29:43 +08002370 assert(bdrv_op_blocker_is_empty(bs));
Fam Zheng4f6fd342013-08-23 09:14:47 +08002371 assert(!bs->refcnt);
Markus Armbruster18846de2010-06-29 16:58:30 +02002372
Stefan Hajnoczie1b5c522013-06-27 15:32:26 +02002373 bdrv_close(bs);
2374
Stefan Hajnoczi1b7bdbc2010-04-10 07:02:42 +01002375 /* remove from list, if necessary */
Kevin Wolf63eaaae2016-03-18 10:46:57 +01002376 if (bs->node_name[0] != '\0') {
2377 QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2378 }
Max Reitz2c1d04e2016-01-29 16:36:11 +01002379 QTAILQ_REMOVE(&all_bdrv_states, bs, bs_list);
2380
Anthony Liguori7267c092011-08-20 22:09:37 -05002381 g_free(bs);
bellardfc01f7e2003-06-30 10:03:06 +00002382}
2383
aliguorie97fc192009-04-21 23:11:50 +00002384/*
2385 * Run consistency checks on an image
2386 *
Kevin Wolfe076f332010-06-29 11:43:13 +02002387 * Returns 0 if the check could be completed (it doesn't mean that the image is
Stefan Weila1c72732011-04-28 17:20:38 +02002388 * free of errors) or -errno when an internal error occurred. The results of the
Kevin Wolfe076f332010-06-29 11:43:13 +02002389 * check are stored in res.
aliguorie97fc192009-04-21 23:11:50 +00002390 */
Kevin Wolf4534ff52012-05-11 16:07:02 +02002391int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
aliguorie97fc192009-04-21 23:11:50 +00002392{
Max Reitz908bcd52014-08-07 22:47:55 +02002393 if (bs->drv == NULL) {
2394 return -ENOMEDIUM;
2395 }
aliguorie97fc192009-04-21 23:11:50 +00002396 if (bs->drv->bdrv_check == NULL) {
2397 return -ENOTSUP;
2398 }
2399
Kevin Wolfe076f332010-06-29 11:43:13 +02002400 memset(res, 0, sizeof(*res));
Kevin Wolf4534ff52012-05-11 16:07:02 +02002401 return bs->drv->bdrv_check(bs, res, fix);
aliguorie97fc192009-04-21 23:11:50 +00002402}
2403
Kevin Wolf8a426612010-07-16 17:17:01 +02002404#define COMMIT_BUF_SECTORS 2048
2405
bellard33e39632003-07-06 17:15:21 +00002406/* commit COW file into the raw image */
2407int bdrv_commit(BlockDriverState *bs)
2408{
bellard19cb3732006-08-19 11:45:59 +00002409 BlockDriver *drv = bs->drv;
Jeff Cody72706ea2014-01-24 09:02:35 -05002410 int64_t sector, total_sectors, length, backing_length;
Kevin Wolf8a426612010-07-16 17:17:01 +02002411 int n, ro, open_flags;
Jeff Cody0bce5972012-09-20 15:13:34 -04002412 int ret = 0;
Jeff Cody72706ea2014-01-24 09:02:35 -05002413 uint8_t *buf = NULL;
bellard33e39632003-07-06 17:15:21 +00002414
bellard19cb3732006-08-19 11:45:59 +00002415 if (!drv)
2416 return -ENOMEDIUM;
Liu Yuan6bb45152014-09-01 13:35:21 +08002417
Kevin Wolf760e0062015-06-17 14:55:21 +02002418 if (!bs->backing) {
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002419 return -ENOTSUP;
bellard33e39632003-07-06 17:15:21 +00002420 }
2421
Fam Zhengbb000212014-09-11 13:14:00 +08002422 if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, NULL) ||
Kevin Wolf760e0062015-06-17 14:55:21 +02002423 bdrv_op_is_blocked(bs->backing->bs, BLOCK_OP_TYPE_COMMIT_TARGET, NULL)) {
Stefan Hajnoczi2d3735d2012-01-18 14:40:41 +00002424 return -EBUSY;
2425 }
2426
Kevin Wolf760e0062015-06-17 14:55:21 +02002427 ro = bs->backing->bs->read_only;
2428 open_flags = bs->backing->bs->open_flags;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002429
2430 if (ro) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002431 if (bdrv_reopen(bs->backing->bs, open_flags | BDRV_O_RDWR, NULL)) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002432 return -EACCES;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002433 }
bellard33e39632003-07-06 17:15:21 +00002434 }
bellardea2384d2004-08-01 21:59:26 +00002435
Jeff Cody72706ea2014-01-24 09:02:35 -05002436 length = bdrv_getlength(bs);
2437 if (length < 0) {
2438 ret = length;
2439 goto ro_cleanup;
2440 }
2441
Kevin Wolf760e0062015-06-17 14:55:21 +02002442 backing_length = bdrv_getlength(bs->backing->bs);
Jeff Cody72706ea2014-01-24 09:02:35 -05002443 if (backing_length < 0) {
2444 ret = backing_length;
2445 goto ro_cleanup;
2446 }
2447
2448 /* If our top snapshot is larger than the backing file image,
2449 * grow the backing file image if possible. If not possible,
2450 * we must return an error */
2451 if (length > backing_length) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002452 ret = bdrv_truncate(bs->backing->bs, length);
Jeff Cody72706ea2014-01-24 09:02:35 -05002453 if (ret < 0) {
2454 goto ro_cleanup;
2455 }
2456 }
2457
2458 total_sectors = length >> BDRV_SECTOR_BITS;
Kevin Wolf857d4f42014-05-20 13:16:51 +02002459
2460 /* qemu_try_blockalign() for bs will choose an alignment that works for
Kevin Wolf760e0062015-06-17 14:55:21 +02002461 * bs->backing->bs as well, so no need to compare the alignment manually. */
Kevin Wolf857d4f42014-05-20 13:16:51 +02002462 buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2463 if (buf == NULL) {
2464 ret = -ENOMEM;
2465 goto ro_cleanup;
2466 }
bellardea2384d2004-08-01 21:59:26 +00002467
Kevin Wolf8a426612010-07-16 17:17:01 +02002468 for (sector = 0; sector < total_sectors; sector += n) {
Paolo Bonzinid6636402013-09-04 19:00:25 +02002469 ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2470 if (ret < 0) {
2471 goto ro_cleanup;
2472 }
2473 if (ret) {
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002474 ret = bdrv_read(bs, sector, buf, n);
2475 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002476 goto ro_cleanup;
2477 }
2478
Kevin Wolf760e0062015-06-17 14:55:21 +02002479 ret = bdrv_write(bs->backing->bs, sector, buf, n);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002480 if (ret < 0) {
Kevin Wolf8a426612010-07-16 17:17:01 +02002481 goto ro_cleanup;
2482 }
bellardea2384d2004-08-01 21:59:26 +00002483 }
2484 }
bellard95389c82005-12-18 18:28:15 +00002485
Christoph Hellwig1d449522010-01-17 12:32:30 +01002486 if (drv->bdrv_make_empty) {
2487 ret = drv->bdrv_make_empty(bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002488 if (ret < 0) {
2489 goto ro_cleanup;
2490 }
Christoph Hellwig1d449522010-01-17 12:32:30 +01002491 bdrv_flush(bs);
2492 }
bellard95389c82005-12-18 18:28:15 +00002493
Christoph Hellwig3f5075a2010-01-12 13:49:23 +01002494 /*
2495 * Make sure all data we wrote to the backing device is actually
2496 * stable on disk.
2497 */
Kevin Wolf760e0062015-06-17 14:55:21 +02002498 if (bs->backing) {
2499 bdrv_flush(bs->backing->bs);
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002500 }
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002501
Kevin Wolfdabfa6c2014-01-24 14:00:43 +01002502 ret = 0;
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002503ro_cleanup:
Kevin Wolf857d4f42014-05-20 13:16:51 +02002504 qemu_vfree(buf);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002505
2506 if (ro) {
Jeff Cody0bce5972012-09-20 15:13:34 -04002507 /* ignoring error return here */
Kevin Wolf760e0062015-06-17 14:55:21 +02002508 bdrv_reopen(bs->backing->bs, open_flags & ~BDRV_O_RDWR, NULL);
Naphtali Sprei4dca4b62010-02-14 13:39:18 +02002509 }
2510
Christoph Hellwig1d449522010-01-17 12:32:30 +01002511 return ret;
bellard33e39632003-07-06 17:15:21 +00002512}
2513
Kevin Wolf756e6732010-01-12 12:55:17 +01002514/*
2515 * Return values:
2516 * 0 - success
2517 * -EINVAL - backing format specified, but no file
2518 * -ENOSPC - can't update the backing file because no space is left in the
2519 * image file header
2520 * -ENOTSUP - format driver doesn't support changing the backing file
2521 */
2522int bdrv_change_backing_file(BlockDriverState *bs,
2523 const char *backing_file, const char *backing_fmt)
2524{
2525 BlockDriver *drv = bs->drv;
Paolo Bonzini469ef352012-04-12 14:01:02 +02002526 int ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002527
Paolo Bonzini5f377792012-04-12 14:01:01 +02002528 /* Backing file format doesn't make sense without a backing file */
2529 if (backing_fmt && !backing_file) {
2530 return -EINVAL;
2531 }
2532
Kevin Wolf756e6732010-01-12 12:55:17 +01002533 if (drv->bdrv_change_backing_file != NULL) {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002534 ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
Kevin Wolf756e6732010-01-12 12:55:17 +01002535 } else {
Paolo Bonzini469ef352012-04-12 14:01:02 +02002536 ret = -ENOTSUP;
Kevin Wolf756e6732010-01-12 12:55:17 +01002537 }
Paolo Bonzini469ef352012-04-12 14:01:02 +02002538
2539 if (ret == 0) {
2540 pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2541 pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2542 }
2543 return ret;
Kevin Wolf756e6732010-01-12 12:55:17 +01002544}
2545
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002546/*
2547 * Finds the image layer in the chain that has 'bs' as its backing file.
2548 *
2549 * active is the current topmost image.
2550 *
2551 * Returns NULL if bs is not found in active's image chain,
2552 * or if active == bs.
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002553 *
2554 * Returns the bottommost base image if bs == NULL.
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002555 */
2556BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2557 BlockDriverState *bs)
2558{
Kevin Wolf760e0062015-06-17 14:55:21 +02002559 while (active && bs != backing_bs(active)) {
2560 active = backing_bs(active);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002561 }
2562
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002563 return active;
2564}
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002565
Jeff Cody4caf0fc2014-06-25 15:35:26 -04002566/* Given a BDS, searches for the base layer. */
2567BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2568{
2569 return bdrv_find_overlay(bs, NULL);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002570}
2571
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002572/*
2573 * Drops images above 'base' up to and including 'top', and sets the image
2574 * above 'top' to have base as its backing file.
2575 *
2576 * Requires that the overlay to 'top' is opened r/w, so that the backing file
2577 * information in 'bs' can be properly updated.
2578 *
2579 * E.g., this will convert the following chain:
2580 * bottom <- base <- intermediate <- top <- active
2581 *
2582 * to
2583 *
2584 * bottom <- base <- active
2585 *
2586 * It is allowed for bottom==base, in which case it converts:
2587 *
2588 * base <- intermediate <- top <- active
2589 *
2590 * to
2591 *
2592 * base <- active
2593 *
Jeff Cody54e26902014-06-25 15:40:10 -04002594 * If backing_file_str is non-NULL, it will be used when modifying top's
2595 * overlay image metadata.
2596 *
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002597 * Error conditions:
2598 * if active == top, that is considered an error
2599 *
2600 */
2601int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
Jeff Cody54e26902014-06-25 15:40:10 -04002602 BlockDriverState *base, const char *backing_file_str)
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002603{
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002604 BlockDriverState *new_top_bs = NULL;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002605 int ret = -EIO;
2606
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002607 if (!top->drv || !base->drv) {
2608 goto exit;
2609 }
2610
2611 new_top_bs = bdrv_find_overlay(active, top);
2612
2613 if (new_top_bs == NULL) {
2614 /* we could not find the image above 'top', this is an error */
2615 goto exit;
2616 }
2617
Kevin Wolf760e0062015-06-17 14:55:21 +02002618 /* special case of new_top_bs->backing->bs already pointing to base - nothing
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002619 * to do, no intermediate images */
Kevin Wolf760e0062015-06-17 14:55:21 +02002620 if (backing_bs(new_top_bs) == base) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002621 ret = 0;
2622 goto exit;
2623 }
2624
Kevin Wolf5db15a52015-09-14 15:33:33 +02002625 /* Make sure that base is in the backing chain of top */
2626 if (!bdrv_chain_contains(top, base)) {
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002627 goto exit;
2628 }
2629
2630 /* success - we can delete the intermediate states, and link top->base */
Kevin Wolf5db15a52015-09-14 15:33:33 +02002631 backing_file_str = backing_file_str ? backing_file_str : base->filename;
Jeff Cody54e26902014-06-25 15:40:10 -04002632 ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
Kevin Wolf5db15a52015-09-14 15:33:33 +02002633 base->drv ? base->drv->format_name : "");
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002634 if (ret) {
2635 goto exit;
2636 }
Kevin Wolf5db15a52015-09-14 15:33:33 +02002637 bdrv_set_backing_hd(new_top_bs, base);
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002638
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002639 ret = 0;
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002640exit:
Jeff Cody6ebdcee2012-09-27 13:29:12 -04002641 return ret;
2642}
2643
bellard83f64092006-08-01 16:21:11 +00002644/**
bellard83f64092006-08-01 16:21:11 +00002645 * Truncate file to 'offset' bytes (needed only for file protocols)
2646 */
2647int bdrv_truncate(BlockDriverState *bs, int64_t offset)
2648{
2649 BlockDriver *drv = bs->drv;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002650 int ret;
bellard83f64092006-08-01 16:21:11 +00002651 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002652 return -ENOMEDIUM;
bellard83f64092006-08-01 16:21:11 +00002653 if (!drv->bdrv_truncate)
2654 return -ENOTSUP;
Naphtali Sprei59f26892009-10-26 16:25:16 +02002655 if (bs->read_only)
2656 return -EACCES;
Jeff Cody9c75e162014-06-25 16:55:30 -04002657
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002658 ret = drv->bdrv_truncate(bs, offset);
2659 if (ret == 0) {
2660 ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
John Snowce1ffea2015-04-17 19:50:03 -04002661 bdrv_dirty_bitmap_truncate(bs);
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002662 if (bs->blk) {
2663 blk_dev_resize_cb(bs->blk);
2664 }
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002665 }
2666 return ret;
bellard83f64092006-08-01 16:21:11 +00002667}
2668
2669/**
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002670 * Length of a allocated file in bytes. Sparse files are counted by actual
2671 * allocated space. Return < 0 if error or unknown.
2672 */
2673int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
2674{
2675 BlockDriver *drv = bs->drv;
2676 if (!drv) {
2677 return -ENOMEDIUM;
2678 }
2679 if (drv->bdrv_get_allocated_file_size) {
2680 return drv->bdrv_get_allocated_file_size(bs);
2681 }
2682 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02002683 return bdrv_get_allocated_file_size(bs->file->bs);
Fam Zheng4a1d5e12011-07-12 19:56:39 +08002684 }
2685 return -ENOTSUP;
2686}
2687
2688/**
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002689 * Return number of sectors on success, -errno on error.
bellard83f64092006-08-01 16:21:11 +00002690 */
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002691int64_t bdrv_nb_sectors(BlockDriverState *bs)
bellard83f64092006-08-01 16:21:11 +00002692{
2693 BlockDriver *drv = bs->drv;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002694
bellard83f64092006-08-01 16:21:11 +00002695 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00002696 return -ENOMEDIUM;
Stefan Hajnoczi51762282010-04-19 16:56:41 +01002697
Kevin Wolfb94a2612013-10-29 12:18:58 +01002698 if (drv->has_variable_length) {
2699 int ret = refresh_total_sectors(bs, bs->total_sectors);
2700 if (ret < 0) {
2701 return ret;
Stefan Hajnoczi46a4e4e2011-03-29 20:04:41 +01002702 }
bellard83f64092006-08-01 16:21:11 +00002703 }
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002704 return bs->total_sectors;
2705}
2706
2707/**
2708 * Return length in bytes on success, -errno on error.
2709 * The length is always a multiple of BDRV_SECTOR_SIZE.
2710 */
2711int64_t bdrv_getlength(BlockDriverState *bs)
2712{
2713 int64_t ret = bdrv_nb_sectors(bs);
2714
Fam Zheng4a9c9ea2015-05-15 16:36:05 +08002715 ret = ret > INT64_MAX / BDRV_SECTOR_SIZE ? -EFBIG : ret;
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002716 return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
bellardfc01f7e2003-06-30 10:03:06 +00002717}
2718
bellard19cb3732006-08-19 11:45:59 +00002719/* return 0 as number of sectors if no device present or error */
ths96b8f132007-12-17 01:35:20 +00002720void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
bellardfc01f7e2003-06-30 10:03:06 +00002721{
Markus Armbruster65a9bb22014-06-26 13:23:17 +02002722 int64_t nb_sectors = bdrv_nb_sectors(bs);
2723
2724 *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
bellardfc01f7e2003-06-30 10:03:06 +00002725}
bellardcf989512004-02-16 21:56:36 +00002726
bellardb3380822004-03-14 21:38:54 +00002727int bdrv_is_read_only(BlockDriverState *bs)
2728{
2729 return bs->read_only;
2730}
2731
ths985a03b2007-12-24 16:10:43 +00002732int bdrv_is_sg(BlockDriverState *bs)
2733{
2734 return bs->sg;
2735}
2736
Christoph Hellwige900a7b2009-09-04 19:01:15 +02002737int bdrv_enable_write_cache(BlockDriverState *bs)
2738{
2739 return bs->enable_write_cache;
2740}
2741
Paolo Bonzini425b0142012-06-06 00:04:52 +02002742void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
2743{
2744 bs->enable_write_cache = wce;
Jeff Cody55b110f2012-09-20 15:13:18 -04002745
2746 /* so a reopen() will preserve wce */
2747 if (wce) {
2748 bs->open_flags |= BDRV_O_CACHE_WB;
2749 } else {
2750 bs->open_flags &= ~BDRV_O_CACHE_WB;
2751 }
Paolo Bonzini425b0142012-06-06 00:04:52 +02002752}
2753
bellardea2384d2004-08-01 21:59:26 +00002754int bdrv_is_encrypted(BlockDriverState *bs)
2755{
Kevin Wolf760e0062015-06-17 14:55:21 +02002756 if (bs->backing && bs->backing->bs->encrypted) {
bellardea2384d2004-08-01 21:59:26 +00002757 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002758 }
bellardea2384d2004-08-01 21:59:26 +00002759 return bs->encrypted;
2760}
2761
aliguoric0f4ce72009-03-05 23:01:01 +00002762int bdrv_key_required(BlockDriverState *bs)
2763{
Kevin Wolf760e0062015-06-17 14:55:21 +02002764 BdrvChild *backing = bs->backing;
aliguoric0f4ce72009-03-05 23:01:01 +00002765
Kevin Wolf760e0062015-06-17 14:55:21 +02002766 if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
aliguoric0f4ce72009-03-05 23:01:01 +00002767 return 1;
Kevin Wolf760e0062015-06-17 14:55:21 +02002768 }
aliguoric0f4ce72009-03-05 23:01:01 +00002769 return (bs->encrypted && !bs->valid_key);
2770}
2771
bellardea2384d2004-08-01 21:59:26 +00002772int bdrv_set_key(BlockDriverState *bs, const char *key)
2773{
2774 int ret;
Kevin Wolf760e0062015-06-17 14:55:21 +02002775 if (bs->backing && bs->backing->bs->encrypted) {
2776 ret = bdrv_set_key(bs->backing->bs, key);
bellardea2384d2004-08-01 21:59:26 +00002777 if (ret < 0)
2778 return ret;
2779 if (!bs->encrypted)
2780 return 0;
2781 }
Shahar Havivifd04a2a2010-03-06 00:26:13 +02002782 if (!bs->encrypted) {
2783 return -EINVAL;
2784 } else if (!bs->drv || !bs->drv->bdrv_set_key) {
2785 return -ENOMEDIUM;
2786 }
aliguoric0f4ce72009-03-05 23:01:01 +00002787 ret = bs->drv->bdrv_set_key(bs, key);
aliguoribb5fc202009-03-05 23:01:15 +00002788 if (ret < 0) {
2789 bs->valid_key = 0;
2790 } else if (!bs->valid_key) {
2791 bs->valid_key = 1;
Markus Armbrustera7f53e22014-10-07 13:59:25 +02002792 if (bs->blk) {
2793 /* call the change callback now, we skipped it on open */
2794 blk_dev_change_media_cb(bs->blk, true);
2795 }
aliguoribb5fc202009-03-05 23:01:15 +00002796 }
aliguoric0f4ce72009-03-05 23:01:01 +00002797 return ret;
bellardea2384d2004-08-01 21:59:26 +00002798}
2799
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002800/*
2801 * Provide an encryption key for @bs.
2802 * If @key is non-null:
2803 * If @bs is not encrypted, fail.
2804 * Else if the key is invalid, fail.
2805 * Else set @bs's key to @key, replacing the existing key, if any.
2806 * If @key is null:
2807 * If @bs is encrypted and still lacks a key, fail.
2808 * Else do nothing.
2809 * On failure, store an error object through @errp if non-null.
2810 */
2811void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
2812{
2813 if (key) {
2814 if (!bdrv_is_encrypted(bs)) {
Alberto Garcia81e5f782015-04-08 12:29:19 +03002815 error_setg(errp, "Node '%s' is not encrypted",
2816 bdrv_get_device_or_node_name(bs));
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002817 } else if (bdrv_set_key(bs, key) < 0) {
Markus Armbrusterc6bd8c72015-03-17 11:54:50 +01002818 error_setg(errp, QERR_INVALID_PASSWORD);
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002819 }
2820 } else {
2821 if (bdrv_key_required(bs)) {
Markus Armbrusterb1ca6392015-01-29 10:37:01 +01002822 error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
2823 "'%s' (%s) is encrypted",
Alberto Garcia81e5f782015-04-08 12:29:19 +03002824 bdrv_get_device_or_node_name(bs),
Markus Armbruster4d2855a2015-01-29 10:37:00 +01002825 bdrv_get_encrypted_filename(bs));
2826 }
2827 }
2828}
2829
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002830const char *bdrv_get_format_name(BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002831{
Markus Armbrusterf8d6bba2012-06-13 10:11:48 +02002832 return bs->drv ? bs->drv->format_name : NULL;
bellardea2384d2004-08-01 21:59:26 +00002833}
2834
Stefan Hajnocziada42402014-08-27 12:08:55 +01002835static int qsort_strcmp(const void *a, const void *b)
2836{
2837 return strcmp(a, b);
2838}
2839
ths5fafdf22007-09-16 21:08:06 +00002840void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
bellardea2384d2004-08-01 21:59:26 +00002841 void *opaque)
2842{
2843 BlockDriver *drv;
Jeff Codye855e4f2014-04-28 18:29:54 -04002844 int count = 0;
Stefan Hajnocziada42402014-08-27 12:08:55 +01002845 int i;
Jeff Codye855e4f2014-04-28 18:29:54 -04002846 const char **formats = NULL;
bellardea2384d2004-08-01 21:59:26 +00002847
Stefan Hajnoczi8a22f022010-04-13 10:29:33 +01002848 QLIST_FOREACH(drv, &bdrv_drivers, list) {
Jeff Codye855e4f2014-04-28 18:29:54 -04002849 if (drv->format_name) {
2850 bool found = false;
2851 int i = count;
2852 while (formats && i && !found) {
2853 found = !strcmp(formats[--i], drv->format_name);
2854 }
2855
2856 if (!found) {
Markus Armbruster5839e532014-08-19 10:31:08 +02002857 formats = g_renew(const char *, formats, count + 1);
Jeff Codye855e4f2014-04-28 18:29:54 -04002858 formats[count++] = drv->format_name;
Jeff Codye855e4f2014-04-28 18:29:54 -04002859 }
2860 }
bellardea2384d2004-08-01 21:59:26 +00002861 }
Stefan Hajnocziada42402014-08-27 12:08:55 +01002862
2863 qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
2864
2865 for (i = 0; i < count; i++) {
2866 it(opaque, formats[i]);
2867 }
2868
Jeff Codye855e4f2014-04-28 18:29:54 -04002869 g_free(formats);
bellardea2384d2004-08-01 21:59:26 +00002870}
2871
Benoît Canetdc364f42014-01-23 21:31:32 +01002872/* This function is to find a node in the bs graph */
2873BlockDriverState *bdrv_find_node(const char *node_name)
2874{
2875 BlockDriverState *bs;
2876
2877 assert(node_name);
2878
2879 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
2880 if (!strcmp(node_name, bs->node_name)) {
2881 return bs;
2882 }
2883 }
2884 return NULL;
2885}
2886
Benoît Canetc13163f2014-01-23 21:31:34 +01002887/* Put this QMP function here so it can access the static graph_bdrv_states. */
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002888BlockDeviceInfoList *bdrv_named_nodes_list(Error **errp)
Benoît Canetc13163f2014-01-23 21:31:34 +01002889{
2890 BlockDeviceInfoList *list, *entry;
2891 BlockDriverState *bs;
2892
2893 list = NULL;
2894 QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002895 BlockDeviceInfo *info = bdrv_block_device_info(bs, errp);
2896 if (!info) {
2897 qapi_free_BlockDeviceInfoList(list);
2898 return NULL;
2899 }
Benoît Canetc13163f2014-01-23 21:31:34 +01002900 entry = g_malloc0(sizeof(*entry));
Alberto Garciad5a8ee62015-04-17 14:52:43 +03002901 entry->value = info;
Benoît Canetc13163f2014-01-23 21:31:34 +01002902 entry->next = list;
2903 list = entry;
2904 }
2905
2906 return list;
2907}
2908
Benoît Canet12d3ba82014-01-23 21:31:35 +01002909BlockDriverState *bdrv_lookup_bs(const char *device,
2910 const char *node_name,
2911 Error **errp)
2912{
Markus Armbruster7f06d472014-10-07 13:59:12 +02002913 BlockBackend *blk;
2914 BlockDriverState *bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002915
Benoît Canet12d3ba82014-01-23 21:31:35 +01002916 if (device) {
Markus Armbruster7f06d472014-10-07 13:59:12 +02002917 blk = blk_by_name(device);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002918
Markus Armbruster7f06d472014-10-07 13:59:12 +02002919 if (blk) {
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002920 bs = blk_bs(blk);
2921 if (!bs) {
Max Reitz5433c242015-10-19 17:53:29 +02002922 error_setg(errp, "Device '%s' has no medium", device);
Max Reitz5433c242015-10-19 17:53:29 +02002923 }
2924
Alberto Garcia9f4ed6f2015-10-26 16:46:49 +02002925 return bs;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002926 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002927 }
2928
Benoît Canetdd67fa52014-02-12 17:15:06 +01002929 if (node_name) {
2930 bs = bdrv_find_node(node_name);
Benoît Canet12d3ba82014-01-23 21:31:35 +01002931
Benoît Canetdd67fa52014-02-12 17:15:06 +01002932 if (bs) {
2933 return bs;
2934 }
Benoît Canet12d3ba82014-01-23 21:31:35 +01002935 }
2936
Benoît Canetdd67fa52014-02-12 17:15:06 +01002937 error_setg(errp, "Cannot find device=%s nor node_name=%s",
2938 device ? device : "",
2939 node_name ? node_name : "");
2940 return NULL;
Benoît Canet12d3ba82014-01-23 21:31:35 +01002941}
2942
Jeff Cody5a6684d2014-06-25 15:40:09 -04002943/* If 'base' is in the same chain as 'top', return true. Otherwise,
2944 * return false. If either argument is NULL, return false. */
2945bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
2946{
2947 while (top && top != base) {
Kevin Wolf760e0062015-06-17 14:55:21 +02002948 top = backing_bs(top);
Jeff Cody5a6684d2014-06-25 15:40:09 -04002949 }
2950
2951 return top != NULL;
2952}
2953
Fam Zheng04df7652014-10-31 11:32:54 +08002954BlockDriverState *bdrv_next_node(BlockDriverState *bs)
2955{
2956 if (!bs) {
2957 return QTAILQ_FIRST(&graph_bdrv_states);
2958 }
2959 return QTAILQ_NEXT(bs, node_list);
2960}
2961
Max Reitz26260582016-03-16 19:54:43 +01002962/* Iterates over all top-level BlockDriverStates, i.e. BDSs that are owned by
2963 * the monitor or attached to a BlockBackend */
Markus Armbruster2f399b02010-06-02 18:55:20 +02002964BlockDriverState *bdrv_next(BlockDriverState *bs)
2965{
Max Reitz26260582016-03-16 19:54:43 +01002966 if (!bs || bs->blk) {
2967 bs = blk_next_root_bs(bs);
2968 if (bs) {
2969 return bs;
2970 }
Markus Armbruster2f399b02010-06-02 18:55:20 +02002971 }
Max Reitz26260582016-03-16 19:54:43 +01002972
2973 /* Ignore all BDSs that are attached to a BlockBackend here; they have been
2974 * handled by the above block already */
2975 do {
2976 bs = bdrv_next_monitor_owned(bs);
2977 } while (bs && bs->blk);
2978 return bs;
Markus Armbruster2f399b02010-06-02 18:55:20 +02002979}
2980
Fam Zheng20a9e772014-10-31 11:32:55 +08002981const char *bdrv_get_node_name(const BlockDriverState *bs)
2982{
2983 return bs->node_name;
2984}
2985
Markus Armbruster7f06d472014-10-07 13:59:12 +02002986/* TODO check what callers really want: bs->node_name or blk_name() */
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002987const char *bdrv_get_device_name(const BlockDriverState *bs)
bellardea2384d2004-08-01 21:59:26 +00002988{
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02002989 return bs->blk ? blk_name(bs->blk) : "";
bellardea2384d2004-08-01 21:59:26 +00002990}
2991
Alberto Garcia9b2aa842015-04-08 12:29:18 +03002992/* This can be used to identify nodes that might not have a device
2993 * name associated. Since node and device names live in the same
2994 * namespace, the result is unambiguous. The exception is if both are
2995 * absent, then this returns an empty (non-null) string. */
2996const char *bdrv_get_device_or_node_name(const BlockDriverState *bs)
2997{
2998 return bs->blk ? blk_name(bs->blk) : bs->node_name;
2999}
3000
Markus Armbrusterc8433282012-06-05 16:49:24 +02003001int bdrv_get_flags(BlockDriverState *bs)
3002{
3003 return bs->open_flags;
3004}
3005
Peter Lieven3ac21622013-06-28 12:47:42 +02003006int bdrv_has_zero_init_1(BlockDriverState *bs)
3007{
3008 return 1;
3009}
3010
Kevin Wolff2feebb2010-04-14 17:30:35 +02003011int bdrv_has_zero_init(BlockDriverState *bs)
3012{
3013 assert(bs->drv);
3014
Paolo Bonzini11212d82013-09-04 19:00:27 +02003015 /* If BS is a copy on write image, it is initialized to
3016 the contents of the base image, which may not be zeroes. */
Kevin Wolf760e0062015-06-17 14:55:21 +02003017 if (bs->backing) {
Paolo Bonzini11212d82013-09-04 19:00:27 +02003018 return 0;
3019 }
Kevin Wolf336c1c12010-07-28 11:26:29 +02003020 if (bs->drv->bdrv_has_zero_init) {
3021 return bs->drv->bdrv_has_zero_init(bs);
Kevin Wolff2feebb2010-04-14 17:30:35 +02003022 }
3023
Peter Lieven3ac21622013-06-28 12:47:42 +02003024 /* safe default */
3025 return 0;
Kevin Wolff2feebb2010-04-14 17:30:35 +02003026}
3027
Peter Lieven4ce78692013-10-24 12:06:54 +02003028bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3029{
3030 BlockDriverInfo bdi;
3031
Kevin Wolf760e0062015-06-17 14:55:21 +02003032 if (bs->backing) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003033 return false;
3034 }
3035
3036 if (bdrv_get_info(bs, &bdi) == 0) {
3037 return bdi.unallocated_blocks_are_zero;
3038 }
3039
3040 return false;
3041}
3042
3043bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3044{
3045 BlockDriverInfo bdi;
3046
Kevin Wolf760e0062015-06-17 14:55:21 +02003047 if (bs->backing || !(bs->open_flags & BDRV_O_UNMAP)) {
Peter Lieven4ce78692013-10-24 12:06:54 +02003048 return false;
3049 }
3050
3051 if (bdrv_get_info(bs, &bdi) == 0) {
3052 return bdi.can_write_zeroes_with_unmap;
3053 }
3054
3055 return false;
3056}
3057
aliguori045df332009-03-05 23:00:48 +00003058const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3059{
Kevin Wolf760e0062015-06-17 14:55:21 +02003060 if (bs->backing && bs->backing->bs->encrypted)
aliguori045df332009-03-05 23:00:48 +00003061 return bs->backing_file;
3062 else if (bs->encrypted)
3063 return bs->filename;
3064 else
3065 return NULL;
3066}
3067
ths5fafdf22007-09-16 21:08:06 +00003068void bdrv_get_backing_filename(BlockDriverState *bs,
bellard83f64092006-08-01 16:21:11 +00003069 char *filename, int filename_size)
bellardea2384d2004-08-01 21:59:26 +00003070{
Kevin Wolf3574c602011-10-26 11:02:11 +02003071 pstrcpy(filename, filename_size, bs->backing_file);
bellardea2384d2004-08-01 21:59:26 +00003072}
3073
bellardfaea38e2006-08-05 21:31:00 +00003074int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3075{
3076 BlockDriver *drv = bs->drv;
3077 if (!drv)
bellard19cb3732006-08-19 11:45:59 +00003078 return -ENOMEDIUM;
bellardfaea38e2006-08-05 21:31:00 +00003079 if (!drv->bdrv_get_info)
3080 return -ENOTSUP;
3081 memset(bdi, 0, sizeof(*bdi));
3082 return drv->bdrv_get_info(bs, bdi);
3083}
3084
Max Reitzeae041f2013-10-09 10:46:16 +02003085ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3086{
3087 BlockDriver *drv = bs->drv;
3088 if (drv && drv->bdrv_get_specific_info) {
3089 return drv->bdrv_get_specific_info(bs);
3090 }
3091 return NULL;
3092}
3093
Eric Blakea31939e2015-11-18 01:52:54 -07003094void bdrv_debug_event(BlockDriverState *bs, BlkdebugEvent event)
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003095{
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003096 if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003097 return;
3098 }
3099
Kevin Wolfbf736fe2013-06-05 15:17:55 +02003100 bs->drv->bdrv_debug_event(bs, event);
Kevin Wolf41c695c2012-12-06 14:32:58 +01003101}
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003102
Kevin Wolf41c695c2012-12-06 14:32:58 +01003103int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3104 const char *tag)
3105{
3106 while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003107 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003108 }
3109
3110 if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3111 return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3112 }
3113
3114 return -ENOTSUP;
3115}
3116
Fam Zheng4cc70e92013-11-20 10:01:54 +08003117int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3118{
3119 while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003120 bs = bs->file ? bs->file->bs : NULL;
Fam Zheng4cc70e92013-11-20 10:01:54 +08003121 }
3122
3123 if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3124 return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3125 }
3126
3127 return -ENOTSUP;
3128}
3129
Kevin Wolf41c695c2012-12-06 14:32:58 +01003130int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3131{
Max Reitz938789e2014-03-10 23:44:08 +01003132 while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003133 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003134 }
3135
3136 if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3137 return bs->drv->bdrv_debug_resume(bs, tag);
3138 }
3139
3140 return -ENOTSUP;
3141}
3142
3143bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3144{
3145 while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003146 bs = bs->file ? bs->file->bs : NULL;
Kevin Wolf41c695c2012-12-06 14:32:58 +01003147 }
3148
3149 if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3150 return bs->drv->bdrv_debug_is_suspended(bs, tag);
3151 }
3152
3153 return false;
Kevin Wolf8b9b0cc2010-03-15 17:27:00 +01003154}
3155
Blue Swirl199630b2010-07-25 20:49:34 +00003156int bdrv_is_snapshot(BlockDriverState *bs)
3157{
3158 return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3159}
3160
Jeff Codyb1b1d782012-10-16 15:49:09 -04003161/* backing_file can either be relative, or absolute, or a protocol. If it is
3162 * relative, it must be relative to the chain. So, passing in bs->filename
3163 * from a BDS as backing_file should not be done, as that may be relative to
3164 * the CWD rather than the chain. */
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003165BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3166 const char *backing_file)
3167{
Jeff Codyb1b1d782012-10-16 15:49:09 -04003168 char *filename_full = NULL;
3169 char *backing_file_full = NULL;
3170 char *filename_tmp = NULL;
3171 int is_protocol = 0;
3172 BlockDriverState *curr_bs = NULL;
3173 BlockDriverState *retval = NULL;
3174
3175 if (!bs || !bs->drv || !backing_file) {
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003176 return NULL;
3177 }
3178
Jeff Codyb1b1d782012-10-16 15:49:09 -04003179 filename_full = g_malloc(PATH_MAX);
3180 backing_file_full = g_malloc(PATH_MAX);
3181 filename_tmp = g_malloc(PATH_MAX);
3182
3183 is_protocol = path_has_protocol(backing_file);
3184
Kevin Wolf760e0062015-06-17 14:55:21 +02003185 for (curr_bs = bs; curr_bs->backing; curr_bs = curr_bs->backing->bs) {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003186
3187 /* If either of the filename paths is actually a protocol, then
3188 * compare unmodified paths; otherwise make paths relative */
3189 if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3190 if (strcmp(backing_file, curr_bs->backing_file) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003191 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003192 break;
3193 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003194 } else {
Jeff Codyb1b1d782012-10-16 15:49:09 -04003195 /* If not an absolute filename path, make it relative to the current
3196 * image's filename path */
3197 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3198 backing_file);
3199
3200 /* We are going to compare absolute pathnames */
3201 if (!realpath(filename_tmp, filename_full)) {
3202 continue;
3203 }
3204
3205 /* We need to make sure the backing filename we are comparing against
3206 * is relative to the current image filename (or absolute) */
3207 path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3208 curr_bs->backing_file);
3209
3210 if (!realpath(filename_tmp, backing_file_full)) {
3211 continue;
3212 }
3213
3214 if (strcmp(backing_file_full, filename_full) == 0) {
Kevin Wolf760e0062015-06-17 14:55:21 +02003215 retval = curr_bs->backing->bs;
Jeff Codyb1b1d782012-10-16 15:49:09 -04003216 break;
3217 }
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003218 }
3219 }
3220
Jeff Codyb1b1d782012-10-16 15:49:09 -04003221 g_free(filename_full);
3222 g_free(backing_file_full);
3223 g_free(filename_tmp);
3224 return retval;
Marcelo Tosattie8a6bb92012-01-18 14:40:51 +00003225}
3226
Benoît Canetf198fd12012-08-02 10:22:47 +02003227int bdrv_get_backing_file_depth(BlockDriverState *bs)
3228{
3229 if (!bs->drv) {
3230 return 0;
3231 }
3232
Kevin Wolf760e0062015-06-17 14:55:21 +02003233 if (!bs->backing) {
Benoît Canetf198fd12012-08-02 10:22:47 +02003234 return 0;
3235 }
3236
Kevin Wolf760e0062015-06-17 14:55:21 +02003237 return 1 + bdrv_get_backing_file_depth(bs->backing->bs);
Benoît Canetf198fd12012-08-02 10:22:47 +02003238}
3239
bellardea2384d2004-08-01 21:59:26 +00003240void bdrv_init(void)
3241{
Anthony Liguori5efa9d52009-05-09 17:03:42 -05003242 module_call_init(MODULE_INIT_BLOCK);
bellardea2384d2004-08-01 21:59:26 +00003243}
pbrookce1a14d2006-08-07 02:38:06 +00003244
Markus Armbrustereb852012009-10-27 18:41:44 +01003245void bdrv_init_with_whitelist(void)
3246{
3247 use_bdrv_whitelist = 1;
3248 bdrv_init();
3249}
3250
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003251void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003252{
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003253 Error *local_err = NULL;
3254 int ret;
3255
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003256 if (!bs->drv) {
3257 return;
Anthony Liguori0f154232011-11-14 15:09:45 -06003258 }
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003259
Kevin Wolf04c01a52016-01-13 15:56:06 +01003260 if (!(bs->open_flags & BDRV_O_INACTIVE)) {
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003261 return;
3262 }
Kevin Wolf04c01a52016-01-13 15:56:06 +01003263 bs->open_flags &= ~BDRV_O_INACTIVE;
Alexey Kardashevskiy7ea2d262014-10-09 13:50:46 +11003264
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003265 if (bs->drv->bdrv_invalidate_cache) {
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003266 bs->drv->bdrv_invalidate_cache(bs, &local_err);
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003267 } else if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003268 bdrv_invalidate_cache(bs->file->bs, &local_err);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003269 }
3270 if (local_err) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003271 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003272 error_propagate(errp, local_err);
3273 return;
Kevin Wolf3456a8d2014-03-11 10:58:39 +01003274 }
3275
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003276 ret = refresh_total_sectors(bs, bs->total_sectors);
3277 if (ret < 0) {
Kevin Wolf04c01a52016-01-13 15:56:06 +01003278 bs->open_flags |= BDRV_O_INACTIVE;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003279 error_setg_errno(errp, -ret, "Could not refresh total sector count");
3280 return;
3281 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003282}
3283
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003284void bdrv_invalidate_cache_all(Error **errp)
Anthony Liguori0f154232011-11-14 15:09:45 -06003285{
Max Reitz79720af2016-03-16 19:54:44 +01003286 BlockDriverState *bs = NULL;
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003287 Error *local_err = NULL;
Anthony Liguori0f154232011-11-14 15:09:45 -06003288
Max Reitz79720af2016-03-16 19:54:44 +01003289 while ((bs = bdrv_next(bs)) != NULL) {
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003290 AioContext *aio_context = bdrv_get_aio_context(bs);
3291
3292 aio_context_acquire(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003293 bdrv_invalidate_cache(bs, &local_err);
Stefan Hajnoczied78cda2014-05-08 16:34:35 +02003294 aio_context_release(aio_context);
Kevin Wolf5a8a30d2014-03-12 15:59:16 +01003295 if (local_err) {
3296 error_propagate(errp, local_err);
3297 return;
3298 }
Anthony Liguori0f154232011-11-14 15:09:45 -06003299 }
3300}
3301
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003302static int bdrv_inactivate(BlockDriverState *bs)
3303{
3304 int ret;
3305
3306 if (bs->drv->bdrv_inactivate) {
3307 ret = bs->drv->bdrv_inactivate(bs);
3308 if (ret < 0) {
3309 return ret;
3310 }
3311 }
3312
3313 bs->open_flags |= BDRV_O_INACTIVE;
3314 return 0;
3315}
3316
3317int bdrv_inactivate_all(void)
3318{
Max Reitz79720af2016-03-16 19:54:44 +01003319 BlockDriverState *bs = NULL;
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003320 int ret;
3321
Max Reitz79720af2016-03-16 19:54:44 +01003322 while ((bs = bdrv_next(bs)) != NULL) {
Kevin Wolf76b1c7f2015-12-22 14:07:08 +01003323 AioContext *aio_context = bdrv_get_aio_context(bs);
3324
3325 aio_context_acquire(aio_context);
3326 ret = bdrv_inactivate(bs);
3327 aio_context_release(aio_context);
3328 if (ret < 0) {
3329 return ret;
3330 }
3331 }
3332
3333 return 0;
3334}
3335
Kevin Wolff9f05dc2011-07-15 13:50:26 +02003336/**************************************************************/
bellard19cb3732006-08-19 11:45:59 +00003337/* removable device support */
3338
3339/**
3340 * Return TRUE if the media is present
3341 */
Max Reitze031f752015-10-19 17:53:11 +02003342bool bdrv_is_inserted(BlockDriverState *bs)
bellard19cb3732006-08-19 11:45:59 +00003343{
3344 BlockDriver *drv = bs->drv;
Max Reitz28d7a782015-10-19 17:53:13 +02003345 BdrvChild *child;
Markus Armbrustera1aff5b2011-09-06 18:58:41 +02003346
Max Reitze031f752015-10-19 17:53:11 +02003347 if (!drv) {
3348 return false;
3349 }
Max Reitz28d7a782015-10-19 17:53:13 +02003350 if (drv->bdrv_is_inserted) {
3351 return drv->bdrv_is_inserted(bs);
Max Reitze031f752015-10-19 17:53:11 +02003352 }
Max Reitz28d7a782015-10-19 17:53:13 +02003353 QLIST_FOREACH(child, &bs->children, next) {
3354 if (!bdrv_is_inserted(child->bs)) {
3355 return false;
3356 }
3357 }
3358 return true;
bellard19cb3732006-08-19 11:45:59 +00003359}
3360
3361/**
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003362 * Return whether the media changed since the last call to this
3363 * function, or -ENOTSUP if we don't know. Most drivers don't know.
bellard19cb3732006-08-19 11:45:59 +00003364 */
3365int bdrv_media_changed(BlockDriverState *bs)
3366{
3367 BlockDriver *drv = bs->drv;
bellard19cb3732006-08-19 11:45:59 +00003368
Markus Armbruster8e49ca42011-08-03 15:08:08 +02003369 if (drv && drv->bdrv_media_changed) {
3370 return drv->bdrv_media_changed(bs);
3371 }
3372 return -ENOTSUP;
bellard19cb3732006-08-19 11:45:59 +00003373}
3374
3375/**
3376 * If eject_flag is TRUE, eject the media. Otherwise, close the tray
3377 */
Luiz Capitulinof36f3942012-02-03 16:24:53 -02003378void bdrv_eject(BlockDriverState *bs, bool eject_flag)
bellard19cb3732006-08-19 11:45:59 +00003379{
3380 BlockDriver *drv = bs->drv;
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003381 const char *device_name;
bellard19cb3732006-08-19 11:45:59 +00003382
Markus Armbruster822e1cd2011-07-20 18:23:42 +02003383 if (drv && drv->bdrv_eject) {
3384 drv->bdrv_eject(bs, eject_flag);
bellard19cb3732006-08-19 11:45:59 +00003385 }
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003386
Markus Armbrusterbfb197e2014-10-07 13:59:11 +02003387 device_name = bdrv_get_device_name(bs);
3388 if (device_name[0] != '\0') {
3389 qapi_event_send_device_tray_moved(device_name,
Wenchao Xiaa5ee7bd2014-06-18 08:43:44 +02003390 eject_flag, &error_abort);
Luiz Capitulino6f382ed2012-02-14 13:41:13 -02003391 }
bellard19cb3732006-08-19 11:45:59 +00003392}
3393
bellard19cb3732006-08-19 11:45:59 +00003394/**
3395 * Lock or unlock the media (if it is locked, the user won't be able
3396 * to eject it manually).
3397 */
Markus Armbruster025e8492011-09-06 18:58:47 +02003398void bdrv_lock_medium(BlockDriverState *bs, bool locked)
bellard19cb3732006-08-19 11:45:59 +00003399{
3400 BlockDriver *drv = bs->drv;
3401
Markus Armbruster025e8492011-09-06 18:58:47 +02003402 trace_bdrv_lock_medium(bs, locked);
Stefan Hajnoczib8c6d092011-03-29 20:04:40 +01003403
Markus Armbruster025e8492011-09-06 18:58:47 +02003404 if (drv && drv->bdrv_lock_medium) {
3405 drv->bdrv_lock_medium(bs, locked);
bellard19cb3732006-08-19 11:45:59 +00003406 }
3407}
ths985a03b2007-12-24 16:10:43 +00003408
Fam Zheng9fcb0252013-08-23 09:14:46 +08003409/* Get a reference to bs */
3410void bdrv_ref(BlockDriverState *bs)
3411{
3412 bs->refcnt++;
3413}
3414
3415/* Release a previously grabbed reference to bs.
3416 * If after releasing, reference count is zero, the BlockDriverState is
3417 * deleted. */
3418void bdrv_unref(BlockDriverState *bs)
3419{
Jeff Cody9a4d5ca2014-07-23 17:22:57 -04003420 if (!bs) {
3421 return;
3422 }
Fam Zheng9fcb0252013-08-23 09:14:46 +08003423 assert(bs->refcnt > 0);
3424 if (--bs->refcnt == 0) {
3425 bdrv_delete(bs);
3426 }
3427}
3428
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003429struct BdrvOpBlocker {
3430 Error *reason;
3431 QLIST_ENTRY(BdrvOpBlocker) list;
3432};
3433
3434bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
3435{
3436 BdrvOpBlocker *blocker;
3437 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3438 if (!QLIST_EMPTY(&bs->op_blockers[op])) {
3439 blocker = QLIST_FIRST(&bs->op_blockers[op]);
3440 if (errp) {
Markus Armbrustere43bfd92015-12-18 16:35:15 +01003441 *errp = error_copy(blocker->reason);
3442 error_prepend(errp, "Node '%s' is busy: ",
3443 bdrv_get_device_or_node_name(bs));
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003444 }
3445 return true;
3446 }
3447 return false;
3448}
3449
3450void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
3451{
3452 BdrvOpBlocker *blocker;
3453 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3454
Markus Armbruster5839e532014-08-19 10:31:08 +02003455 blocker = g_new0(BdrvOpBlocker, 1);
Fam Zhengfbe40ff2014-05-23 21:29:42 +08003456 blocker->reason = reason;
3457 QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
3458}
3459
3460void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
3461{
3462 BdrvOpBlocker *blocker, *next;
3463 assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
3464 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
3465 if (blocker->reason == reason) {
3466 QLIST_REMOVE(blocker, list);
3467 g_free(blocker);
3468 }
3469 }
3470}
3471
3472void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
3473{
3474 int i;
3475 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3476 bdrv_op_block(bs, i, reason);
3477 }
3478}
3479
3480void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
3481{
3482 int i;
3483 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3484 bdrv_op_unblock(bs, i, reason);
3485 }
3486}
3487
3488bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
3489{
3490 int i;
3491
3492 for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
3493 if (!QLIST_EMPTY(&bs->op_blockers[i])) {
3494 return false;
3495 }
3496 }
3497 return true;
3498}
3499
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003500void bdrv_img_create(const char *filename, const char *fmt,
3501 const char *base_filename, const char *base_fmt,
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003502 char *options, uint64_t img_size, int flags,
3503 Error **errp, bool quiet)
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003504{
Chunyan Liu83d05212014-06-05 17:20:51 +08003505 QemuOptsList *create_opts = NULL;
3506 QemuOpts *opts = NULL;
3507 const char *backing_fmt, *backing_file;
3508 int64_t size;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003509 BlockDriver *drv, *proto_drv;
Max Reitzcc84d902013-09-06 17:14:26 +02003510 Error *local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003511 int ret = 0;
3512
3513 /* Find driver and parse its options */
3514 drv = bdrv_find_format(fmt);
3515 if (!drv) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003516 error_setg(errp, "Unknown file format '%s'", fmt);
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003517 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003518 }
3519
Max Reitzb65a5e12015-02-05 13:58:12 -05003520 proto_drv = bdrv_find_protocol(filename, true, errp);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003521 if (!proto_drv) {
Luiz Capitulinod92ada22012-11-30 10:52:09 -02003522 return;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003523 }
3524
Max Reitzc6149722014-12-02 18:32:45 +01003525 if (!drv->create_opts) {
3526 error_setg(errp, "Format driver '%s' does not support image creation",
3527 drv->format_name);
3528 return;
3529 }
3530
3531 if (!proto_drv->create_opts) {
3532 error_setg(errp, "Protocol driver '%s' does not support image creation",
3533 proto_drv->format_name);
3534 return;
3535 }
3536
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003537 create_opts = qemu_opts_append(create_opts, drv->create_opts);
3538 create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003539
3540 /* Create parameter list with default values */
Chunyan Liu83d05212014-06-05 17:20:51 +08003541 opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
Markus Armbruster39101f22015-02-12 16:46:36 +01003542 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003543
3544 /* Parse -o options */
3545 if (options) {
Markus Armbrusterdc523cd342015-02-12 18:37:11 +01003546 qemu_opts_do_parse(opts, options, NULL, &local_err);
3547 if (local_err) {
3548 error_report_err(local_err);
3549 local_err = NULL;
Chunyan Liu83d05212014-06-05 17:20:51 +08003550 error_setg(errp, "Invalid options for file format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003551 goto out;
3552 }
3553 }
3554
3555 if (base_filename) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003556 qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003557 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003558 error_setg(errp, "Backing file not supported for file format '%s'",
3559 fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003560 goto out;
3561 }
3562 }
3563
3564 if (base_fmt) {
Markus Armbrusterf43e47d2015-02-12 17:52:20 +01003565 qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &local_err);
Markus Armbruster6be41942015-02-12 17:49:02 +01003566 if (local_err) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003567 error_setg(errp, "Backing file format not supported for file "
3568 "format '%s'", fmt);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003569 goto out;
3570 }
3571 }
3572
Chunyan Liu83d05212014-06-05 17:20:51 +08003573 backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
3574 if (backing_file) {
3575 if (!strcmp(filename, backing_file)) {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003576 error_setg(errp, "Error: Trying to create an image with the "
3577 "same filename as the backing file");
Jes Sorensen792da932010-12-16 13:52:17 +01003578 goto out;
3579 }
3580 }
3581
Chunyan Liu83d05212014-06-05 17:20:51 +08003582 backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003583
3584 // The size for the image must always be specified, with one exception:
3585 // If we are using a backing file, we can obtain the size from there
Chunyan Liu83d05212014-06-05 17:20:51 +08003586 size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
3587 if (size == -1) {
3588 if (backing_file) {
Max Reitz66f6b812013-12-03 14:57:52 +01003589 BlockDriverState *bs;
Max Reitz29168012014-11-26 17:20:27 +01003590 char *full_backing = g_new0(char, PATH_MAX);
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003591 int64_t size;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003592 int back_flags;
Max Reitze6641712015-08-26 19:47:48 +02003593 QDict *backing_options = NULL;
Paolo Bonzini63090da2012-04-12 14:01:03 +02003594
Max Reitz29168012014-11-26 17:20:27 +01003595 bdrv_get_full_backing_filename_from_filename(filename, backing_file,
3596 full_backing, PATH_MAX,
3597 &local_err);
3598 if (local_err) {
3599 g_free(full_backing);
3600 goto out;
3601 }
3602
Paolo Bonzini63090da2012-04-12 14:01:03 +02003603 /* backing files always opened read-only */
3604 back_flags =
3605 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003606
Max Reitze6641712015-08-26 19:47:48 +02003607 if (backing_fmt) {
3608 backing_options = qdict_new();
3609 qdict_put(backing_options, "driver",
3610 qstring_from_str(backing_fmt));
3611 }
3612
Max Reitzf67503e2014-02-18 18:33:05 +01003613 bs = NULL;
Max Reitze6641712015-08-26 19:47:48 +02003614 ret = bdrv_open(&bs, full_backing, NULL, backing_options,
Max Reitz6ebf9aa2015-08-26 19:47:49 +02003615 back_flags, &local_err);
Max Reitz29168012014-11-26 17:20:27 +01003616 g_free(full_backing);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003617 if (ret < 0) {
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003618 goto out;
3619 }
Markus Armbruster52bf1e72014-06-26 13:23:25 +02003620 size = bdrv_getlength(bs);
3621 if (size < 0) {
3622 error_setg_errno(errp, -size, "Could not get size of '%s'",
3623 backing_file);
3624 bdrv_unref(bs);
3625 goto out;
3626 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003627
Markus Armbruster39101f22015-02-12 16:46:36 +01003628 qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size, &error_abort);
Max Reitz66f6b812013-12-03 14:57:52 +01003629
3630 bdrv_unref(bs);
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003631 } else {
Luiz Capitulino71c79812012-11-30 10:52:04 -02003632 error_setg(errp, "Image creation needs a size parameter");
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003633 goto out;
3634 }
3635 }
3636
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003637 if (!quiet) {
Kővágó, Zoltánfe646692015-07-07 16:42:10 +02003638 printf("Formatting '%s', fmt=%s ", filename, fmt);
Fam Zheng43c5d8f2014-12-09 15:38:04 +08003639 qemu_opts_print(opts, " ");
Miroslav Rezaninaf382d432013-02-13 09:09:40 +01003640 puts("");
3641 }
Chunyan Liu83d05212014-06-05 17:20:51 +08003642
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003643 ret = bdrv_create(drv, filename, opts, &local_err);
Chunyan Liu83d05212014-06-05 17:20:51 +08003644
Max Reitzcc84d902013-09-06 17:14:26 +02003645 if (ret == -EFBIG) {
3646 /* This is generally a better message than whatever the driver would
3647 * deliver (especially because of the cluster_size_hint), since that
3648 * is most probably not much different from "image too large". */
3649 const char *cluster_size_hint = "";
Chunyan Liu83d05212014-06-05 17:20:51 +08003650 if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
Max Reitzcc84d902013-09-06 17:14:26 +02003651 cluster_size_hint = " (try using a larger cluster size)";
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003652 }
Max Reitzcc84d902013-09-06 17:14:26 +02003653 error_setg(errp, "The image size is too large for file format '%s'"
3654 "%s", fmt, cluster_size_hint);
3655 error_free(local_err);
3656 local_err = NULL;
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003657 }
3658
3659out:
Chunyan Liu83d05212014-06-05 17:20:51 +08003660 qemu_opts_del(opts);
3661 qemu_opts_free(create_opts);
Markus Armbruster84d18f02014-01-30 15:07:28 +01003662 if (local_err) {
Max Reitzcc84d902013-09-06 17:14:26 +02003663 error_propagate(errp, local_err);
3664 }
Jes Sorensenf88e1a42010-12-16 13:52:15 +01003665}
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003666
3667AioContext *bdrv_get_aio_context(BlockDriverState *bs)
3668{
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003669 return bs->aio_context;
3670}
3671
3672void bdrv_detach_aio_context(BlockDriverState *bs)
3673{
Max Reitz33384422014-06-20 21:57:33 +02003674 BdrvAioNotifier *baf;
3675
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003676 if (!bs->drv) {
3677 return;
3678 }
3679
Max Reitz33384422014-06-20 21:57:33 +02003680 QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
3681 baf->detach_aio_context(baf->opaque);
3682 }
3683
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003684 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003685 throttle_timers_detach_aio_context(&bs->throttle_timers);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003686 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003687 if (bs->drv->bdrv_detach_aio_context) {
3688 bs->drv->bdrv_detach_aio_context(bs);
3689 }
3690 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003691 bdrv_detach_aio_context(bs->file->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003692 }
Kevin Wolf760e0062015-06-17 14:55:21 +02003693 if (bs->backing) {
3694 bdrv_detach_aio_context(bs->backing->bs);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003695 }
3696
3697 bs->aio_context = NULL;
3698}
3699
3700void bdrv_attach_aio_context(BlockDriverState *bs,
3701 AioContext *new_context)
3702{
Max Reitz33384422014-06-20 21:57:33 +02003703 BdrvAioNotifier *ban;
3704
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003705 if (!bs->drv) {
3706 return;
3707 }
3708
3709 bs->aio_context = new_context;
3710
Kevin Wolf760e0062015-06-17 14:55:21 +02003711 if (bs->backing) {
3712 bdrv_attach_aio_context(bs->backing->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003713 }
3714 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003715 bdrv_attach_aio_context(bs->file->bs, new_context);
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003716 }
3717 if (bs->drv->bdrv_attach_aio_context) {
3718 bs->drv->bdrv_attach_aio_context(bs, new_context);
3719 }
Alberto Garciaa0d64a62015-11-04 15:15:36 +02003720 if (bs->throttle_state) {
Benoît Canet0e5b0a22015-06-08 18:17:41 +02003721 throttle_timers_attach_aio_context(&bs->throttle_timers, new_context);
Stefan Hajnoczi13af91e2014-05-14 16:22:45 +02003722 }
Max Reitz33384422014-06-20 21:57:33 +02003723
3724 QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
3725 ban->attached_aio_context(new_context, ban->opaque);
3726 }
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003727}
3728
3729void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
3730{
Fam Zheng53ec73e2015-05-29 18:53:14 +08003731 bdrv_drain(bs); /* ensure there are no in-flight requests */
Stefan Hajnoczidcd04222014-05-08 16:34:37 +02003732
3733 bdrv_detach_aio_context(bs);
3734
3735 /* This function executes in the old AioContext so acquire the new one in
3736 * case it runs in a different thread.
3737 */
3738 aio_context_acquire(new_context);
3739 bdrv_attach_aio_context(bs, new_context);
3740 aio_context_release(new_context);
Stefan Hajnoczi85d126f2013-03-07 13:41:48 +01003741}
Stefan Hajnoczid616b222013-06-24 17:13:10 +02003742
Max Reitz33384422014-06-20 21:57:33 +02003743void bdrv_add_aio_context_notifier(BlockDriverState *bs,
3744 void (*attached_aio_context)(AioContext *new_context, void *opaque),
3745 void (*detach_aio_context)(void *opaque), void *opaque)
3746{
3747 BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
3748 *ban = (BdrvAioNotifier){
3749 .attached_aio_context = attached_aio_context,
3750 .detach_aio_context = detach_aio_context,
3751 .opaque = opaque
3752 };
3753
3754 QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
3755}
3756
3757void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
3758 void (*attached_aio_context)(AioContext *,
3759 void *),
3760 void (*detach_aio_context)(void *),
3761 void *opaque)
3762{
3763 BdrvAioNotifier *ban, *ban_next;
3764
3765 QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
3766 if (ban->attached_aio_context == attached_aio_context &&
3767 ban->detach_aio_context == detach_aio_context &&
3768 ban->opaque == opaque)
3769 {
3770 QLIST_REMOVE(ban, list);
3771 g_free(ban);
3772
3773 return;
3774 }
3775 }
3776
3777 abort();
3778}
3779
Max Reitz77485432014-10-27 11:12:50 +01003780int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
Max Reitz8b139762015-07-27 17:51:32 +02003781 BlockDriverAmendStatusCB *status_cb, void *cb_opaque)
Max Reitz6f176b42013-09-03 10:09:50 +02003782{
Chunyan Liuc282e1f2014-06-05 17:21:11 +08003783 if (!bs->drv->bdrv_amend_options) {
Max Reitz6f176b42013-09-03 10:09:50 +02003784 return -ENOTSUP;
3785 }
Max Reitz8b139762015-07-27 17:51:32 +02003786 return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque);
Max Reitz6f176b42013-09-03 10:09:50 +02003787}
Benoît Canetf6186f42013-10-02 14:33:48 +02003788
Benoît Canetb5042a32014-03-03 19:11:34 +01003789/* This function will be called by the bdrv_recurse_is_first_non_filter method
3790 * of block filter and by bdrv_is_first_non_filter.
3791 * It is used to test if the given bs is the candidate or recurse more in the
3792 * node graph.
Benoît Canet212a5a82014-01-23 21:31:36 +01003793 */
Benoît Canet212a5a82014-01-23 21:31:36 +01003794bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
3795 BlockDriverState *candidate)
Benoît Canetf6186f42013-10-02 14:33:48 +02003796{
Benoît Canetb5042a32014-03-03 19:11:34 +01003797 /* return false if basic checks fails */
3798 if (!bs || !bs->drv) {
3799 return false;
3800 }
3801
3802 /* the code reached a non block filter driver -> check if the bs is
3803 * the same as the candidate. It's the recursion termination condition.
3804 */
3805 if (!bs->drv->is_filter) {
3806 return bs == candidate;
3807 }
3808 /* Down this path the driver is a block filter driver */
3809
3810 /* If the block filter recursion method is defined use it to recurse down
3811 * the node graph.
3812 */
3813 if (bs->drv->bdrv_recurse_is_first_non_filter) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003814 return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
3815 }
3816
Benoît Canetb5042a32014-03-03 19:11:34 +01003817 /* the driver is a block filter but don't allow to recurse -> return false
3818 */
3819 return false;
Benoît Canet212a5a82014-01-23 21:31:36 +01003820}
3821
3822/* This function checks if the candidate is the first non filter bs down it's
3823 * bs chain. Since we don't have pointers to parents it explore all bs chains
3824 * from the top. Some filters can choose not to pass down the recursion.
3825 */
3826bool bdrv_is_first_non_filter(BlockDriverState *candidate)
3827{
Max Reitz79720af2016-03-16 19:54:44 +01003828 BlockDriverState *bs = NULL;
Benoît Canet212a5a82014-01-23 21:31:36 +01003829
3830 /* walk down the bs forest recursively */
Max Reitz79720af2016-03-16 19:54:44 +01003831 while ((bs = bdrv_next(bs)) != NULL) {
Benoît Canet212a5a82014-01-23 21:31:36 +01003832 bool perm;
3833
Benoît Canetb5042a32014-03-03 19:11:34 +01003834 /* try to recurse in this top level bs */
Kevin Wolfe6dc8a12014-02-04 11:45:31 +01003835 perm = bdrv_recurse_is_first_non_filter(bs, candidate);
Benoît Canet212a5a82014-01-23 21:31:36 +01003836
3837 /* candidate is the first non filter */
3838 if (perm) {
3839 return true;
3840 }
3841 }
3842
3843 return false;
Benoît Canetf6186f42013-10-02 14:33:48 +02003844}
Benoît Canet09158f02014-06-27 18:25:25 +02003845
Wen Congyange12f3782015-07-17 10:12:22 +08003846BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
3847 const char *node_name, Error **errp)
Benoît Canet09158f02014-06-27 18:25:25 +02003848{
3849 BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003850 AioContext *aio_context;
3851
Benoît Canet09158f02014-06-27 18:25:25 +02003852 if (!to_replace_bs) {
3853 error_setg(errp, "Node name '%s' not found", node_name);
3854 return NULL;
3855 }
3856
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003857 aio_context = bdrv_get_aio_context(to_replace_bs);
3858 aio_context_acquire(aio_context);
3859
Benoît Canet09158f02014-06-27 18:25:25 +02003860 if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003861 to_replace_bs = NULL;
3862 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003863 }
3864
3865 /* We don't want arbitrary node of the BDS chain to be replaced only the top
3866 * most non filter in order to prevent data corruption.
3867 * Another benefit is that this tests exclude backing files which are
3868 * blocked by the backing blockers.
3869 */
Wen Congyange12f3782015-07-17 10:12:22 +08003870 if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
Benoît Canet09158f02014-06-27 18:25:25 +02003871 error_setg(errp, "Only top most non filter can be replaced");
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003872 to_replace_bs = NULL;
3873 goto out;
Benoît Canet09158f02014-06-27 18:25:25 +02003874 }
3875
Stefan Hajnoczi5a7e7a02014-10-21 12:03:58 +01003876out:
3877 aio_context_release(aio_context);
Benoît Canet09158f02014-06-27 18:25:25 +02003878 return to_replace_bs;
3879}
Ming Lei448ad912014-07-04 18:04:33 +08003880
Max Reitz91af7012014-07-18 20:24:56 +02003881static bool append_open_options(QDict *d, BlockDriverState *bs)
3882{
3883 const QDictEntry *entry;
Kevin Wolf9e700c12015-04-24 15:20:28 +02003884 QemuOptDesc *desc;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003885 BdrvChild *child;
Max Reitz91af7012014-07-18 20:24:56 +02003886 bool found_any = false;
Kevin Wolf260fecf2015-04-27 13:46:22 +02003887 const char *p;
Max Reitz91af7012014-07-18 20:24:56 +02003888
3889 for (entry = qdict_first(bs->options); entry;
3890 entry = qdict_next(bs->options, entry))
3891 {
Kevin Wolf260fecf2015-04-27 13:46:22 +02003892 /* Exclude options for children */
3893 QLIST_FOREACH(child, &bs->children, next) {
3894 if (strstart(qdict_entry_key(entry), child->name, &p)
3895 && (!*p || *p == '.'))
3896 {
3897 break;
3898 }
3899 }
3900 if (child) {
Kevin Wolf9e700c12015-04-24 15:20:28 +02003901 continue;
Max Reitz91af7012014-07-18 20:24:56 +02003902 }
Kevin Wolf9e700c12015-04-24 15:20:28 +02003903
3904 /* And exclude all non-driver-specific options */
3905 for (desc = bdrv_runtime_opts.desc; desc->name; desc++) {
3906 if (!strcmp(qdict_entry_key(entry), desc->name)) {
3907 break;
3908 }
3909 }
3910 if (desc->name) {
3911 continue;
3912 }
3913
3914 qobject_incref(qdict_entry_value(entry));
3915 qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
3916 found_any = true;
Max Reitz91af7012014-07-18 20:24:56 +02003917 }
3918
3919 return found_any;
3920}
3921
3922/* Updates the following BDS fields:
3923 * - exact_filename: A filename which may be used for opening a block device
3924 * which (mostly) equals the given BDS (even without any
3925 * other options; so reading and writing must return the same
3926 * results, but caching etc. may be different)
3927 * - full_open_options: Options which, when given when opening a block device
3928 * (without a filename), result in a BDS (mostly)
3929 * equalling the given one
3930 * - filename: If exact_filename is set, it is copied here. Otherwise,
3931 * full_open_options is converted to a JSON object, prefixed with
3932 * "json:" (for use through the JSON pseudo protocol) and put here.
3933 */
3934void bdrv_refresh_filename(BlockDriverState *bs)
3935{
3936 BlockDriver *drv = bs->drv;
3937 QDict *opts;
3938
3939 if (!drv) {
3940 return;
3941 }
3942
3943 /* This BDS's file name will most probably depend on its file's name, so
3944 * refresh that first */
3945 if (bs->file) {
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003946 bdrv_refresh_filename(bs->file->bs);
Max Reitz91af7012014-07-18 20:24:56 +02003947 }
3948
3949 if (drv->bdrv_refresh_filename) {
3950 /* Obsolete information is of no use here, so drop the old file name
3951 * information before refreshing it */
3952 bs->exact_filename[0] = '\0';
3953 if (bs->full_open_options) {
3954 QDECREF(bs->full_open_options);
3955 bs->full_open_options = NULL;
3956 }
3957
Kevin Wolf4cdd01d2015-04-27 13:50:54 +02003958 opts = qdict_new();
3959 append_open_options(opts, bs);
3960 drv->bdrv_refresh_filename(bs, opts);
3961 QDECREF(opts);
Max Reitz91af7012014-07-18 20:24:56 +02003962 } else if (bs->file) {
3963 /* Try to reconstruct valid information from the underlying file */
3964 bool has_open_options;
3965
3966 bs->exact_filename[0] = '\0';
3967 if (bs->full_open_options) {
3968 QDECREF(bs->full_open_options);
3969 bs->full_open_options = NULL;
3970 }
3971
3972 opts = qdict_new();
3973 has_open_options = append_open_options(opts, bs);
3974
3975 /* If no specific options have been given for this BDS, the filename of
3976 * the underlying file should suffice for this one as well */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003977 if (bs->file->bs->exact_filename[0] && !has_open_options) {
3978 strcpy(bs->exact_filename, bs->file->bs->exact_filename);
Max Reitz91af7012014-07-18 20:24:56 +02003979 }
3980 /* Reconstructing the full options QDict is simple for most format block
3981 * drivers, as long as the full options are known for the underlying
3982 * file BDS. The full options QDict of that file BDS should somehow
3983 * contain a representation of the filename, therefore the following
3984 * suffices without querying the (exact_)filename of this BDS. */
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003985 if (bs->file->bs->full_open_options) {
Max Reitz91af7012014-07-18 20:24:56 +02003986 qdict_put_obj(opts, "driver",
3987 QOBJECT(qstring_from_str(drv->format_name)));
Kevin Wolf9a4f4c32015-06-16 14:19:22 +02003988 QINCREF(bs->file->bs->full_open_options);
3989 qdict_put_obj(opts, "file",
3990 QOBJECT(bs->file->bs->full_open_options));
Max Reitz91af7012014-07-18 20:24:56 +02003991
3992 bs->full_open_options = opts;
3993 } else {
3994 QDECREF(opts);
3995 }
3996 } else if (!bs->full_open_options && qdict_size(bs->options)) {
3997 /* There is no underlying file BDS (at least referenced by BDS.file),
3998 * so the full options QDict should be equal to the options given
3999 * specifically for this block device when it was opened (plus the
4000 * driver specification).
4001 * Because those options don't change, there is no need to update
4002 * full_open_options when it's already set. */
4003
4004 opts = qdict_new();
4005 append_open_options(opts, bs);
4006 qdict_put_obj(opts, "driver",
4007 QOBJECT(qstring_from_str(drv->format_name)));
4008
4009 if (bs->exact_filename[0]) {
4010 /* This may not work for all block protocol drivers (some may
4011 * require this filename to be parsed), but we have to find some
4012 * default solution here, so just include it. If some block driver
4013 * does not support pure options without any filename at all or
4014 * needs some special format of the options QDict, it needs to
4015 * implement the driver-specific bdrv_refresh_filename() function.
4016 */
4017 qdict_put_obj(opts, "filename",
4018 QOBJECT(qstring_from_str(bs->exact_filename)));
4019 }
4020
4021 bs->full_open_options = opts;
4022 }
4023
4024 if (bs->exact_filename[0]) {
4025 pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
4026 } else if (bs->full_open_options) {
4027 QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
4028 snprintf(bs->filename, sizeof(bs->filename), "json:%s",
4029 qstring_get_str(json));
4030 QDECREF(json);
4031 }
4032}