]> Git Repo - qemu.git/blob - block.c
42659ecc719c828bb306c7d7521e2322d0ff05f1
[qemu.git] / block.c
1 /*
2  * QEMU System Emulator block driver
3  *
4  * Copyright (c) 2003 Fabrice Bellard
5  *
6  * 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  */
24 #include "config-host.h"
25 #include "qemu-common.h"
26 #include "trace.h"
27 #include "block/block_int.h"
28 #include "block/blockjob.h"
29 #include "qemu/module.h"
30 #include "qapi/qmp/qjson.h"
31 #include "sysemu/sysemu.h"
32 #include "sysemu/blockdev.h"    /* FIXME layering violation */
33 #include "qemu/notify.h"
34 #include "block/coroutine.h"
35 #include "block/qapi.h"
36 #include "qmp-commands.h"
37 #include "qemu/timer.h"
38 #include "qapi-event.h"
39
40 #ifdef CONFIG_BSD
41 #include <sys/types.h>
42 #include <sys/stat.h>
43 #include <sys/ioctl.h>
44 #include <sys/queue.h>
45 #ifndef __DragonFly__
46 #include <sys/disk.h>
47 #endif
48 #endif
49
50 #ifdef _WIN32
51 #include <windows.h>
52 #endif
53
54 struct BdrvDirtyBitmap {
55     HBitmap *bitmap;
56     QLIST_ENTRY(BdrvDirtyBitmap) list;
57 };
58
59 #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
60
61 #define COROUTINE_POOL_RESERVATION 64 /* number of coroutines to reserve */
62
63 static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
64 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
65         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
66         BlockDriverCompletionFunc *cb, void *opaque);
67 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
68         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
69         BlockDriverCompletionFunc *cb, void *opaque);
70 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
71                                          int64_t sector_num, int nb_sectors,
72                                          QEMUIOVector *iov);
73 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
74                                          int64_t sector_num, int nb_sectors,
75                                          QEMUIOVector *iov);
76 static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
77     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
78     BdrvRequestFlags flags);
79 static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs,
80     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
81     BdrvRequestFlags flags);
82 static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
83                                                int64_t sector_num,
84                                                QEMUIOVector *qiov,
85                                                int nb_sectors,
86                                                BdrvRequestFlags flags,
87                                                BlockDriverCompletionFunc *cb,
88                                                void *opaque,
89                                                bool is_write);
90 static void coroutine_fn bdrv_co_do_rw(void *opaque);
91 static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs,
92     int64_t sector_num, int nb_sectors, BdrvRequestFlags flags);
93
94 static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
95     QTAILQ_HEAD_INITIALIZER(bdrv_states);
96
97 static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
98     QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
99
100 static QLIST_HEAD(, BlockDriver) bdrv_drivers =
101     QLIST_HEAD_INITIALIZER(bdrv_drivers);
102
103 /* If non-zero, use only whitelisted block drivers */
104 static int use_bdrv_whitelist;
105
106 #ifdef _WIN32
107 static int is_windows_drive_prefix(const char *filename)
108 {
109     return (((filename[0] >= 'a' && filename[0] <= 'z') ||
110              (filename[0] >= 'A' && filename[0] <= 'Z')) &&
111             filename[1] == ':');
112 }
113
114 int is_windows_drive(const char *filename)
115 {
116     if (is_windows_drive_prefix(filename) &&
117         filename[2] == '\0')
118         return 1;
119     if (strstart(filename, "\\\\.\\", NULL) ||
120         strstart(filename, "//./", NULL))
121         return 1;
122     return 0;
123 }
124 #endif
125
126 /* throttling disk I/O limits */
127 void bdrv_set_io_limits(BlockDriverState *bs,
128                         ThrottleConfig *cfg)
129 {
130     int i;
131
132     throttle_config(&bs->throttle_state, cfg);
133
134     for (i = 0; i < 2; i++) {
135         qemu_co_enter_next(&bs->throttled_reqs[i]);
136     }
137 }
138
139 /* this function drain all the throttled IOs */
140 static bool bdrv_start_throttled_reqs(BlockDriverState *bs)
141 {
142     bool drained = false;
143     bool enabled = bs->io_limits_enabled;
144     int i;
145
146     bs->io_limits_enabled = false;
147
148     for (i = 0; i < 2; i++) {
149         while (qemu_co_enter_next(&bs->throttled_reqs[i])) {
150             drained = true;
151         }
152     }
153
154     bs->io_limits_enabled = enabled;
155
156     return drained;
157 }
158
159 void bdrv_io_limits_disable(BlockDriverState *bs)
160 {
161     bs->io_limits_enabled = false;
162
163     bdrv_start_throttled_reqs(bs);
164
165     throttle_destroy(&bs->throttle_state);
166 }
167
168 static void bdrv_throttle_read_timer_cb(void *opaque)
169 {
170     BlockDriverState *bs = opaque;
171     qemu_co_enter_next(&bs->throttled_reqs[0]);
172 }
173
174 static void bdrv_throttle_write_timer_cb(void *opaque)
175 {
176     BlockDriverState *bs = opaque;
177     qemu_co_enter_next(&bs->throttled_reqs[1]);
178 }
179
180 /* should be called before bdrv_set_io_limits if a limit is set */
181 void bdrv_io_limits_enable(BlockDriverState *bs)
182 {
183     assert(!bs->io_limits_enabled);
184     throttle_init(&bs->throttle_state,
185                   bdrv_get_aio_context(bs),
186                   QEMU_CLOCK_VIRTUAL,
187                   bdrv_throttle_read_timer_cb,
188                   bdrv_throttle_write_timer_cb,
189                   bs);
190     bs->io_limits_enabled = true;
191 }
192
193 /* This function makes an IO wait if needed
194  *
195  * @nb_sectors: the number of sectors of the IO
196  * @is_write:   is the IO a write
197  */
198 static void bdrv_io_limits_intercept(BlockDriverState *bs,
199                                      unsigned int bytes,
200                                      bool is_write)
201 {
202     /* does this io must wait */
203     bool must_wait = throttle_schedule_timer(&bs->throttle_state, is_write);
204
205     /* if must wait or any request of this type throttled queue the IO */
206     if (must_wait ||
207         !qemu_co_queue_empty(&bs->throttled_reqs[is_write])) {
208         qemu_co_queue_wait(&bs->throttled_reqs[is_write]);
209     }
210
211     /* the IO will be executed, do the accounting */
212     throttle_account(&bs->throttle_state, is_write, bytes);
213
214
215     /* if the next request must wait -> do nothing */
216     if (throttle_schedule_timer(&bs->throttle_state, is_write)) {
217         return;
218     }
219
220     /* else queue next request for execution */
221     qemu_co_queue_next(&bs->throttled_reqs[is_write]);
222 }
223
224 size_t bdrv_opt_mem_align(BlockDriverState *bs)
225 {
226     if (!bs || !bs->drv) {
227         /* 4k should be on the safe side */
228         return 4096;
229     }
230
231     return bs->bl.opt_mem_alignment;
232 }
233
234 /* check if the path starts with "<protocol>:" */
235 static int path_has_protocol(const char *path)
236 {
237     const char *p;
238
239 #ifdef _WIN32
240     if (is_windows_drive(path) ||
241         is_windows_drive_prefix(path)) {
242         return 0;
243     }
244     p = path + strcspn(path, ":/\\");
245 #else
246     p = path + strcspn(path, ":/");
247 #endif
248
249     return *p == ':';
250 }
251
252 int path_is_absolute(const char *path)
253 {
254 #ifdef _WIN32
255     /* specific case for names like: "\\.\d:" */
256     if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
257         return 1;
258     }
259     return (*path == '/' || *path == '\\');
260 #else
261     return (*path == '/');
262 #endif
263 }
264
265 /* if filename is absolute, just copy it to dest. Otherwise, build a
266    path to it by considering it is relative to base_path. URL are
267    supported. */
268 void path_combine(char *dest, int dest_size,
269                   const char *base_path,
270                   const char *filename)
271 {
272     const char *p, *p1;
273     int len;
274
275     if (dest_size <= 0)
276         return;
277     if (path_is_absolute(filename)) {
278         pstrcpy(dest, dest_size, filename);
279     } else {
280         p = strchr(base_path, ':');
281         if (p)
282             p++;
283         else
284             p = base_path;
285         p1 = strrchr(base_path, '/');
286 #ifdef _WIN32
287         {
288             const char *p2;
289             p2 = strrchr(base_path, '\\');
290             if (!p1 || p2 > p1)
291                 p1 = p2;
292         }
293 #endif
294         if (p1)
295             p1++;
296         else
297             p1 = base_path;
298         if (p1 > p)
299             p = p1;
300         len = p - base_path;
301         if (len > dest_size - 1)
302             len = dest_size - 1;
303         memcpy(dest, base_path, len);
304         dest[len] = '\0';
305         pstrcat(dest, dest_size, filename);
306     }
307 }
308
309 void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz)
310 {
311     if (bs->backing_file[0] == '\0' || path_has_protocol(bs->backing_file)) {
312         pstrcpy(dest, sz, bs->backing_file);
313     } else {
314         path_combine(dest, sz, bs->filename, bs->backing_file);
315     }
316 }
317
318 void bdrv_register(BlockDriver *bdrv)
319 {
320     /* Block drivers without coroutine functions need emulation */
321     if (!bdrv->bdrv_co_readv) {
322         bdrv->bdrv_co_readv = bdrv_co_readv_em;
323         bdrv->bdrv_co_writev = bdrv_co_writev_em;
324
325         /* bdrv_co_readv_em()/brdv_co_writev_em() work in terms of aio, so if
326          * the block driver lacks aio we need to emulate that too.
327          */
328         if (!bdrv->bdrv_aio_readv) {
329             /* add AIO emulation layer */
330             bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
331             bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
332         }
333     }
334
335     QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
336 }
337
338 /* create a new block device (by default it is empty) */
339 BlockDriverState *bdrv_new_root(const char *device_name, Error **errp)
340 {
341     BlockDriverState *bs;
342
343     assert(*device_name);
344
345     if (*device_name && !id_wellformed(device_name)) {
346         error_setg(errp, "Invalid device name");
347         return NULL;
348     }
349
350     if (bdrv_find(device_name)) {
351         error_setg(errp, "Device with id '%s' already exists",
352                    device_name);
353         return NULL;
354     }
355     if (bdrv_find_node(device_name)) {
356         error_setg(errp,
357                    "Device name '%s' conflicts with an existing node name",
358                    device_name);
359         return NULL;
360     }
361
362     bs = bdrv_new();
363
364     pstrcpy(bs->device_name, sizeof(bs->device_name), device_name);
365     QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
366
367     return bs;
368 }
369
370 BlockDriverState *bdrv_new(void)
371 {
372     BlockDriverState *bs;
373     int i;
374
375     bs = g_new0(BlockDriverState, 1);
376     QLIST_INIT(&bs->dirty_bitmaps);
377     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
378         QLIST_INIT(&bs->op_blockers[i]);
379     }
380     bdrv_iostatus_disable(bs);
381     notifier_list_init(&bs->close_notifiers);
382     notifier_with_return_list_init(&bs->before_write_notifiers);
383     qemu_co_queue_init(&bs->throttled_reqs[0]);
384     qemu_co_queue_init(&bs->throttled_reqs[1]);
385     bs->refcnt = 1;
386     bs->aio_context = qemu_get_aio_context();
387
388     return bs;
389 }
390
391 void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
392 {
393     notifier_list_add(&bs->close_notifiers, notify);
394 }
395
396 BlockDriver *bdrv_find_format(const char *format_name)
397 {
398     BlockDriver *drv1;
399     QLIST_FOREACH(drv1, &bdrv_drivers, list) {
400         if (!strcmp(drv1->format_name, format_name)) {
401             return drv1;
402         }
403     }
404     return NULL;
405 }
406
407 static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
408 {
409     static const char *whitelist_rw[] = {
410         CONFIG_BDRV_RW_WHITELIST
411     };
412     static const char *whitelist_ro[] = {
413         CONFIG_BDRV_RO_WHITELIST
414     };
415     const char **p;
416
417     if (!whitelist_rw[0] && !whitelist_ro[0]) {
418         return 1;               /* no whitelist, anything goes */
419     }
420
421     for (p = whitelist_rw; *p; p++) {
422         if (!strcmp(drv->format_name, *p)) {
423             return 1;
424         }
425     }
426     if (read_only) {
427         for (p = whitelist_ro; *p; p++) {
428             if (!strcmp(drv->format_name, *p)) {
429                 return 1;
430             }
431         }
432     }
433     return 0;
434 }
435
436 BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
437                                           bool read_only)
438 {
439     BlockDriver *drv = bdrv_find_format(format_name);
440     return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
441 }
442
443 typedef struct CreateCo {
444     BlockDriver *drv;
445     char *filename;
446     QemuOpts *opts;
447     int ret;
448     Error *err;
449 } CreateCo;
450
451 static void coroutine_fn bdrv_create_co_entry(void *opaque)
452 {
453     Error *local_err = NULL;
454     int ret;
455
456     CreateCo *cco = opaque;
457     assert(cco->drv);
458
459     ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
460     if (local_err) {
461         error_propagate(&cco->err, local_err);
462     }
463     cco->ret = ret;
464 }
465
466 int bdrv_create(BlockDriver *drv, const char* filename,
467                 QemuOpts *opts, Error **errp)
468 {
469     int ret;
470
471     Coroutine *co;
472     CreateCo cco = {
473         .drv = drv,
474         .filename = g_strdup(filename),
475         .opts = opts,
476         .ret = NOT_DONE,
477         .err = NULL,
478     };
479
480     if (!drv->bdrv_create) {
481         error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
482         ret = -ENOTSUP;
483         goto out;
484     }
485
486     if (qemu_in_coroutine()) {
487         /* Fast-path if already in coroutine context */
488         bdrv_create_co_entry(&cco);
489     } else {
490         co = qemu_coroutine_create(bdrv_create_co_entry);
491         qemu_coroutine_enter(co, &cco);
492         while (cco.ret == NOT_DONE) {
493             aio_poll(qemu_get_aio_context(), true);
494         }
495     }
496
497     ret = cco.ret;
498     if (ret < 0) {
499         if (cco.err) {
500             error_propagate(errp, cco.err);
501         } else {
502             error_setg_errno(errp, -ret, "Could not create image");
503         }
504     }
505
506 out:
507     g_free(cco.filename);
508     return ret;
509 }
510
511 int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
512 {
513     BlockDriver *drv;
514     Error *local_err = NULL;
515     int ret;
516
517     drv = bdrv_find_protocol(filename, true);
518     if (drv == NULL) {
519         error_setg(errp, "Could not find protocol for file '%s'", filename);
520         return -ENOENT;
521     }
522
523     ret = bdrv_create(drv, filename, opts, &local_err);
524     if (local_err) {
525         error_propagate(errp, local_err);
526     }
527     return ret;
528 }
529
530 void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
531 {
532     BlockDriver *drv = bs->drv;
533     Error *local_err = NULL;
534
535     memset(&bs->bl, 0, sizeof(bs->bl));
536
537     if (!drv) {
538         return;
539     }
540
541     /* Take some limits from the children as a default */
542     if (bs->file) {
543         bdrv_refresh_limits(bs->file, &local_err);
544         if (local_err) {
545             error_propagate(errp, local_err);
546             return;
547         }
548         bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length;
549         bs->bl.opt_mem_alignment = bs->file->bl.opt_mem_alignment;
550     } else {
551         bs->bl.opt_mem_alignment = 512;
552     }
553
554     if (bs->backing_hd) {
555         bdrv_refresh_limits(bs->backing_hd, &local_err);
556         if (local_err) {
557             error_propagate(errp, local_err);
558             return;
559         }
560         bs->bl.opt_transfer_length =
561             MAX(bs->bl.opt_transfer_length,
562                 bs->backing_hd->bl.opt_transfer_length);
563         bs->bl.opt_mem_alignment =
564             MAX(bs->bl.opt_mem_alignment,
565                 bs->backing_hd->bl.opt_mem_alignment);
566     }
567
568     /* Then let the driver override it */
569     if (drv->bdrv_refresh_limits) {
570         drv->bdrv_refresh_limits(bs, errp);
571     }
572 }
573
574 /*
575  * Create a uniquely-named empty temporary file.
576  * Return 0 upon success, otherwise a negative errno value.
577  */
578 int get_tmp_filename(char *filename, int size)
579 {
580 #ifdef _WIN32
581     char temp_dir[MAX_PATH];
582     /* GetTempFileName requires that its output buffer (4th param)
583        have length MAX_PATH or greater.  */
584     assert(size >= MAX_PATH);
585     return (GetTempPath(MAX_PATH, temp_dir)
586             && GetTempFileName(temp_dir, "qem", 0, filename)
587             ? 0 : -GetLastError());
588 #else
589     int fd;
590     const char *tmpdir;
591     tmpdir = getenv("TMPDIR");
592     if (!tmpdir) {
593         tmpdir = "/var/tmp";
594     }
595     if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
596         return -EOVERFLOW;
597     }
598     fd = mkstemp(filename);
599     if (fd < 0) {
600         return -errno;
601     }
602     if (close(fd) != 0) {
603         unlink(filename);
604         return -errno;
605     }
606     return 0;
607 #endif
608 }
609
610 /*
611  * Detect host devices. By convention, /dev/cdrom[N] is always
612  * recognized as a host CDROM.
613  */
614 static BlockDriver *find_hdev_driver(const char *filename)
615 {
616     int score_max = 0, score;
617     BlockDriver *drv = NULL, *d;
618
619     QLIST_FOREACH(d, &bdrv_drivers, list) {
620         if (d->bdrv_probe_device) {
621             score = d->bdrv_probe_device(filename);
622             if (score > score_max) {
623                 score_max = score;
624                 drv = d;
625             }
626         }
627     }
628
629     return drv;
630 }
631
632 BlockDriver *bdrv_find_protocol(const char *filename,
633                                 bool allow_protocol_prefix)
634 {
635     BlockDriver *drv1;
636     char protocol[128];
637     int len;
638     const char *p;
639
640     /* TODO Drivers without bdrv_file_open must be specified explicitly */
641
642     /*
643      * XXX(hch): we really should not let host device detection
644      * override an explicit protocol specification, but moving this
645      * later breaks access to device names with colons in them.
646      * Thanks to the brain-dead persistent naming schemes on udev-
647      * based Linux systems those actually are quite common.
648      */
649     drv1 = find_hdev_driver(filename);
650     if (drv1) {
651         return drv1;
652     }
653
654     if (!path_has_protocol(filename) || !allow_protocol_prefix) {
655         return bdrv_find_format("file");
656     }
657
658     p = strchr(filename, ':');
659     assert(p != NULL);
660     len = p - filename;
661     if (len > sizeof(protocol) - 1)
662         len = sizeof(protocol) - 1;
663     memcpy(protocol, filename, len);
664     protocol[len] = '\0';
665     QLIST_FOREACH(drv1, &bdrv_drivers, list) {
666         if (drv1->protocol_name &&
667             !strcmp(drv1->protocol_name, protocol)) {
668             return drv1;
669         }
670     }
671     return NULL;
672 }
673
674 static int find_image_format(BlockDriverState *bs, const char *filename,
675                              BlockDriver **pdrv, Error **errp)
676 {
677     int score, score_max;
678     BlockDriver *drv1, *drv;
679     uint8_t buf[2048];
680     int ret = 0;
681
682     /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
683     if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
684         drv = bdrv_find_format("raw");
685         if (!drv) {
686             error_setg(errp, "Could not find raw image format");
687             ret = -ENOENT;
688         }
689         *pdrv = drv;
690         return ret;
691     }
692
693     ret = bdrv_pread(bs, 0, buf, sizeof(buf));
694     if (ret < 0) {
695         error_setg_errno(errp, -ret, "Could not read image for determining its "
696                          "format");
697         *pdrv = NULL;
698         return ret;
699     }
700
701     score_max = 0;
702     drv = NULL;
703     QLIST_FOREACH(drv1, &bdrv_drivers, list) {
704         if (drv1->bdrv_probe) {
705             score = drv1->bdrv_probe(buf, ret, filename);
706             if (score > score_max) {
707                 score_max = score;
708                 drv = drv1;
709             }
710         }
711     }
712     if (!drv) {
713         error_setg(errp, "Could not determine image format: No compatible "
714                    "driver found");
715         ret = -ENOENT;
716     }
717     *pdrv = drv;
718     return ret;
719 }
720
721 /**
722  * Set the current 'total_sectors' value
723  * Return 0 on success, -errno on error.
724  */
725 static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
726 {
727     BlockDriver *drv = bs->drv;
728
729     /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
730     if (bs->sg)
731         return 0;
732
733     /* query actual device if possible, otherwise just trust the hint */
734     if (drv->bdrv_getlength) {
735         int64_t length = drv->bdrv_getlength(bs);
736         if (length < 0) {
737             return length;
738         }
739         hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
740     }
741
742     bs->total_sectors = hint;
743     return 0;
744 }
745
746 /**
747  * Set open flags for a given discard mode
748  *
749  * Return 0 on success, -1 if the discard mode was invalid.
750  */
751 int bdrv_parse_discard_flags(const char *mode, int *flags)
752 {
753     *flags &= ~BDRV_O_UNMAP;
754
755     if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
756         /* do nothing */
757     } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
758         *flags |= BDRV_O_UNMAP;
759     } else {
760         return -1;
761     }
762
763     return 0;
764 }
765
766 /**
767  * Set open flags for a given cache mode
768  *
769  * Return 0 on success, -1 if the cache mode was invalid.
770  */
771 int bdrv_parse_cache_flags(const char *mode, int *flags)
772 {
773     *flags &= ~BDRV_O_CACHE_MASK;
774
775     if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
776         *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
777     } else if (!strcmp(mode, "directsync")) {
778         *flags |= BDRV_O_NOCACHE;
779     } else if (!strcmp(mode, "writeback")) {
780         *flags |= BDRV_O_CACHE_WB;
781     } else if (!strcmp(mode, "unsafe")) {
782         *flags |= BDRV_O_CACHE_WB;
783         *flags |= BDRV_O_NO_FLUSH;
784     } else if (!strcmp(mode, "writethrough")) {
785         /* this is the default */
786     } else {
787         return -1;
788     }
789
790     return 0;
791 }
792
793 /**
794  * The copy-on-read flag is actually a reference count so multiple users may
795  * use the feature without worrying about clobbering its previous state.
796  * Copy-on-read stays enabled until all users have called to disable it.
797  */
798 void bdrv_enable_copy_on_read(BlockDriverState *bs)
799 {
800     bs->copy_on_read++;
801 }
802
803 void bdrv_disable_copy_on_read(BlockDriverState *bs)
804 {
805     assert(bs->copy_on_read > 0);
806     bs->copy_on_read--;
807 }
808
809 /*
810  * Returns the flags that a temporary snapshot should get, based on the
811  * originally requested flags (the originally requested image will have flags
812  * like a backing file)
813  */
814 static int bdrv_temp_snapshot_flags(int flags)
815 {
816     return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
817 }
818
819 /*
820  * Returns the flags that bs->file should get, based on the given flags for
821  * the parent BDS
822  */
823 static int bdrv_inherited_flags(int flags)
824 {
825     /* Enable protocol handling, disable format probing for bs->file */
826     flags |= BDRV_O_PROTOCOL;
827
828     /* Our block drivers take care to send flushes and respect unmap policy,
829      * so we can enable both unconditionally on lower layers. */
830     flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
831
832     /* Clear flags that only apply to the top layer */
833     flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
834
835     return flags;
836 }
837
838 /*
839  * Returns the flags that bs->backing_hd should get, based on the given flags
840  * for the parent BDS
841  */
842 static int bdrv_backing_flags(int flags)
843 {
844     /* backing files always opened read-only */
845     flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
846
847     /* snapshot=on is handled on the top layer */
848     flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
849
850     return flags;
851 }
852
853 static int bdrv_open_flags(BlockDriverState *bs, int flags)
854 {
855     int open_flags = flags | BDRV_O_CACHE_WB;
856
857     /*
858      * Clear flags that are internal to the block layer before opening the
859      * image.
860      */
861     open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
862
863     /*
864      * Snapshots should be writable.
865      */
866     if (flags & BDRV_O_TEMPORARY) {
867         open_flags |= BDRV_O_RDWR;
868     }
869
870     return open_flags;
871 }
872
873 static void bdrv_assign_node_name(BlockDriverState *bs,
874                                   const char *node_name,
875                                   Error **errp)
876 {
877     if (!node_name) {
878         return;
879     }
880
881     /* Check for empty string or invalid characters */
882     if (!id_wellformed(node_name)) {
883         error_setg(errp, "Invalid node name");
884         return;
885     }
886
887     /* takes care of avoiding namespaces collisions */
888     if (bdrv_find(node_name)) {
889         error_setg(errp, "node-name=%s is conflicting with a device id",
890                    node_name);
891         return;
892     }
893
894     /* takes care of avoiding duplicates node names */
895     if (bdrv_find_node(node_name)) {
896         error_setg(errp, "Duplicate node name");
897         return;
898     }
899
900     /* copy node name into the bs and insert it into the graph list */
901     pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
902     QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
903 }
904
905 /*
906  * Common part for opening disk images and files
907  *
908  * Removes all processed options from *options.
909  */
910 static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
911     QDict *options, int flags, BlockDriver *drv, Error **errp)
912 {
913     int ret, open_flags;
914     const char *filename;
915     const char *node_name = NULL;
916     Error *local_err = NULL;
917
918     assert(drv != NULL);
919     assert(bs->file == NULL);
920     assert(options != NULL && bs->options != options);
921
922     if (file != NULL) {
923         filename = file->filename;
924     } else {
925         filename = qdict_get_try_str(options, "filename");
926     }
927
928     if (drv->bdrv_needs_filename && !filename) {
929         error_setg(errp, "The '%s' block driver requires a file name",
930                    drv->format_name);
931         return -EINVAL;
932     }
933
934     trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
935
936     node_name = qdict_get_try_str(options, "node-name");
937     bdrv_assign_node_name(bs, node_name, &local_err);
938     if (local_err) {
939         error_propagate(errp, local_err);
940         return -EINVAL;
941     }
942     qdict_del(options, "node-name");
943
944     /* bdrv_open() with directly using a protocol as drv. This layer is already
945      * opened, so assign it to bs (while file becomes a closed BlockDriverState)
946      * and return immediately. */
947     if (file != NULL && drv->bdrv_file_open) {
948         bdrv_swap(file, bs);
949         return 0;
950     }
951
952     bs->open_flags = flags;
953     bs->guest_block_size = 512;
954     bs->request_alignment = 512;
955     bs->zero_beyond_eof = true;
956     open_flags = bdrv_open_flags(bs, flags);
957     bs->read_only = !(open_flags & BDRV_O_RDWR);
958     bs->growable = !!(flags & BDRV_O_PROTOCOL);
959
960     if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
961         error_setg(errp,
962                    !bs->read_only && bdrv_is_whitelisted(drv, true)
963                         ? "Driver '%s' can only be used for read-only devices"
964                         : "Driver '%s' is not whitelisted",
965                    drv->format_name);
966         return -ENOTSUP;
967     }
968
969     assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
970     if (flags & BDRV_O_COPY_ON_READ) {
971         if (!bs->read_only) {
972             bdrv_enable_copy_on_read(bs);
973         } else {
974             error_setg(errp, "Can't use copy-on-read on read-only device");
975             return -EINVAL;
976         }
977     }
978
979     if (filename != NULL) {
980         pstrcpy(bs->filename, sizeof(bs->filename), filename);
981     } else {
982         bs->filename[0] = '\0';
983     }
984     pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
985
986     bs->drv = drv;
987     bs->opaque = g_malloc0(drv->instance_size);
988
989     bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
990
991     /* Open the image, either directly or using a protocol */
992     if (drv->bdrv_file_open) {
993         assert(file == NULL);
994         assert(!drv->bdrv_needs_filename || filename != NULL);
995         ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
996     } else {
997         if (file == NULL) {
998             error_setg(errp, "Can't use '%s' as a block driver for the "
999                        "protocol level", drv->format_name);
1000             ret = -EINVAL;
1001             goto free_and_fail;
1002         }
1003         bs->file = file;
1004         ret = drv->bdrv_open(bs, options, open_flags, &local_err);
1005     }
1006
1007     if (ret < 0) {
1008         if (local_err) {
1009             error_propagate(errp, local_err);
1010         } else if (bs->filename[0]) {
1011             error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
1012         } else {
1013             error_setg_errno(errp, -ret, "Could not open image");
1014         }
1015         goto free_and_fail;
1016     }
1017
1018     ret = refresh_total_sectors(bs, bs->total_sectors);
1019     if (ret < 0) {
1020         error_setg_errno(errp, -ret, "Could not refresh total sector count");
1021         goto free_and_fail;
1022     }
1023
1024     bdrv_refresh_limits(bs, &local_err);
1025     if (local_err) {
1026         error_propagate(errp, local_err);
1027         ret = -EINVAL;
1028         goto free_and_fail;
1029     }
1030
1031     assert(bdrv_opt_mem_align(bs) != 0);
1032     assert((bs->request_alignment != 0) || bs->sg);
1033     return 0;
1034
1035 free_and_fail:
1036     bs->file = NULL;
1037     g_free(bs->opaque);
1038     bs->opaque = NULL;
1039     bs->drv = NULL;
1040     return ret;
1041 }
1042
1043 static QDict *parse_json_filename(const char *filename, Error **errp)
1044 {
1045     QObject *options_obj;
1046     QDict *options;
1047     int ret;
1048
1049     ret = strstart(filename, "json:", &filename);
1050     assert(ret);
1051
1052     options_obj = qobject_from_json(filename);
1053     if (!options_obj) {
1054         error_setg(errp, "Could not parse the JSON options");
1055         return NULL;
1056     }
1057
1058     if (qobject_type(options_obj) != QTYPE_QDICT) {
1059         qobject_decref(options_obj);
1060         error_setg(errp, "Invalid JSON object given");
1061         return NULL;
1062     }
1063
1064     options = qobject_to_qdict(options_obj);
1065     qdict_flatten(options);
1066
1067     return options;
1068 }
1069
1070 /*
1071  * Fills in default options for opening images and converts the legacy
1072  * filename/flags pair to option QDict entries.
1073  */
1074 static int bdrv_fill_options(QDict **options, const char **pfilename, int flags,
1075                              BlockDriver *drv, Error **errp)
1076 {
1077     const char *filename = *pfilename;
1078     const char *drvname;
1079     bool protocol = flags & BDRV_O_PROTOCOL;
1080     bool parse_filename = false;
1081     Error *local_err = NULL;
1082
1083     /* Parse json: pseudo-protocol */
1084     if (filename && g_str_has_prefix(filename, "json:")) {
1085         QDict *json_options = parse_json_filename(filename, &local_err);
1086         if (local_err) {
1087             error_propagate(errp, local_err);
1088             return -EINVAL;
1089         }
1090
1091         /* Options given in the filename have lower priority than options
1092          * specified directly */
1093         qdict_join(*options, json_options, false);
1094         QDECREF(json_options);
1095         *pfilename = filename = NULL;
1096     }
1097
1098     /* Fetch the file name from the options QDict if necessary */
1099     if (protocol && filename) {
1100         if (!qdict_haskey(*options, "filename")) {
1101             qdict_put(*options, "filename", qstring_from_str(filename));
1102             parse_filename = true;
1103         } else {
1104             error_setg(errp, "Can't specify 'file' and 'filename' options at "
1105                              "the same time");
1106             return -EINVAL;
1107         }
1108     }
1109
1110     /* Find the right block driver */
1111     filename = qdict_get_try_str(*options, "filename");
1112     drvname = qdict_get_try_str(*options, "driver");
1113
1114     if (drv) {
1115         if (drvname) {
1116             error_setg(errp, "Driver specified twice");
1117             return -EINVAL;
1118         }
1119         drvname = drv->format_name;
1120         qdict_put(*options, "driver", qstring_from_str(drvname));
1121     } else {
1122         if (!drvname && protocol) {
1123             if (filename) {
1124                 drv = bdrv_find_protocol(filename, parse_filename);
1125                 if (!drv) {
1126                     error_setg(errp, "Unknown protocol");
1127                     return -EINVAL;
1128                 }
1129
1130                 drvname = drv->format_name;
1131                 qdict_put(*options, "driver", qstring_from_str(drvname));
1132             } else {
1133                 error_setg(errp, "Must specify either driver or file");
1134                 return -EINVAL;
1135             }
1136         } else if (drvname) {
1137             drv = bdrv_find_format(drvname);
1138             if (!drv) {
1139                 error_setg(errp, "Unknown driver '%s'", drvname);
1140                 return -ENOENT;
1141             }
1142         }
1143     }
1144
1145     assert(drv || !protocol);
1146
1147     /* Driver-specific filename parsing */
1148     if (drv && drv->bdrv_parse_filename && parse_filename) {
1149         drv->bdrv_parse_filename(filename, *options, &local_err);
1150         if (local_err) {
1151             error_propagate(errp, local_err);
1152             return -EINVAL;
1153         }
1154
1155         if (!drv->bdrv_needs_filename) {
1156             qdict_del(*options, "filename");
1157         }
1158     }
1159
1160     return 0;
1161 }
1162
1163 void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1164 {
1165
1166     if (bs->backing_hd) {
1167         assert(bs->backing_blocker);
1168         bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
1169     } else if (backing_hd) {
1170         error_setg(&bs->backing_blocker,
1171                    "device is used as backing hd of '%s'",
1172                    bs->device_name);
1173     }
1174
1175     bs->backing_hd = backing_hd;
1176     if (!backing_hd) {
1177         error_free(bs->backing_blocker);
1178         bs->backing_blocker = NULL;
1179         goto out;
1180     }
1181     bs->open_flags &= ~BDRV_O_NO_BACKING;
1182     pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1183     pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1184             backing_hd->drv ? backing_hd->drv->format_name : "");
1185
1186     bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1187     /* Otherwise we won't be able to commit due to check in bdrv_commit */
1188     bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT,
1189                     bs->backing_blocker);
1190 out:
1191     bdrv_refresh_limits(bs, NULL);
1192 }
1193
1194 /*
1195  * Opens the backing file for a BlockDriverState if not yet open
1196  *
1197  * options is a QDict of options to pass to the block drivers, or NULL for an
1198  * empty set of options. The reference to the QDict is transferred to this
1199  * function (even on failure), so if the caller intends to reuse the dictionary,
1200  * it needs to use QINCREF() before calling bdrv_file_open.
1201  */
1202 int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
1203 {
1204     char *backing_filename = g_malloc0(PATH_MAX);
1205     int ret = 0;
1206     BlockDriver *back_drv = NULL;
1207     BlockDriverState *backing_hd;
1208     Error *local_err = NULL;
1209
1210     if (bs->backing_hd != NULL) {
1211         QDECREF(options);
1212         goto free_exit;
1213     }
1214
1215     /* NULL means an empty set of options */
1216     if (options == NULL) {
1217         options = qdict_new();
1218     }
1219
1220     bs->open_flags &= ~BDRV_O_NO_BACKING;
1221     if (qdict_haskey(options, "file.filename")) {
1222         backing_filename[0] = '\0';
1223     } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
1224         QDECREF(options);
1225         goto free_exit;
1226     } else {
1227         bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX);
1228     }
1229
1230     if (!bs->drv || !bs->drv->supports_backing) {
1231         ret = -EINVAL;
1232         error_setg(errp, "Driver doesn't support backing files");
1233         QDECREF(options);
1234         goto free_exit;
1235     }
1236
1237     backing_hd = bdrv_new();
1238
1239     if (bs->backing_format[0] != '\0') {
1240         back_drv = bdrv_find_format(bs->backing_format);
1241     }
1242
1243     assert(bs->backing_hd == NULL);
1244     ret = bdrv_open(&backing_hd,
1245                     *backing_filename ? backing_filename : NULL, NULL, options,
1246                     bdrv_backing_flags(bs->open_flags), back_drv, &local_err);
1247     if (ret < 0) {
1248         bdrv_unref(backing_hd);
1249         backing_hd = NULL;
1250         bs->open_flags |= BDRV_O_NO_BACKING;
1251         error_setg(errp, "Could not open backing file: %s",
1252                    error_get_pretty(local_err));
1253         error_free(local_err);
1254         goto free_exit;
1255     }
1256     bdrv_set_backing_hd(bs, backing_hd);
1257
1258 free_exit:
1259     g_free(backing_filename);
1260     return ret;
1261 }
1262
1263 /*
1264  * Opens a disk image whose options are given as BlockdevRef in another block
1265  * device's options.
1266  *
1267  * If allow_none is true, no image will be opened if filename is false and no
1268  * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1269  *
1270  * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1271  * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1272  * itself, all options starting with "${bdref_key}." are considered part of the
1273  * BlockdevRef.
1274  *
1275  * The BlockdevRef will be removed from the options QDict.
1276  *
1277  * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
1278  */
1279 int bdrv_open_image(BlockDriverState **pbs, const char *filename,
1280                     QDict *options, const char *bdref_key, int flags,
1281                     bool allow_none, Error **errp)
1282 {
1283     QDict *image_options;
1284     int ret;
1285     char *bdref_key_dot;
1286     const char *reference;
1287
1288     assert(pbs);
1289     assert(*pbs == NULL);
1290
1291     bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1292     qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1293     g_free(bdref_key_dot);
1294
1295     reference = qdict_get_try_str(options, bdref_key);
1296     if (!filename && !reference && !qdict_size(image_options)) {
1297         if (allow_none) {
1298             ret = 0;
1299         } else {
1300             error_setg(errp, "A block device must be specified for \"%s\"",
1301                        bdref_key);
1302             ret = -EINVAL;
1303         }
1304         QDECREF(image_options);
1305         goto done;
1306     }
1307
1308     ret = bdrv_open(pbs, filename, reference, image_options, flags, NULL, errp);
1309
1310 done:
1311     qdict_del(options, bdref_key);
1312     return ret;
1313 }
1314
1315 int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
1316 {
1317     /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
1318     char *tmp_filename = g_malloc0(PATH_MAX + 1);
1319     int64_t total_size;
1320     BlockDriver *bdrv_qcow2;
1321     QemuOpts *opts = NULL;
1322     QDict *snapshot_options;
1323     BlockDriverState *bs_snapshot;
1324     Error *local_err;
1325     int ret;
1326
1327     /* if snapshot, we create a temporary backing file and open it
1328        instead of opening 'filename' directly */
1329
1330     /* Get the required size from the image */
1331     total_size = bdrv_getlength(bs);
1332     if (total_size < 0) {
1333         ret = total_size;
1334         error_setg_errno(errp, -total_size, "Could not get image size");
1335         goto out;
1336     }
1337
1338     /* Create the temporary image */
1339     ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
1340     if (ret < 0) {
1341         error_setg_errno(errp, -ret, "Could not get temporary filename");
1342         goto out;
1343     }
1344
1345     bdrv_qcow2 = bdrv_find_format("qcow2");
1346     opts = qemu_opts_create(bdrv_qcow2->create_opts, NULL, 0,
1347                             &error_abort);
1348     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size);
1349     ret = bdrv_create(bdrv_qcow2, tmp_filename, opts, &local_err);
1350     qemu_opts_del(opts);
1351     if (ret < 0) {
1352         error_setg_errno(errp, -ret, "Could not create temporary overlay "
1353                          "'%s': %s", tmp_filename,
1354                          error_get_pretty(local_err));
1355         error_free(local_err);
1356         goto out;
1357     }
1358
1359     /* Prepare a new options QDict for the temporary file */
1360     snapshot_options = qdict_new();
1361     qdict_put(snapshot_options, "file.driver",
1362               qstring_from_str("file"));
1363     qdict_put(snapshot_options, "file.filename",
1364               qstring_from_str(tmp_filename));
1365
1366     bs_snapshot = bdrv_new();
1367
1368     ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
1369                     flags, bdrv_qcow2, &local_err);
1370     if (ret < 0) {
1371         error_propagate(errp, local_err);
1372         goto out;
1373     }
1374
1375     bdrv_append(bs_snapshot, bs);
1376
1377 out:
1378     g_free(tmp_filename);
1379     return ret;
1380 }
1381
1382 /*
1383  * Opens a disk image (raw, qcow2, vmdk, ...)
1384  *
1385  * options is a QDict of options to pass to the block drivers, or NULL for an
1386  * empty set of options. The reference to the QDict belongs to the block layer
1387  * after the call (even on failure), so if the caller intends to reuse the
1388  * dictionary, it needs to use QINCREF() before calling bdrv_open.
1389  *
1390  * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1391  * If it is not NULL, the referenced BDS will be reused.
1392  *
1393  * The reference parameter may be used to specify an existing block device which
1394  * should be opened. If specified, neither options nor a filename may be given,
1395  * nor can an existing BDS be reused (that is, *pbs has to be NULL).
1396  */
1397 int bdrv_open(BlockDriverState **pbs, const char *filename,
1398               const char *reference, QDict *options, int flags,
1399               BlockDriver *drv, Error **errp)
1400 {
1401     int ret;
1402     BlockDriverState *file = NULL, *bs;
1403     const char *drvname;
1404     Error *local_err = NULL;
1405     int snapshot_flags = 0;
1406
1407     assert(pbs);
1408
1409     if (reference) {
1410         bool options_non_empty = options ? qdict_size(options) : false;
1411         QDECREF(options);
1412
1413         if (*pbs) {
1414             error_setg(errp, "Cannot reuse an existing BDS when referencing "
1415                        "another block device");
1416             return -EINVAL;
1417         }
1418
1419         if (filename || options_non_empty) {
1420             error_setg(errp, "Cannot reference an existing block device with "
1421                        "additional options or a new filename");
1422             return -EINVAL;
1423         }
1424
1425         bs = bdrv_lookup_bs(reference, reference, errp);
1426         if (!bs) {
1427             return -ENODEV;
1428         }
1429         bdrv_ref(bs);
1430         *pbs = bs;
1431         return 0;
1432     }
1433
1434     if (*pbs) {
1435         bs = *pbs;
1436     } else {
1437         bs = bdrv_new();
1438     }
1439
1440     /* NULL means an empty set of options */
1441     if (options == NULL) {
1442         options = qdict_new();
1443     }
1444
1445     ret = bdrv_fill_options(&options, &filename, flags, drv, &local_err);
1446     if (local_err) {
1447         goto fail;
1448     }
1449
1450     /* Find the right image format driver */
1451     drv = NULL;
1452     drvname = qdict_get_try_str(options, "driver");
1453     if (drvname) {
1454         drv = bdrv_find_format(drvname);
1455         qdict_del(options, "driver");
1456         if (!drv) {
1457             error_setg(errp, "Unknown driver: '%s'", drvname);
1458             ret = -EINVAL;
1459             goto fail;
1460         }
1461     }
1462
1463     assert(drvname || !(flags & BDRV_O_PROTOCOL));
1464     if (drv && !drv->bdrv_file_open) {
1465         /* If the user explicitly wants a format driver here, we'll need to add
1466          * another layer for the protocol in bs->file */
1467         flags &= ~BDRV_O_PROTOCOL;
1468     }
1469
1470     bs->options = options;
1471     options = qdict_clone_shallow(options);
1472
1473     /* Open image file without format layer */
1474     if ((flags & BDRV_O_PROTOCOL) == 0) {
1475         if (flags & BDRV_O_RDWR) {
1476             flags |= BDRV_O_ALLOW_RDWR;
1477         }
1478         if (flags & BDRV_O_SNAPSHOT) {
1479             snapshot_flags = bdrv_temp_snapshot_flags(flags);
1480             flags = bdrv_backing_flags(flags);
1481         }
1482
1483         assert(file == NULL);
1484         ret = bdrv_open_image(&file, filename, options, "file",
1485                               bdrv_inherited_flags(flags),
1486                               true, &local_err);
1487         if (ret < 0) {
1488             goto fail;
1489         }
1490     }
1491
1492     /* Image format probing */
1493     if (!drv && file) {
1494         ret = find_image_format(file, filename, &drv, &local_err);
1495         if (ret < 0) {
1496             goto fail;
1497         }
1498     } else if (!drv) {
1499         error_setg(errp, "Must specify either driver or file");
1500         ret = -EINVAL;
1501         goto fail;
1502     }
1503
1504     /* Open the image */
1505     ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
1506     if (ret < 0) {
1507         goto fail;
1508     }
1509
1510     if (file && (bs->file != file)) {
1511         bdrv_unref(file);
1512         file = NULL;
1513     }
1514
1515     /* If there is a backing file, use it */
1516     if ((flags & BDRV_O_NO_BACKING) == 0) {
1517         QDict *backing_options;
1518
1519         qdict_extract_subqdict(options, &backing_options, "backing.");
1520         ret = bdrv_open_backing_file(bs, backing_options, &local_err);
1521         if (ret < 0) {
1522             goto close_and_fail;
1523         }
1524     }
1525
1526     bdrv_refresh_filename(bs);
1527
1528     /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1529      * temporary snapshot afterwards. */
1530     if (snapshot_flags) {
1531         ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
1532         if (local_err) {
1533             goto close_and_fail;
1534         }
1535     }
1536
1537     /* Check if any unknown options were used */
1538     if (options && (qdict_size(options) != 0)) {
1539         const QDictEntry *entry = qdict_first(options);
1540         if (flags & BDRV_O_PROTOCOL) {
1541             error_setg(errp, "Block protocol '%s' doesn't support the option "
1542                        "'%s'", drv->format_name, entry->key);
1543         } else {
1544             error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1545                        "support the option '%s'", drv->format_name,
1546                        bs->device_name, entry->key);
1547         }
1548
1549         ret = -EINVAL;
1550         goto close_and_fail;
1551     }
1552
1553     if (!bdrv_key_required(bs)) {
1554         bdrv_dev_change_media_cb(bs, true);
1555     } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1556                && !runstate_check(RUN_STATE_INMIGRATE)
1557                && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1558         error_setg(errp,
1559                    "Guest must be stopped for opening of encrypted image");
1560         ret = -EBUSY;
1561         goto close_and_fail;
1562     }
1563
1564     QDECREF(options);
1565     *pbs = bs;
1566     return 0;
1567
1568 fail:
1569     if (file != NULL) {
1570         bdrv_unref(file);
1571     }
1572     QDECREF(bs->options);
1573     QDECREF(options);
1574     bs->options = NULL;
1575     if (!*pbs) {
1576         /* If *pbs is NULL, a new BDS has been created in this function and
1577            needs to be freed now. Otherwise, it does not need to be closed,
1578            since it has not really been opened yet. */
1579         bdrv_unref(bs);
1580     }
1581     if (local_err) {
1582         error_propagate(errp, local_err);
1583     }
1584     return ret;
1585
1586 close_and_fail:
1587     /* See fail path, but now the BDS has to be always closed */
1588     if (*pbs) {
1589         bdrv_close(bs);
1590     } else {
1591         bdrv_unref(bs);
1592     }
1593     QDECREF(options);
1594     if (local_err) {
1595         error_propagate(errp, local_err);
1596     }
1597     return ret;
1598 }
1599
1600 typedef struct BlockReopenQueueEntry {
1601      bool prepared;
1602      BDRVReopenState state;
1603      QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1604 } BlockReopenQueueEntry;
1605
1606 /*
1607  * Adds a BlockDriverState to a simple queue for an atomic, transactional
1608  * reopen of multiple devices.
1609  *
1610  * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1611  * already performed, or alternatively may be NULL a new BlockReopenQueue will
1612  * be created and initialized. This newly created BlockReopenQueue should be
1613  * passed back in for subsequent calls that are intended to be of the same
1614  * atomic 'set'.
1615  *
1616  * bs is the BlockDriverState to add to the reopen queue.
1617  *
1618  * flags contains the open flags for the associated bs
1619  *
1620  * returns a pointer to bs_queue, which is either the newly allocated
1621  * bs_queue, or the existing bs_queue being used.
1622  *
1623  */
1624 BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1625                                     BlockDriverState *bs, int flags)
1626 {
1627     assert(bs != NULL);
1628
1629     BlockReopenQueueEntry *bs_entry;
1630     if (bs_queue == NULL) {
1631         bs_queue = g_new0(BlockReopenQueue, 1);
1632         QSIMPLEQ_INIT(bs_queue);
1633     }
1634
1635     /* bdrv_open() masks this flag out */
1636     flags &= ~BDRV_O_PROTOCOL;
1637
1638     if (bs->file) {
1639         bdrv_reopen_queue(bs_queue, bs->file, bdrv_inherited_flags(flags));
1640     }
1641
1642     bs_entry = g_new0(BlockReopenQueueEntry, 1);
1643     QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1644
1645     bs_entry->state.bs = bs;
1646     bs_entry->state.flags = flags;
1647
1648     return bs_queue;
1649 }
1650
1651 /*
1652  * Reopen multiple BlockDriverStates atomically & transactionally.
1653  *
1654  * The queue passed in (bs_queue) must have been built up previous
1655  * via bdrv_reopen_queue().
1656  *
1657  * Reopens all BDS specified in the queue, with the appropriate
1658  * flags.  All devices are prepared for reopen, and failure of any
1659  * device will cause all device changes to be abandonded, and intermediate
1660  * data cleaned up.
1661  *
1662  * If all devices prepare successfully, then the changes are committed
1663  * to all devices.
1664  *
1665  */
1666 int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1667 {
1668     int ret = -1;
1669     BlockReopenQueueEntry *bs_entry, *next;
1670     Error *local_err = NULL;
1671
1672     assert(bs_queue != NULL);
1673
1674     bdrv_drain_all();
1675
1676     QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1677         if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1678             error_propagate(errp, local_err);
1679             goto cleanup;
1680         }
1681         bs_entry->prepared = true;
1682     }
1683
1684     /* If we reach this point, we have success and just need to apply the
1685      * changes
1686      */
1687     QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1688         bdrv_reopen_commit(&bs_entry->state);
1689     }
1690
1691     ret = 0;
1692
1693 cleanup:
1694     QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1695         if (ret && bs_entry->prepared) {
1696             bdrv_reopen_abort(&bs_entry->state);
1697         }
1698         g_free(bs_entry);
1699     }
1700     g_free(bs_queue);
1701     return ret;
1702 }
1703
1704
1705 /* Reopen a single BlockDriverState with the specified flags. */
1706 int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1707 {
1708     int ret = -1;
1709     Error *local_err = NULL;
1710     BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1711
1712     ret = bdrv_reopen_multiple(queue, &local_err);
1713     if (local_err != NULL) {
1714         error_propagate(errp, local_err);
1715     }
1716     return ret;
1717 }
1718
1719
1720 /*
1721  * Prepares a BlockDriverState for reopen. All changes are staged in the
1722  * 'opaque' field of the BDRVReopenState, which is used and allocated by
1723  * the block driver layer .bdrv_reopen_prepare()
1724  *
1725  * bs is the BlockDriverState to reopen
1726  * flags are the new open flags
1727  * queue is the reopen queue
1728  *
1729  * Returns 0 on success, non-zero on error.  On error errp will be set
1730  * as well.
1731  *
1732  * On failure, bdrv_reopen_abort() will be called to clean up any data.
1733  * It is the responsibility of the caller to then call the abort() or
1734  * commit() for any other BDS that have been left in a prepare() state
1735  *
1736  */
1737 int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1738                         Error **errp)
1739 {
1740     int ret = -1;
1741     Error *local_err = NULL;
1742     BlockDriver *drv;
1743
1744     assert(reopen_state != NULL);
1745     assert(reopen_state->bs->drv != NULL);
1746     drv = reopen_state->bs->drv;
1747
1748     /* if we are to stay read-only, do not allow permission change
1749      * to r/w */
1750     if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1751         reopen_state->flags & BDRV_O_RDWR) {
1752         error_set(errp, QERR_DEVICE_IS_READ_ONLY,
1753                   reopen_state->bs->device_name);
1754         goto error;
1755     }
1756
1757
1758     ret = bdrv_flush(reopen_state->bs);
1759     if (ret) {
1760         error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1761                   strerror(-ret));
1762         goto error;
1763     }
1764
1765     if (drv->bdrv_reopen_prepare) {
1766         ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1767         if (ret) {
1768             if (local_err != NULL) {
1769                 error_propagate(errp, local_err);
1770             } else {
1771                 error_setg(errp, "failed while preparing to reopen image '%s'",
1772                            reopen_state->bs->filename);
1773             }
1774             goto error;
1775         }
1776     } else {
1777         /* It is currently mandatory to have a bdrv_reopen_prepare()
1778          * handler for each supported drv. */
1779         error_set(errp, QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
1780                   drv->format_name, reopen_state->bs->device_name,
1781                  "reopening of file");
1782         ret = -1;
1783         goto error;
1784     }
1785
1786     ret = 0;
1787
1788 error:
1789     return ret;
1790 }
1791
1792 /*
1793  * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1794  * makes them final by swapping the staging BlockDriverState contents into
1795  * the active BlockDriverState contents.
1796  */
1797 void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1798 {
1799     BlockDriver *drv;
1800
1801     assert(reopen_state != NULL);
1802     drv = reopen_state->bs->drv;
1803     assert(drv != NULL);
1804
1805     /* If there are any driver level actions to take */
1806     if (drv->bdrv_reopen_commit) {
1807         drv->bdrv_reopen_commit(reopen_state);
1808     }
1809
1810     /* set BDS specific flags now */
1811     reopen_state->bs->open_flags         = reopen_state->flags;
1812     reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1813                                               BDRV_O_CACHE_WB);
1814     reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
1815
1816     bdrv_refresh_limits(reopen_state->bs, NULL);
1817 }
1818
1819 /*
1820  * Abort the reopen, and delete and free the staged changes in
1821  * reopen_state
1822  */
1823 void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1824 {
1825     BlockDriver *drv;
1826
1827     assert(reopen_state != NULL);
1828     drv = reopen_state->bs->drv;
1829     assert(drv != NULL);
1830
1831     if (drv->bdrv_reopen_abort) {
1832         drv->bdrv_reopen_abort(reopen_state);
1833     }
1834 }
1835
1836
1837 void bdrv_close(BlockDriverState *bs)
1838 {
1839     BdrvAioNotifier *ban, *ban_next;
1840
1841     if (bs->job) {
1842         block_job_cancel_sync(bs->job);
1843     }
1844     bdrv_drain_all(); /* complete I/O */
1845     bdrv_flush(bs);
1846     bdrv_drain_all(); /* in case flush left pending I/O */
1847     notifier_list_notify(&bs->close_notifiers, bs);
1848
1849     if (bs->drv) {
1850         if (bs->backing_hd) {
1851             BlockDriverState *backing_hd = bs->backing_hd;
1852             bdrv_set_backing_hd(bs, NULL);
1853             bdrv_unref(backing_hd);
1854         }
1855         bs->drv->bdrv_close(bs);
1856         g_free(bs->opaque);
1857         bs->opaque = NULL;
1858         bs->drv = NULL;
1859         bs->copy_on_read = 0;
1860         bs->backing_file[0] = '\0';
1861         bs->backing_format[0] = '\0';
1862         bs->total_sectors = 0;
1863         bs->encrypted = 0;
1864         bs->valid_key = 0;
1865         bs->sg = 0;
1866         bs->growable = 0;
1867         bs->zero_beyond_eof = false;
1868         QDECREF(bs->options);
1869         bs->options = NULL;
1870         QDECREF(bs->full_open_options);
1871         bs->full_open_options = NULL;
1872
1873         if (bs->file != NULL) {
1874             bdrv_unref(bs->file);
1875             bs->file = NULL;
1876         }
1877     }
1878
1879     bdrv_dev_change_media_cb(bs, false);
1880
1881     /*throttling disk I/O limits*/
1882     if (bs->io_limits_enabled) {
1883         bdrv_io_limits_disable(bs);
1884     }
1885
1886     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1887         g_free(ban);
1888     }
1889     QLIST_INIT(&bs->aio_notifiers);
1890 }
1891
1892 void bdrv_close_all(void)
1893 {
1894     BlockDriverState *bs;
1895
1896     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
1897         AioContext *aio_context = bdrv_get_aio_context(bs);
1898
1899         aio_context_acquire(aio_context);
1900         bdrv_close(bs);
1901         aio_context_release(aio_context);
1902     }
1903 }
1904
1905 /* Check if any requests are in-flight (including throttled requests) */
1906 static bool bdrv_requests_pending(BlockDriverState *bs)
1907 {
1908     if (!QLIST_EMPTY(&bs->tracked_requests)) {
1909         return true;
1910     }
1911     if (!qemu_co_queue_empty(&bs->throttled_reqs[0])) {
1912         return true;
1913     }
1914     if (!qemu_co_queue_empty(&bs->throttled_reqs[1])) {
1915         return true;
1916     }
1917     if (bs->file && bdrv_requests_pending(bs->file)) {
1918         return true;
1919     }
1920     if (bs->backing_hd && bdrv_requests_pending(bs->backing_hd)) {
1921         return true;
1922     }
1923     return false;
1924 }
1925
1926 /*
1927  * Wait for pending requests to complete across all BlockDriverStates
1928  *
1929  * This function does not flush data to disk, use bdrv_flush_all() for that
1930  * after calling this function.
1931  *
1932  * Note that completion of an asynchronous I/O operation can trigger any
1933  * number of other I/O operations on other devices---for example a coroutine
1934  * can be arbitrarily complex and a constant flow of I/O can come until the
1935  * coroutine is complete.  Because of this, it is not possible to have a
1936  * function to drain a single device's I/O queue.
1937  */
1938 void bdrv_drain_all(void)
1939 {
1940     /* Always run first iteration so any pending completion BHs run */
1941     bool busy = true;
1942     BlockDriverState *bs;
1943
1944     while (busy) {
1945         busy = false;
1946
1947         QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
1948             AioContext *aio_context = bdrv_get_aio_context(bs);
1949             bool bs_busy;
1950
1951             aio_context_acquire(aio_context);
1952             bdrv_flush_io_queue(bs);
1953             bdrv_start_throttled_reqs(bs);
1954             bs_busy = bdrv_requests_pending(bs);
1955             bs_busy |= aio_poll(aio_context, bs_busy);
1956             aio_context_release(aio_context);
1957
1958             busy |= bs_busy;
1959         }
1960     }
1961 }
1962
1963 /* make a BlockDriverState anonymous by removing from bdrv_state and
1964  * graph_bdrv_state list.
1965    Also, NULL terminate the device_name to prevent double remove */
1966 void bdrv_make_anon(BlockDriverState *bs)
1967 {
1968     if (bs->device_name[0] != '\0') {
1969         QTAILQ_REMOVE(&bdrv_states, bs, device_list);
1970     }
1971     bs->device_name[0] = '\0';
1972     if (bs->node_name[0] != '\0') {
1973         QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
1974     }
1975     bs->node_name[0] = '\0';
1976 }
1977
1978 static void bdrv_rebind(BlockDriverState *bs)
1979 {
1980     if (bs->drv && bs->drv->bdrv_rebind) {
1981         bs->drv->bdrv_rebind(bs);
1982     }
1983 }
1984
1985 static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
1986                                      BlockDriverState *bs_src)
1987 {
1988     /* move some fields that need to stay attached to the device */
1989
1990     /* dev info */
1991     bs_dest->dev_ops            = bs_src->dev_ops;
1992     bs_dest->dev_opaque         = bs_src->dev_opaque;
1993     bs_dest->dev                = bs_src->dev;
1994     bs_dest->guest_block_size   = bs_src->guest_block_size;
1995     bs_dest->copy_on_read       = bs_src->copy_on_read;
1996
1997     bs_dest->enable_write_cache = bs_src->enable_write_cache;
1998
1999     /* i/o throttled req */
2000     memcpy(&bs_dest->throttle_state,
2001            &bs_src->throttle_state,
2002            sizeof(ThrottleState));
2003     bs_dest->throttled_reqs[0]  = bs_src->throttled_reqs[0];
2004     bs_dest->throttled_reqs[1]  = bs_src->throttled_reqs[1];
2005     bs_dest->io_limits_enabled  = bs_src->io_limits_enabled;
2006
2007     /* r/w error */
2008     bs_dest->on_read_error      = bs_src->on_read_error;
2009     bs_dest->on_write_error     = bs_src->on_write_error;
2010
2011     /* i/o status */
2012     bs_dest->iostatus_enabled   = bs_src->iostatus_enabled;
2013     bs_dest->iostatus           = bs_src->iostatus;
2014
2015     /* dirty bitmap */
2016     bs_dest->dirty_bitmaps      = bs_src->dirty_bitmaps;
2017
2018     /* reference count */
2019     bs_dest->refcnt             = bs_src->refcnt;
2020
2021     /* job */
2022     bs_dest->job                = bs_src->job;
2023
2024     /* keep the same entry in bdrv_states */
2025     pstrcpy(bs_dest->device_name, sizeof(bs_dest->device_name),
2026             bs_src->device_name);
2027     bs_dest->device_list = bs_src->device_list;
2028     memcpy(bs_dest->op_blockers, bs_src->op_blockers,
2029            sizeof(bs_dest->op_blockers));
2030 }
2031
2032 /*
2033  * Swap bs contents for two image chains while they are live,
2034  * while keeping required fields on the BlockDriverState that is
2035  * actually attached to a device.
2036  *
2037  * This will modify the BlockDriverState fields, and swap contents
2038  * between bs_new and bs_old. Both bs_new and bs_old are modified.
2039  *
2040  * bs_new is required to be anonymous.
2041  *
2042  * This function does not create any image files.
2043  */
2044 void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
2045 {
2046     BlockDriverState tmp;
2047
2048     /* The code needs to swap the node_name but simply swapping node_list won't
2049      * work so first remove the nodes from the graph list, do the swap then
2050      * insert them back if needed.
2051      */
2052     if (bs_new->node_name[0] != '\0') {
2053         QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2054     }
2055     if (bs_old->node_name[0] != '\0') {
2056         QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2057     }
2058
2059     /* bs_new must be anonymous and shouldn't have anything fancy enabled */
2060     assert(bs_new->device_name[0] == '\0');
2061     assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
2062     assert(bs_new->job == NULL);
2063     assert(bs_new->dev == NULL);
2064     assert(bs_new->io_limits_enabled == false);
2065     assert(!throttle_have_timer(&bs_new->throttle_state));
2066
2067     tmp = *bs_new;
2068     *bs_new = *bs_old;
2069     *bs_old = tmp;
2070
2071     /* there are some fields that should not be swapped, move them back */
2072     bdrv_move_feature_fields(&tmp, bs_old);
2073     bdrv_move_feature_fields(bs_old, bs_new);
2074     bdrv_move_feature_fields(bs_new, &tmp);
2075
2076     /* bs_new shouldn't be in bdrv_states even after the swap!  */
2077     assert(bs_new->device_name[0] == '\0');
2078
2079     /* Check a few fields that should remain attached to the device */
2080     assert(bs_new->dev == NULL);
2081     assert(bs_new->job == NULL);
2082     assert(bs_new->io_limits_enabled == false);
2083     assert(!throttle_have_timer(&bs_new->throttle_state));
2084
2085     /* insert the nodes back into the graph node list if needed */
2086     if (bs_new->node_name[0] != '\0') {
2087         QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2088     }
2089     if (bs_old->node_name[0] != '\0') {
2090         QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2091     }
2092
2093     bdrv_rebind(bs_new);
2094     bdrv_rebind(bs_old);
2095 }
2096
2097 /*
2098  * Add new bs contents at the top of an image chain while the chain is
2099  * live, while keeping required fields on the top layer.
2100  *
2101  * This will modify the BlockDriverState fields, and swap contents
2102  * between bs_new and bs_top. Both bs_new and bs_top are modified.
2103  *
2104  * bs_new is required to be anonymous.
2105  *
2106  * This function does not create any image files.
2107  */
2108 void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2109 {
2110     bdrv_swap(bs_new, bs_top);
2111
2112     /* The contents of 'tmp' will become bs_top, as we are
2113      * swapping bs_new and bs_top contents. */
2114     bdrv_set_backing_hd(bs_top, bs_new);
2115 }
2116
2117 static void bdrv_delete(BlockDriverState *bs)
2118 {
2119     assert(!bs->dev);
2120     assert(!bs->job);
2121     assert(bdrv_op_blocker_is_empty(bs));
2122     assert(!bs->refcnt);
2123     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2124
2125     bdrv_close(bs);
2126
2127     /* remove from list, if necessary */
2128     bdrv_make_anon(bs);
2129
2130     drive_info_del(drive_get_by_blockdev(bs));
2131     g_free(bs);
2132 }
2133
2134 int bdrv_attach_dev(BlockDriverState *bs, void *dev)
2135 /* TODO change to DeviceState *dev when all users are qdevified */
2136 {
2137     if (bs->dev) {
2138         return -EBUSY;
2139     }
2140     bs->dev = dev;
2141     bdrv_iostatus_reset(bs);
2142
2143     /* We're expecting I/O from the device so bump up coroutine pool size */
2144     qemu_coroutine_adjust_pool_size(COROUTINE_POOL_RESERVATION);
2145     return 0;
2146 }
2147
2148 /* TODO qdevified devices don't use this, remove when devices are qdevified */
2149 void bdrv_attach_dev_nofail(BlockDriverState *bs, void *dev)
2150 {
2151     if (bdrv_attach_dev(bs, dev) < 0) {
2152         abort();
2153     }
2154 }
2155
2156 void bdrv_detach_dev(BlockDriverState *bs, void *dev)
2157 /* TODO change to DeviceState *dev when all users are qdevified */
2158 {
2159     assert(bs->dev == dev);
2160     bs->dev = NULL;
2161     bs->dev_ops = NULL;
2162     bs->dev_opaque = NULL;
2163     bs->guest_block_size = 512;
2164     qemu_coroutine_adjust_pool_size(-COROUTINE_POOL_RESERVATION);
2165 }
2166
2167 /* TODO change to return DeviceState * when all users are qdevified */
2168 void *bdrv_get_attached_dev(BlockDriverState *bs)
2169 {
2170     return bs->dev;
2171 }
2172
2173 void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops,
2174                       void *opaque)
2175 {
2176     bs->dev_ops = ops;
2177     bs->dev_opaque = opaque;
2178 }
2179
2180 static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load)
2181 {
2182     if (bs->dev_ops && bs->dev_ops->change_media_cb) {
2183         bool tray_was_closed = !bdrv_dev_is_tray_open(bs);
2184         bs->dev_ops->change_media_cb(bs->dev_opaque, load);
2185         if (tray_was_closed) {
2186             /* tray open */
2187             qapi_event_send_device_tray_moved(bdrv_get_device_name(bs),
2188                                               true, &error_abort);
2189         }
2190         if (load) {
2191             /* tray close */
2192             qapi_event_send_device_tray_moved(bdrv_get_device_name(bs),
2193                                               false, &error_abort);
2194         }
2195     }
2196 }
2197
2198 bool bdrv_dev_has_removable_media(BlockDriverState *bs)
2199 {
2200     return !bs->dev || (bs->dev_ops && bs->dev_ops->change_media_cb);
2201 }
2202
2203 void bdrv_dev_eject_request(BlockDriverState *bs, bool force)
2204 {
2205     if (bs->dev_ops && bs->dev_ops->eject_request_cb) {
2206         bs->dev_ops->eject_request_cb(bs->dev_opaque, force);
2207     }
2208 }
2209
2210 bool bdrv_dev_is_tray_open(BlockDriverState *bs)
2211 {
2212     if (bs->dev_ops && bs->dev_ops->is_tray_open) {
2213         return bs->dev_ops->is_tray_open(bs->dev_opaque);
2214     }
2215     return false;
2216 }
2217
2218 static void bdrv_dev_resize_cb(BlockDriverState *bs)
2219 {
2220     if (bs->dev_ops && bs->dev_ops->resize_cb) {
2221         bs->dev_ops->resize_cb(bs->dev_opaque);
2222     }
2223 }
2224
2225 bool bdrv_dev_is_medium_locked(BlockDriverState *bs)
2226 {
2227     if (bs->dev_ops && bs->dev_ops->is_medium_locked) {
2228         return bs->dev_ops->is_medium_locked(bs->dev_opaque);
2229     }
2230     return false;
2231 }
2232
2233 /*
2234  * Run consistency checks on an image
2235  *
2236  * Returns 0 if the check could be completed (it doesn't mean that the image is
2237  * free of errors) or -errno when an internal error occurred. The results of the
2238  * check are stored in res.
2239  */
2240 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
2241 {
2242     if (bs->drv == NULL) {
2243         return -ENOMEDIUM;
2244     }
2245     if (bs->drv->bdrv_check == NULL) {
2246         return -ENOTSUP;
2247     }
2248
2249     memset(res, 0, sizeof(*res));
2250     return bs->drv->bdrv_check(bs, res, fix);
2251 }
2252
2253 #define COMMIT_BUF_SECTORS 2048
2254
2255 /* commit COW file into the raw image */
2256 int bdrv_commit(BlockDriverState *bs)
2257 {
2258     BlockDriver *drv = bs->drv;
2259     int64_t sector, total_sectors, length, backing_length;
2260     int n, ro, open_flags;
2261     int ret = 0;
2262     uint8_t *buf = NULL;
2263     char filename[PATH_MAX];
2264
2265     if (!drv)
2266         return -ENOMEDIUM;
2267
2268     if (!bs->backing_hd) {
2269         return -ENOTSUP;
2270     }
2271
2272     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT, NULL) ||
2273         bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT, NULL)) {
2274         return -EBUSY;
2275     }
2276
2277     ro = bs->backing_hd->read_only;
2278     /* Use pstrcpy (not strncpy): filename must be NUL-terminated. */
2279     pstrcpy(filename, sizeof(filename), bs->backing_hd->filename);
2280     open_flags =  bs->backing_hd->open_flags;
2281
2282     if (ro) {
2283         if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2284             return -EACCES;
2285         }
2286     }
2287
2288     length = bdrv_getlength(bs);
2289     if (length < 0) {
2290         ret = length;
2291         goto ro_cleanup;
2292     }
2293
2294     backing_length = bdrv_getlength(bs->backing_hd);
2295     if (backing_length < 0) {
2296         ret = backing_length;
2297         goto ro_cleanup;
2298     }
2299
2300     /* If our top snapshot is larger than the backing file image,
2301      * grow the backing file image if possible.  If not possible,
2302      * we must return an error */
2303     if (length > backing_length) {
2304         ret = bdrv_truncate(bs->backing_hd, length);
2305         if (ret < 0) {
2306             goto ro_cleanup;
2307         }
2308     }
2309
2310     total_sectors = length >> BDRV_SECTOR_BITS;
2311
2312     /* qemu_try_blockalign() for bs will choose an alignment that works for
2313      * bs->backing_hd as well, so no need to compare the alignment manually. */
2314     buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2315     if (buf == NULL) {
2316         ret = -ENOMEM;
2317         goto ro_cleanup;
2318     }
2319
2320     for (sector = 0; sector < total_sectors; sector += n) {
2321         ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2322         if (ret < 0) {
2323             goto ro_cleanup;
2324         }
2325         if (ret) {
2326             ret = bdrv_read(bs, sector, buf, n);
2327             if (ret < 0) {
2328                 goto ro_cleanup;
2329             }
2330
2331             ret = bdrv_write(bs->backing_hd, sector, buf, n);
2332             if (ret < 0) {
2333                 goto ro_cleanup;
2334             }
2335         }
2336     }
2337
2338     if (drv->bdrv_make_empty) {
2339         ret = drv->bdrv_make_empty(bs);
2340         if (ret < 0) {
2341             goto ro_cleanup;
2342         }
2343         bdrv_flush(bs);
2344     }
2345
2346     /*
2347      * Make sure all data we wrote to the backing device is actually
2348      * stable on disk.
2349      */
2350     if (bs->backing_hd) {
2351         bdrv_flush(bs->backing_hd);
2352     }
2353
2354     ret = 0;
2355 ro_cleanup:
2356     qemu_vfree(buf);
2357
2358     if (ro) {
2359         /* ignoring error return here */
2360         bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
2361     }
2362
2363     return ret;
2364 }
2365
2366 int bdrv_commit_all(void)
2367 {
2368     BlockDriverState *bs;
2369
2370     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
2371         AioContext *aio_context = bdrv_get_aio_context(bs);
2372
2373         aio_context_acquire(aio_context);
2374         if (bs->drv && bs->backing_hd) {
2375             int ret = bdrv_commit(bs);
2376             if (ret < 0) {
2377                 aio_context_release(aio_context);
2378                 return ret;
2379             }
2380         }
2381         aio_context_release(aio_context);
2382     }
2383     return 0;
2384 }
2385
2386 /**
2387  * Remove an active request from the tracked requests list
2388  *
2389  * This function should be called when a tracked request is completing.
2390  */
2391 static void tracked_request_end(BdrvTrackedRequest *req)
2392 {
2393     if (req->serialising) {
2394         req->bs->serialising_in_flight--;
2395     }
2396
2397     QLIST_REMOVE(req, list);
2398     qemu_co_queue_restart_all(&req->wait_queue);
2399 }
2400
2401 /**
2402  * Add an active request to the tracked requests list
2403  */
2404 static void tracked_request_begin(BdrvTrackedRequest *req,
2405                                   BlockDriverState *bs,
2406                                   int64_t offset,
2407                                   unsigned int bytes, bool is_write)
2408 {
2409     *req = (BdrvTrackedRequest){
2410         .bs = bs,
2411         .offset         = offset,
2412         .bytes          = bytes,
2413         .is_write       = is_write,
2414         .co             = qemu_coroutine_self(),
2415         .serialising    = false,
2416         .overlap_offset = offset,
2417         .overlap_bytes  = bytes,
2418     };
2419
2420     qemu_co_queue_init(&req->wait_queue);
2421
2422     QLIST_INSERT_HEAD(&bs->tracked_requests, req, list);
2423 }
2424
2425 static void mark_request_serialising(BdrvTrackedRequest *req, uint64_t align)
2426 {
2427     int64_t overlap_offset = req->offset & ~(align - 1);
2428     unsigned int overlap_bytes = ROUND_UP(req->offset + req->bytes, align)
2429                                - overlap_offset;
2430
2431     if (!req->serialising) {
2432         req->bs->serialising_in_flight++;
2433         req->serialising = true;
2434     }
2435
2436     req->overlap_offset = MIN(req->overlap_offset, overlap_offset);
2437     req->overlap_bytes = MAX(req->overlap_bytes, overlap_bytes);
2438 }
2439
2440 /**
2441  * Round a region to cluster boundaries
2442  */
2443 void bdrv_round_to_clusters(BlockDriverState *bs,
2444                             int64_t sector_num, int nb_sectors,
2445                             int64_t *cluster_sector_num,
2446                             int *cluster_nb_sectors)
2447 {
2448     BlockDriverInfo bdi;
2449
2450     if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) {
2451         *cluster_sector_num = sector_num;
2452         *cluster_nb_sectors = nb_sectors;
2453     } else {
2454         int64_t c = bdi.cluster_size / BDRV_SECTOR_SIZE;
2455         *cluster_sector_num = QEMU_ALIGN_DOWN(sector_num, c);
2456         *cluster_nb_sectors = QEMU_ALIGN_UP(sector_num - *cluster_sector_num +
2457                                             nb_sectors, c);
2458     }
2459 }
2460
2461 static int bdrv_get_cluster_size(BlockDriverState *bs)
2462 {
2463     BlockDriverInfo bdi;
2464     int ret;
2465
2466     ret = bdrv_get_info(bs, &bdi);
2467     if (ret < 0 || bdi.cluster_size == 0) {
2468         return bs->request_alignment;
2469     } else {
2470         return bdi.cluster_size;
2471     }
2472 }
2473
2474 static bool tracked_request_overlaps(BdrvTrackedRequest *req,
2475                                      int64_t offset, unsigned int bytes)
2476 {
2477     /*        aaaa   bbbb */
2478     if (offset >= req->overlap_offset + req->overlap_bytes) {
2479         return false;
2480     }
2481     /* bbbb   aaaa        */
2482     if (req->overlap_offset >= offset + bytes) {
2483         return false;
2484     }
2485     return true;
2486 }
2487
2488 static bool coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self)
2489 {
2490     BlockDriverState *bs = self->bs;
2491     BdrvTrackedRequest *req;
2492     bool retry;
2493     bool waited = false;
2494
2495     if (!bs->serialising_in_flight) {
2496         return false;
2497     }
2498
2499     do {
2500         retry = false;
2501         QLIST_FOREACH(req, &bs->tracked_requests, list) {
2502             if (req == self || (!req->serialising && !self->serialising)) {
2503                 continue;
2504             }
2505             if (tracked_request_overlaps(req, self->overlap_offset,
2506                                          self->overlap_bytes))
2507             {
2508                 /* Hitting this means there was a reentrant request, for
2509                  * example, a block driver issuing nested requests.  This must
2510                  * never happen since it means deadlock.
2511                  */
2512                 assert(qemu_coroutine_self() != req->co);
2513
2514                 /* If the request is already (indirectly) waiting for us, or
2515                  * will wait for us as soon as it wakes up, then just go on
2516                  * (instead of producing a deadlock in the former case). */
2517                 if (!req->waiting_for) {
2518                     self->waiting_for = req;
2519                     qemu_co_queue_wait(&req->wait_queue);
2520                     self->waiting_for = NULL;
2521                     retry = true;
2522                     waited = true;
2523                     break;
2524                 }
2525             }
2526         }
2527     } while (retry);
2528
2529     return waited;
2530 }
2531
2532 /*
2533  * Return values:
2534  * 0        - success
2535  * -EINVAL  - backing format specified, but no file
2536  * -ENOSPC  - can't update the backing file because no space is left in the
2537  *            image file header
2538  * -ENOTSUP - format driver doesn't support changing the backing file
2539  */
2540 int bdrv_change_backing_file(BlockDriverState *bs,
2541     const char *backing_file, const char *backing_fmt)
2542 {
2543     BlockDriver *drv = bs->drv;
2544     int ret;
2545
2546     /* Backing file format doesn't make sense without a backing file */
2547     if (backing_fmt && !backing_file) {
2548         return -EINVAL;
2549     }
2550
2551     if (drv->bdrv_change_backing_file != NULL) {
2552         ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2553     } else {
2554         ret = -ENOTSUP;
2555     }
2556
2557     if (ret == 0) {
2558         pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2559         pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2560     }
2561     return ret;
2562 }
2563
2564 /*
2565  * Finds the image layer in the chain that has 'bs' as its backing file.
2566  *
2567  * active is the current topmost image.
2568  *
2569  * Returns NULL if bs is not found in active's image chain,
2570  * or if active == bs.
2571  *
2572  * Returns the bottommost base image if bs == NULL.
2573  */
2574 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2575                                     BlockDriverState *bs)
2576 {
2577     while (active && bs != active->backing_hd) {
2578         active = active->backing_hd;
2579     }
2580
2581     return active;
2582 }
2583
2584 /* Given a BDS, searches for the base layer. */
2585 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2586 {
2587     return bdrv_find_overlay(bs, NULL);
2588 }
2589
2590 typedef struct BlkIntermediateStates {
2591     BlockDriverState *bs;
2592     QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2593 } BlkIntermediateStates;
2594
2595
2596 /*
2597  * Drops images above 'base' up to and including 'top', and sets the image
2598  * above 'top' to have base as its backing file.
2599  *
2600  * Requires that the overlay to 'top' is opened r/w, so that the backing file
2601  * information in 'bs' can be properly updated.
2602  *
2603  * E.g., this will convert the following chain:
2604  * bottom <- base <- intermediate <- top <- active
2605  *
2606  * to
2607  *
2608  * bottom <- base <- active
2609  *
2610  * It is allowed for bottom==base, in which case it converts:
2611  *
2612  * base <- intermediate <- top <- active
2613  *
2614  * to
2615  *
2616  * base <- active
2617  *
2618  * If backing_file_str is non-NULL, it will be used when modifying top's
2619  * overlay image metadata.
2620  *
2621  * Error conditions:
2622  *  if active == top, that is considered an error
2623  *
2624  */
2625 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2626                            BlockDriverState *base, const char *backing_file_str)
2627 {
2628     BlockDriverState *intermediate;
2629     BlockDriverState *base_bs = NULL;
2630     BlockDriverState *new_top_bs = NULL;
2631     BlkIntermediateStates *intermediate_state, *next;
2632     int ret = -EIO;
2633
2634     QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2635     QSIMPLEQ_INIT(&states_to_delete);
2636
2637     if (!top->drv || !base->drv) {
2638         goto exit;
2639     }
2640
2641     new_top_bs = bdrv_find_overlay(active, top);
2642
2643     if (new_top_bs == NULL) {
2644         /* we could not find the image above 'top', this is an error */
2645         goto exit;
2646     }
2647
2648     /* special case of new_top_bs->backing_hd already pointing to base - nothing
2649      * to do, no intermediate images */
2650     if (new_top_bs->backing_hd == base) {
2651         ret = 0;
2652         goto exit;
2653     }
2654
2655     intermediate = top;
2656
2657     /* now we will go down through the list, and add each BDS we find
2658      * into our deletion queue, until we hit the 'base'
2659      */
2660     while (intermediate) {
2661         intermediate_state = g_new0(BlkIntermediateStates, 1);
2662         intermediate_state->bs = intermediate;
2663         QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2664
2665         if (intermediate->backing_hd == base) {
2666             base_bs = intermediate->backing_hd;
2667             break;
2668         }
2669         intermediate = intermediate->backing_hd;
2670     }
2671     if (base_bs == NULL) {
2672         /* something went wrong, we did not end at the base. safely
2673          * unravel everything, and exit with error */
2674         goto exit;
2675     }
2676
2677     /* success - we can delete the intermediate states, and link top->base */
2678     backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2679     ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
2680                                    base_bs->drv ? base_bs->drv->format_name : "");
2681     if (ret) {
2682         goto exit;
2683     }
2684     bdrv_set_backing_hd(new_top_bs, base_bs);
2685
2686     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2687         /* so that bdrv_close() does not recursively close the chain */
2688         bdrv_set_backing_hd(intermediate_state->bs, NULL);
2689         bdrv_unref(intermediate_state->bs);
2690     }
2691     ret = 0;
2692
2693 exit:
2694     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2695         g_free(intermediate_state);
2696     }
2697     return ret;
2698 }
2699
2700
2701 static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
2702                                    size_t size)
2703 {
2704     int64_t len;
2705
2706     if (size > INT_MAX) {
2707         return -EIO;
2708     }
2709
2710     if (!bdrv_is_inserted(bs))
2711         return -ENOMEDIUM;
2712
2713     if (bs->growable)
2714         return 0;
2715
2716     len = bdrv_getlength(bs);
2717
2718     if (offset < 0)
2719         return -EIO;
2720
2721     if ((offset > len) || (len - offset < size))
2722         return -EIO;
2723
2724     return 0;
2725 }
2726
2727 static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num,
2728                               int nb_sectors)
2729 {
2730     if (nb_sectors < 0 || nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) {
2731         return -EIO;
2732     }
2733
2734     return bdrv_check_byte_request(bs, sector_num * BDRV_SECTOR_SIZE,
2735                                    nb_sectors * BDRV_SECTOR_SIZE);
2736 }
2737
2738 typedef struct RwCo {
2739     BlockDriverState *bs;
2740     int64_t offset;
2741     QEMUIOVector *qiov;
2742     bool is_write;
2743     int ret;
2744     BdrvRequestFlags flags;
2745 } RwCo;
2746
2747 static void coroutine_fn bdrv_rw_co_entry(void *opaque)
2748 {
2749     RwCo *rwco = opaque;
2750
2751     if (!rwco->is_write) {
2752         rwco->ret = bdrv_co_do_preadv(rwco->bs, rwco->offset,
2753                                       rwco->qiov->size, rwco->qiov,
2754                                       rwco->flags);
2755     } else {
2756         rwco->ret = bdrv_co_do_pwritev(rwco->bs, rwco->offset,
2757                                        rwco->qiov->size, rwco->qiov,
2758                                        rwco->flags);
2759     }
2760 }
2761
2762 /*
2763  * Process a vectored synchronous request using coroutines
2764  */
2765 static int bdrv_prwv_co(BlockDriverState *bs, int64_t offset,
2766                         QEMUIOVector *qiov, bool is_write,
2767                         BdrvRequestFlags flags)
2768 {
2769     Coroutine *co;
2770     RwCo rwco = {
2771         .bs = bs,
2772         .offset = offset,
2773         .qiov = qiov,
2774         .is_write = is_write,
2775         .ret = NOT_DONE,
2776         .flags = flags,
2777     };
2778
2779     /**
2780      * In sync call context, when the vcpu is blocked, this throttling timer
2781      * will not fire; so the I/O throttling function has to be disabled here
2782      * if it has been enabled.
2783      */
2784     if (bs->io_limits_enabled) {
2785         fprintf(stderr, "Disabling I/O throttling on '%s' due "
2786                         "to synchronous I/O.\n", bdrv_get_device_name(bs));
2787         bdrv_io_limits_disable(bs);
2788     }
2789
2790     if (qemu_in_coroutine()) {
2791         /* Fast-path if already in coroutine context */
2792         bdrv_rw_co_entry(&rwco);
2793     } else {
2794         AioContext *aio_context = bdrv_get_aio_context(bs);
2795
2796         co = qemu_coroutine_create(bdrv_rw_co_entry);
2797         qemu_coroutine_enter(co, &rwco);
2798         while (rwco.ret == NOT_DONE) {
2799             aio_poll(aio_context, true);
2800         }
2801     }
2802     return rwco.ret;
2803 }
2804
2805 /*
2806  * Process a synchronous request using coroutines
2807  */
2808 static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf,
2809                       int nb_sectors, bool is_write, BdrvRequestFlags flags)
2810 {
2811     QEMUIOVector qiov;
2812     struct iovec iov = {
2813         .iov_base = (void *)buf,
2814         .iov_len = nb_sectors * BDRV_SECTOR_SIZE,
2815     };
2816
2817     if (nb_sectors < 0 || nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) {
2818         return -EINVAL;
2819     }
2820
2821     qemu_iovec_init_external(&qiov, &iov, 1);
2822     return bdrv_prwv_co(bs, sector_num << BDRV_SECTOR_BITS,
2823                         &qiov, is_write, flags);
2824 }
2825
2826 /* return < 0 if error. See bdrv_write() for the return codes */
2827 int bdrv_read(BlockDriverState *bs, int64_t sector_num,
2828               uint8_t *buf, int nb_sectors)
2829 {
2830     return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false, 0);
2831 }
2832
2833 /* Just like bdrv_read(), but with I/O throttling temporarily disabled */
2834 int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num,
2835                           uint8_t *buf, int nb_sectors)
2836 {
2837     bool enabled;
2838     int ret;
2839
2840     enabled = bs->io_limits_enabled;
2841     bs->io_limits_enabled = false;
2842     ret = bdrv_read(bs, sector_num, buf, nb_sectors);
2843     bs->io_limits_enabled = enabled;
2844     return ret;
2845 }
2846
2847 /* Return < 0 if error. Important errors are:
2848   -EIO         generic I/O error (may happen for all errors)
2849   -ENOMEDIUM   No media inserted.
2850   -EINVAL      Invalid sector number or nb_sectors
2851   -EACCES      Trying to write a read-only device
2852 */
2853 int bdrv_write(BlockDriverState *bs, int64_t sector_num,
2854                const uint8_t *buf, int nb_sectors)
2855 {
2856     return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true, 0);
2857 }
2858
2859 int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num,
2860                       int nb_sectors, BdrvRequestFlags flags)
2861 {
2862     return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true,
2863                       BDRV_REQ_ZERO_WRITE | flags);
2864 }
2865
2866 /*
2867  * Completely zero out a block device with the help of bdrv_write_zeroes.
2868  * The operation is sped up by checking the block status and only writing
2869  * zeroes to the device if they currently do not return zeroes. Optional
2870  * flags are passed through to bdrv_write_zeroes (e.g. BDRV_REQ_MAY_UNMAP).
2871  *
2872  * Returns < 0 on error, 0 on success. For error codes see bdrv_write().
2873  */
2874 int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags)
2875 {
2876     int64_t target_sectors, ret, nb_sectors, sector_num = 0;
2877     int n;
2878
2879     target_sectors = bdrv_nb_sectors(bs);
2880     if (target_sectors < 0) {
2881         return target_sectors;
2882     }
2883
2884     for (;;) {
2885         nb_sectors = target_sectors - sector_num;
2886         if (nb_sectors <= 0) {
2887             return 0;
2888         }
2889         if (nb_sectors > INT_MAX) {
2890             nb_sectors = INT_MAX;
2891         }
2892         ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &n);
2893         if (ret < 0) {
2894             error_report("error getting block status at sector %" PRId64 ": %s",
2895                          sector_num, strerror(-ret));
2896             return ret;
2897         }
2898         if (ret & BDRV_BLOCK_ZERO) {
2899             sector_num += n;
2900             continue;
2901         }
2902         ret = bdrv_write_zeroes(bs, sector_num, n, flags);
2903         if (ret < 0) {
2904             error_report("error writing zeroes at sector %" PRId64 ": %s",
2905                          sector_num, strerror(-ret));
2906             return ret;
2907         }
2908         sector_num += n;
2909     }
2910 }
2911
2912 int bdrv_pread(BlockDriverState *bs, int64_t offset, void *buf, int bytes)
2913 {
2914     QEMUIOVector qiov;
2915     struct iovec iov = {
2916         .iov_base = (void *)buf,
2917         .iov_len = bytes,
2918     };
2919     int ret;
2920
2921     if (bytes < 0) {
2922         return -EINVAL;
2923     }
2924
2925     qemu_iovec_init_external(&qiov, &iov, 1);
2926     ret = bdrv_prwv_co(bs, offset, &qiov, false, 0);
2927     if (ret < 0) {
2928         return ret;
2929     }
2930
2931     return bytes;
2932 }
2933
2934 int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov)
2935 {
2936     int ret;
2937
2938     ret = bdrv_prwv_co(bs, offset, qiov, true, 0);
2939     if (ret < 0) {
2940         return ret;
2941     }
2942
2943     return qiov->size;
2944 }
2945
2946 int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
2947                 const void *buf, int bytes)
2948 {
2949     QEMUIOVector qiov;
2950     struct iovec iov = {
2951         .iov_base   = (void *) buf,
2952         .iov_len    = bytes,
2953     };
2954
2955     if (bytes < 0) {
2956         return -EINVAL;
2957     }
2958
2959     qemu_iovec_init_external(&qiov, &iov, 1);
2960     return bdrv_pwritev(bs, offset, &qiov);
2961 }
2962
2963 /*
2964  * Writes to the file and ensures that no writes are reordered across this
2965  * request (acts as a barrier)
2966  *
2967  * Returns 0 on success, -errno in error cases.
2968  */
2969 int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset,
2970     const void *buf, int count)
2971 {
2972     int ret;
2973
2974     ret = bdrv_pwrite(bs, offset, buf, count);
2975     if (ret < 0) {
2976         return ret;
2977     }
2978
2979     /* No flush needed for cache modes that already do it */
2980     if (bs->enable_write_cache) {
2981         bdrv_flush(bs);
2982     }
2983
2984     return 0;
2985 }
2986
2987 static int coroutine_fn bdrv_co_do_copy_on_readv(BlockDriverState *bs,
2988         int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
2989 {
2990     /* Perform I/O through a temporary buffer so that users who scribble over
2991      * their read buffer while the operation is in progress do not end up
2992      * modifying the image file.  This is critical for zero-copy guest I/O
2993      * where anything might happen inside guest memory.
2994      */
2995     void *bounce_buffer;
2996
2997     BlockDriver *drv = bs->drv;
2998     struct iovec iov;
2999     QEMUIOVector bounce_qiov;
3000     int64_t cluster_sector_num;
3001     int cluster_nb_sectors;
3002     size_t skip_bytes;
3003     int ret;
3004
3005     /* Cover entire cluster so no additional backing file I/O is required when
3006      * allocating cluster in the image file.
3007      */
3008     bdrv_round_to_clusters(bs, sector_num, nb_sectors,
3009                            &cluster_sector_num, &cluster_nb_sectors);
3010
3011     trace_bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors,
3012                                    cluster_sector_num, cluster_nb_sectors);
3013
3014     iov.iov_len = cluster_nb_sectors * BDRV_SECTOR_SIZE;
3015     iov.iov_base = bounce_buffer = qemu_try_blockalign(bs, iov.iov_len);
3016     if (bounce_buffer == NULL) {
3017         ret = -ENOMEM;
3018         goto err;
3019     }
3020
3021     qemu_iovec_init_external(&bounce_qiov, &iov, 1);
3022
3023     ret = drv->bdrv_co_readv(bs, cluster_sector_num, cluster_nb_sectors,
3024                              &bounce_qiov);
3025     if (ret < 0) {
3026         goto err;
3027     }
3028
3029     if (drv->bdrv_co_write_zeroes &&
3030         buffer_is_zero(bounce_buffer, iov.iov_len)) {
3031         ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num,
3032                                       cluster_nb_sectors, 0);
3033     } else {
3034         /* This does not change the data on the disk, it is not necessary
3035          * to flush even in cache=writethrough mode.
3036          */
3037         ret = drv->bdrv_co_writev(bs, cluster_sector_num, cluster_nb_sectors,
3038                                   &bounce_qiov);
3039     }
3040
3041     if (ret < 0) {
3042         /* It might be okay to ignore write errors for guest requests.  If this
3043          * is a deliberate copy-on-read then we don't want to ignore the error.
3044          * Simply report it in all cases.
3045          */
3046         goto err;
3047     }
3048
3049     skip_bytes = (sector_num - cluster_sector_num) * BDRV_SECTOR_SIZE;
3050     qemu_iovec_from_buf(qiov, 0, bounce_buffer + skip_bytes,
3051                         nb_sectors * BDRV_SECTOR_SIZE);
3052
3053 err:
3054     qemu_vfree(bounce_buffer);
3055     return ret;
3056 }
3057
3058 /*
3059  * Forwards an already correctly aligned request to the BlockDriver. This
3060  * handles copy on read and zeroing after EOF; any other features must be
3061  * implemented by the caller.
3062  */
3063 static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs,
3064     BdrvTrackedRequest *req, int64_t offset, unsigned int bytes,
3065     int64_t align, QEMUIOVector *qiov, int flags)
3066 {
3067     BlockDriver *drv = bs->drv;
3068     int ret;
3069
3070     int64_t sector_num = offset >> BDRV_SECTOR_BITS;
3071     unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS;
3072
3073     assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0);
3074     assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0);
3075     assert(!qiov || bytes == qiov->size);
3076
3077     /* Handle Copy on Read and associated serialisation */
3078     if (flags & BDRV_REQ_COPY_ON_READ) {
3079         /* If we touch the same cluster it counts as an overlap.  This
3080          * guarantees that allocating writes will be serialized and not race
3081          * with each other for the same cluster.  For example, in copy-on-read
3082          * it ensures that the CoR read and write operations are atomic and
3083          * guest writes cannot interleave between them. */
3084         mark_request_serialising(req, bdrv_get_cluster_size(bs));
3085     }
3086
3087     wait_serialising_requests(req);
3088
3089     if (flags & BDRV_REQ_COPY_ON_READ) {
3090         int pnum;
3091
3092         ret = bdrv_is_allocated(bs, sector_num, nb_sectors, &pnum);
3093         if (ret < 0) {
3094             goto out;
3095         }
3096
3097         if (!ret || pnum != nb_sectors) {
3098             ret = bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors, qiov);
3099             goto out;
3100         }
3101     }
3102
3103     /* Forward the request to the BlockDriver */
3104     if (!(bs->zero_beyond_eof && bs->growable)) {
3105         ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov);
3106     } else {
3107         /* Read zeros after EOF of growable BDSes */
3108         int64_t total_sectors, max_nb_sectors;
3109
3110         total_sectors = bdrv_nb_sectors(bs);
3111         if (total_sectors < 0) {
3112             ret = total_sectors;
3113             goto out;
3114         }
3115
3116         max_nb_sectors = ROUND_UP(MAX(0, total_sectors - sector_num),
3117                                   align >> BDRV_SECTOR_BITS);
3118         if (max_nb_sectors > 0) {
3119             QEMUIOVector local_qiov;
3120             size_t local_sectors;
3121
3122             max_nb_sectors = MIN(max_nb_sectors, SIZE_MAX / BDRV_SECTOR_BITS);
3123             local_sectors = MIN(max_nb_sectors, nb_sectors);
3124
3125             qemu_iovec_init(&local_qiov, qiov->niov);
3126             qemu_iovec_concat(&local_qiov, qiov, 0,
3127                               local_sectors * BDRV_SECTOR_SIZE);
3128
3129             ret = drv->bdrv_co_readv(bs, sector_num, local_sectors,
3130                                      &local_qiov);
3131
3132             qemu_iovec_destroy(&local_qiov);
3133         } else {
3134             ret = 0;
3135         }
3136
3137         /* Reading beyond end of file is supposed to produce zeroes */
3138         if (ret == 0 && total_sectors < sector_num + nb_sectors) {
3139             uint64_t offset = MAX(0, total_sectors - sector_num);
3140             uint64_t bytes = (sector_num + nb_sectors - offset) *
3141                               BDRV_SECTOR_SIZE;
3142             qemu_iovec_memset(qiov, offset * BDRV_SECTOR_SIZE, 0, bytes);
3143         }
3144     }
3145
3146 out:
3147     return ret;
3148 }
3149
3150 /*
3151  * Handle a read request in coroutine context
3152  */
3153 static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
3154     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
3155     BdrvRequestFlags flags)
3156 {
3157     BlockDriver *drv = bs->drv;
3158     BdrvTrackedRequest req;
3159
3160     /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
3161     uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
3162     uint8_t *head_buf = NULL;
3163     uint8_t *tail_buf = NULL;
3164     QEMUIOVector local_qiov;
3165     bool use_local_qiov = false;
3166     int ret;
3167
3168     if (!drv) {
3169         return -ENOMEDIUM;
3170     }
3171     if (bdrv_check_byte_request(bs, offset, bytes)) {
3172         return -EIO;
3173     }
3174
3175     if (bs->copy_on_read) {
3176         flags |= BDRV_REQ_COPY_ON_READ;
3177     }
3178
3179     /* throttling disk I/O */
3180     if (bs->io_limits_enabled) {
3181         bdrv_io_limits_intercept(bs, bytes, false);
3182     }
3183
3184     /* Align read if necessary by padding qiov */
3185     if (offset & (align - 1)) {
3186         head_buf = qemu_blockalign(bs, align);
3187         qemu_iovec_init(&local_qiov, qiov->niov + 2);
3188         qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1));
3189         qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3190         use_local_qiov = true;
3191
3192         bytes += offset & (align - 1);
3193         offset = offset & ~(align - 1);
3194     }
3195
3196     if ((offset + bytes) & (align - 1)) {
3197         if (!use_local_qiov) {
3198             qemu_iovec_init(&local_qiov, qiov->niov + 1);
3199             qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3200             use_local_qiov = true;
3201         }
3202         tail_buf = qemu_blockalign(bs, align);
3203         qemu_iovec_add(&local_qiov, tail_buf,
3204                        align - ((offset + bytes) & (align - 1)));
3205
3206         bytes = ROUND_UP(bytes, align);
3207     }
3208
3209     tracked_request_begin(&req, bs, offset, bytes, false);
3210     ret = bdrv_aligned_preadv(bs, &req, offset, bytes, align,
3211                               use_local_qiov ? &local_qiov : qiov,
3212                               flags);
3213     tracked_request_end(&req);
3214
3215     if (use_local_qiov) {
3216         qemu_iovec_destroy(&local_qiov);
3217         qemu_vfree(head_buf);
3218         qemu_vfree(tail_buf);
3219     }
3220
3221     return ret;
3222 }
3223
3224 static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs,
3225     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
3226     BdrvRequestFlags flags)
3227 {
3228     if (nb_sectors < 0 || nb_sectors > (UINT_MAX >> BDRV_SECTOR_BITS)) {
3229         return -EINVAL;
3230     }
3231
3232     return bdrv_co_do_preadv(bs, sector_num << BDRV_SECTOR_BITS,
3233                              nb_sectors << BDRV_SECTOR_BITS, qiov, flags);
3234 }
3235
3236 int coroutine_fn bdrv_co_readv(BlockDriverState *bs, int64_t sector_num,
3237     int nb_sectors, QEMUIOVector *qiov)
3238 {
3239     trace_bdrv_co_readv(bs, sector_num, nb_sectors);
3240
3241     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov, 0);
3242 }
3243
3244 int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs,
3245     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
3246 {
3247     trace_bdrv_co_copy_on_readv(bs, sector_num, nb_sectors);
3248
3249     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov,
3250                             BDRV_REQ_COPY_ON_READ);
3251 }
3252
3253 /* if no limit is specified in the BlockLimits use a default
3254  * of 32768 512-byte sectors (16 MiB) per request.
3255  */
3256 #define MAX_WRITE_ZEROES_DEFAULT 32768
3257
3258 static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs,
3259     int64_t sector_num, int nb_sectors, BdrvRequestFlags flags)
3260 {
3261     BlockDriver *drv = bs->drv;
3262     QEMUIOVector qiov;
3263     struct iovec iov = {0};
3264     int ret = 0;
3265
3266     int max_write_zeroes = bs->bl.max_write_zeroes ?
3267                            bs->bl.max_write_zeroes : MAX_WRITE_ZEROES_DEFAULT;
3268
3269     while (nb_sectors > 0 && !ret) {
3270         int num = nb_sectors;
3271
3272         /* Align request.  Block drivers can expect the "bulk" of the request
3273          * to be aligned.
3274          */
3275         if (bs->bl.write_zeroes_alignment
3276             && num > bs->bl.write_zeroes_alignment) {
3277             if (sector_num % bs->bl.write_zeroes_alignment != 0) {
3278                 /* Make a small request up to the first aligned sector.  */
3279                 num = bs->bl.write_zeroes_alignment;
3280                 num -= sector_num % bs->bl.write_zeroes_alignment;
3281             } else if ((sector_num + num) % bs->bl.write_zeroes_alignment != 0) {
3282                 /* Shorten the request to the last aligned sector.  num cannot
3283                  * underflow because num > bs->bl.write_zeroes_alignment.
3284                  */
3285                 num -= (sector_num + num) % bs->bl.write_zeroes_alignment;
3286             }
3287         }
3288
3289         /* limit request size */
3290         if (num > max_write_zeroes) {
3291             num = max_write_zeroes;
3292         }
3293
3294         ret = -ENOTSUP;
3295         /* First try the efficient write zeroes operation */
3296         if (drv->bdrv_co_write_zeroes) {
3297             ret = drv->bdrv_co_write_zeroes(bs, sector_num, num, flags);
3298         }
3299
3300         if (ret == -ENOTSUP) {
3301             /* Fall back to bounce buffer if write zeroes is unsupported */
3302             iov.iov_len = num * BDRV_SECTOR_SIZE;
3303             if (iov.iov_base == NULL) {
3304                 iov.iov_base = qemu_try_blockalign(bs, num * BDRV_SECTOR_SIZE);
3305                 if (iov.iov_base == NULL) {
3306                     ret = -ENOMEM;
3307                     goto fail;
3308                 }
3309                 memset(iov.iov_base, 0, num * BDRV_SECTOR_SIZE);
3310             }
3311             qemu_iovec_init_external(&qiov, &iov, 1);
3312
3313             ret = drv->bdrv_co_writev(bs, sector_num, num, &qiov);
3314
3315             /* Keep bounce buffer around if it is big enough for all
3316              * all future requests.
3317              */
3318             if (num < max_write_zeroes) {
3319                 qemu_vfree(iov.iov_base);
3320                 iov.iov_base = NULL;
3321             }
3322         }
3323
3324         sector_num += num;
3325         nb_sectors -= num;
3326     }
3327
3328 fail:
3329     qemu_vfree(iov.iov_base);
3330     return ret;
3331 }
3332
3333 /*
3334  * Forwards an already correctly aligned write request to the BlockDriver.
3335  */
3336 static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs,
3337     BdrvTrackedRequest *req, int64_t offset, unsigned int bytes,
3338     QEMUIOVector *qiov, int flags)
3339 {
3340     BlockDriver *drv = bs->drv;
3341     bool waited;
3342     int ret;
3343
3344     int64_t sector_num = offset >> BDRV_SECTOR_BITS;
3345     unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS;
3346
3347     assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0);
3348     assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0);
3349     assert(!qiov || bytes == qiov->size);
3350
3351     waited = wait_serialising_requests(req);
3352     assert(!waited || !req->serialising);
3353     assert(req->overlap_offset <= offset);
3354     assert(offset + bytes <= req->overlap_offset + req->overlap_bytes);
3355
3356     ret = notifier_with_return_list_notify(&bs->before_write_notifiers, req);
3357
3358     if (!ret && bs->detect_zeroes != BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF &&
3359         !(flags & BDRV_REQ_ZERO_WRITE) && drv->bdrv_co_write_zeroes &&
3360         qemu_iovec_is_zero(qiov)) {
3361         flags |= BDRV_REQ_ZERO_WRITE;
3362         if (bs->detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP) {
3363             flags |= BDRV_REQ_MAY_UNMAP;
3364         }
3365     }
3366
3367     if (ret < 0) {
3368         /* Do nothing, write notifier decided to fail this request */
3369     } else if (flags & BDRV_REQ_ZERO_WRITE) {
3370         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_ZERO);
3371         ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags);
3372     } else {
3373         BLKDBG_EVENT(bs, BLKDBG_PWRITEV);
3374         ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
3375     }
3376     BLKDBG_EVENT(bs, BLKDBG_PWRITEV_DONE);
3377
3378     if (ret == 0 && !bs->enable_write_cache) {
3379         ret = bdrv_co_flush(bs);
3380     }
3381
3382     bdrv_set_dirty(bs, sector_num, nb_sectors);
3383
3384     block_acct_highest_sector(&bs->stats, sector_num, nb_sectors);
3385
3386     if (bs->growable && ret >= 0) {
3387         bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors);
3388     }
3389
3390     return ret;
3391 }
3392
3393 /*
3394  * Handle a write request in coroutine context
3395  */
3396 static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs,
3397     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
3398     BdrvRequestFlags flags)
3399 {
3400     BdrvTrackedRequest req;
3401     /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
3402     uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
3403     uint8_t *head_buf = NULL;
3404     uint8_t *tail_buf = NULL;
3405     QEMUIOVector local_qiov;
3406     bool use_local_qiov = false;
3407     int ret;
3408
3409     if (!bs->drv) {
3410         return -ENOMEDIUM;
3411     }
3412     if (bs->read_only) {
3413         return -EACCES;
3414     }
3415     if (bdrv_check_byte_request(bs, offset, bytes)) {
3416         return -EIO;
3417     }
3418
3419     /* throttling disk I/O */
3420     if (bs->io_limits_enabled) {
3421         bdrv_io_limits_intercept(bs, bytes, true);
3422     }
3423
3424     /*
3425      * Align write if necessary by performing a read-modify-write cycle.
3426      * Pad qiov with the read parts and be sure to have a tracked request not
3427      * only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle.
3428      */
3429     tracked_request_begin(&req, bs, offset, bytes, true);
3430
3431     if (offset & (align - 1)) {
3432         QEMUIOVector head_qiov;
3433         struct iovec head_iov;
3434
3435         mark_request_serialising(&req, align);
3436         wait_serialising_requests(&req);
3437
3438         head_buf = qemu_blockalign(bs, align);
3439         head_iov = (struct iovec) {
3440             .iov_base   = head_buf,
3441             .iov_len    = align,
3442         };
3443         qemu_iovec_init_external(&head_qiov, &head_iov, 1);
3444
3445         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_HEAD);
3446         ret = bdrv_aligned_preadv(bs, &req, offset & ~(align - 1), align,
3447                                   align, &head_qiov, 0);
3448         if (ret < 0) {
3449             goto fail;
3450         }
3451         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_HEAD);
3452
3453         qemu_iovec_init(&local_qiov, qiov->niov + 2);
3454         qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1));
3455         qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3456         use_local_qiov = true;
3457
3458         bytes += offset & (align - 1);
3459         offset = offset & ~(align - 1);
3460     }
3461
3462     if ((offset + bytes) & (align - 1)) {
3463         QEMUIOVector tail_qiov;
3464         struct iovec tail_iov;
3465         size_t tail_bytes;
3466         bool waited;
3467
3468         mark_request_serialising(&req, align);
3469         waited = wait_serialising_requests(&req);
3470         assert(!waited || !use_local_qiov);
3471
3472         tail_buf = qemu_blockalign(bs, align);
3473         tail_iov = (struct iovec) {
3474             .iov_base   = tail_buf,
3475             .iov_len    = align,
3476         };
3477         qemu_iovec_init_external(&tail_qiov, &tail_iov, 1);
3478
3479         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_TAIL);
3480         ret = bdrv_aligned_preadv(bs, &req, (offset + bytes) & ~(align - 1), align,
3481                                   align, &tail_qiov, 0);
3482         if (ret < 0) {
3483             goto fail;
3484         }
3485         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_TAIL);
3486
3487         if (!use_local_qiov) {
3488             qemu_iovec_init(&local_qiov, qiov->niov + 1);
3489             qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3490             use_local_qiov = true;
3491         }
3492
3493         tail_bytes = (offset + bytes) & (align - 1);
3494         qemu_iovec_add(&local_qiov, tail_buf + tail_bytes, align - tail_bytes);
3495
3496         bytes = ROUND_UP(bytes, align);
3497     }
3498
3499     ret = bdrv_aligned_pwritev(bs, &req, offset, bytes,
3500                                use_local_qiov ? &local_qiov : qiov,
3501                                flags);
3502
3503 fail:
3504     tracked_request_end(&req);
3505
3506     if (use_local_qiov) {
3507         qemu_iovec_destroy(&local_qiov);
3508     }
3509     qemu_vfree(head_buf);
3510     qemu_vfree(tail_buf);
3511
3512     return ret;
3513 }
3514
3515 static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
3516     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
3517     BdrvRequestFlags flags)
3518 {
3519     if (nb_sectors < 0 || nb_sectors > (INT_MAX >> BDRV_SECTOR_BITS)) {
3520         return -EINVAL;
3521     }
3522
3523     return bdrv_co_do_pwritev(bs, sector_num << BDRV_SECTOR_BITS,
3524                               nb_sectors << BDRV_SECTOR_BITS, qiov, flags);
3525 }
3526
3527 int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
3528     int nb_sectors, QEMUIOVector *qiov)
3529 {
3530     trace_bdrv_co_writev(bs, sector_num, nb_sectors);
3531
3532     return bdrv_co_do_writev(bs, sector_num, nb_sectors, qiov, 0);
3533 }
3534
3535 int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs,
3536                                       int64_t sector_num, int nb_sectors,
3537                                       BdrvRequestFlags flags)
3538 {
3539     trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags);
3540
3541     if (!(bs->open_flags & BDRV_O_UNMAP)) {
3542         flags &= ~BDRV_REQ_MAY_UNMAP;
3543     }
3544
3545     return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
3546                              BDRV_REQ_ZERO_WRITE | flags);
3547 }
3548
3549 /**
3550  * Truncate file to 'offset' bytes (needed only for file protocols)
3551  */
3552 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
3553 {
3554     BlockDriver *drv = bs->drv;
3555     int ret;
3556     if (!drv)
3557         return -ENOMEDIUM;
3558     if (!drv->bdrv_truncate)
3559         return -ENOTSUP;
3560     if (bs->read_only)
3561         return -EACCES;
3562
3563     ret = drv->bdrv_truncate(bs, offset);
3564     if (ret == 0) {
3565         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
3566         bdrv_dev_resize_cb(bs);
3567     }
3568     return ret;
3569 }
3570
3571 /**
3572  * Length of a allocated file in bytes. Sparse files are counted by actual
3573  * allocated space. Return < 0 if error or unknown.
3574  */
3575 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
3576 {
3577     BlockDriver *drv = bs->drv;
3578     if (!drv) {
3579         return -ENOMEDIUM;
3580     }
3581     if (drv->bdrv_get_allocated_file_size) {
3582         return drv->bdrv_get_allocated_file_size(bs);
3583     }
3584     if (bs->file) {
3585         return bdrv_get_allocated_file_size(bs->file);
3586     }
3587     return -ENOTSUP;
3588 }
3589
3590 /**
3591  * Return number of sectors on success, -errno on error.
3592  */
3593 int64_t bdrv_nb_sectors(BlockDriverState *bs)
3594 {
3595     BlockDriver *drv = bs->drv;
3596
3597     if (!drv)
3598         return -ENOMEDIUM;
3599
3600     if (drv->has_variable_length) {
3601         int ret = refresh_total_sectors(bs, bs->total_sectors);
3602         if (ret < 0) {
3603             return ret;
3604         }
3605     }
3606     return bs->total_sectors;
3607 }
3608
3609 /**
3610  * Return length in bytes on success, -errno on error.
3611  * The length is always a multiple of BDRV_SECTOR_SIZE.
3612  */
3613 int64_t bdrv_getlength(BlockDriverState *bs)
3614 {
3615     int64_t ret = bdrv_nb_sectors(bs);
3616
3617     return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
3618 }
3619
3620 /* return 0 as number of sectors if no device present or error */
3621 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
3622 {
3623     int64_t nb_sectors = bdrv_nb_sectors(bs);
3624
3625     *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
3626 }
3627
3628 void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
3629                        BlockdevOnError on_write_error)
3630 {
3631     bs->on_read_error = on_read_error;
3632     bs->on_write_error = on_write_error;
3633 }
3634
3635 BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
3636 {
3637     return is_read ? bs->on_read_error : bs->on_write_error;
3638 }
3639
3640 BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
3641 {
3642     BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
3643
3644     switch (on_err) {
3645     case BLOCKDEV_ON_ERROR_ENOSPC:
3646         return (error == ENOSPC) ?
3647                BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
3648     case BLOCKDEV_ON_ERROR_STOP:
3649         return BLOCK_ERROR_ACTION_STOP;
3650     case BLOCKDEV_ON_ERROR_REPORT:
3651         return BLOCK_ERROR_ACTION_REPORT;
3652     case BLOCKDEV_ON_ERROR_IGNORE:
3653         return BLOCK_ERROR_ACTION_IGNORE;
3654     default:
3655         abort();
3656     }
3657 }
3658
3659 static void send_qmp_error_event(BlockDriverState *bs,
3660                                  BlockErrorAction action,
3661                                  bool is_read, int error)
3662 {
3663     BlockErrorAction ac;
3664
3665     ac = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
3666     qapi_event_send_block_io_error(bdrv_get_device_name(bs), ac, action,
3667                                    bdrv_iostatus_is_enabled(bs),
3668                                    error == ENOSPC, strerror(error),
3669                                    &error_abort);
3670 }
3671
3672 /* This is done by device models because, while the block layer knows
3673  * about the error, it does not know whether an operation comes from
3674  * the device or the block layer (from a job, for example).
3675  */
3676 void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
3677                        bool is_read, int error)
3678 {
3679     assert(error >= 0);
3680
3681     if (action == BLOCK_ERROR_ACTION_STOP) {
3682         /* First set the iostatus, so that "info block" returns an iostatus
3683          * that matches the events raised so far (an additional error iostatus
3684          * is fine, but not a lost one).
3685          */
3686         bdrv_iostatus_set_err(bs, error);
3687
3688         /* Then raise the request to stop the VM and the event.
3689          * qemu_system_vmstop_request_prepare has two effects.  First,
3690          * it ensures that the STOP event always comes after the
3691          * BLOCK_IO_ERROR event.  Second, it ensures that even if management
3692          * can observe the STOP event and do a "cont" before the STOP
3693          * event is issued, the VM will not stop.  In this case, vm_start()
3694          * also ensures that the STOP/RESUME pair of events is emitted.
3695          */
3696         qemu_system_vmstop_request_prepare();
3697         send_qmp_error_event(bs, action, is_read, error);
3698         qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
3699     } else {
3700         send_qmp_error_event(bs, action, is_read, error);
3701     }
3702 }
3703
3704 int bdrv_is_read_only(BlockDriverState *bs)
3705 {
3706     return bs->read_only;
3707 }
3708
3709 int bdrv_is_sg(BlockDriverState *bs)
3710 {
3711     return bs->sg;
3712 }
3713
3714 int bdrv_enable_write_cache(BlockDriverState *bs)
3715 {
3716     return bs->enable_write_cache;
3717 }
3718
3719 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
3720 {
3721     bs->enable_write_cache = wce;
3722
3723     /* so a reopen() will preserve wce */
3724     if (wce) {
3725         bs->open_flags |= BDRV_O_CACHE_WB;
3726     } else {
3727         bs->open_flags &= ~BDRV_O_CACHE_WB;
3728     }
3729 }
3730
3731 int bdrv_is_encrypted(BlockDriverState *bs)
3732 {
3733     if (bs->backing_hd && bs->backing_hd->encrypted)
3734         return 1;
3735     return bs->encrypted;
3736 }
3737
3738 int bdrv_key_required(BlockDriverState *bs)
3739 {
3740     BlockDriverState *backing_hd = bs->backing_hd;
3741
3742     if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
3743         return 1;
3744     return (bs->encrypted && !bs->valid_key);
3745 }
3746
3747 int bdrv_set_key(BlockDriverState *bs, const char *key)
3748 {
3749     int ret;
3750     if (bs->backing_hd && bs->backing_hd->encrypted) {
3751         ret = bdrv_set_key(bs->backing_hd, key);
3752         if (ret < 0)
3753             return ret;
3754         if (!bs->encrypted)
3755             return 0;
3756     }
3757     if (!bs->encrypted) {
3758         return -EINVAL;
3759     } else if (!bs->drv || !bs->drv->bdrv_set_key) {
3760         return -ENOMEDIUM;
3761     }
3762     ret = bs->drv->bdrv_set_key(bs, key);
3763     if (ret < 0) {
3764         bs->valid_key = 0;
3765     } else if (!bs->valid_key) {
3766         bs->valid_key = 1;
3767         /* call the change callback now, we skipped it on open */
3768         bdrv_dev_change_media_cb(bs, true);
3769     }
3770     return ret;
3771 }
3772
3773 const char *bdrv_get_format_name(BlockDriverState *bs)
3774 {
3775     return bs->drv ? bs->drv->format_name : NULL;
3776 }
3777
3778 static int qsort_strcmp(const void *a, const void *b)
3779 {
3780     return strcmp(a, b);
3781 }
3782
3783 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
3784                          void *opaque)
3785 {
3786     BlockDriver *drv;
3787     int count = 0;
3788     int i;
3789     const char **formats = NULL;
3790
3791     QLIST_FOREACH(drv, &bdrv_drivers, list) {
3792         if (drv->format_name) {
3793             bool found = false;
3794             int i = count;
3795             while (formats && i && !found) {
3796                 found = !strcmp(formats[--i], drv->format_name);
3797             }
3798
3799             if (!found) {
3800                 formats = g_renew(const char *, formats, count + 1);
3801                 formats[count++] = drv->format_name;
3802             }
3803         }
3804     }
3805
3806     qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
3807
3808     for (i = 0; i < count; i++) {
3809         it(opaque, formats[i]);
3810     }
3811
3812     g_free(formats);
3813 }
3814
3815 /* This function is to find block backend bs */
3816 BlockDriverState *bdrv_find(const char *name)
3817 {
3818     BlockDriverState *bs;
3819
3820     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3821         if (!strcmp(name, bs->device_name)) {
3822             return bs;
3823         }
3824     }
3825     return NULL;
3826 }
3827
3828 /* This function is to find a node in the bs graph */
3829 BlockDriverState *bdrv_find_node(const char *node_name)
3830 {
3831     BlockDriverState *bs;
3832
3833     assert(node_name);
3834
3835     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3836         if (!strcmp(node_name, bs->node_name)) {
3837             return bs;
3838         }
3839     }
3840     return NULL;
3841 }
3842
3843 /* Put this QMP function here so it can access the static graph_bdrv_states. */
3844 BlockDeviceInfoList *bdrv_named_nodes_list(void)
3845 {
3846     BlockDeviceInfoList *list, *entry;
3847     BlockDriverState *bs;
3848
3849     list = NULL;
3850     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3851         entry = g_malloc0(sizeof(*entry));
3852         entry->value = bdrv_block_device_info(bs);
3853         entry->next = list;
3854         list = entry;
3855     }
3856
3857     return list;
3858 }
3859
3860 BlockDriverState *bdrv_lookup_bs(const char *device,
3861                                  const char *node_name,
3862                                  Error **errp)
3863 {
3864     BlockDriverState *bs = NULL;
3865
3866     if (device) {
3867         bs = bdrv_find(device);
3868
3869         if (bs) {
3870             return bs;
3871         }
3872     }
3873
3874     if (node_name) {
3875         bs = bdrv_find_node(node_name);
3876
3877         if (bs) {
3878             return bs;
3879         }
3880     }
3881
3882     error_setg(errp, "Cannot find device=%s nor node_name=%s",
3883                      device ? device : "",
3884                      node_name ? node_name : "");
3885     return NULL;
3886 }
3887
3888 /* If 'base' is in the same chain as 'top', return true. Otherwise,
3889  * return false.  If either argument is NULL, return false. */
3890 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
3891 {
3892     while (top && top != base) {
3893         top = top->backing_hd;
3894     }
3895
3896     return top != NULL;
3897 }
3898
3899 BlockDriverState *bdrv_next(BlockDriverState *bs)
3900 {
3901     if (!bs) {
3902         return QTAILQ_FIRST(&bdrv_states);
3903     }
3904     return QTAILQ_NEXT(bs, device_list);
3905 }
3906
3907 void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque)
3908 {
3909     BlockDriverState *bs;
3910
3911     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3912         it(opaque, bs);
3913     }
3914 }
3915
3916 const char *bdrv_get_device_name(BlockDriverState *bs)
3917 {
3918     return bs->device_name;
3919 }
3920
3921 int bdrv_get_flags(BlockDriverState *bs)
3922 {
3923     return bs->open_flags;
3924 }
3925
3926 int bdrv_flush_all(void)
3927 {
3928     BlockDriverState *bs;
3929     int result = 0;
3930
3931     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3932         AioContext *aio_context = bdrv_get_aio_context(bs);
3933         int ret;
3934
3935         aio_context_acquire(aio_context);
3936         ret = bdrv_flush(bs);
3937         if (ret < 0 && !result) {
3938             result = ret;
3939         }
3940         aio_context_release(aio_context);
3941     }
3942
3943     return result;
3944 }
3945
3946 int bdrv_has_zero_init_1(BlockDriverState *bs)
3947 {
3948     return 1;
3949 }
3950
3951 int bdrv_has_zero_init(BlockDriverState *bs)
3952 {
3953     assert(bs->drv);
3954
3955     /* If BS is a copy on write image, it is initialized to
3956        the contents of the base image, which may not be zeroes.  */
3957     if (bs->backing_hd) {
3958         return 0;
3959     }
3960     if (bs->drv->bdrv_has_zero_init) {
3961         return bs->drv->bdrv_has_zero_init(bs);
3962     }
3963
3964     /* safe default */
3965     return 0;
3966 }
3967
3968 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3969 {
3970     BlockDriverInfo bdi;
3971
3972     if (bs->backing_hd) {
3973         return false;
3974     }
3975
3976     if (bdrv_get_info(bs, &bdi) == 0) {
3977         return bdi.unallocated_blocks_are_zero;
3978     }
3979
3980     return false;
3981 }
3982
3983 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3984 {
3985     BlockDriverInfo bdi;
3986
3987     if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
3988         return false;
3989     }
3990
3991     if (bdrv_get_info(bs, &bdi) == 0) {
3992         return bdi.can_write_zeroes_with_unmap;
3993     }
3994
3995     return false;
3996 }
3997
3998 typedef struct BdrvCoGetBlockStatusData {
3999     BlockDriverState *bs;
4000     BlockDriverState *base;
4001     int64_t sector_num;
4002     int nb_sectors;
4003     int *pnum;
4004     int64_t ret;
4005     bool done;
4006 } BdrvCoGetBlockStatusData;
4007
4008 /*
4009  * Returns true iff the specified sector is present in the disk image. Drivers
4010  * not implementing the functionality are assumed to not support backing files,
4011  * hence all their sectors are reported as allocated.
4012  *
4013  * If 'sector_num' is beyond the end of the disk image the return value is 0
4014  * and 'pnum' is set to 0.
4015  *
4016  * 'pnum' is set to the number of sectors (including and immediately following
4017  * the specified sector) that are known to be in the same
4018  * allocated/unallocated state.
4019  *
4020  * 'nb_sectors' is the max value 'pnum' should be set to.  If nb_sectors goes
4021  * beyond the end of the disk image it will be clamped.
4022  */
4023 static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
4024                                                      int64_t sector_num,
4025                                                      int nb_sectors, int *pnum)
4026 {
4027     int64_t total_sectors;
4028     int64_t n;
4029     int64_t ret, ret2;
4030
4031     total_sectors = bdrv_nb_sectors(bs);
4032     if (total_sectors < 0) {
4033         return total_sectors;
4034     }
4035
4036     if (sector_num >= total_sectors) {
4037         *pnum = 0;
4038         return 0;
4039     }
4040
4041     n = total_sectors - sector_num;
4042     if (n < nb_sectors) {
4043         nb_sectors = n;
4044     }
4045
4046     if (!bs->drv->bdrv_co_get_block_status) {
4047         *pnum = nb_sectors;
4048         ret = BDRV_BLOCK_DATA | BDRV_BLOCK_ALLOCATED;
4049         if (bs->drv->protocol_name) {
4050             ret |= BDRV_BLOCK_OFFSET_VALID | (sector_num * BDRV_SECTOR_SIZE);
4051         }
4052         return ret;
4053     }
4054
4055     ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum);
4056     if (ret < 0) {
4057         *pnum = 0;
4058         return ret;
4059     }
4060
4061     if (ret & BDRV_BLOCK_RAW) {
4062         assert(ret & BDRV_BLOCK_OFFSET_VALID);
4063         return bdrv_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
4064                                      *pnum, pnum);
4065     }
4066
4067     if (ret & (BDRV_BLOCK_DATA | BDRV_BLOCK_ZERO)) {
4068         ret |= BDRV_BLOCK_ALLOCATED;
4069     }
4070
4071     if (!(ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO)) {
4072         if (bdrv_unallocated_blocks_are_zero(bs)) {
4073             ret |= BDRV_BLOCK_ZERO;
4074         } else if (bs->backing_hd) {
4075             BlockDriverState *bs2 = bs->backing_hd;
4076             int64_t nb_sectors2 = bdrv_nb_sectors(bs2);
4077             if (nb_sectors2 >= 0 && sector_num >= nb_sectors2) {
4078                 ret |= BDRV_BLOCK_ZERO;
4079             }
4080         }
4081     }
4082
4083     if (bs->file &&
4084         (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) &&
4085         (ret & BDRV_BLOCK_OFFSET_VALID)) {
4086         ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
4087                                         *pnum, pnum);
4088         if (ret2 >= 0) {
4089             /* Ignore errors.  This is just providing extra information, it
4090              * is useful but not necessary.
4091              */
4092             ret |= (ret2 & BDRV_BLOCK_ZERO);
4093         }
4094     }
4095
4096     return ret;
4097 }
4098
4099 /* Coroutine wrapper for bdrv_get_block_status() */
4100 static void coroutine_fn bdrv_get_block_status_co_entry(void *opaque)
4101 {
4102     BdrvCoGetBlockStatusData *data = opaque;
4103     BlockDriverState *bs = data->bs;
4104
4105     data->ret = bdrv_co_get_block_status(bs, data->sector_num, data->nb_sectors,
4106                                          data->pnum);
4107     data->done = true;
4108 }
4109
4110 /*
4111  * Synchronous wrapper around bdrv_co_get_block_status().
4112  *
4113  * See bdrv_co_get_block_status() for details.
4114  */
4115 int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
4116                               int nb_sectors, int *pnum)
4117 {
4118     Coroutine *co;
4119     BdrvCoGetBlockStatusData data = {
4120         .bs = bs,
4121         .sector_num = sector_num,
4122         .nb_sectors = nb_sectors,
4123         .pnum = pnum,
4124         .done = false,
4125     };
4126
4127     if (qemu_in_coroutine()) {
4128         /* Fast-path if already in coroutine context */
4129         bdrv_get_block_status_co_entry(&data);
4130     } else {
4131         AioContext *aio_context = bdrv_get_aio_context(bs);
4132
4133         co = qemu_coroutine_create(bdrv_get_block_status_co_entry);
4134         qemu_coroutine_enter(co, &data);
4135         while (!data.done) {
4136             aio_poll(aio_context, true);
4137         }
4138     }
4139     return data.ret;
4140 }
4141
4142 int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num,
4143                                    int nb_sectors, int *pnum)
4144 {
4145     int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
4146     if (ret < 0) {
4147         return ret;
4148     }
4149     return !!(ret & BDRV_BLOCK_ALLOCATED);
4150 }
4151
4152 /*
4153  * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP]
4154  *
4155  * Return true if the given sector is allocated in any image between
4156  * BASE and TOP (inclusive).  BASE can be NULL to check if the given
4157  * sector is allocated in any image of the chain.  Return false otherwise.
4158  *
4159  * 'pnum' is set to the number of sectors (including and immediately following
4160  *  the specified sector) that are known to be in the same
4161  *  allocated/unallocated state.
4162  *
4163  */
4164 int bdrv_is_allocated_above(BlockDriverState *top,
4165                             BlockDriverState *base,
4166                             int64_t sector_num,
4167                             int nb_sectors, int *pnum)
4168 {
4169     BlockDriverState *intermediate;
4170     int ret, n = nb_sectors;
4171
4172     intermediate = top;
4173     while (intermediate && intermediate != base) {
4174         int pnum_inter;
4175         ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors,
4176                                 &pnum_inter);
4177         if (ret < 0) {
4178             return ret;
4179         } else if (ret) {
4180             *pnum = pnum_inter;
4181             return 1;
4182         }
4183
4184         /*
4185          * [sector_num, nb_sectors] is unallocated on top but intermediate
4186          * might have
4187          *
4188          * [sector_num+x, nr_sectors] allocated.
4189          */
4190         if (n > pnum_inter &&
4191             (intermediate == top ||
4192              sector_num + pnum_inter < intermediate->total_sectors)) {
4193             n = pnum_inter;
4194         }
4195
4196         intermediate = intermediate->backing_hd;
4197     }
4198
4199     *pnum = n;
4200     return 0;
4201 }
4202
4203 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
4204 {
4205     if (bs->backing_hd && bs->backing_hd->encrypted)
4206         return bs->backing_file;
4207     else if (bs->encrypted)
4208         return bs->filename;
4209     else
4210         return NULL;
4211 }
4212
4213 void bdrv_get_backing_filename(BlockDriverState *bs,
4214                                char *filename, int filename_size)
4215 {
4216     pstrcpy(filename, filename_size, bs->backing_file);
4217 }
4218
4219 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
4220                           const uint8_t *buf, int nb_sectors)
4221 {
4222     BlockDriver *drv = bs->drv;
4223     if (!drv)
4224         return -ENOMEDIUM;
4225     if (!drv->bdrv_write_compressed)
4226         return -ENOTSUP;
4227     if (bdrv_check_request(bs, sector_num, nb_sectors))
4228         return -EIO;
4229
4230     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
4231
4232     return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
4233 }
4234
4235 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
4236 {
4237     BlockDriver *drv = bs->drv;
4238     if (!drv)
4239         return -ENOMEDIUM;
4240     if (!drv->bdrv_get_info)
4241         return -ENOTSUP;
4242     memset(bdi, 0, sizeof(*bdi));
4243     return drv->bdrv_get_info(bs, bdi);
4244 }
4245
4246 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
4247 {
4248     BlockDriver *drv = bs->drv;
4249     if (drv && drv->bdrv_get_specific_info) {
4250         return drv->bdrv_get_specific_info(bs);
4251     }
4252     return NULL;
4253 }
4254
4255 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
4256                       int64_t pos, int size)
4257 {
4258     QEMUIOVector qiov;
4259     struct iovec iov = {
4260         .iov_base   = (void *) buf,
4261         .iov_len    = size,
4262     };
4263
4264     qemu_iovec_init_external(&qiov, &iov, 1);
4265     return bdrv_writev_vmstate(bs, &qiov, pos);
4266 }
4267
4268 int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
4269 {
4270     BlockDriver *drv = bs->drv;
4271
4272     if (!drv) {
4273         return -ENOMEDIUM;
4274     } else if (drv->bdrv_save_vmstate) {
4275         return drv->bdrv_save_vmstate(bs, qiov, pos);
4276     } else if (bs->file) {
4277         return bdrv_writev_vmstate(bs->file, qiov, pos);
4278     }
4279
4280     return -ENOTSUP;
4281 }
4282
4283 int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
4284                       int64_t pos, int size)
4285 {
4286     BlockDriver *drv = bs->drv;
4287     if (!drv)
4288         return -ENOMEDIUM;
4289     if (drv->bdrv_load_vmstate)
4290         return drv->bdrv_load_vmstate(bs, buf, pos, size);
4291     if (bs->file)
4292         return bdrv_load_vmstate(bs->file, buf, pos, size);
4293     return -ENOTSUP;
4294 }
4295
4296 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
4297 {
4298     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
4299         return;
4300     }
4301
4302     bs->drv->bdrv_debug_event(bs, event);
4303 }
4304
4305 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
4306                           const char *tag)
4307 {
4308     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
4309         bs = bs->file;
4310     }
4311
4312     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
4313         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
4314     }
4315
4316     return -ENOTSUP;
4317 }
4318
4319 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
4320 {
4321     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
4322         bs = bs->file;
4323     }
4324
4325     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
4326         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
4327     }
4328
4329     return -ENOTSUP;
4330 }
4331
4332 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
4333 {
4334     while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
4335         bs = bs->file;
4336     }
4337
4338     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
4339         return bs->drv->bdrv_debug_resume(bs, tag);
4340     }
4341
4342     return -ENOTSUP;
4343 }
4344
4345 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
4346 {
4347     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
4348         bs = bs->file;
4349     }
4350
4351     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
4352         return bs->drv->bdrv_debug_is_suspended(bs, tag);
4353     }
4354
4355     return false;
4356 }
4357
4358 int bdrv_is_snapshot(BlockDriverState *bs)
4359 {
4360     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
4361 }
4362
4363 /* backing_file can either be relative, or absolute, or a protocol.  If it is
4364  * relative, it must be relative to the chain.  So, passing in bs->filename
4365  * from a BDS as backing_file should not be done, as that may be relative to
4366  * the CWD rather than the chain. */
4367 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
4368         const char *backing_file)
4369 {
4370     char *filename_full = NULL;
4371     char *backing_file_full = NULL;
4372     char *filename_tmp = NULL;
4373     int is_protocol = 0;
4374     BlockDriverState *curr_bs = NULL;
4375     BlockDriverState *retval = NULL;
4376
4377     if (!bs || !bs->drv || !backing_file) {
4378         return NULL;
4379     }
4380
4381     filename_full     = g_malloc(PATH_MAX);
4382     backing_file_full = g_malloc(PATH_MAX);
4383     filename_tmp      = g_malloc(PATH_MAX);
4384
4385     is_protocol = path_has_protocol(backing_file);
4386
4387     for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
4388
4389         /* If either of the filename paths is actually a protocol, then
4390          * compare unmodified paths; otherwise make paths relative */
4391         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
4392             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
4393                 retval = curr_bs->backing_hd;
4394                 break;
4395             }
4396         } else {
4397             /* If not an absolute filename path, make it relative to the current
4398              * image's filename path */
4399             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4400                          backing_file);
4401
4402             /* We are going to compare absolute pathnames */
4403             if (!realpath(filename_tmp, filename_full)) {
4404                 continue;
4405             }
4406
4407             /* We need to make sure the backing filename we are comparing against
4408              * is relative to the current image filename (or absolute) */
4409             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4410                          curr_bs->backing_file);
4411
4412             if (!realpath(filename_tmp, backing_file_full)) {
4413                 continue;
4414             }
4415
4416             if (strcmp(backing_file_full, filename_full) == 0) {
4417                 retval = curr_bs->backing_hd;
4418                 break;
4419             }
4420         }
4421     }
4422
4423     g_free(filename_full);
4424     g_free(backing_file_full);
4425     g_free(filename_tmp);
4426     return retval;
4427 }
4428
4429 int bdrv_get_backing_file_depth(BlockDriverState *bs)
4430 {
4431     if (!bs->drv) {
4432         return 0;
4433     }
4434
4435     if (!bs->backing_hd) {
4436         return 0;
4437     }
4438
4439     return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
4440 }
4441
4442 /**************************************************************/
4443 /* async I/Os */
4444
4445 BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
4446                                  QEMUIOVector *qiov, int nb_sectors,
4447                                  BlockDriverCompletionFunc *cb, void *opaque)
4448 {
4449     trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
4450
4451     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4452                                  cb, opaque, false);
4453 }
4454
4455 BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
4456                                   QEMUIOVector *qiov, int nb_sectors,
4457                                   BlockDriverCompletionFunc *cb, void *opaque)
4458 {
4459     trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque);
4460
4461     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4462                                  cb, opaque, true);
4463 }
4464
4465 BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs,
4466         int64_t sector_num, int nb_sectors, BdrvRequestFlags flags,
4467         BlockDriverCompletionFunc *cb, void *opaque)
4468 {
4469     trace_bdrv_aio_write_zeroes(bs, sector_num, nb_sectors, flags, opaque);
4470
4471     return bdrv_co_aio_rw_vector(bs, sector_num, NULL, nb_sectors,
4472                                  BDRV_REQ_ZERO_WRITE | flags,
4473                                  cb, opaque, true);
4474 }
4475
4476
4477 typedef struct MultiwriteCB {
4478     int error;
4479     int num_requests;
4480     int num_callbacks;
4481     struct {
4482         BlockDriverCompletionFunc *cb;
4483         void *opaque;
4484         QEMUIOVector *free_qiov;
4485     } callbacks[];
4486 } MultiwriteCB;
4487
4488 static void multiwrite_user_cb(MultiwriteCB *mcb)
4489 {
4490     int i;
4491
4492     for (i = 0; i < mcb->num_callbacks; i++) {
4493         mcb->callbacks[i].cb(mcb->callbacks[i].opaque, mcb->error);
4494         if (mcb->callbacks[i].free_qiov) {
4495             qemu_iovec_destroy(mcb->callbacks[i].free_qiov);
4496         }
4497         g_free(mcb->callbacks[i].free_qiov);
4498     }
4499 }
4500
4501 static void multiwrite_cb(void *opaque, int ret)
4502 {
4503     MultiwriteCB *mcb = opaque;
4504
4505     trace_multiwrite_cb(mcb, ret);
4506
4507     if (ret < 0 && !mcb->error) {
4508         mcb->error = ret;
4509     }
4510
4511     mcb->num_requests--;
4512     if (mcb->num_requests == 0) {
4513         multiwrite_user_cb(mcb);
4514         g_free(mcb);
4515     }
4516 }
4517
4518 static int multiwrite_req_compare(const void *a, const void *b)
4519 {
4520     const BlockRequest *req1 = a, *req2 = b;
4521
4522     /*
4523      * Note that we can't simply subtract req2->sector from req1->sector
4524      * here as that could overflow the return value.
4525      */
4526     if (req1->sector > req2->sector) {
4527         return 1;
4528     } else if (req1->sector < req2->sector) {
4529         return -1;
4530     } else {
4531         return 0;
4532     }
4533 }
4534
4535 /*
4536  * Takes a bunch of requests and tries to merge them. Returns the number of
4537  * requests that remain after merging.
4538  */
4539 static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
4540     int num_reqs, MultiwriteCB *mcb)
4541 {
4542     int i, outidx;
4543
4544     // Sort requests by start sector
4545     qsort(reqs, num_reqs, sizeof(*reqs), &multiwrite_req_compare);
4546
4547     // Check if adjacent requests touch the same clusters. If so, combine them,
4548     // filling up gaps with zero sectors.
4549     outidx = 0;
4550     for (i = 1; i < num_reqs; i++) {
4551         int merge = 0;
4552         int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
4553
4554         // Handle exactly sequential writes and overlapping writes.
4555         if (reqs[i].sector <= oldreq_last) {
4556             merge = 1;
4557         }
4558
4559         if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) {
4560             merge = 0;
4561         }
4562
4563         if (merge) {
4564             size_t size;
4565             QEMUIOVector *qiov = g_malloc0(sizeof(*qiov));
4566             qemu_iovec_init(qiov,
4567                 reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1);
4568
4569             // Add the first request to the merged one. If the requests are
4570             // overlapping, drop the last sectors of the first request.
4571             size = (reqs[i].sector - reqs[outidx].sector) << 9;
4572             qemu_iovec_concat(qiov, reqs[outidx].qiov, 0, size);
4573
4574             // We should need to add any zeros between the two requests
4575             assert (reqs[i].sector <= oldreq_last);
4576
4577             // Add the second request
4578             qemu_iovec_concat(qiov, reqs[i].qiov, 0, reqs[i].qiov->size);
4579
4580             // Add tail of first request, if necessary
4581             if (qiov->size < reqs[outidx].qiov->size) {
4582                 qemu_iovec_concat(qiov, reqs[outidx].qiov, qiov->size,
4583                                   reqs[outidx].qiov->size - qiov->size);
4584             }
4585
4586             reqs[outidx].nb_sectors = qiov->size >> 9;
4587             reqs[outidx].qiov = qiov;
4588
4589             mcb->callbacks[i].free_qiov = reqs[outidx].qiov;
4590         } else {
4591             outidx++;
4592             reqs[outidx].sector     = reqs[i].sector;
4593             reqs[outidx].nb_sectors = reqs[i].nb_sectors;
4594             reqs[outidx].qiov       = reqs[i].qiov;
4595         }
4596     }
4597
4598     return outidx + 1;
4599 }
4600
4601 /*
4602  * Submit multiple AIO write requests at once.
4603  *
4604  * On success, the function returns 0 and all requests in the reqs array have
4605  * been submitted. In error case this function returns -1, and any of the
4606  * requests may or may not be submitted yet. In particular, this means that the
4607  * callback will be called for some of the requests, for others it won't. The
4608  * caller must check the error field of the BlockRequest to wait for the right
4609  * callbacks (if error != 0, no callback will be called).
4610  *
4611  * The implementation may modify the contents of the reqs array, e.g. to merge
4612  * requests. However, the fields opaque and error are left unmodified as they
4613  * are used to signal failure for a single request to the caller.
4614  */
4615 int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
4616 {
4617     MultiwriteCB *mcb;
4618     int i;
4619
4620     /* don't submit writes if we don't have a medium */
4621     if (bs->drv == NULL) {
4622         for (i = 0; i < num_reqs; i++) {
4623             reqs[i].error = -ENOMEDIUM;
4624         }
4625         return -1;
4626     }
4627
4628     if (num_reqs == 0) {
4629         return 0;
4630     }
4631
4632     // Create MultiwriteCB structure
4633     mcb = g_malloc0(sizeof(*mcb) + num_reqs * sizeof(*mcb->callbacks));
4634     mcb->num_requests = 0;
4635     mcb->num_callbacks = num_reqs;
4636
4637     for (i = 0; i < num_reqs; i++) {
4638         mcb->callbacks[i].cb = reqs[i].cb;
4639         mcb->callbacks[i].opaque = reqs[i].opaque;
4640     }
4641
4642     // Check for mergable requests
4643     num_reqs = multiwrite_merge(bs, reqs, num_reqs, mcb);
4644
4645     trace_bdrv_aio_multiwrite(mcb, mcb->num_callbacks, num_reqs);
4646
4647     /* Run the aio requests. */
4648     mcb->num_requests = num_reqs;
4649     for (i = 0; i < num_reqs; i++) {
4650         bdrv_co_aio_rw_vector(bs, reqs[i].sector, reqs[i].qiov,
4651                               reqs[i].nb_sectors, reqs[i].flags,
4652                               multiwrite_cb, mcb,
4653                               true);
4654     }
4655
4656     return 0;
4657 }
4658
4659 void bdrv_aio_cancel(BlockDriverAIOCB *acb)
4660 {
4661     qemu_aio_ref(acb);
4662     bdrv_aio_cancel_async(acb);
4663     while (acb->refcnt > 1) {
4664         if (acb->aiocb_info->get_aio_context) {
4665             aio_poll(acb->aiocb_info->get_aio_context(acb), true);
4666         } else if (acb->bs) {
4667             aio_poll(bdrv_get_aio_context(acb->bs), true);
4668         } else {
4669             abort();
4670         }
4671     }
4672     qemu_aio_unref(acb);
4673 }
4674
4675 /* Async version of aio cancel. The caller is not blocked if the acb implements
4676  * cancel_async, otherwise we do nothing and let the request normally complete.
4677  * In either case the completion callback must be called. */
4678 void bdrv_aio_cancel_async(BlockDriverAIOCB *acb)
4679 {
4680     if (acb->aiocb_info->cancel_async) {
4681         acb->aiocb_info->cancel_async(acb);
4682     }
4683 }
4684
4685 /**************************************************************/
4686 /* async block device emulation */
4687
4688 typedef struct BlockDriverAIOCBSync {
4689     BlockDriverAIOCB common;
4690     QEMUBH *bh;
4691     int ret;
4692     /* vector translation state */
4693     QEMUIOVector *qiov;
4694     uint8_t *bounce;
4695     int is_write;
4696 } BlockDriverAIOCBSync;
4697
4698 static const AIOCBInfo bdrv_em_aiocb_info = {
4699     .aiocb_size         = sizeof(BlockDriverAIOCBSync),
4700 };
4701
4702 static void bdrv_aio_bh_cb(void *opaque)
4703 {
4704     BlockDriverAIOCBSync *acb = opaque;
4705
4706     if (!acb->is_write && acb->ret >= 0) {
4707         qemu_iovec_from_buf(acb->qiov, 0, acb->bounce, acb->qiov->size);
4708     }
4709     qemu_vfree(acb->bounce);
4710     acb->common.cb(acb->common.opaque, acb->ret);
4711     qemu_bh_delete(acb->bh);
4712     acb->bh = NULL;
4713     qemu_aio_unref(acb);
4714 }
4715
4716 static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
4717                                             int64_t sector_num,
4718                                             QEMUIOVector *qiov,
4719                                             int nb_sectors,
4720                                             BlockDriverCompletionFunc *cb,
4721                                             void *opaque,
4722                                             int is_write)
4723
4724 {
4725     BlockDriverAIOCBSync *acb;
4726
4727     acb = qemu_aio_get(&bdrv_em_aiocb_info, bs, cb, opaque);
4728     acb->is_write = is_write;
4729     acb->qiov = qiov;
4730     acb->bounce = qemu_try_blockalign(bs, qiov->size);
4731     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_aio_bh_cb, acb);
4732
4733     if (acb->bounce == NULL) {
4734         acb->ret = -ENOMEM;
4735     } else if (is_write) {
4736         qemu_iovec_to_buf(acb->qiov, 0, acb->bounce, qiov->size);
4737         acb->ret = bs->drv->bdrv_write(bs, sector_num, acb->bounce, nb_sectors);
4738     } else {
4739         acb->ret = bs->drv->bdrv_read(bs, sector_num, acb->bounce, nb_sectors);
4740     }
4741
4742     qemu_bh_schedule(acb->bh);
4743
4744     return &acb->common;
4745 }
4746
4747 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
4748         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4749         BlockDriverCompletionFunc *cb, void *opaque)
4750 {
4751     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 0);
4752 }
4753
4754 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
4755         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4756         BlockDriverCompletionFunc *cb, void *opaque)
4757 {
4758     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 1);
4759 }
4760
4761
4762 typedef struct BlockDriverAIOCBCoroutine {
4763     BlockDriverAIOCB common;
4764     BlockRequest req;
4765     bool is_write;
4766     bool *done;
4767     QEMUBH* bh;
4768 } BlockDriverAIOCBCoroutine;
4769
4770 static const AIOCBInfo bdrv_em_co_aiocb_info = {
4771     .aiocb_size         = sizeof(BlockDriverAIOCBCoroutine),
4772 };
4773
4774 static void bdrv_co_em_bh(void *opaque)
4775 {
4776     BlockDriverAIOCBCoroutine *acb = opaque;
4777
4778     acb->common.cb(acb->common.opaque, acb->req.error);
4779
4780     qemu_bh_delete(acb->bh);
4781     qemu_aio_unref(acb);
4782 }
4783
4784 /* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
4785 static void coroutine_fn bdrv_co_do_rw(void *opaque)
4786 {
4787     BlockDriverAIOCBCoroutine *acb = opaque;
4788     BlockDriverState *bs = acb->common.bs;
4789
4790     if (!acb->is_write) {
4791         acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
4792             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4793     } else {
4794         acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
4795             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4796     }
4797
4798     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4799     qemu_bh_schedule(acb->bh);
4800 }
4801
4802 static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
4803                                                int64_t sector_num,
4804                                                QEMUIOVector *qiov,
4805                                                int nb_sectors,
4806                                                BdrvRequestFlags flags,
4807                                                BlockDriverCompletionFunc *cb,
4808                                                void *opaque,
4809                                                bool is_write)
4810 {
4811     Coroutine *co;
4812     BlockDriverAIOCBCoroutine *acb;
4813
4814     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4815     acb->req.sector = sector_num;
4816     acb->req.nb_sectors = nb_sectors;
4817     acb->req.qiov = qiov;
4818     acb->req.flags = flags;
4819     acb->is_write = is_write;
4820
4821     co = qemu_coroutine_create(bdrv_co_do_rw);
4822     qemu_coroutine_enter(co, acb);
4823
4824     return &acb->common;
4825 }
4826
4827 static void coroutine_fn bdrv_aio_flush_co_entry(void *opaque)
4828 {
4829     BlockDriverAIOCBCoroutine *acb = opaque;
4830     BlockDriverState *bs = acb->common.bs;
4831
4832     acb->req.error = bdrv_co_flush(bs);
4833     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4834     qemu_bh_schedule(acb->bh);
4835 }
4836
4837 BlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs,
4838         BlockDriverCompletionFunc *cb, void *opaque)
4839 {
4840     trace_bdrv_aio_flush(bs, opaque);
4841
4842     Coroutine *co;
4843     BlockDriverAIOCBCoroutine *acb;
4844
4845     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4846
4847     co = qemu_coroutine_create(bdrv_aio_flush_co_entry);
4848     qemu_coroutine_enter(co, acb);
4849
4850     return &acb->common;
4851 }
4852
4853 static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque)
4854 {
4855     BlockDriverAIOCBCoroutine *acb = opaque;
4856     BlockDriverState *bs = acb->common.bs;
4857
4858     acb->req.error = bdrv_co_discard(bs, acb->req.sector, acb->req.nb_sectors);
4859     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4860     qemu_bh_schedule(acb->bh);
4861 }
4862
4863 BlockDriverAIOCB *bdrv_aio_discard(BlockDriverState *bs,
4864         int64_t sector_num, int nb_sectors,
4865         BlockDriverCompletionFunc *cb, void *opaque)
4866 {
4867     Coroutine *co;
4868     BlockDriverAIOCBCoroutine *acb;
4869
4870     trace_bdrv_aio_discard(bs, sector_num, nb_sectors, opaque);
4871
4872     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4873     acb->req.sector = sector_num;
4874     acb->req.nb_sectors = nb_sectors;
4875     co = qemu_coroutine_create(bdrv_aio_discard_co_entry);
4876     qemu_coroutine_enter(co, acb);
4877
4878     return &acb->common;
4879 }
4880
4881 void bdrv_init(void)
4882 {
4883     module_call_init(MODULE_INIT_BLOCK);
4884 }
4885
4886 void bdrv_init_with_whitelist(void)
4887 {
4888     use_bdrv_whitelist = 1;
4889     bdrv_init();
4890 }
4891
4892 void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
4893                    BlockDriverCompletionFunc *cb, void *opaque)
4894 {
4895     BlockDriverAIOCB *acb;
4896
4897     acb = g_slice_alloc(aiocb_info->aiocb_size);
4898     acb->aiocb_info = aiocb_info;
4899     acb->bs = bs;
4900     acb->cb = cb;
4901     acb->opaque = opaque;
4902     acb->refcnt = 1;
4903     return acb;
4904 }
4905
4906 void qemu_aio_ref(void *p)
4907 {
4908     BlockDriverAIOCB *acb = p;
4909     acb->refcnt++;
4910 }
4911
4912 void qemu_aio_unref(void *p)
4913 {
4914     BlockDriverAIOCB *acb = p;
4915     assert(acb->refcnt > 0);
4916     if (--acb->refcnt == 0) {
4917         g_slice_free1(acb->aiocb_info->aiocb_size, acb);
4918     }
4919 }
4920
4921 /**************************************************************/
4922 /* Coroutine block device emulation */
4923
4924 typedef struct CoroutineIOCompletion {
4925     Coroutine *coroutine;
4926     int ret;
4927 } CoroutineIOCompletion;
4928
4929 static void bdrv_co_io_em_complete(void *opaque, int ret)
4930 {
4931     CoroutineIOCompletion *co = opaque;
4932
4933     co->ret = ret;
4934     qemu_coroutine_enter(co->coroutine, NULL);
4935 }
4936
4937 static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
4938                                       int nb_sectors, QEMUIOVector *iov,
4939                                       bool is_write)
4940 {
4941     CoroutineIOCompletion co = {
4942         .coroutine = qemu_coroutine_self(),
4943     };
4944     BlockDriverAIOCB *acb;
4945
4946     if (is_write) {
4947         acb = bs->drv->bdrv_aio_writev(bs, sector_num, iov, nb_sectors,
4948                                        bdrv_co_io_em_complete, &co);
4949     } else {
4950         acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors,
4951                                       bdrv_co_io_em_complete, &co);
4952     }
4953
4954     trace_bdrv_co_io_em(bs, sector_num, nb_sectors, is_write, acb);
4955     if (!acb) {
4956         return -EIO;
4957     }
4958     qemu_coroutine_yield();
4959
4960     return co.ret;
4961 }
4962
4963 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
4964                                          int64_t sector_num, int nb_sectors,
4965                                          QEMUIOVector *iov)
4966 {
4967     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, false);
4968 }
4969
4970 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
4971                                          int64_t sector_num, int nb_sectors,
4972                                          QEMUIOVector *iov)
4973 {
4974     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, true);
4975 }
4976
4977 static void coroutine_fn bdrv_flush_co_entry(void *opaque)
4978 {
4979     RwCo *rwco = opaque;
4980
4981     rwco->ret = bdrv_co_flush(rwco->bs);
4982 }
4983
4984 int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
4985 {
4986     int ret;
4987
4988     if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
4989         return 0;
4990     }
4991
4992     /* Write back cached data to the OS even with cache=unsafe */
4993     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS);
4994     if (bs->drv->bdrv_co_flush_to_os) {
4995         ret = bs->drv->bdrv_co_flush_to_os(bs);
4996         if (ret < 0) {
4997             return ret;
4998         }
4999     }
5000
5001     /* But don't actually force it to the disk with cache=unsafe */
5002     if (bs->open_flags & BDRV_O_NO_FLUSH) {
5003         goto flush_parent;
5004     }
5005
5006     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_DISK);
5007     if (bs->drv->bdrv_co_flush_to_disk) {
5008         ret = bs->drv->bdrv_co_flush_to_disk(bs);
5009     } else if (bs->drv->bdrv_aio_flush) {
5010         BlockDriverAIOCB *acb;
5011         CoroutineIOCompletion co = {
5012             .coroutine = qemu_coroutine_self(),
5013         };
5014
5015         acb = bs->drv->bdrv_aio_flush(bs, bdrv_co_io_em_complete, &co);
5016         if (acb == NULL) {
5017             ret = -EIO;
5018         } else {
5019             qemu_coroutine_yield();
5020             ret = co.ret;
5021         }
5022     } else {
5023         /*
5024          * Some block drivers always operate in either writethrough or unsafe
5025          * mode and don't support bdrv_flush therefore. Usually qemu doesn't
5026          * know how the server works (because the behaviour is hardcoded or
5027          * depends on server-side configuration), so we can't ensure that
5028          * everything is safe on disk. Returning an error doesn't work because
5029          * that would break guests even if the server operates in writethrough
5030          * mode.
5031          *
5032          * Let's hope the user knows what he's doing.
5033          */
5034         ret = 0;
5035     }
5036     if (ret < 0) {
5037         return ret;
5038     }
5039
5040     /* Now flush the underlying protocol.  It will also have BDRV_O_NO_FLUSH
5041      * in the case of cache=unsafe, so there are no useless flushes.
5042      */
5043 flush_parent:
5044     return bdrv_co_flush(bs->file);
5045 }
5046
5047 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
5048 {
5049     Error *local_err = NULL;
5050     int ret;
5051
5052     if (!bs->drv)  {
5053         return;
5054     }
5055
5056     if (!(bs->open_flags & BDRV_O_INCOMING)) {
5057         return;
5058     }
5059     bs->open_flags &= ~BDRV_O_INCOMING;
5060
5061     if (bs->drv->bdrv_invalidate_cache) {
5062         bs->drv->bdrv_invalidate_cache(bs, &local_err);
5063     } else if (bs->file) {
5064         bdrv_invalidate_cache(bs->file, &local_err);
5065     }
5066     if (local_err) {
5067         error_propagate(errp, local_err);
5068         return;
5069     }
5070
5071     ret = refresh_total_sectors(bs, bs->total_sectors);
5072     if (ret < 0) {
5073         error_setg_errno(errp, -ret, "Could not refresh total sector count");
5074         return;
5075     }
5076 }
5077
5078 void bdrv_invalidate_cache_all(Error **errp)
5079 {
5080     BlockDriverState *bs;
5081     Error *local_err = NULL;
5082
5083     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5084         AioContext *aio_context = bdrv_get_aio_context(bs);
5085
5086         aio_context_acquire(aio_context);
5087         bdrv_invalidate_cache(bs, &local_err);
5088         aio_context_release(aio_context);
5089         if (local_err) {
5090             error_propagate(errp, local_err);
5091             return;
5092         }
5093     }
5094 }
5095
5096 int bdrv_flush(BlockDriverState *bs)
5097 {
5098     Coroutine *co;
5099     RwCo rwco = {
5100         .bs = bs,
5101         .ret = NOT_DONE,
5102     };
5103
5104     if (qemu_in_coroutine()) {
5105         /* Fast-path if already in coroutine context */
5106         bdrv_flush_co_entry(&rwco);
5107     } else {
5108         AioContext *aio_context = bdrv_get_aio_context(bs);
5109
5110         co = qemu_coroutine_create(bdrv_flush_co_entry);
5111         qemu_coroutine_enter(co, &rwco);
5112         while (rwco.ret == NOT_DONE) {
5113             aio_poll(aio_context, true);
5114         }
5115     }
5116
5117     return rwco.ret;
5118 }
5119
5120 typedef struct DiscardCo {
5121     BlockDriverState *bs;
5122     int64_t sector_num;
5123     int nb_sectors;
5124     int ret;
5125 } DiscardCo;
5126 static void coroutine_fn bdrv_discard_co_entry(void *opaque)
5127 {
5128     DiscardCo *rwco = opaque;
5129
5130     rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors);
5131 }
5132
5133 /* if no limit is specified in the BlockLimits use a default
5134  * of 32768 512-byte sectors (16 MiB) per request.
5135  */
5136 #define MAX_DISCARD_DEFAULT 32768
5137
5138 int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
5139                                  int nb_sectors)
5140 {
5141     int max_discard;
5142
5143     if (!bs->drv) {
5144         return -ENOMEDIUM;
5145     } else if (bdrv_check_request(bs, sector_num, nb_sectors)) {
5146         return -EIO;
5147     } else if (bs->read_only) {
5148         return -EROFS;
5149     }
5150
5151     bdrv_reset_dirty(bs, sector_num, nb_sectors);
5152
5153     /* Do nothing if disabled.  */
5154     if (!(bs->open_flags & BDRV_O_UNMAP)) {
5155         return 0;
5156     }
5157
5158     if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_discard) {
5159         return 0;
5160     }
5161
5162     max_discard = bs->bl.max_discard ?  bs->bl.max_discard : MAX_DISCARD_DEFAULT;
5163     while (nb_sectors > 0) {
5164         int ret;
5165         int num = nb_sectors;
5166
5167         /* align request */
5168         if (bs->bl.discard_alignment &&
5169             num >= bs->bl.discard_alignment &&
5170             sector_num % bs->bl.discard_alignment) {
5171             if (num > bs->bl.discard_alignment) {
5172                 num = bs->bl.discard_alignment;
5173             }
5174             num -= sector_num % bs->bl.discard_alignment;
5175         }
5176
5177         /* limit request size */
5178         if (num > max_discard) {
5179             num = max_discard;
5180         }
5181
5182         if (bs->drv->bdrv_co_discard) {
5183             ret = bs->drv->bdrv_co_discard(bs, sector_num, num);
5184         } else {
5185             BlockDriverAIOCB *acb;
5186             CoroutineIOCompletion co = {
5187                 .coroutine = qemu_coroutine_self(),
5188             };
5189
5190             acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors,
5191                                             bdrv_co_io_em_complete, &co);
5192             if (acb == NULL) {
5193                 return -EIO;
5194             } else {
5195                 qemu_coroutine_yield();
5196                 ret = co.ret;
5197             }
5198         }
5199         if (ret && ret != -ENOTSUP) {
5200             return ret;
5201         }
5202
5203         sector_num += num;
5204         nb_sectors -= num;
5205     }
5206     return 0;
5207 }
5208
5209 int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
5210 {
5211     Coroutine *co;
5212     DiscardCo rwco = {
5213         .bs = bs,
5214         .sector_num = sector_num,
5215         .nb_sectors = nb_sectors,
5216         .ret = NOT_DONE,
5217     };
5218
5219     if (qemu_in_coroutine()) {
5220         /* Fast-path if already in coroutine context */
5221         bdrv_discard_co_entry(&rwco);
5222     } else {
5223         AioContext *aio_context = bdrv_get_aio_context(bs);
5224
5225         co = qemu_coroutine_create(bdrv_discard_co_entry);
5226         qemu_coroutine_enter(co, &rwco);
5227         while (rwco.ret == NOT_DONE) {
5228             aio_poll(aio_context, true);
5229         }
5230     }
5231
5232     return rwco.ret;
5233 }
5234
5235 /**************************************************************/
5236 /* removable device support */
5237
5238 /**
5239  * Return TRUE if the media is present
5240  */
5241 int bdrv_is_inserted(BlockDriverState *bs)
5242 {
5243     BlockDriver *drv = bs->drv;
5244
5245     if (!drv)
5246         return 0;
5247     if (!drv->bdrv_is_inserted)
5248         return 1;
5249     return drv->bdrv_is_inserted(bs);
5250 }
5251
5252 /**
5253  * Return whether the media changed since the last call to this
5254  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
5255  */
5256 int bdrv_media_changed(BlockDriverState *bs)
5257 {
5258     BlockDriver *drv = bs->drv;
5259
5260     if (drv && drv->bdrv_media_changed) {
5261         return drv->bdrv_media_changed(bs);
5262     }
5263     return -ENOTSUP;
5264 }
5265
5266 /**
5267  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
5268  */
5269 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
5270 {
5271     BlockDriver *drv = bs->drv;
5272
5273     if (drv && drv->bdrv_eject) {
5274         drv->bdrv_eject(bs, eject_flag);
5275     }
5276
5277     if (bs->device_name[0] != '\0') {
5278         qapi_event_send_device_tray_moved(bdrv_get_device_name(bs),
5279                                           eject_flag, &error_abort);
5280     }
5281 }
5282
5283 /**
5284  * Lock or unlock the media (if it is locked, the user won't be able
5285  * to eject it manually).
5286  */
5287 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
5288 {
5289     BlockDriver *drv = bs->drv;
5290
5291     trace_bdrv_lock_medium(bs, locked);
5292
5293     if (drv && drv->bdrv_lock_medium) {
5294         drv->bdrv_lock_medium(bs, locked);
5295     }
5296 }
5297
5298 /* needed for generic scsi interface */
5299
5300 int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
5301 {
5302     BlockDriver *drv = bs->drv;
5303
5304     if (drv && drv->bdrv_ioctl)
5305         return drv->bdrv_ioctl(bs, req, buf);
5306     return -ENOTSUP;
5307 }
5308
5309 BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs,
5310         unsigned long int req, void *buf,
5311         BlockDriverCompletionFunc *cb, void *opaque)
5312 {
5313     BlockDriver *drv = bs->drv;
5314
5315     if (drv && drv->bdrv_aio_ioctl)
5316         return drv->bdrv_aio_ioctl(bs, req, buf, cb, opaque);
5317     return NULL;
5318 }
5319
5320 void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
5321 {
5322     bs->guest_block_size = align;
5323 }
5324
5325 void *qemu_blockalign(BlockDriverState *bs, size_t size)
5326 {
5327     return qemu_memalign(bdrv_opt_mem_align(bs), size);
5328 }
5329
5330 void *qemu_try_blockalign(BlockDriverState *bs, size_t size)
5331 {
5332     size_t align = bdrv_opt_mem_align(bs);
5333
5334     /* Ensure that NULL is never returned on success */
5335     assert(align > 0);
5336     if (size == 0) {
5337         size = align;
5338     }
5339
5340     return qemu_try_memalign(align, size);
5341 }
5342
5343 /*
5344  * Check if all memory in this vector is sector aligned.
5345  */
5346 bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
5347 {
5348     int i;
5349     size_t alignment = bdrv_opt_mem_align(bs);
5350
5351     for (i = 0; i < qiov->niov; i++) {
5352         if ((uintptr_t) qiov->iov[i].iov_base % alignment) {
5353             return false;
5354         }
5355         if (qiov->iov[i].iov_len % alignment) {
5356             return false;
5357         }
5358     }
5359
5360     return true;
5361 }
5362
5363 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity,
5364                                           Error **errp)
5365 {
5366     int64_t bitmap_size;
5367     BdrvDirtyBitmap *bitmap;
5368
5369     assert((granularity & (granularity - 1)) == 0);
5370
5371     granularity >>= BDRV_SECTOR_BITS;
5372     assert(granularity);
5373     bitmap_size = bdrv_nb_sectors(bs);
5374     if (bitmap_size < 0) {
5375         error_setg_errno(errp, -bitmap_size, "could not get length of device");
5376         errno = -bitmap_size;
5377         return NULL;
5378     }
5379     bitmap = g_new0(BdrvDirtyBitmap, 1);
5380     bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1);
5381     QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
5382     return bitmap;
5383 }
5384
5385 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5386 {
5387     BdrvDirtyBitmap *bm, *next;
5388     QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
5389         if (bm == bitmap) {
5390             QLIST_REMOVE(bitmap, list);
5391             hbitmap_free(bitmap->bitmap);
5392             g_free(bitmap);
5393             return;
5394         }
5395     }
5396 }
5397
5398 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
5399 {
5400     BdrvDirtyBitmap *bm;
5401     BlockDirtyInfoList *list = NULL;
5402     BlockDirtyInfoList **plist = &list;
5403
5404     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
5405         BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
5406         BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
5407         info->count = bdrv_get_dirty_count(bs, bm);
5408         info->granularity =
5409             ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bm->bitmap));
5410         entry->value = info;
5411         *plist = entry;
5412         plist = &entry->next;
5413     }
5414
5415     return list;
5416 }
5417
5418 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
5419 {
5420     if (bitmap) {
5421         return hbitmap_get(bitmap->bitmap, sector);
5422     } else {
5423         return 0;
5424     }
5425 }
5426
5427 void bdrv_dirty_iter_init(BlockDriverState *bs,
5428                           BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
5429 {
5430     hbitmap_iter_init(hbi, bitmap->bitmap, 0);
5431 }
5432
5433 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
5434                     int nr_sectors)
5435 {
5436     BdrvDirtyBitmap *bitmap;
5437     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5438         hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
5439     }
5440 }
5441
5442 void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors)
5443 {
5444     BdrvDirtyBitmap *bitmap;
5445     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5446         hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
5447     }
5448 }
5449
5450 int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5451 {
5452     return hbitmap_count(bitmap->bitmap);
5453 }
5454
5455 /* Get a reference to bs */
5456 void bdrv_ref(BlockDriverState *bs)
5457 {
5458     bs->refcnt++;
5459 }
5460
5461 /* Release a previously grabbed reference to bs.
5462  * If after releasing, reference count is zero, the BlockDriverState is
5463  * deleted. */
5464 void bdrv_unref(BlockDriverState *bs)
5465 {
5466     if (!bs) {
5467         return;
5468     }
5469     assert(bs->refcnt > 0);
5470     if (--bs->refcnt == 0) {
5471         bdrv_delete(bs);
5472     }
5473 }
5474
5475 struct BdrvOpBlocker {
5476     Error *reason;
5477     QLIST_ENTRY(BdrvOpBlocker) list;
5478 };
5479
5480 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
5481 {
5482     BdrvOpBlocker *blocker;
5483     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5484     if (!QLIST_EMPTY(&bs->op_blockers[op])) {
5485         blocker = QLIST_FIRST(&bs->op_blockers[op]);
5486         if (errp) {
5487             error_setg(errp, "Device '%s' is busy: %s",
5488                        bs->device_name, error_get_pretty(blocker->reason));
5489         }
5490         return true;
5491     }
5492     return false;
5493 }
5494
5495 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
5496 {
5497     BdrvOpBlocker *blocker;
5498     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5499
5500     blocker = g_new0(BdrvOpBlocker, 1);
5501     blocker->reason = reason;
5502     QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
5503 }
5504
5505 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
5506 {
5507     BdrvOpBlocker *blocker, *next;
5508     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5509     QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
5510         if (blocker->reason == reason) {
5511             QLIST_REMOVE(blocker, list);
5512             g_free(blocker);
5513         }
5514     }
5515 }
5516
5517 void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
5518 {
5519     int i;
5520     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5521         bdrv_op_block(bs, i, reason);
5522     }
5523 }
5524
5525 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
5526 {
5527     int i;
5528     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5529         bdrv_op_unblock(bs, i, reason);
5530     }
5531 }
5532
5533 bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
5534 {
5535     int i;
5536
5537     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5538         if (!QLIST_EMPTY(&bs->op_blockers[i])) {
5539             return false;
5540         }
5541     }
5542     return true;
5543 }
5544
5545 void bdrv_iostatus_enable(BlockDriverState *bs)
5546 {
5547     bs->iostatus_enabled = true;
5548     bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5549 }
5550
5551 /* The I/O status is only enabled if the drive explicitly
5552  * enables it _and_ the VM is configured to stop on errors */
5553 bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
5554 {
5555     return (bs->iostatus_enabled &&
5556            (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
5557             bs->on_write_error == BLOCKDEV_ON_ERROR_STOP   ||
5558             bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
5559 }
5560
5561 void bdrv_iostatus_disable(BlockDriverState *bs)
5562 {
5563     bs->iostatus_enabled = false;
5564 }
5565
5566 void bdrv_iostatus_reset(BlockDriverState *bs)
5567 {
5568     if (bdrv_iostatus_is_enabled(bs)) {
5569         bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5570         if (bs->job) {
5571             block_job_iostatus_reset(bs->job);
5572         }
5573     }
5574 }
5575
5576 void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
5577 {
5578     assert(bdrv_iostatus_is_enabled(bs));
5579     if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
5580         bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
5581                                          BLOCK_DEVICE_IO_STATUS_FAILED;
5582     }
5583 }
5584
5585 void bdrv_img_create(const char *filename, const char *fmt,
5586                      const char *base_filename, const char *base_fmt,
5587                      char *options, uint64_t img_size, int flags,
5588                      Error **errp, bool quiet)
5589 {
5590     QemuOptsList *create_opts = NULL;
5591     QemuOpts *opts = NULL;
5592     const char *backing_fmt, *backing_file;
5593     int64_t size;
5594     BlockDriver *drv, *proto_drv;
5595     BlockDriver *backing_drv = NULL;
5596     Error *local_err = NULL;
5597     int ret = 0;
5598
5599     /* Find driver and parse its options */
5600     drv = bdrv_find_format(fmt);
5601     if (!drv) {
5602         error_setg(errp, "Unknown file format '%s'", fmt);
5603         return;
5604     }
5605
5606     proto_drv = bdrv_find_protocol(filename, true);
5607     if (!proto_drv) {
5608         error_setg(errp, "Unknown protocol '%s'", filename);
5609         return;
5610     }
5611
5612     create_opts = qemu_opts_append(create_opts, drv->create_opts);
5613     create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
5614
5615     /* Create parameter list with default values */
5616     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
5617     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size);
5618
5619     /* Parse -o options */
5620     if (options) {
5621         if (qemu_opts_do_parse(opts, options, NULL) != 0) {
5622             error_setg(errp, "Invalid options for file format '%s'", fmt);
5623             goto out;
5624         }
5625     }
5626
5627     if (base_filename) {
5628         if (qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename)) {
5629             error_setg(errp, "Backing file not supported for file format '%s'",
5630                        fmt);
5631             goto out;
5632         }
5633     }
5634
5635     if (base_fmt) {
5636         if (qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt)) {
5637             error_setg(errp, "Backing file format not supported for file "
5638                              "format '%s'", fmt);
5639             goto out;
5640         }
5641     }
5642
5643     backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
5644     if (backing_file) {
5645         if (!strcmp(filename, backing_file)) {
5646             error_setg(errp, "Error: Trying to create an image with the "
5647                              "same filename as the backing file");
5648             goto out;
5649         }
5650     }
5651
5652     backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
5653     if (backing_fmt) {
5654         backing_drv = bdrv_find_format(backing_fmt);
5655         if (!backing_drv) {
5656             error_setg(errp, "Unknown backing file format '%s'",
5657                        backing_fmt);
5658             goto out;
5659         }
5660     }
5661
5662     // The size for the image must always be specified, with one exception:
5663     // If we are using a backing file, we can obtain the size from there
5664     size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
5665     if (size == -1) {
5666         if (backing_file) {
5667             BlockDriverState *bs;
5668             int64_t size;
5669             int back_flags;
5670
5671             /* backing files always opened read-only */
5672             back_flags =
5673                 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
5674
5675             bs = NULL;
5676             ret = bdrv_open(&bs, backing_file, NULL, NULL, back_flags,
5677                             backing_drv, &local_err);
5678             if (ret < 0) {
5679                 error_setg_errno(errp, -ret, "Could not open '%s': %s",
5680                                  backing_file,
5681                                  error_get_pretty(local_err));
5682                 error_free(local_err);
5683                 local_err = NULL;
5684                 goto out;
5685             }
5686             size = bdrv_getlength(bs);
5687             if (size < 0) {
5688                 error_setg_errno(errp, -size, "Could not get size of '%s'",
5689                                  backing_file);
5690                 bdrv_unref(bs);
5691                 goto out;
5692             }
5693
5694             qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size);
5695
5696             bdrv_unref(bs);
5697         } else {
5698             error_setg(errp, "Image creation needs a size parameter");
5699             goto out;
5700         }
5701     }
5702
5703     if (!quiet) {
5704         printf("Formatting '%s', fmt=%s ", filename, fmt);
5705         qemu_opts_print(opts);
5706         puts("");
5707     }
5708
5709     ret = bdrv_create(drv, filename, opts, &local_err);
5710
5711     if (ret == -EFBIG) {
5712         /* This is generally a better message than whatever the driver would
5713          * deliver (especially because of the cluster_size_hint), since that
5714          * is most probably not much different from "image too large". */
5715         const char *cluster_size_hint = "";
5716         if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
5717             cluster_size_hint = " (try using a larger cluster size)";
5718         }
5719         error_setg(errp, "The image size is too large for file format '%s'"
5720                    "%s", fmt, cluster_size_hint);
5721         error_free(local_err);
5722         local_err = NULL;
5723     }
5724
5725 out:
5726     qemu_opts_del(opts);
5727     qemu_opts_free(create_opts);
5728     if (local_err) {
5729         error_propagate(errp, local_err);
5730     }
5731 }
5732
5733 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
5734 {
5735     return bs->aio_context;
5736 }
5737
5738 void bdrv_detach_aio_context(BlockDriverState *bs)
5739 {
5740     BdrvAioNotifier *baf;
5741
5742     if (!bs->drv) {
5743         return;
5744     }
5745
5746     QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
5747         baf->detach_aio_context(baf->opaque);
5748     }
5749
5750     if (bs->io_limits_enabled) {
5751         throttle_detach_aio_context(&bs->throttle_state);
5752     }
5753     if (bs->drv->bdrv_detach_aio_context) {
5754         bs->drv->bdrv_detach_aio_context(bs);
5755     }
5756     if (bs->file) {
5757         bdrv_detach_aio_context(bs->file);
5758     }
5759     if (bs->backing_hd) {
5760         bdrv_detach_aio_context(bs->backing_hd);
5761     }
5762
5763     bs->aio_context = NULL;
5764 }
5765
5766 void bdrv_attach_aio_context(BlockDriverState *bs,
5767                              AioContext *new_context)
5768 {
5769     BdrvAioNotifier *ban;
5770
5771     if (!bs->drv) {
5772         return;
5773     }
5774
5775     bs->aio_context = new_context;
5776
5777     if (bs->backing_hd) {
5778         bdrv_attach_aio_context(bs->backing_hd, new_context);
5779     }
5780     if (bs->file) {
5781         bdrv_attach_aio_context(bs->file, new_context);
5782     }
5783     if (bs->drv->bdrv_attach_aio_context) {
5784         bs->drv->bdrv_attach_aio_context(bs, new_context);
5785     }
5786     if (bs->io_limits_enabled) {
5787         throttle_attach_aio_context(&bs->throttle_state, new_context);
5788     }
5789
5790     QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
5791         ban->attached_aio_context(new_context, ban->opaque);
5792     }
5793 }
5794
5795 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
5796 {
5797     bdrv_drain_all(); /* ensure there are no in-flight requests */
5798
5799     bdrv_detach_aio_context(bs);
5800
5801     /* This function executes in the old AioContext so acquire the new one in
5802      * case it runs in a different thread.
5803      */
5804     aio_context_acquire(new_context);
5805     bdrv_attach_aio_context(bs, new_context);
5806     aio_context_release(new_context);
5807 }
5808
5809 void bdrv_add_aio_context_notifier(BlockDriverState *bs,
5810         void (*attached_aio_context)(AioContext *new_context, void *opaque),
5811         void (*detach_aio_context)(void *opaque), void *opaque)
5812 {
5813     BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
5814     *ban = (BdrvAioNotifier){
5815         .attached_aio_context = attached_aio_context,
5816         .detach_aio_context   = detach_aio_context,
5817         .opaque               = opaque
5818     };
5819
5820     QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
5821 }
5822
5823 void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
5824                                       void (*attached_aio_context)(AioContext *,
5825                                                                    void *),
5826                                       void (*detach_aio_context)(void *),
5827                                       void *opaque)
5828 {
5829     BdrvAioNotifier *ban, *ban_next;
5830
5831     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
5832         if (ban->attached_aio_context == attached_aio_context &&
5833             ban->detach_aio_context   == detach_aio_context   &&
5834             ban->opaque               == opaque)
5835         {
5836             QLIST_REMOVE(ban, list);
5837             g_free(ban);
5838
5839             return;
5840         }
5841     }
5842
5843     abort();
5844 }
5845
5846 void bdrv_add_before_write_notifier(BlockDriverState *bs,
5847                                     NotifierWithReturn *notifier)
5848 {
5849     notifier_with_return_list_add(&bs->before_write_notifiers, notifier);
5850 }
5851
5852 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts)
5853 {
5854     if (!bs->drv->bdrv_amend_options) {
5855         return -ENOTSUP;
5856     }
5857     return bs->drv->bdrv_amend_options(bs, opts);
5858 }
5859
5860 /* This function will be called by the bdrv_recurse_is_first_non_filter method
5861  * of block filter and by bdrv_is_first_non_filter.
5862  * It is used to test if the given bs is the candidate or recurse more in the
5863  * node graph.
5864  */
5865 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
5866                                       BlockDriverState *candidate)
5867 {
5868     /* return false if basic checks fails */
5869     if (!bs || !bs->drv) {
5870         return false;
5871     }
5872
5873     /* the code reached a non block filter driver -> check if the bs is
5874      * the same as the candidate. It's the recursion termination condition.
5875      */
5876     if (!bs->drv->is_filter) {
5877         return bs == candidate;
5878     }
5879     /* Down this path the driver is a block filter driver */
5880
5881     /* If the block filter recursion method is defined use it to recurse down
5882      * the node graph.
5883      */
5884     if (bs->drv->bdrv_recurse_is_first_non_filter) {
5885         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
5886     }
5887
5888     /* the driver is a block filter but don't allow to recurse -> return false
5889      */
5890     return false;
5891 }
5892
5893 /* This function checks if the candidate is the first non filter bs down it's
5894  * bs chain. Since we don't have pointers to parents it explore all bs chains
5895  * from the top. Some filters can choose not to pass down the recursion.
5896  */
5897 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
5898 {
5899     BlockDriverState *bs;
5900
5901     /* walk down the bs forest recursively */
5902     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5903         bool perm;
5904
5905         /* try to recurse in this top level bs */
5906         perm = bdrv_recurse_is_first_non_filter(bs, candidate);
5907
5908         /* candidate is the first non filter */
5909         if (perm) {
5910             return true;
5911         }
5912     }
5913
5914     return false;
5915 }
5916
5917 BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
5918 {
5919     BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
5920     if (!to_replace_bs) {
5921         error_setg(errp, "Node name '%s' not found", node_name);
5922         return NULL;
5923     }
5924
5925     if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
5926         return NULL;
5927     }
5928
5929     /* We don't want arbitrary node of the BDS chain to be replaced only the top
5930      * most non filter in order to prevent data corruption.
5931      * Another benefit is that this tests exclude backing files which are
5932      * blocked by the backing blockers.
5933      */
5934     if (!bdrv_is_first_non_filter(to_replace_bs)) {
5935         error_setg(errp, "Only top most non filter can be replaced");
5936         return NULL;
5937     }
5938
5939     return to_replace_bs;
5940 }
5941
5942 void bdrv_io_plug(BlockDriverState *bs)
5943 {
5944     BlockDriver *drv = bs->drv;
5945     if (drv && drv->bdrv_io_plug) {
5946         drv->bdrv_io_plug(bs);
5947     } else if (bs->file) {
5948         bdrv_io_plug(bs->file);
5949     }
5950 }
5951
5952 void bdrv_io_unplug(BlockDriverState *bs)
5953 {
5954     BlockDriver *drv = bs->drv;
5955     if (drv && drv->bdrv_io_unplug) {
5956         drv->bdrv_io_unplug(bs);
5957     } else if (bs->file) {
5958         bdrv_io_unplug(bs->file);
5959     }
5960 }
5961
5962 void bdrv_flush_io_queue(BlockDriverState *bs)
5963 {
5964     BlockDriver *drv = bs->drv;
5965     if (drv && drv->bdrv_flush_io_queue) {
5966         drv->bdrv_flush_io_queue(bs);
5967     } else if (bs->file) {
5968         bdrv_flush_io_queue(bs->file);
5969     }
5970 }
5971
5972 static bool append_open_options(QDict *d, BlockDriverState *bs)
5973 {
5974     const QDictEntry *entry;
5975     bool found_any = false;
5976
5977     for (entry = qdict_first(bs->options); entry;
5978          entry = qdict_next(bs->options, entry))
5979     {
5980         /* Only take options for this level and exclude all non-driver-specific
5981          * options */
5982         if (!strchr(qdict_entry_key(entry), '.') &&
5983             strcmp(qdict_entry_key(entry), "node-name"))
5984         {
5985             qobject_incref(qdict_entry_value(entry));
5986             qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
5987             found_any = true;
5988         }
5989     }
5990
5991     return found_any;
5992 }
5993
5994 /* Updates the following BDS fields:
5995  *  - exact_filename: A filename which may be used for opening a block device
5996  *                    which (mostly) equals the given BDS (even without any
5997  *                    other options; so reading and writing must return the same
5998  *                    results, but caching etc. may be different)
5999  *  - full_open_options: Options which, when given when opening a block device
6000  *                       (without a filename), result in a BDS (mostly)
6001  *                       equalling the given one
6002  *  - filename: If exact_filename is set, it is copied here. Otherwise,
6003  *              full_open_options is converted to a JSON object, prefixed with
6004  *              "json:" (for use through the JSON pseudo protocol) and put here.
6005  */
6006 void bdrv_refresh_filename(BlockDriverState *bs)
6007 {
6008     BlockDriver *drv = bs->drv;
6009     QDict *opts;
6010
6011     if (!drv) {
6012         return;
6013     }
6014
6015     /* This BDS's file name will most probably depend on its file's name, so
6016      * refresh that first */
6017     if (bs->file) {
6018         bdrv_refresh_filename(bs->file);
6019     }
6020
6021     if (drv->bdrv_refresh_filename) {
6022         /* Obsolete information is of no use here, so drop the old file name
6023          * information before refreshing it */
6024         bs->exact_filename[0] = '\0';
6025         if (bs->full_open_options) {
6026             QDECREF(bs->full_open_options);
6027             bs->full_open_options = NULL;
6028         }
6029
6030         drv->bdrv_refresh_filename(bs);
6031     } else if (bs->file) {
6032         /* Try to reconstruct valid information from the underlying file */
6033         bool has_open_options;
6034
6035         bs->exact_filename[0] = '\0';
6036         if (bs->full_open_options) {
6037             QDECREF(bs->full_open_options);
6038             bs->full_open_options = NULL;
6039         }
6040
6041         opts = qdict_new();
6042         has_open_options = append_open_options(opts, bs);
6043
6044         /* If no specific options have been given for this BDS, the filename of
6045          * the underlying file should suffice for this one as well */
6046         if (bs->file->exact_filename[0] && !has_open_options) {
6047             strcpy(bs->exact_filename, bs->file->exact_filename);
6048         }
6049         /* Reconstructing the full options QDict is simple for most format block
6050          * drivers, as long as the full options are known for the underlying
6051          * file BDS. The full options QDict of that file BDS should somehow
6052          * contain a representation of the filename, therefore the following
6053          * suffices without querying the (exact_)filename of this BDS. */
6054         if (bs->file->full_open_options) {
6055             qdict_put_obj(opts, "driver",
6056                           QOBJECT(qstring_from_str(drv->format_name)));
6057             QINCREF(bs->file->full_open_options);
6058             qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
6059
6060             bs->full_open_options = opts;
6061         } else {
6062             QDECREF(opts);
6063         }
6064     } else if (!bs->full_open_options && qdict_size(bs->options)) {
6065         /* There is no underlying file BDS (at least referenced by BDS.file),
6066          * so the full options QDict should be equal to the options given
6067          * specifically for this block device when it was opened (plus the
6068          * driver specification).
6069          * Because those options don't change, there is no need to update
6070          * full_open_options when it's already set. */
6071
6072         opts = qdict_new();
6073         append_open_options(opts, bs);
6074         qdict_put_obj(opts, "driver",
6075                       QOBJECT(qstring_from_str(drv->format_name)));
6076
6077         if (bs->exact_filename[0]) {
6078             /* This may not work for all block protocol drivers (some may
6079              * require this filename to be parsed), but we have to find some
6080              * default solution here, so just include it. If some block driver
6081              * does not support pure options without any filename at all or
6082              * needs some special format of the options QDict, it needs to
6083              * implement the driver-specific bdrv_refresh_filename() function.
6084              */
6085             qdict_put_obj(opts, "filename",
6086                           QOBJECT(qstring_from_str(bs->exact_filename)));
6087         }
6088
6089         bs->full_open_options = opts;
6090     }
6091
6092     if (bs->exact_filename[0]) {
6093         pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
6094     } else if (bs->full_open_options) {
6095         QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
6096         snprintf(bs->filename, sizeof(bs->filename), "json:%s",
6097                  qstring_get_str(json));
6098         QDECREF(json);
6099     }
6100 }
6101
6102 /* This accessor function purpose is to allow the device models to access the
6103  * BlockAcctStats structure embedded inside a BlockDriverState without being
6104  * aware of the BlockDriverState structure layout.
6105  * It will go away when the BlockAcctStats structure will be moved inside
6106  * the device models.
6107  */
6108 BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
6109 {
6110     return &bs->stats;
6111 }
This page took 0.347221 seconds and 2 git commands to generate.