]> Git Repo - qemu.git/blob - block.c
audio/intel-hda: support FIFORDY
[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;
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) && !(ret & BDRV_BLOCK_ZERO)) {
3887         if (bdrv_unallocated_blocks_are_zero(bs)) {
3888             ret |= BDRV_BLOCK_ZERO;
3889         } else if (bs->backing_hd) {
3890             BlockDriverState *bs2 = bs->backing_hd;
3891             int64_t length2 = bdrv_getlength(bs2);
3892             if (length2 >= 0 && sector_num >= (length2 >> BDRV_SECTOR_BITS)) {
3893                 ret |= BDRV_BLOCK_ZERO;
3894             }
3895         }
3896     }
3897
3898     if (bs->file &&
3899         (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) &&
3900         (ret & BDRV_BLOCK_OFFSET_VALID)) {
3901         ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
3902                                         *pnum, pnum);
3903         if (ret2 >= 0) {
3904             /* Ignore errors.  This is just providing extra information, it
3905              * is useful but not necessary.
3906              */
3907             ret |= (ret2 & BDRV_BLOCK_ZERO);
3908         }
3909     }
3910
3911     return ret;
3912 }
3913
3914 /* Coroutine wrapper for bdrv_get_block_status() */
3915 static void coroutine_fn bdrv_get_block_status_co_entry(void *opaque)
3916 {
3917     BdrvCoGetBlockStatusData *data = opaque;
3918     BlockDriverState *bs = data->bs;
3919
3920     data->ret = bdrv_co_get_block_status(bs, data->sector_num, data->nb_sectors,
3921                                          data->pnum);
3922     data->done = true;
3923 }
3924
3925 /*
3926  * Synchronous wrapper around bdrv_co_get_block_status().
3927  *
3928  * See bdrv_co_get_block_status() for details.
3929  */
3930 int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
3931                               int nb_sectors, int *pnum)
3932 {
3933     Coroutine *co;
3934     BdrvCoGetBlockStatusData data = {
3935         .bs = bs,
3936         .sector_num = sector_num,
3937         .nb_sectors = nb_sectors,
3938         .pnum = pnum,
3939         .done = false,
3940     };
3941
3942     if (qemu_in_coroutine()) {
3943         /* Fast-path if already in coroutine context */
3944         bdrv_get_block_status_co_entry(&data);
3945     } else {
3946         co = qemu_coroutine_create(bdrv_get_block_status_co_entry);
3947         qemu_coroutine_enter(co, &data);
3948         while (!data.done) {
3949             qemu_aio_wait();
3950         }
3951     }
3952     return data.ret;
3953 }
3954
3955 int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num,
3956                                    int nb_sectors, int *pnum)
3957 {
3958     int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
3959     if (ret < 0) {
3960         return ret;
3961     }
3962     return
3963         (ret & BDRV_BLOCK_DATA) ||
3964         ((ret & BDRV_BLOCK_ZERO) && !bdrv_has_zero_init(bs));
3965 }
3966
3967 /*
3968  * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP]
3969  *
3970  * Return true if the given sector is allocated in any image between
3971  * BASE and TOP (inclusive).  BASE can be NULL to check if the given
3972  * sector is allocated in any image of the chain.  Return false otherwise.
3973  *
3974  * 'pnum' is set to the number of sectors (including and immediately following
3975  *  the specified sector) that are known to be in the same
3976  *  allocated/unallocated state.
3977  *
3978  */
3979 int bdrv_is_allocated_above(BlockDriverState *top,
3980                             BlockDriverState *base,
3981                             int64_t sector_num,
3982                             int nb_sectors, int *pnum)
3983 {
3984     BlockDriverState *intermediate;
3985     int ret, n = nb_sectors;
3986
3987     intermediate = top;
3988     while (intermediate && intermediate != base) {
3989         int pnum_inter;
3990         ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors,
3991                                 &pnum_inter);
3992         if (ret < 0) {
3993             return ret;
3994         } else if (ret) {
3995             *pnum = pnum_inter;
3996             return 1;
3997         }
3998
3999         /*
4000          * [sector_num, nb_sectors] is unallocated on top but intermediate
4001          * might have
4002          *
4003          * [sector_num+x, nr_sectors] allocated.
4004          */
4005         if (n > pnum_inter &&
4006             (intermediate == top ||
4007              sector_num + pnum_inter < intermediate->total_sectors)) {
4008             n = pnum_inter;
4009         }
4010
4011         intermediate = intermediate->backing_hd;
4012     }
4013
4014     *pnum = n;
4015     return 0;
4016 }
4017
4018 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
4019 {
4020     if (bs->backing_hd && bs->backing_hd->encrypted)
4021         return bs->backing_file;
4022     else if (bs->encrypted)
4023         return bs->filename;
4024     else
4025         return NULL;
4026 }
4027
4028 void bdrv_get_backing_filename(BlockDriverState *bs,
4029                                char *filename, int filename_size)
4030 {
4031     pstrcpy(filename, filename_size, bs->backing_file);
4032 }
4033
4034 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
4035                           const uint8_t *buf, int nb_sectors)
4036 {
4037     BlockDriver *drv = bs->drv;
4038     if (!drv)
4039         return -ENOMEDIUM;
4040     if (!drv->bdrv_write_compressed)
4041         return -ENOTSUP;
4042     if (bdrv_check_request(bs, sector_num, nb_sectors))
4043         return -EIO;
4044
4045     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
4046
4047     return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
4048 }
4049
4050 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
4051 {
4052     BlockDriver *drv = bs->drv;
4053     if (!drv)
4054         return -ENOMEDIUM;
4055     if (!drv->bdrv_get_info)
4056         return -ENOTSUP;
4057     memset(bdi, 0, sizeof(*bdi));
4058     return drv->bdrv_get_info(bs, bdi);
4059 }
4060
4061 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
4062 {
4063     BlockDriver *drv = bs->drv;
4064     if (drv && drv->bdrv_get_specific_info) {
4065         return drv->bdrv_get_specific_info(bs);
4066     }
4067     return NULL;
4068 }
4069
4070 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
4071                       int64_t pos, int size)
4072 {
4073     QEMUIOVector qiov;
4074     struct iovec iov = {
4075         .iov_base   = (void *) buf,
4076         .iov_len    = size,
4077     };
4078
4079     qemu_iovec_init_external(&qiov, &iov, 1);
4080     return bdrv_writev_vmstate(bs, &qiov, pos);
4081 }
4082
4083 int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
4084 {
4085     BlockDriver *drv = bs->drv;
4086
4087     if (!drv) {
4088         return -ENOMEDIUM;
4089     } else if (drv->bdrv_save_vmstate) {
4090         return drv->bdrv_save_vmstate(bs, qiov, pos);
4091     } else if (bs->file) {
4092         return bdrv_writev_vmstate(bs->file, qiov, pos);
4093     }
4094
4095     return -ENOTSUP;
4096 }
4097
4098 int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
4099                       int64_t pos, int size)
4100 {
4101     BlockDriver *drv = bs->drv;
4102     if (!drv)
4103         return -ENOMEDIUM;
4104     if (drv->bdrv_load_vmstate)
4105         return drv->bdrv_load_vmstate(bs, buf, pos, size);
4106     if (bs->file)
4107         return bdrv_load_vmstate(bs->file, buf, pos, size);
4108     return -ENOTSUP;
4109 }
4110
4111 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
4112 {
4113     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
4114         return;
4115     }
4116
4117     bs->drv->bdrv_debug_event(bs, event);
4118 }
4119
4120 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
4121                           const char *tag)
4122 {
4123     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
4124         bs = bs->file;
4125     }
4126
4127     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
4128         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
4129     }
4130
4131     return -ENOTSUP;
4132 }
4133
4134 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
4135 {
4136     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
4137         bs = bs->file;
4138     }
4139
4140     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
4141         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
4142     }
4143
4144     return -ENOTSUP;
4145 }
4146
4147 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
4148 {
4149     while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
4150         bs = bs->file;
4151     }
4152
4153     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
4154         return bs->drv->bdrv_debug_resume(bs, tag);
4155     }
4156
4157     return -ENOTSUP;
4158 }
4159
4160 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
4161 {
4162     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
4163         bs = bs->file;
4164     }
4165
4166     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
4167         return bs->drv->bdrv_debug_is_suspended(bs, tag);
4168     }
4169
4170     return false;
4171 }
4172
4173 int bdrv_is_snapshot(BlockDriverState *bs)
4174 {
4175     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
4176 }
4177
4178 /* backing_file can either be relative, or absolute, or a protocol.  If it is
4179  * relative, it must be relative to the chain.  So, passing in bs->filename
4180  * from a BDS as backing_file should not be done, as that may be relative to
4181  * the CWD rather than the chain. */
4182 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
4183         const char *backing_file)
4184 {
4185     char *filename_full = NULL;
4186     char *backing_file_full = NULL;
4187     char *filename_tmp = NULL;
4188     int is_protocol = 0;
4189     BlockDriverState *curr_bs = NULL;
4190     BlockDriverState *retval = NULL;
4191
4192     if (!bs || !bs->drv || !backing_file) {
4193         return NULL;
4194     }
4195
4196     filename_full     = g_malloc(PATH_MAX);
4197     backing_file_full = g_malloc(PATH_MAX);
4198     filename_tmp      = g_malloc(PATH_MAX);
4199
4200     is_protocol = path_has_protocol(backing_file);
4201
4202     for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
4203
4204         /* If either of the filename paths is actually a protocol, then
4205          * compare unmodified paths; otherwise make paths relative */
4206         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
4207             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
4208                 retval = curr_bs->backing_hd;
4209                 break;
4210             }
4211         } else {
4212             /* If not an absolute filename path, make it relative to the current
4213              * image's filename path */
4214             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4215                          backing_file);
4216
4217             /* We are going to compare absolute pathnames */
4218             if (!realpath(filename_tmp, filename_full)) {
4219                 continue;
4220             }
4221
4222             /* We need to make sure the backing filename we are comparing against
4223              * is relative to the current image filename (or absolute) */
4224             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4225                          curr_bs->backing_file);
4226
4227             if (!realpath(filename_tmp, backing_file_full)) {
4228                 continue;
4229             }
4230
4231             if (strcmp(backing_file_full, filename_full) == 0) {
4232                 retval = curr_bs->backing_hd;
4233                 break;
4234             }
4235         }
4236     }
4237
4238     g_free(filename_full);
4239     g_free(backing_file_full);
4240     g_free(filename_tmp);
4241     return retval;
4242 }
4243
4244 int bdrv_get_backing_file_depth(BlockDriverState *bs)
4245 {
4246     if (!bs->drv) {
4247         return 0;
4248     }
4249
4250     if (!bs->backing_hd) {
4251         return 0;
4252     }
4253
4254     return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
4255 }
4256
4257 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
4258 {
4259     BlockDriverState *curr_bs = NULL;
4260
4261     if (!bs) {
4262         return NULL;
4263     }
4264
4265     curr_bs = bs;
4266
4267     while (curr_bs->backing_hd) {
4268         curr_bs = curr_bs->backing_hd;
4269     }
4270     return curr_bs;
4271 }
4272
4273 /**************************************************************/
4274 /* async I/Os */
4275
4276 BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
4277                                  QEMUIOVector *qiov, int nb_sectors,
4278                                  BlockDriverCompletionFunc *cb, void *opaque)
4279 {
4280     trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
4281
4282     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4283                                  cb, opaque, false);
4284 }
4285
4286 BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
4287                                   QEMUIOVector *qiov, int nb_sectors,
4288                                   BlockDriverCompletionFunc *cb, void *opaque)
4289 {
4290     trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque);
4291
4292     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4293                                  cb, opaque, true);
4294 }
4295
4296 BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs,
4297         int64_t sector_num, int nb_sectors, BdrvRequestFlags flags,
4298         BlockDriverCompletionFunc *cb, void *opaque)
4299 {
4300     trace_bdrv_aio_write_zeroes(bs, sector_num, nb_sectors, flags, opaque);
4301
4302     return bdrv_co_aio_rw_vector(bs, sector_num, NULL, nb_sectors,
4303                                  BDRV_REQ_ZERO_WRITE | flags,
4304                                  cb, opaque, true);
4305 }
4306
4307
4308 typedef struct MultiwriteCB {
4309     int error;
4310     int num_requests;
4311     int num_callbacks;
4312     struct {
4313         BlockDriverCompletionFunc *cb;
4314         void *opaque;
4315         QEMUIOVector *free_qiov;
4316     } callbacks[];
4317 } MultiwriteCB;
4318
4319 static void multiwrite_user_cb(MultiwriteCB *mcb)
4320 {
4321     int i;
4322
4323     for (i = 0; i < mcb->num_callbacks; i++) {
4324         mcb->callbacks[i].cb(mcb->callbacks[i].opaque, mcb->error);
4325         if (mcb->callbacks[i].free_qiov) {
4326             qemu_iovec_destroy(mcb->callbacks[i].free_qiov);
4327         }
4328         g_free(mcb->callbacks[i].free_qiov);
4329     }
4330 }
4331
4332 static void multiwrite_cb(void *opaque, int ret)
4333 {
4334     MultiwriteCB *mcb = opaque;
4335
4336     trace_multiwrite_cb(mcb, ret);
4337
4338     if (ret < 0 && !mcb->error) {
4339         mcb->error = ret;
4340     }
4341
4342     mcb->num_requests--;
4343     if (mcb->num_requests == 0) {
4344         multiwrite_user_cb(mcb);
4345         g_free(mcb);
4346     }
4347 }
4348
4349 static int multiwrite_req_compare(const void *a, const void *b)
4350 {
4351     const BlockRequest *req1 = a, *req2 = b;
4352
4353     /*
4354      * Note that we can't simply subtract req2->sector from req1->sector
4355      * here as that could overflow the return value.
4356      */
4357     if (req1->sector > req2->sector) {
4358         return 1;
4359     } else if (req1->sector < req2->sector) {
4360         return -1;
4361     } else {
4362         return 0;
4363     }
4364 }
4365
4366 /*
4367  * Takes a bunch of requests and tries to merge them. Returns the number of
4368  * requests that remain after merging.
4369  */
4370 static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
4371     int num_reqs, MultiwriteCB *mcb)
4372 {
4373     int i, outidx;
4374
4375     // Sort requests by start sector
4376     qsort(reqs, num_reqs, sizeof(*reqs), &multiwrite_req_compare);
4377
4378     // Check if adjacent requests touch the same clusters. If so, combine them,
4379     // filling up gaps with zero sectors.
4380     outidx = 0;
4381     for (i = 1; i < num_reqs; i++) {
4382         int merge = 0;
4383         int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
4384
4385         // Handle exactly sequential writes and overlapping writes.
4386         if (reqs[i].sector <= oldreq_last) {
4387             merge = 1;
4388         }
4389
4390         if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) {
4391             merge = 0;
4392         }
4393
4394         if (merge) {
4395             size_t size;
4396             QEMUIOVector *qiov = g_malloc0(sizeof(*qiov));
4397             qemu_iovec_init(qiov,
4398                 reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1);
4399
4400             // Add the first request to the merged one. If the requests are
4401             // overlapping, drop the last sectors of the first request.
4402             size = (reqs[i].sector - reqs[outidx].sector) << 9;
4403             qemu_iovec_concat(qiov, reqs[outidx].qiov, 0, size);
4404
4405             // We should need to add any zeros between the two requests
4406             assert (reqs[i].sector <= oldreq_last);
4407
4408             // Add the second request
4409             qemu_iovec_concat(qiov, reqs[i].qiov, 0, reqs[i].qiov->size);
4410
4411             reqs[outidx].nb_sectors = qiov->size >> 9;
4412             reqs[outidx].qiov = qiov;
4413
4414             mcb->callbacks[i].free_qiov = reqs[outidx].qiov;
4415         } else {
4416             outidx++;
4417             reqs[outidx].sector     = reqs[i].sector;
4418             reqs[outidx].nb_sectors = reqs[i].nb_sectors;
4419             reqs[outidx].qiov       = reqs[i].qiov;
4420         }
4421     }
4422
4423     return outidx + 1;
4424 }
4425
4426 /*
4427  * Submit multiple AIO write requests at once.
4428  *
4429  * On success, the function returns 0 and all requests in the reqs array have
4430  * been submitted. In error case this function returns -1, and any of the
4431  * requests may or may not be submitted yet. In particular, this means that the
4432  * callback will be called for some of the requests, for others it won't. The
4433  * caller must check the error field of the BlockRequest to wait for the right
4434  * callbacks (if error != 0, no callback will be called).
4435  *
4436  * The implementation may modify the contents of the reqs array, e.g. to merge
4437  * requests. However, the fields opaque and error are left unmodified as they
4438  * are used to signal failure for a single request to the caller.
4439  */
4440 int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
4441 {
4442     MultiwriteCB *mcb;
4443     int i;
4444
4445     /* don't submit writes if we don't have a medium */
4446     if (bs->drv == NULL) {
4447         for (i = 0; i < num_reqs; i++) {
4448             reqs[i].error = -ENOMEDIUM;
4449         }
4450         return -1;
4451     }
4452
4453     if (num_reqs == 0) {
4454         return 0;
4455     }
4456
4457     // Create MultiwriteCB structure
4458     mcb = g_malloc0(sizeof(*mcb) + num_reqs * sizeof(*mcb->callbacks));
4459     mcb->num_requests = 0;
4460     mcb->num_callbacks = num_reqs;
4461
4462     for (i = 0; i < num_reqs; i++) {
4463         mcb->callbacks[i].cb = reqs[i].cb;
4464         mcb->callbacks[i].opaque = reqs[i].opaque;
4465     }
4466
4467     // Check for mergable requests
4468     num_reqs = multiwrite_merge(bs, reqs, num_reqs, mcb);
4469
4470     trace_bdrv_aio_multiwrite(mcb, mcb->num_callbacks, num_reqs);
4471
4472     /* Run the aio requests. */
4473     mcb->num_requests = num_reqs;
4474     for (i = 0; i < num_reqs; i++) {
4475         bdrv_co_aio_rw_vector(bs, reqs[i].sector, reqs[i].qiov,
4476                               reqs[i].nb_sectors, reqs[i].flags,
4477                               multiwrite_cb, mcb,
4478                               true);
4479     }
4480
4481     return 0;
4482 }
4483
4484 void bdrv_aio_cancel(BlockDriverAIOCB *acb)
4485 {
4486     acb->aiocb_info->cancel(acb);
4487 }
4488
4489 /**************************************************************/
4490 /* async block device emulation */
4491
4492 typedef struct BlockDriverAIOCBSync {
4493     BlockDriverAIOCB common;
4494     QEMUBH *bh;
4495     int ret;
4496     /* vector translation state */
4497     QEMUIOVector *qiov;
4498     uint8_t *bounce;
4499     int is_write;
4500 } BlockDriverAIOCBSync;
4501
4502 static void bdrv_aio_cancel_em(BlockDriverAIOCB *blockacb)
4503 {
4504     BlockDriverAIOCBSync *acb =
4505         container_of(blockacb, BlockDriverAIOCBSync, common);
4506     qemu_bh_delete(acb->bh);
4507     acb->bh = NULL;
4508     qemu_aio_release(acb);
4509 }
4510
4511 static const AIOCBInfo bdrv_em_aiocb_info = {
4512     .aiocb_size         = sizeof(BlockDriverAIOCBSync),
4513     .cancel             = bdrv_aio_cancel_em,
4514 };
4515
4516 static void bdrv_aio_bh_cb(void *opaque)
4517 {
4518     BlockDriverAIOCBSync *acb = opaque;
4519
4520     if (!acb->is_write)
4521         qemu_iovec_from_buf(acb->qiov, 0, acb->bounce, acb->qiov->size);
4522     qemu_vfree(acb->bounce);
4523     acb->common.cb(acb->common.opaque, acb->ret);
4524     qemu_bh_delete(acb->bh);
4525     acb->bh = NULL;
4526     qemu_aio_release(acb);
4527 }
4528
4529 static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
4530                                             int64_t sector_num,
4531                                             QEMUIOVector *qiov,
4532                                             int nb_sectors,
4533                                             BlockDriverCompletionFunc *cb,
4534                                             void *opaque,
4535                                             int is_write)
4536
4537 {
4538     BlockDriverAIOCBSync *acb;
4539
4540     acb = qemu_aio_get(&bdrv_em_aiocb_info, bs, cb, opaque);
4541     acb->is_write = is_write;
4542     acb->qiov = qiov;
4543     acb->bounce = qemu_blockalign(bs, qiov->size);
4544     acb->bh = qemu_bh_new(bdrv_aio_bh_cb, acb);
4545
4546     if (is_write) {
4547         qemu_iovec_to_buf(acb->qiov, 0, acb->bounce, qiov->size);
4548         acb->ret = bs->drv->bdrv_write(bs, sector_num, acb->bounce, nb_sectors);
4549     } else {
4550         acb->ret = bs->drv->bdrv_read(bs, sector_num, acb->bounce, nb_sectors);
4551     }
4552
4553     qemu_bh_schedule(acb->bh);
4554
4555     return &acb->common;
4556 }
4557
4558 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
4559         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4560         BlockDriverCompletionFunc *cb, void *opaque)
4561 {
4562     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 0);
4563 }
4564
4565 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
4566         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4567         BlockDriverCompletionFunc *cb, void *opaque)
4568 {
4569     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 1);
4570 }
4571
4572
4573 typedef struct BlockDriverAIOCBCoroutine {
4574     BlockDriverAIOCB common;
4575     BlockRequest req;
4576     bool is_write;
4577     bool *done;
4578     QEMUBH* bh;
4579 } BlockDriverAIOCBCoroutine;
4580
4581 static void bdrv_aio_co_cancel_em(BlockDriverAIOCB *blockacb)
4582 {
4583     BlockDriverAIOCBCoroutine *acb =
4584         container_of(blockacb, BlockDriverAIOCBCoroutine, common);
4585     bool done = false;
4586
4587     acb->done = &done;
4588     while (!done) {
4589         qemu_aio_wait();
4590     }
4591 }
4592
4593 static const AIOCBInfo bdrv_em_co_aiocb_info = {
4594     .aiocb_size         = sizeof(BlockDriverAIOCBCoroutine),
4595     .cancel             = bdrv_aio_co_cancel_em,
4596 };
4597
4598 static void bdrv_co_em_bh(void *opaque)
4599 {
4600     BlockDriverAIOCBCoroutine *acb = opaque;
4601
4602     acb->common.cb(acb->common.opaque, acb->req.error);
4603
4604     if (acb->done) {
4605         *acb->done = true;
4606     }
4607
4608     qemu_bh_delete(acb->bh);
4609     qemu_aio_release(acb);
4610 }
4611
4612 /* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
4613 static void coroutine_fn bdrv_co_do_rw(void *opaque)
4614 {
4615     BlockDriverAIOCBCoroutine *acb = opaque;
4616     BlockDriverState *bs = acb->common.bs;
4617
4618     if (!acb->is_write) {
4619         acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
4620             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4621     } else {
4622         acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
4623             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4624     }
4625
4626     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4627     qemu_bh_schedule(acb->bh);
4628 }
4629
4630 static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
4631                                                int64_t sector_num,
4632                                                QEMUIOVector *qiov,
4633                                                int nb_sectors,
4634                                                BdrvRequestFlags flags,
4635                                                BlockDriverCompletionFunc *cb,
4636                                                void *opaque,
4637                                                bool is_write)
4638 {
4639     Coroutine *co;
4640     BlockDriverAIOCBCoroutine *acb;
4641
4642     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4643     acb->req.sector = sector_num;
4644     acb->req.nb_sectors = nb_sectors;
4645     acb->req.qiov = qiov;
4646     acb->req.flags = flags;
4647     acb->is_write = is_write;
4648     acb->done = NULL;
4649
4650     co = qemu_coroutine_create(bdrv_co_do_rw);
4651     qemu_coroutine_enter(co, acb);
4652
4653     return &acb->common;
4654 }
4655
4656 static void coroutine_fn bdrv_aio_flush_co_entry(void *opaque)
4657 {
4658     BlockDriverAIOCBCoroutine *acb = opaque;
4659     BlockDriverState *bs = acb->common.bs;
4660
4661     acb->req.error = bdrv_co_flush(bs);
4662     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4663     qemu_bh_schedule(acb->bh);
4664 }
4665
4666 BlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs,
4667         BlockDriverCompletionFunc *cb, void *opaque)
4668 {
4669     trace_bdrv_aio_flush(bs, opaque);
4670
4671     Coroutine *co;
4672     BlockDriverAIOCBCoroutine *acb;
4673
4674     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4675     acb->done = NULL;
4676
4677     co = qemu_coroutine_create(bdrv_aio_flush_co_entry);
4678     qemu_coroutine_enter(co, acb);
4679
4680     return &acb->common;
4681 }
4682
4683 static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque)
4684 {
4685     BlockDriverAIOCBCoroutine *acb = opaque;
4686     BlockDriverState *bs = acb->common.bs;
4687
4688     acb->req.error = bdrv_co_discard(bs, acb->req.sector, acb->req.nb_sectors);
4689     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4690     qemu_bh_schedule(acb->bh);
4691 }
4692
4693 BlockDriverAIOCB *bdrv_aio_discard(BlockDriverState *bs,
4694         int64_t sector_num, int nb_sectors,
4695         BlockDriverCompletionFunc *cb, void *opaque)
4696 {
4697     Coroutine *co;
4698     BlockDriverAIOCBCoroutine *acb;
4699
4700     trace_bdrv_aio_discard(bs, sector_num, nb_sectors, opaque);
4701
4702     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4703     acb->req.sector = sector_num;
4704     acb->req.nb_sectors = nb_sectors;
4705     acb->done = NULL;
4706     co = qemu_coroutine_create(bdrv_aio_discard_co_entry);
4707     qemu_coroutine_enter(co, acb);
4708
4709     return &acb->common;
4710 }
4711
4712 void bdrv_init(void)
4713 {
4714     module_call_init(MODULE_INIT_BLOCK);
4715 }
4716
4717 void bdrv_init_with_whitelist(void)
4718 {
4719     use_bdrv_whitelist = 1;
4720     bdrv_init();
4721 }
4722
4723 void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
4724                    BlockDriverCompletionFunc *cb, void *opaque)
4725 {
4726     BlockDriverAIOCB *acb;
4727
4728     acb = g_slice_alloc(aiocb_info->aiocb_size);
4729     acb->aiocb_info = aiocb_info;
4730     acb->bs = bs;
4731     acb->cb = cb;
4732     acb->opaque = opaque;
4733     return acb;
4734 }
4735
4736 void qemu_aio_release(void *p)
4737 {
4738     BlockDriverAIOCB *acb = p;
4739     g_slice_free1(acb->aiocb_info->aiocb_size, acb);
4740 }
4741
4742 /**************************************************************/
4743 /* Coroutine block device emulation */
4744
4745 typedef struct CoroutineIOCompletion {
4746     Coroutine *coroutine;
4747     int ret;
4748 } CoroutineIOCompletion;
4749
4750 static void bdrv_co_io_em_complete(void *opaque, int ret)
4751 {
4752     CoroutineIOCompletion *co = opaque;
4753
4754     co->ret = ret;
4755     qemu_coroutine_enter(co->coroutine, NULL);
4756 }
4757
4758 static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
4759                                       int nb_sectors, QEMUIOVector *iov,
4760                                       bool is_write)
4761 {
4762     CoroutineIOCompletion co = {
4763         .coroutine = qemu_coroutine_self(),
4764     };
4765     BlockDriverAIOCB *acb;
4766
4767     if (is_write) {
4768         acb = bs->drv->bdrv_aio_writev(bs, sector_num, iov, nb_sectors,
4769                                        bdrv_co_io_em_complete, &co);
4770     } else {
4771         acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors,
4772                                       bdrv_co_io_em_complete, &co);
4773     }
4774
4775     trace_bdrv_co_io_em(bs, sector_num, nb_sectors, is_write, acb);
4776     if (!acb) {
4777         return -EIO;
4778     }
4779     qemu_coroutine_yield();
4780
4781     return co.ret;
4782 }
4783
4784 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
4785                                          int64_t sector_num, int nb_sectors,
4786                                          QEMUIOVector *iov)
4787 {
4788     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, false);
4789 }
4790
4791 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
4792                                          int64_t sector_num, int nb_sectors,
4793                                          QEMUIOVector *iov)
4794 {
4795     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, true);
4796 }
4797
4798 static void coroutine_fn bdrv_flush_co_entry(void *opaque)
4799 {
4800     RwCo *rwco = opaque;
4801
4802     rwco->ret = bdrv_co_flush(rwco->bs);
4803 }
4804
4805 int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
4806 {
4807     int ret;
4808
4809     if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
4810         return 0;
4811     }
4812
4813     /* Write back cached data to the OS even with cache=unsafe */
4814     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS);
4815     if (bs->drv->bdrv_co_flush_to_os) {
4816         ret = bs->drv->bdrv_co_flush_to_os(bs);
4817         if (ret < 0) {
4818             return ret;
4819         }
4820     }
4821
4822     /* But don't actually force it to the disk with cache=unsafe */
4823     if (bs->open_flags & BDRV_O_NO_FLUSH) {
4824         goto flush_parent;
4825     }
4826
4827     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_DISK);
4828     if (bs->drv->bdrv_co_flush_to_disk) {
4829         ret = bs->drv->bdrv_co_flush_to_disk(bs);
4830     } else if (bs->drv->bdrv_aio_flush) {
4831         BlockDriverAIOCB *acb;
4832         CoroutineIOCompletion co = {
4833             .coroutine = qemu_coroutine_self(),
4834         };
4835
4836         acb = bs->drv->bdrv_aio_flush(bs, bdrv_co_io_em_complete, &co);
4837         if (acb == NULL) {
4838             ret = -EIO;
4839         } else {
4840             qemu_coroutine_yield();
4841             ret = co.ret;
4842         }
4843     } else {
4844         /*
4845          * Some block drivers always operate in either writethrough or unsafe
4846          * mode and don't support bdrv_flush therefore. Usually qemu doesn't
4847          * know how the server works (because the behaviour is hardcoded or
4848          * depends on server-side configuration), so we can't ensure that
4849          * everything is safe on disk. Returning an error doesn't work because
4850          * that would break guests even if the server operates in writethrough
4851          * mode.
4852          *
4853          * Let's hope the user knows what he's doing.
4854          */
4855         ret = 0;
4856     }
4857     if (ret < 0) {
4858         return ret;
4859     }
4860
4861     /* Now flush the underlying protocol.  It will also have BDRV_O_NO_FLUSH
4862      * in the case of cache=unsafe, so there are no useless flushes.
4863      */
4864 flush_parent:
4865     return bdrv_co_flush(bs->file);
4866 }
4867
4868 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
4869 {
4870     Error *local_err = NULL;
4871     int ret;
4872
4873     if (!bs->drv)  {
4874         return;
4875     }
4876
4877     if (bs->drv->bdrv_invalidate_cache) {
4878         bs->drv->bdrv_invalidate_cache(bs, &local_err);
4879     } else if (bs->file) {
4880         bdrv_invalidate_cache(bs->file, &local_err);
4881     }
4882     if (local_err) {
4883         error_propagate(errp, local_err);
4884         return;
4885     }
4886
4887     ret = refresh_total_sectors(bs, bs->total_sectors);
4888     if (ret < 0) {
4889         error_setg_errno(errp, -ret, "Could not refresh total sector count");
4890         return;
4891     }
4892 }
4893
4894 void bdrv_invalidate_cache_all(Error **errp)
4895 {
4896     BlockDriverState *bs;
4897     Error *local_err = NULL;
4898
4899     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4900         bdrv_invalidate_cache(bs, &local_err);
4901         if (local_err) {
4902             error_propagate(errp, local_err);
4903             return;
4904         }
4905     }
4906 }
4907
4908 void bdrv_clear_incoming_migration_all(void)
4909 {
4910     BlockDriverState *bs;
4911
4912     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4913         bs->open_flags = bs->open_flags & ~(BDRV_O_INCOMING);
4914     }
4915 }
4916
4917 int bdrv_flush(BlockDriverState *bs)
4918 {
4919     Coroutine *co;
4920     RwCo rwco = {
4921         .bs = bs,
4922         .ret = NOT_DONE,
4923     };
4924
4925     if (qemu_in_coroutine()) {
4926         /* Fast-path if already in coroutine context */
4927         bdrv_flush_co_entry(&rwco);
4928     } else {
4929         co = qemu_coroutine_create(bdrv_flush_co_entry);
4930         qemu_coroutine_enter(co, &rwco);
4931         while (rwco.ret == NOT_DONE) {
4932             qemu_aio_wait();
4933         }
4934     }
4935
4936     return rwco.ret;
4937 }
4938
4939 typedef struct DiscardCo {
4940     BlockDriverState *bs;
4941     int64_t sector_num;
4942     int nb_sectors;
4943     int ret;
4944 } DiscardCo;
4945 static void coroutine_fn bdrv_discard_co_entry(void *opaque)
4946 {
4947     DiscardCo *rwco = opaque;
4948
4949     rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors);
4950 }
4951
4952 /* if no limit is specified in the BlockLimits use a default
4953  * of 32768 512-byte sectors (16 MiB) per request.
4954  */
4955 #define MAX_DISCARD_DEFAULT 32768
4956
4957 int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
4958                                  int nb_sectors)
4959 {
4960     int max_discard;
4961
4962     if (!bs->drv) {
4963         return -ENOMEDIUM;
4964     } else if (bdrv_check_request(bs, sector_num, nb_sectors)) {
4965         return -EIO;
4966     } else if (bs->read_only) {
4967         return -EROFS;
4968     }
4969
4970     bdrv_reset_dirty(bs, sector_num, nb_sectors);
4971
4972     /* Do nothing if disabled.  */
4973     if (!(bs->open_flags & BDRV_O_UNMAP)) {
4974         return 0;
4975     }
4976
4977     if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_discard) {
4978         return 0;
4979     }
4980
4981     max_discard = bs->bl.max_discard ?  bs->bl.max_discard : MAX_DISCARD_DEFAULT;
4982     while (nb_sectors > 0) {
4983         int ret;
4984         int num = nb_sectors;
4985
4986         /* align request */
4987         if (bs->bl.discard_alignment &&
4988             num >= bs->bl.discard_alignment &&
4989             sector_num % bs->bl.discard_alignment) {
4990             if (num > bs->bl.discard_alignment) {
4991                 num = bs->bl.discard_alignment;
4992             }
4993             num -= sector_num % bs->bl.discard_alignment;
4994         }
4995
4996         /* limit request size */
4997         if (num > max_discard) {
4998             num = max_discard;
4999         }
5000
5001         if (bs->drv->bdrv_co_discard) {
5002             ret = bs->drv->bdrv_co_discard(bs, sector_num, num);
5003         } else {
5004             BlockDriverAIOCB *acb;
5005             CoroutineIOCompletion co = {
5006                 .coroutine = qemu_coroutine_self(),
5007             };
5008
5009             acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors,
5010                                             bdrv_co_io_em_complete, &co);
5011             if (acb == NULL) {
5012                 return -EIO;
5013             } else {
5014                 qemu_coroutine_yield();
5015                 ret = co.ret;
5016             }
5017         }
5018         if (ret && ret != -ENOTSUP) {
5019             return ret;
5020         }
5021
5022         sector_num += num;
5023         nb_sectors -= num;
5024     }
5025     return 0;
5026 }
5027
5028 int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
5029 {
5030     Coroutine *co;
5031     DiscardCo rwco = {
5032         .bs = bs,
5033         .sector_num = sector_num,
5034         .nb_sectors = nb_sectors,
5035         .ret = NOT_DONE,
5036     };
5037
5038     if (qemu_in_coroutine()) {
5039         /* Fast-path if already in coroutine context */
5040         bdrv_discard_co_entry(&rwco);
5041     } else {
5042         co = qemu_coroutine_create(bdrv_discard_co_entry);
5043         qemu_coroutine_enter(co, &rwco);
5044         while (rwco.ret == NOT_DONE) {
5045             qemu_aio_wait();
5046         }
5047     }
5048
5049     return rwco.ret;
5050 }
5051
5052 /**************************************************************/
5053 /* removable device support */
5054
5055 /**
5056  * Return TRUE if the media is present
5057  */
5058 int bdrv_is_inserted(BlockDriverState *bs)
5059 {
5060     BlockDriver *drv = bs->drv;
5061
5062     if (!drv)
5063         return 0;
5064     if (!drv->bdrv_is_inserted)
5065         return 1;
5066     return drv->bdrv_is_inserted(bs);
5067 }
5068
5069 /**
5070  * Return whether the media changed since the last call to this
5071  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
5072  */
5073 int bdrv_media_changed(BlockDriverState *bs)
5074 {
5075     BlockDriver *drv = bs->drv;
5076
5077     if (drv && drv->bdrv_media_changed) {
5078         return drv->bdrv_media_changed(bs);
5079     }
5080     return -ENOTSUP;
5081 }
5082
5083 /**
5084  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
5085  */
5086 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
5087 {
5088     BlockDriver *drv = bs->drv;
5089
5090     if (drv && drv->bdrv_eject) {
5091         drv->bdrv_eject(bs, eject_flag);
5092     }
5093
5094     if (bs->device_name[0] != '\0') {
5095         bdrv_emit_qmp_eject_event(bs, eject_flag);
5096     }
5097 }
5098
5099 /**
5100  * Lock or unlock the media (if it is locked, the user won't be able
5101  * to eject it manually).
5102  */
5103 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
5104 {
5105     BlockDriver *drv = bs->drv;
5106
5107     trace_bdrv_lock_medium(bs, locked);
5108
5109     if (drv && drv->bdrv_lock_medium) {
5110         drv->bdrv_lock_medium(bs, locked);
5111     }
5112 }
5113
5114 /* needed for generic scsi interface */
5115
5116 int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
5117 {
5118     BlockDriver *drv = bs->drv;
5119
5120     if (drv && drv->bdrv_ioctl)
5121         return drv->bdrv_ioctl(bs, req, buf);
5122     return -ENOTSUP;
5123 }
5124
5125 BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs,
5126         unsigned long int req, void *buf,
5127         BlockDriverCompletionFunc *cb, void *opaque)
5128 {
5129     BlockDriver *drv = bs->drv;
5130
5131     if (drv && drv->bdrv_aio_ioctl)
5132         return drv->bdrv_aio_ioctl(bs, req, buf, cb, opaque);
5133     return NULL;
5134 }
5135
5136 void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
5137 {
5138     bs->guest_block_size = align;
5139 }
5140
5141 void *qemu_blockalign(BlockDriverState *bs, size_t size)
5142 {
5143     return qemu_memalign(bdrv_opt_mem_align(bs), size);
5144 }
5145
5146 /*
5147  * Check if all memory in this vector is sector aligned.
5148  */
5149 bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
5150 {
5151     int i;
5152     size_t alignment = bdrv_opt_mem_align(bs);
5153
5154     for (i = 0; i < qiov->niov; i++) {
5155         if ((uintptr_t) qiov->iov[i].iov_base % alignment) {
5156             return false;
5157         }
5158         if (qiov->iov[i].iov_len % alignment) {
5159             return false;
5160         }
5161     }
5162
5163     return true;
5164 }
5165
5166 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity,
5167                                           Error **errp)
5168 {
5169     int64_t bitmap_size;
5170     BdrvDirtyBitmap *bitmap;
5171
5172     assert((granularity & (granularity - 1)) == 0);
5173
5174     granularity >>= BDRV_SECTOR_BITS;
5175     assert(granularity);
5176     bitmap_size = bdrv_getlength(bs);
5177     if (bitmap_size < 0) {
5178         error_setg_errno(errp, -bitmap_size, "could not get length of device");
5179         errno = -bitmap_size;
5180         return NULL;
5181     }
5182     bitmap_size >>= BDRV_SECTOR_BITS;
5183     bitmap = g_malloc0(sizeof(BdrvDirtyBitmap));
5184     bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1);
5185     QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
5186     return bitmap;
5187 }
5188
5189 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5190 {
5191     BdrvDirtyBitmap *bm, *next;
5192     QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
5193         if (bm == bitmap) {
5194             QLIST_REMOVE(bitmap, list);
5195             hbitmap_free(bitmap->bitmap);
5196             g_free(bitmap);
5197             return;
5198         }
5199     }
5200 }
5201
5202 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
5203 {
5204     BdrvDirtyBitmap *bm;
5205     BlockDirtyInfoList *list = NULL;
5206     BlockDirtyInfoList **plist = &list;
5207
5208     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
5209         BlockDirtyInfo *info = g_malloc0(sizeof(BlockDirtyInfo));
5210         BlockDirtyInfoList *entry = g_malloc0(sizeof(BlockDirtyInfoList));
5211         info->count = bdrv_get_dirty_count(bs, bm);
5212         info->granularity =
5213             ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bm->bitmap));
5214         entry->value = info;
5215         *plist = entry;
5216         plist = &entry->next;
5217     }
5218
5219     return list;
5220 }
5221
5222 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
5223 {
5224     if (bitmap) {
5225         return hbitmap_get(bitmap->bitmap, sector);
5226     } else {
5227         return 0;
5228     }
5229 }
5230
5231 void bdrv_dirty_iter_init(BlockDriverState *bs,
5232                           BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
5233 {
5234     hbitmap_iter_init(hbi, bitmap->bitmap, 0);
5235 }
5236
5237 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
5238                     int nr_sectors)
5239 {
5240     BdrvDirtyBitmap *bitmap;
5241     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5242         hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
5243     }
5244 }
5245
5246 void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors)
5247 {
5248     BdrvDirtyBitmap *bitmap;
5249     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5250         hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
5251     }
5252 }
5253
5254 int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5255 {
5256     return hbitmap_count(bitmap->bitmap);
5257 }
5258
5259 /* Get a reference to bs */
5260 void bdrv_ref(BlockDriverState *bs)
5261 {
5262     bs->refcnt++;
5263 }
5264
5265 /* Release a previously grabbed reference to bs.
5266  * If after releasing, reference count is zero, the BlockDriverState is
5267  * deleted. */
5268 void bdrv_unref(BlockDriverState *bs)
5269 {
5270     assert(bs->refcnt > 0);
5271     if (--bs->refcnt == 0) {
5272         bdrv_delete(bs);
5273     }
5274 }
5275
5276 void bdrv_set_in_use(BlockDriverState *bs, int in_use)
5277 {
5278     assert(bs->in_use != in_use);
5279     bs->in_use = in_use;
5280 }
5281
5282 int bdrv_in_use(BlockDriverState *bs)
5283 {
5284     return bs->in_use;
5285 }
5286
5287 void bdrv_iostatus_enable(BlockDriverState *bs)
5288 {
5289     bs->iostatus_enabled = true;
5290     bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5291 }
5292
5293 /* The I/O status is only enabled if the drive explicitly
5294  * enables it _and_ the VM is configured to stop on errors */
5295 bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
5296 {
5297     return (bs->iostatus_enabled &&
5298            (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
5299             bs->on_write_error == BLOCKDEV_ON_ERROR_STOP   ||
5300             bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
5301 }
5302
5303 void bdrv_iostatus_disable(BlockDriverState *bs)
5304 {
5305     bs->iostatus_enabled = false;
5306 }
5307
5308 void bdrv_iostatus_reset(BlockDriverState *bs)
5309 {
5310     if (bdrv_iostatus_is_enabled(bs)) {
5311         bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5312         if (bs->job) {
5313             block_job_iostatus_reset(bs->job);
5314         }
5315     }
5316 }
5317
5318 void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
5319 {
5320     assert(bdrv_iostatus_is_enabled(bs));
5321     if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
5322         bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
5323                                          BLOCK_DEVICE_IO_STATUS_FAILED;
5324     }
5325 }
5326
5327 void
5328 bdrv_acct_start(BlockDriverState *bs, BlockAcctCookie *cookie, int64_t bytes,
5329         enum BlockAcctType type)
5330 {
5331     assert(type < BDRV_MAX_IOTYPE);
5332
5333     cookie->bytes = bytes;
5334     cookie->start_time_ns = get_clock();
5335     cookie->type = type;
5336 }
5337
5338 void
5339 bdrv_acct_done(BlockDriverState *bs, BlockAcctCookie *cookie)
5340 {
5341     assert(cookie->type < BDRV_MAX_IOTYPE);
5342
5343     bs->nr_bytes[cookie->type] += cookie->bytes;
5344     bs->nr_ops[cookie->type]++;
5345     bs->total_time_ns[cookie->type] += get_clock() - cookie->start_time_ns;
5346 }
5347
5348 void bdrv_img_create(const char *filename, const char *fmt,
5349                      const char *base_filename, const char *base_fmt,
5350                      char *options, uint64_t img_size, int flags,
5351                      Error **errp, bool quiet)
5352 {
5353     QEMUOptionParameter *param = NULL, *create_options = NULL;
5354     QEMUOptionParameter *backing_fmt, *backing_file, *size;
5355     BlockDriver *drv, *proto_drv;
5356     BlockDriver *backing_drv = NULL;
5357     Error *local_err = NULL;
5358     int ret = 0;
5359
5360     /* Find driver and parse its options */
5361     drv = bdrv_find_format(fmt);
5362     if (!drv) {
5363         error_setg(errp, "Unknown file format '%s'", fmt);
5364         return;
5365     }
5366
5367     proto_drv = bdrv_find_protocol(filename, true);
5368     if (!proto_drv) {
5369         error_setg(errp, "Unknown protocol '%s'", filename);
5370         return;
5371     }
5372
5373     create_options = append_option_parameters(create_options,
5374                                               drv->create_options);
5375     create_options = append_option_parameters(create_options,
5376                                               proto_drv->create_options);
5377
5378     /* Create parameter list with default values */
5379     param = parse_option_parameters("", create_options, param);
5380
5381     set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
5382
5383     /* Parse -o options */
5384     if (options) {
5385         param = parse_option_parameters(options, create_options, param);
5386         if (param == NULL) {
5387             error_setg(errp, "Invalid options for file format '%s'.", fmt);
5388             goto out;
5389         }
5390     }
5391
5392     if (base_filename) {
5393         if (set_option_parameter(param, BLOCK_OPT_BACKING_FILE,
5394                                  base_filename)) {
5395             error_setg(errp, "Backing file not supported for file format '%s'",
5396                        fmt);
5397             goto out;
5398         }
5399     }
5400
5401     if (base_fmt) {
5402         if (set_option_parameter(param, BLOCK_OPT_BACKING_FMT, base_fmt)) {
5403             error_setg(errp, "Backing file format not supported for file "
5404                              "format '%s'", fmt);
5405             goto out;
5406         }
5407     }
5408
5409     backing_file = get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
5410     if (backing_file && backing_file->value.s) {
5411         if (!strcmp(filename, backing_file->value.s)) {
5412             error_setg(errp, "Error: Trying to create an image with the "
5413                              "same filename as the backing file");
5414             goto out;
5415         }
5416     }
5417
5418     backing_fmt = get_option_parameter(param, BLOCK_OPT_BACKING_FMT);
5419     if (backing_fmt && backing_fmt->value.s) {
5420         backing_drv = bdrv_find_format(backing_fmt->value.s);
5421         if (!backing_drv) {
5422             error_setg(errp, "Unknown backing file format '%s'",
5423                        backing_fmt->value.s);
5424             goto out;
5425         }
5426     }
5427
5428     // The size for the image must always be specified, with one exception:
5429     // If we are using a backing file, we can obtain the size from there
5430     size = get_option_parameter(param, BLOCK_OPT_SIZE);
5431     if (size && size->value.n == -1) {
5432         if (backing_file && backing_file->value.s) {
5433             BlockDriverState *bs;
5434             uint64_t size;
5435             char buf[32];
5436             int back_flags;
5437
5438             /* backing files always opened read-only */
5439             back_flags =
5440                 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
5441
5442             bs = NULL;
5443             ret = bdrv_open(&bs, backing_file->value.s, NULL, NULL, back_flags,
5444                             backing_drv, &local_err);
5445             if (ret < 0) {
5446                 error_setg_errno(errp, -ret, "Could not open '%s': %s",
5447                                  backing_file->value.s,
5448                                  error_get_pretty(local_err));
5449                 error_free(local_err);
5450                 local_err = NULL;
5451                 goto out;
5452             }
5453             bdrv_get_geometry(bs, &size);
5454             size *= 512;
5455
5456             snprintf(buf, sizeof(buf), "%" PRId64, size);
5457             set_option_parameter(param, BLOCK_OPT_SIZE, buf);
5458
5459             bdrv_unref(bs);
5460         } else {
5461             error_setg(errp, "Image creation needs a size parameter");
5462             goto out;
5463         }
5464     }
5465
5466     if (!quiet) {
5467         printf("Formatting '%s', fmt=%s ", filename, fmt);
5468         print_option_parameters(param);
5469         puts("");
5470     }
5471     ret = bdrv_create(drv, filename, param, &local_err);
5472     if (ret == -EFBIG) {
5473         /* This is generally a better message than whatever the driver would
5474          * deliver (especially because of the cluster_size_hint), since that
5475          * is most probably not much different from "image too large". */
5476         const char *cluster_size_hint = "";
5477         if (get_option_parameter(create_options, BLOCK_OPT_CLUSTER_SIZE)) {
5478             cluster_size_hint = " (try using a larger cluster size)";
5479         }
5480         error_setg(errp, "The image size is too large for file format '%s'"
5481                    "%s", fmt, cluster_size_hint);
5482         error_free(local_err);
5483         local_err = NULL;
5484     }
5485
5486 out:
5487     free_option_parameters(create_options);
5488     free_option_parameters(param);
5489
5490     if (local_err) {
5491         error_propagate(errp, local_err);
5492     }
5493 }
5494
5495 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
5496 {
5497     /* Currently BlockDriverState always uses the main loop AioContext */
5498     return qemu_get_aio_context();
5499 }
5500
5501 void bdrv_add_before_write_notifier(BlockDriverState *bs,
5502                                     NotifierWithReturn *notifier)
5503 {
5504     notifier_with_return_list_add(&bs->before_write_notifiers, notifier);
5505 }
5506
5507 int bdrv_amend_options(BlockDriverState *bs, QEMUOptionParameter *options)
5508 {
5509     if (bs->drv->bdrv_amend_options == NULL) {
5510         return -ENOTSUP;
5511     }
5512     return bs->drv->bdrv_amend_options(bs, options);
5513 }
5514
5515 /* This function will be called by the bdrv_recurse_is_first_non_filter method
5516  * of block filter and by bdrv_is_first_non_filter.
5517  * It is used to test if the given bs is the candidate or recurse more in the
5518  * node graph.
5519  */
5520 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
5521                                       BlockDriverState *candidate)
5522 {
5523     /* return false if basic checks fails */
5524     if (!bs || !bs->drv) {
5525         return false;
5526     }
5527
5528     /* the code reached a non block filter driver -> check if the bs is
5529      * the same as the candidate. It's the recursion termination condition.
5530      */
5531     if (!bs->drv->is_filter) {
5532         return bs == candidate;
5533     }
5534     /* Down this path the driver is a block filter driver */
5535
5536     /* If the block filter recursion method is defined use it to recurse down
5537      * the node graph.
5538      */
5539     if (bs->drv->bdrv_recurse_is_first_non_filter) {
5540         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
5541     }
5542
5543     /* the driver is a block filter but don't allow to recurse -> return false
5544      */
5545     return false;
5546 }
5547
5548 /* This function checks if the candidate is the first non filter bs down it's
5549  * bs chain. Since we don't have pointers to parents it explore all bs chains
5550  * from the top. Some filters can choose not to pass down the recursion.
5551  */
5552 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
5553 {
5554     BlockDriverState *bs;
5555
5556     /* walk down the bs forest recursively */
5557     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5558         bool perm;
5559
5560         /* try to recurse in this top level bs */
5561         perm = bdrv_recurse_is_first_non_filter(bs, candidate);
5562
5563         /* candidate is the first non filter */
5564         if (perm) {
5565             return true;
5566         }
5567     }
5568
5569     return false;
5570 }
This page took 0.321059 seconds and 4 git commands to generate.