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