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