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