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