]> Git Repo - qemu.git/blob - block.c
block: Fix bdrv_commit return value
[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, length, backing_length;
2034     int n, ro, open_flags;
2035     int ret = 0;
2036     uint8_t *buf = NULL;
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     length = bdrv_getlength(bs);
2062     if (length < 0) {
2063         ret = length;
2064         goto ro_cleanup;
2065     }
2066
2067     backing_length = bdrv_getlength(bs->backing_hd);
2068     if (backing_length < 0) {
2069         ret = backing_length;
2070         goto ro_cleanup;
2071     }
2072
2073     /* If our top snapshot is larger than the backing file image,
2074      * grow the backing file image if possible.  If not possible,
2075      * we must return an error */
2076     if (length > backing_length) {
2077         ret = bdrv_truncate(bs->backing_hd, length);
2078         if (ret < 0) {
2079             goto ro_cleanup;
2080         }
2081     }
2082
2083     total_sectors = length >> BDRV_SECTOR_BITS;
2084     buf = g_malloc(COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2085
2086     for (sector = 0; sector < total_sectors; sector += n) {
2087         ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2088         if (ret < 0) {
2089             goto ro_cleanup;
2090         }
2091         if (ret) {
2092             ret = bdrv_read(bs, sector, buf, n);
2093             if (ret < 0) {
2094                 goto ro_cleanup;
2095             }
2096
2097             ret = bdrv_write(bs->backing_hd, sector, buf, n);
2098             if (ret < 0) {
2099                 goto ro_cleanup;
2100             }
2101         }
2102     }
2103
2104     if (drv->bdrv_make_empty) {
2105         ret = drv->bdrv_make_empty(bs);
2106         if (ret < 0) {
2107             goto ro_cleanup;
2108         }
2109         bdrv_flush(bs);
2110     }
2111
2112     /*
2113      * Make sure all data we wrote to the backing device is actually
2114      * stable on disk.
2115      */
2116     if (bs->backing_hd) {
2117         bdrv_flush(bs->backing_hd);
2118     }
2119
2120     ret = 0;
2121 ro_cleanup:
2122     g_free(buf);
2123
2124     if (ro) {
2125         /* ignoring error return here */
2126         bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
2127     }
2128
2129     return ret;
2130 }
2131
2132 int bdrv_commit_all(void)
2133 {
2134     BlockDriverState *bs;
2135
2136     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
2137         if (bs->drv && bs->backing_hd) {
2138             int ret = bdrv_commit(bs);
2139             if (ret < 0) {
2140                 return ret;
2141             }
2142         }
2143     }
2144     return 0;
2145 }
2146
2147 /**
2148  * Remove an active request from the tracked requests list
2149  *
2150  * This function should be called when a tracked request is completing.
2151  */
2152 static void tracked_request_end(BdrvTrackedRequest *req)
2153 {
2154     QLIST_REMOVE(req, list);
2155     qemu_co_queue_restart_all(&req->wait_queue);
2156 }
2157
2158 /**
2159  * Add an active request to the tracked requests list
2160  */
2161 static void tracked_request_begin(BdrvTrackedRequest *req,
2162                                   BlockDriverState *bs,
2163                                   int64_t sector_num,
2164                                   int nb_sectors, bool is_write)
2165 {
2166     *req = (BdrvTrackedRequest){
2167         .bs = bs,
2168         .sector_num = sector_num,
2169         .nb_sectors = nb_sectors,
2170         .is_write = is_write,
2171         .co = qemu_coroutine_self(),
2172     };
2173
2174     qemu_co_queue_init(&req->wait_queue);
2175
2176     QLIST_INSERT_HEAD(&bs->tracked_requests, req, list);
2177 }
2178
2179 /**
2180  * Round a region to cluster boundaries
2181  */
2182 void bdrv_round_to_clusters(BlockDriverState *bs,
2183                             int64_t sector_num, int nb_sectors,
2184                             int64_t *cluster_sector_num,
2185                             int *cluster_nb_sectors)
2186 {
2187     BlockDriverInfo bdi;
2188
2189     if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) {
2190         *cluster_sector_num = sector_num;
2191         *cluster_nb_sectors = nb_sectors;
2192     } else {
2193         int64_t c = bdi.cluster_size / BDRV_SECTOR_SIZE;
2194         *cluster_sector_num = QEMU_ALIGN_DOWN(sector_num, c);
2195         *cluster_nb_sectors = QEMU_ALIGN_UP(sector_num - *cluster_sector_num +
2196                                             nb_sectors, c);
2197     }
2198 }
2199
2200 static bool tracked_request_overlaps(BdrvTrackedRequest *req,
2201                                      int64_t sector_num, int nb_sectors) {
2202     /*        aaaa   bbbb */
2203     if (sector_num >= req->sector_num + req->nb_sectors) {
2204         return false;
2205     }
2206     /* bbbb   aaaa        */
2207     if (req->sector_num >= sector_num + nb_sectors) {
2208         return false;
2209     }
2210     return true;
2211 }
2212
2213 static void coroutine_fn wait_for_overlapping_requests(BlockDriverState *bs,
2214         int64_t sector_num, int nb_sectors)
2215 {
2216     BdrvTrackedRequest *req;
2217     int64_t cluster_sector_num;
2218     int cluster_nb_sectors;
2219     bool retry;
2220
2221     /* If we touch the same cluster it counts as an overlap.  This guarantees
2222      * that allocating writes will be serialized and not race with each other
2223      * for the same cluster.  For example, in copy-on-read it ensures that the
2224      * CoR read and write operations are atomic and guest writes cannot
2225      * interleave between them.
2226      */
2227     bdrv_round_to_clusters(bs, sector_num, nb_sectors,
2228                            &cluster_sector_num, &cluster_nb_sectors);
2229
2230     do {
2231         retry = false;
2232         QLIST_FOREACH(req, &bs->tracked_requests, list) {
2233             if (tracked_request_overlaps(req, cluster_sector_num,
2234                                          cluster_nb_sectors)) {
2235                 /* Hitting this means there was a reentrant request, for
2236                  * example, a block driver issuing nested requests.  This must
2237                  * never happen since it means deadlock.
2238                  */
2239                 assert(qemu_coroutine_self() != req->co);
2240
2241                 qemu_co_queue_wait(&req->wait_queue);
2242                 retry = true;
2243                 break;
2244             }
2245         }
2246     } while (retry);
2247 }
2248
2249 /*
2250  * Return values:
2251  * 0        - success
2252  * -EINVAL  - backing format specified, but no file
2253  * -ENOSPC  - can't update the backing file because no space is left in the
2254  *            image file header
2255  * -ENOTSUP - format driver doesn't support changing the backing file
2256  */
2257 int bdrv_change_backing_file(BlockDriverState *bs,
2258     const char *backing_file, const char *backing_fmt)
2259 {
2260     BlockDriver *drv = bs->drv;
2261     int ret;
2262
2263     /* Backing file format doesn't make sense without a backing file */
2264     if (backing_fmt && !backing_file) {
2265         return -EINVAL;
2266     }
2267
2268     if (drv->bdrv_change_backing_file != NULL) {
2269         ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2270     } else {
2271         ret = -ENOTSUP;
2272     }
2273
2274     if (ret == 0) {
2275         pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2276         pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2277     }
2278     return ret;
2279 }
2280
2281 /*
2282  * Finds the image layer in the chain that has 'bs' as its backing file.
2283  *
2284  * active is the current topmost image.
2285  *
2286  * Returns NULL if bs is not found in active's image chain,
2287  * or if active == bs.
2288  */
2289 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2290                                     BlockDriverState *bs)
2291 {
2292     BlockDriverState *overlay = NULL;
2293     BlockDriverState *intermediate;
2294
2295     assert(active != NULL);
2296     assert(bs != NULL);
2297
2298     /* if bs is the same as active, then by definition it has no overlay
2299      */
2300     if (active == bs) {
2301         return NULL;
2302     }
2303
2304     intermediate = active;
2305     while (intermediate->backing_hd) {
2306         if (intermediate->backing_hd == bs) {
2307             overlay = intermediate;
2308             break;
2309         }
2310         intermediate = intermediate->backing_hd;
2311     }
2312
2313     return overlay;
2314 }
2315
2316 typedef struct BlkIntermediateStates {
2317     BlockDriverState *bs;
2318     QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2319 } BlkIntermediateStates;
2320
2321
2322 /*
2323  * Drops images above 'base' up to and including 'top', and sets the image
2324  * above 'top' to have base as its backing file.
2325  *
2326  * Requires that the overlay to 'top' is opened r/w, so that the backing file
2327  * information in 'bs' can be properly updated.
2328  *
2329  * E.g., this will convert the following chain:
2330  * bottom <- base <- intermediate <- top <- active
2331  *
2332  * to
2333  *
2334  * bottom <- base <- active
2335  *
2336  * It is allowed for bottom==base, in which case it converts:
2337  *
2338  * base <- intermediate <- top <- active
2339  *
2340  * to
2341  *
2342  * base <- active
2343  *
2344  * Error conditions:
2345  *  if active == top, that is considered an error
2346  *
2347  */
2348 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2349                            BlockDriverState *base)
2350 {
2351     BlockDriverState *intermediate;
2352     BlockDriverState *base_bs = NULL;
2353     BlockDriverState *new_top_bs = NULL;
2354     BlkIntermediateStates *intermediate_state, *next;
2355     int ret = -EIO;
2356
2357     QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2358     QSIMPLEQ_INIT(&states_to_delete);
2359
2360     if (!top->drv || !base->drv) {
2361         goto exit;
2362     }
2363
2364     new_top_bs = bdrv_find_overlay(active, top);
2365
2366     if (new_top_bs == NULL) {
2367         /* we could not find the image above 'top', this is an error */
2368         goto exit;
2369     }
2370
2371     /* special case of new_top_bs->backing_hd already pointing to base - nothing
2372      * to do, no intermediate images */
2373     if (new_top_bs->backing_hd == base) {
2374         ret = 0;
2375         goto exit;
2376     }
2377
2378     intermediate = top;
2379
2380     /* now we will go down through the list, and add each BDS we find
2381      * into our deletion queue, until we hit the 'base'
2382      */
2383     while (intermediate) {
2384         intermediate_state = g_malloc0(sizeof(BlkIntermediateStates));
2385         intermediate_state->bs = intermediate;
2386         QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2387
2388         if (intermediate->backing_hd == base) {
2389             base_bs = intermediate->backing_hd;
2390             break;
2391         }
2392         intermediate = intermediate->backing_hd;
2393     }
2394     if (base_bs == NULL) {
2395         /* something went wrong, we did not end at the base. safely
2396          * unravel everything, and exit with error */
2397         goto exit;
2398     }
2399
2400     /* success - we can delete the intermediate states, and link top->base */
2401     ret = bdrv_change_backing_file(new_top_bs, base_bs->filename,
2402                                    base_bs->drv ? base_bs->drv->format_name : "");
2403     if (ret) {
2404         goto exit;
2405     }
2406     new_top_bs->backing_hd = base_bs;
2407
2408
2409     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2410         /* so that bdrv_close() does not recursively close the chain */
2411         intermediate_state->bs->backing_hd = NULL;
2412         bdrv_unref(intermediate_state->bs);
2413     }
2414     ret = 0;
2415
2416 exit:
2417     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2418         g_free(intermediate_state);
2419     }
2420     return ret;
2421 }
2422
2423
2424 static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
2425                                    size_t size)
2426 {
2427     int64_t len;
2428
2429     if (!bdrv_is_inserted(bs))
2430         return -ENOMEDIUM;
2431
2432     if (bs->growable)
2433         return 0;
2434
2435     len = bdrv_getlength(bs);
2436
2437     if (offset < 0)
2438         return -EIO;
2439
2440     if ((offset > len) || (len - offset < size))
2441         return -EIO;
2442
2443     return 0;
2444 }
2445
2446 static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num,
2447                               int nb_sectors)
2448 {
2449     return bdrv_check_byte_request(bs, sector_num * BDRV_SECTOR_SIZE,
2450                                    nb_sectors * BDRV_SECTOR_SIZE);
2451 }
2452
2453 typedef struct RwCo {
2454     BlockDriverState *bs;
2455     int64_t sector_num;
2456     int nb_sectors;
2457     QEMUIOVector *qiov;
2458     bool is_write;
2459     int ret;
2460     BdrvRequestFlags flags;
2461 } RwCo;
2462
2463 static void coroutine_fn bdrv_rw_co_entry(void *opaque)
2464 {
2465     RwCo *rwco = opaque;
2466
2467     if (!rwco->is_write) {
2468         rwco->ret = bdrv_co_do_readv(rwco->bs, rwco->sector_num,
2469                                      rwco->nb_sectors, rwco->qiov,
2470                                      rwco->flags);
2471     } else {
2472         rwco->ret = bdrv_co_do_writev(rwco->bs, rwco->sector_num,
2473                                       rwco->nb_sectors, rwco->qiov,
2474                                       rwco->flags);
2475     }
2476 }
2477
2478 /*
2479  * Process a vectored synchronous request using coroutines
2480  */
2481 static int bdrv_rwv_co(BlockDriverState *bs, int64_t sector_num,
2482                        QEMUIOVector *qiov, bool is_write,
2483                        BdrvRequestFlags flags)
2484 {
2485     Coroutine *co;
2486     RwCo rwco = {
2487         .bs = bs,
2488         .sector_num = sector_num,
2489         .nb_sectors = qiov->size >> BDRV_SECTOR_BITS,
2490         .qiov = qiov,
2491         .is_write = is_write,
2492         .ret = NOT_DONE,
2493         .flags = flags,
2494     };
2495     assert((qiov->size & (BDRV_SECTOR_SIZE - 1)) == 0);
2496
2497     /**
2498      * In sync call context, when the vcpu is blocked, this throttling timer
2499      * will not fire; so the I/O throttling function has to be disabled here
2500      * if it has been enabled.
2501      */
2502     if (bs->io_limits_enabled) {
2503         fprintf(stderr, "Disabling I/O throttling on '%s' due "
2504                         "to synchronous I/O.\n", bdrv_get_device_name(bs));
2505         bdrv_io_limits_disable(bs);
2506     }
2507
2508     if (qemu_in_coroutine()) {
2509         /* Fast-path if already in coroutine context */
2510         bdrv_rw_co_entry(&rwco);
2511     } else {
2512         co = qemu_coroutine_create(bdrv_rw_co_entry);
2513         qemu_coroutine_enter(co, &rwco);
2514         while (rwco.ret == NOT_DONE) {
2515             qemu_aio_wait();
2516         }
2517     }
2518     return rwco.ret;
2519 }
2520
2521 /*
2522  * Process a synchronous request using coroutines
2523  */
2524 static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf,
2525                       int nb_sectors, bool is_write, BdrvRequestFlags flags)
2526 {
2527     QEMUIOVector qiov;
2528     struct iovec iov = {
2529         .iov_base = (void *)buf,
2530         .iov_len = nb_sectors * BDRV_SECTOR_SIZE,
2531     };
2532
2533     qemu_iovec_init_external(&qiov, &iov, 1);
2534     return bdrv_rwv_co(bs, sector_num, &qiov, is_write, flags);
2535 }
2536
2537 /* return < 0 if error. See bdrv_write() for the return codes */
2538 int bdrv_read(BlockDriverState *bs, int64_t sector_num,
2539               uint8_t *buf, int nb_sectors)
2540 {
2541     return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false, 0);
2542 }
2543
2544 /* Just like bdrv_read(), but with I/O throttling temporarily disabled */
2545 int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num,
2546                           uint8_t *buf, int nb_sectors)
2547 {
2548     bool enabled;
2549     int ret;
2550
2551     enabled = bs->io_limits_enabled;
2552     bs->io_limits_enabled = false;
2553     ret = bdrv_read(bs, sector_num, buf, nb_sectors);
2554     bs->io_limits_enabled = enabled;
2555     return ret;
2556 }
2557
2558 /* Return < 0 if error. Important errors are:
2559   -EIO         generic I/O error (may happen for all errors)
2560   -ENOMEDIUM   No media inserted.
2561   -EINVAL      Invalid sector number or nb_sectors
2562   -EACCES      Trying to write a read-only device
2563 */
2564 int bdrv_write(BlockDriverState *bs, int64_t sector_num,
2565                const uint8_t *buf, int nb_sectors)
2566 {
2567     return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true, 0);
2568 }
2569
2570 int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov)
2571 {
2572     return bdrv_rwv_co(bs, sector_num, qiov, true, 0);
2573 }
2574
2575 int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num,
2576                       int nb_sectors, BdrvRequestFlags flags)
2577 {
2578     return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true,
2579                       BDRV_REQ_ZERO_WRITE | flags);
2580 }
2581
2582 /*
2583  * Completely zero out a block device with the help of bdrv_write_zeroes.
2584  * The operation is sped up by checking the block status and only writing
2585  * zeroes to the device if they currently do not return zeroes. Optional
2586  * flags are passed through to bdrv_write_zeroes (e.g. BDRV_REQ_MAY_UNMAP).
2587  *
2588  * Returns < 0 on error, 0 on success. For error codes see bdrv_write().
2589  */
2590 int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags)
2591 {
2592     int64_t target_size = bdrv_getlength(bs) / BDRV_SECTOR_SIZE;
2593     int64_t ret, nb_sectors, sector_num = 0;
2594     int n;
2595
2596     for (;;) {
2597         nb_sectors = target_size - sector_num;
2598         if (nb_sectors <= 0) {
2599             return 0;
2600         }
2601         if (nb_sectors > INT_MAX) {
2602             nb_sectors = INT_MAX;
2603         }
2604         ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &n);
2605         if (ret < 0) {
2606             error_report("error getting block status at sector %" PRId64 ": %s",
2607                          sector_num, strerror(-ret));
2608             return ret;
2609         }
2610         if (ret & BDRV_BLOCK_ZERO) {
2611             sector_num += n;
2612             continue;
2613         }
2614         ret = bdrv_write_zeroes(bs, sector_num, n, flags);
2615         if (ret < 0) {
2616             error_report("error writing zeroes at sector %" PRId64 ": %s",
2617                          sector_num, strerror(-ret));
2618             return ret;
2619         }
2620         sector_num += n;
2621     }
2622 }
2623
2624 int bdrv_pread(BlockDriverState *bs, int64_t offset,
2625                void *buf, int count1)
2626 {
2627     uint8_t tmp_buf[BDRV_SECTOR_SIZE];
2628     int len, nb_sectors, count;
2629     int64_t sector_num;
2630     int ret;
2631
2632     count = count1;
2633     /* first read to align to sector start */
2634     len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1);
2635     if (len > count)
2636         len = count;
2637     sector_num = offset >> BDRV_SECTOR_BITS;
2638     if (len > 0) {
2639         if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0)
2640             return ret;
2641         memcpy(buf, tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)), len);
2642         count -= len;
2643         if (count == 0)
2644             return count1;
2645         sector_num++;
2646         buf += len;
2647     }
2648
2649     /* read the sectors "in place" */
2650     nb_sectors = count >> BDRV_SECTOR_BITS;
2651     if (nb_sectors > 0) {
2652         if ((ret = bdrv_read(bs, sector_num, buf, nb_sectors)) < 0)
2653             return ret;
2654         sector_num += nb_sectors;
2655         len = nb_sectors << BDRV_SECTOR_BITS;
2656         buf += len;
2657         count -= len;
2658     }
2659
2660     /* add data from the last sector */
2661     if (count > 0) {
2662         if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0)
2663             return ret;
2664         memcpy(buf, tmp_buf, count);
2665     }
2666     return count1;
2667 }
2668
2669 int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov)
2670 {
2671     uint8_t tmp_buf[BDRV_SECTOR_SIZE];
2672     int len, nb_sectors, count;
2673     int64_t sector_num;
2674     int ret;
2675
2676     count = qiov->size;
2677
2678     /* first write to align to sector start */
2679     len = (BDRV_SECTOR_SIZE - offset) & (BDRV_SECTOR_SIZE - 1);
2680     if (len > count)
2681         len = count;
2682     sector_num = offset >> BDRV_SECTOR_BITS;
2683     if (len > 0) {
2684         if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0)
2685             return ret;
2686         qemu_iovec_to_buf(qiov, 0, tmp_buf + (offset & (BDRV_SECTOR_SIZE - 1)),
2687                           len);
2688         if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0)
2689             return ret;
2690         count -= len;
2691         if (count == 0)
2692             return qiov->size;
2693         sector_num++;
2694     }
2695
2696     /* write the sectors "in place" */
2697     nb_sectors = count >> BDRV_SECTOR_BITS;
2698     if (nb_sectors > 0) {
2699         QEMUIOVector qiov_inplace;
2700
2701         qemu_iovec_init(&qiov_inplace, qiov->niov);
2702         qemu_iovec_concat(&qiov_inplace, qiov, len,
2703                           nb_sectors << BDRV_SECTOR_BITS);
2704         ret = bdrv_writev(bs, sector_num, &qiov_inplace);
2705         qemu_iovec_destroy(&qiov_inplace);
2706         if (ret < 0) {
2707             return ret;
2708         }
2709
2710         sector_num += nb_sectors;
2711         len = nb_sectors << BDRV_SECTOR_BITS;
2712         count -= len;
2713     }
2714
2715     /* add data from the last sector */
2716     if (count > 0) {
2717         if ((ret = bdrv_read(bs, sector_num, tmp_buf, 1)) < 0)
2718             return ret;
2719         qemu_iovec_to_buf(qiov, qiov->size - count, tmp_buf, count);
2720         if ((ret = bdrv_write(bs, sector_num, tmp_buf, 1)) < 0)
2721             return ret;
2722     }
2723     return qiov->size;
2724 }
2725
2726 int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
2727                 const void *buf, int count1)
2728 {
2729     QEMUIOVector qiov;
2730     struct iovec iov = {
2731         .iov_base   = (void *) buf,
2732         .iov_len    = count1,
2733     };
2734
2735     qemu_iovec_init_external(&qiov, &iov, 1);
2736     return bdrv_pwritev(bs, offset, &qiov);
2737 }
2738
2739 /*
2740  * Writes to the file and ensures that no writes are reordered across this
2741  * request (acts as a barrier)
2742  *
2743  * Returns 0 on success, -errno in error cases.
2744  */
2745 int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset,
2746     const void *buf, int count)
2747 {
2748     int ret;
2749
2750     ret = bdrv_pwrite(bs, offset, buf, count);
2751     if (ret < 0) {
2752         return ret;
2753     }
2754
2755     /* No flush needed for cache modes that already do it */
2756     if (bs->enable_write_cache) {
2757         bdrv_flush(bs);
2758     }
2759
2760     return 0;
2761 }
2762
2763 static int coroutine_fn bdrv_co_do_copy_on_readv(BlockDriverState *bs,
2764         int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
2765 {
2766     /* Perform I/O through a temporary buffer so that users who scribble over
2767      * their read buffer while the operation is in progress do not end up
2768      * modifying the image file.  This is critical for zero-copy guest I/O
2769      * where anything might happen inside guest memory.
2770      */
2771     void *bounce_buffer;
2772
2773     BlockDriver *drv = bs->drv;
2774     struct iovec iov;
2775     QEMUIOVector bounce_qiov;
2776     int64_t cluster_sector_num;
2777     int cluster_nb_sectors;
2778     size_t skip_bytes;
2779     int ret;
2780
2781     /* Cover entire cluster so no additional backing file I/O is required when
2782      * allocating cluster in the image file.
2783      */
2784     bdrv_round_to_clusters(bs, sector_num, nb_sectors,
2785                            &cluster_sector_num, &cluster_nb_sectors);
2786
2787     trace_bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors,
2788                                    cluster_sector_num, cluster_nb_sectors);
2789
2790     iov.iov_len = cluster_nb_sectors * BDRV_SECTOR_SIZE;
2791     iov.iov_base = bounce_buffer = qemu_blockalign(bs, iov.iov_len);
2792     qemu_iovec_init_external(&bounce_qiov, &iov, 1);
2793
2794     ret = drv->bdrv_co_readv(bs, cluster_sector_num, cluster_nb_sectors,
2795                              &bounce_qiov);
2796     if (ret < 0) {
2797         goto err;
2798     }
2799
2800     if (drv->bdrv_co_write_zeroes &&
2801         buffer_is_zero(bounce_buffer, iov.iov_len)) {
2802         ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num,
2803                                       cluster_nb_sectors, 0);
2804     } else {
2805         /* This does not change the data on the disk, it is not necessary
2806          * to flush even in cache=writethrough mode.
2807          */
2808         ret = drv->bdrv_co_writev(bs, cluster_sector_num, cluster_nb_sectors,
2809                                   &bounce_qiov);
2810     }
2811
2812     if (ret < 0) {
2813         /* It might be okay to ignore write errors for guest requests.  If this
2814          * is a deliberate copy-on-read then we don't want to ignore the error.
2815          * Simply report it in all cases.
2816          */
2817         goto err;
2818     }
2819
2820     skip_bytes = (sector_num - cluster_sector_num) * BDRV_SECTOR_SIZE;
2821     qemu_iovec_from_buf(qiov, 0, bounce_buffer + skip_bytes,
2822                         nb_sectors * BDRV_SECTOR_SIZE);
2823
2824 err:
2825     qemu_vfree(bounce_buffer);
2826     return ret;
2827 }
2828
2829 /*
2830  * Handle a read request in coroutine context
2831  */
2832 static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs,
2833     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
2834     BdrvRequestFlags flags)
2835 {
2836     BlockDriver *drv = bs->drv;
2837     BdrvTrackedRequest req;
2838     int ret;
2839
2840     if (!drv) {
2841         return -ENOMEDIUM;
2842     }
2843     if (bdrv_check_request(bs, sector_num, nb_sectors)) {
2844         return -EIO;
2845     }
2846
2847     if (bs->copy_on_read) {
2848         flags |= BDRV_REQ_COPY_ON_READ;
2849     }
2850     if (flags & BDRV_REQ_COPY_ON_READ) {
2851         bs->copy_on_read_in_flight++;
2852     }
2853
2854     if (bs->copy_on_read_in_flight) {
2855         wait_for_overlapping_requests(bs, sector_num, nb_sectors);
2856     }
2857
2858     /* throttling disk I/O */
2859     if (bs->io_limits_enabled) {
2860         bdrv_io_limits_intercept(bs, nb_sectors, false);
2861     }
2862
2863     tracked_request_begin(&req, bs, sector_num, nb_sectors, false);
2864
2865     if (flags & BDRV_REQ_COPY_ON_READ) {
2866         int pnum;
2867
2868         ret = bdrv_is_allocated(bs, sector_num, nb_sectors, &pnum);
2869         if (ret < 0) {
2870             goto out;
2871         }
2872
2873         if (!ret || pnum != nb_sectors) {
2874             ret = bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors, qiov);
2875             goto out;
2876         }
2877     }
2878
2879     if (!(bs->zero_beyond_eof && bs->growable)) {
2880         ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov);
2881     } else {
2882         /* Read zeros after EOF of growable BDSes */
2883         int64_t len, total_sectors, max_nb_sectors;
2884
2885         len = bdrv_getlength(bs);
2886         if (len < 0) {
2887             ret = len;
2888             goto out;
2889         }
2890
2891         total_sectors = DIV_ROUND_UP(len, BDRV_SECTOR_SIZE);
2892         max_nb_sectors = MAX(0, total_sectors - sector_num);
2893         if (max_nb_sectors > 0) {
2894             ret = drv->bdrv_co_readv(bs, sector_num,
2895                                      MIN(nb_sectors, max_nb_sectors), qiov);
2896         } else {
2897             ret = 0;
2898         }
2899
2900         /* Reading beyond end of file is supposed to produce zeroes */
2901         if (ret == 0 && total_sectors < sector_num + nb_sectors) {
2902             uint64_t offset = MAX(0, total_sectors - sector_num);
2903             uint64_t bytes = (sector_num + nb_sectors - offset) *
2904                               BDRV_SECTOR_SIZE;
2905             qemu_iovec_memset(qiov, offset * BDRV_SECTOR_SIZE, 0, bytes);
2906         }
2907     }
2908
2909 out:
2910     tracked_request_end(&req);
2911
2912     if (flags & BDRV_REQ_COPY_ON_READ) {
2913         bs->copy_on_read_in_flight--;
2914     }
2915
2916     return ret;
2917 }
2918
2919 int coroutine_fn bdrv_co_readv(BlockDriverState *bs, int64_t sector_num,
2920     int nb_sectors, QEMUIOVector *qiov)
2921 {
2922     trace_bdrv_co_readv(bs, sector_num, nb_sectors);
2923
2924     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov, 0);
2925 }
2926
2927 int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs,
2928     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
2929 {
2930     trace_bdrv_co_copy_on_readv(bs, sector_num, nb_sectors);
2931
2932     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov,
2933                             BDRV_REQ_COPY_ON_READ);
2934 }
2935
2936 /* if no limit is specified in the BlockLimits use a default
2937  * of 32768 512-byte sectors (16 MiB) per request.
2938  */
2939 #define MAX_WRITE_ZEROES_DEFAULT 32768
2940
2941 static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs,
2942     int64_t sector_num, int nb_sectors, BdrvRequestFlags flags)
2943 {
2944     BlockDriver *drv = bs->drv;
2945     QEMUIOVector qiov;
2946     struct iovec iov = {0};
2947     int ret = 0;
2948
2949     int max_write_zeroes = bs->bl.max_write_zeroes ?
2950                            bs->bl.max_write_zeroes : MAX_WRITE_ZEROES_DEFAULT;
2951
2952     while (nb_sectors > 0 && !ret) {
2953         int num = nb_sectors;
2954
2955         /* Align request.  Block drivers can expect the "bulk" of the request
2956          * to be aligned.
2957          */
2958         if (bs->bl.write_zeroes_alignment
2959             && num > bs->bl.write_zeroes_alignment) {
2960             if (sector_num % bs->bl.write_zeroes_alignment != 0) {
2961                 /* Make a small request up to the first aligned sector.  */
2962                 num = bs->bl.write_zeroes_alignment;
2963                 num -= sector_num % bs->bl.write_zeroes_alignment;
2964             } else if ((sector_num + num) % bs->bl.write_zeroes_alignment != 0) {
2965                 /* Shorten the request to the last aligned sector.  num cannot
2966                  * underflow because num > bs->bl.write_zeroes_alignment.
2967                  */
2968                 num -= (sector_num + num) % bs->bl.write_zeroes_alignment;
2969             }
2970         }
2971
2972         /* limit request size */
2973         if (num > max_write_zeroes) {
2974             num = max_write_zeroes;
2975         }
2976
2977         ret = -ENOTSUP;
2978         /* First try the efficient write zeroes operation */
2979         if (drv->bdrv_co_write_zeroes) {
2980             ret = drv->bdrv_co_write_zeroes(bs, sector_num, num, flags);
2981         }
2982
2983         if (ret == -ENOTSUP) {
2984             /* Fall back to bounce buffer if write zeroes is unsupported */
2985             iov.iov_len = num * BDRV_SECTOR_SIZE;
2986             if (iov.iov_base == NULL) {
2987                 iov.iov_base = qemu_blockalign(bs, num * BDRV_SECTOR_SIZE);
2988                 memset(iov.iov_base, 0, num * BDRV_SECTOR_SIZE);
2989             }
2990             qemu_iovec_init_external(&qiov, &iov, 1);
2991
2992             ret = drv->bdrv_co_writev(bs, sector_num, num, &qiov);
2993
2994             /* Keep bounce buffer around if it is big enough for all
2995              * all future requests.
2996              */
2997             if (num < max_write_zeroes) {
2998                 qemu_vfree(iov.iov_base);
2999                 iov.iov_base = NULL;
3000             }
3001         }
3002
3003         sector_num += num;
3004         nb_sectors -= num;
3005     }
3006
3007     qemu_vfree(iov.iov_base);
3008     return ret;
3009 }
3010
3011 /*
3012  * Handle a write request in coroutine context
3013  */
3014 static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
3015     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
3016     BdrvRequestFlags flags)
3017 {
3018     BlockDriver *drv = bs->drv;
3019     BdrvTrackedRequest req;
3020     int ret;
3021
3022     if (!bs->drv) {
3023         return -ENOMEDIUM;
3024     }
3025     if (bs->read_only) {
3026         return -EACCES;
3027     }
3028     if (bdrv_check_request(bs, sector_num, nb_sectors)) {
3029         return -EIO;
3030     }
3031
3032     if (bs->copy_on_read_in_flight) {
3033         wait_for_overlapping_requests(bs, sector_num, nb_sectors);
3034     }
3035
3036     /* throttling disk I/O */
3037     if (bs->io_limits_enabled) {
3038         bdrv_io_limits_intercept(bs, nb_sectors, true);
3039     }
3040
3041     tracked_request_begin(&req, bs, sector_num, nb_sectors, true);
3042
3043     ret = notifier_with_return_list_notify(&bs->before_write_notifiers, &req);
3044
3045     if (ret < 0) {
3046         /* Do nothing, write notifier decided to fail this request */
3047     } else if (flags & BDRV_REQ_ZERO_WRITE) {
3048         ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags);
3049     } else {
3050         ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
3051     }
3052
3053     if (ret == 0 && !bs->enable_write_cache) {
3054         ret = bdrv_co_flush(bs);
3055     }
3056
3057     bdrv_set_dirty(bs, sector_num, nb_sectors);
3058
3059     if (bs->wr_highest_sector < sector_num + nb_sectors - 1) {
3060         bs->wr_highest_sector = sector_num + nb_sectors - 1;
3061     }
3062     if (bs->growable && ret >= 0) {
3063         bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors);
3064     }
3065
3066     tracked_request_end(&req);
3067
3068     return ret;
3069 }
3070
3071 int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
3072     int nb_sectors, QEMUIOVector *qiov)
3073 {
3074     trace_bdrv_co_writev(bs, sector_num, nb_sectors);
3075
3076     return bdrv_co_do_writev(bs, sector_num, nb_sectors, qiov, 0);
3077 }
3078
3079 int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs,
3080                                       int64_t sector_num, int nb_sectors,
3081                                       BdrvRequestFlags flags)
3082 {
3083     trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags);
3084
3085     if (!(bs->open_flags & BDRV_O_UNMAP)) {
3086         flags &= ~BDRV_REQ_MAY_UNMAP;
3087     }
3088
3089     return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
3090                              BDRV_REQ_ZERO_WRITE | flags);
3091 }
3092
3093 /**
3094  * Truncate file to 'offset' bytes (needed only for file protocols)
3095  */
3096 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
3097 {
3098     BlockDriver *drv = bs->drv;
3099     int ret;
3100     if (!drv)
3101         return -ENOMEDIUM;
3102     if (!drv->bdrv_truncate)
3103         return -ENOTSUP;
3104     if (bs->read_only)
3105         return -EACCES;
3106     if (bdrv_in_use(bs))
3107         return -EBUSY;
3108     ret = drv->bdrv_truncate(bs, offset);
3109     if (ret == 0) {
3110         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
3111         bdrv_dev_resize_cb(bs);
3112     }
3113     return ret;
3114 }
3115
3116 /**
3117  * Length of a allocated file in bytes. Sparse files are counted by actual
3118  * allocated space. Return < 0 if error or unknown.
3119  */
3120 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
3121 {
3122     BlockDriver *drv = bs->drv;
3123     if (!drv) {
3124         return -ENOMEDIUM;
3125     }
3126     if (drv->bdrv_get_allocated_file_size) {
3127         return drv->bdrv_get_allocated_file_size(bs);
3128     }
3129     if (bs->file) {
3130         return bdrv_get_allocated_file_size(bs->file);
3131     }
3132     return -ENOTSUP;
3133 }
3134
3135 /**
3136  * Length of a file in bytes. Return < 0 if error or unknown.
3137  */
3138 int64_t bdrv_getlength(BlockDriverState *bs)
3139 {
3140     BlockDriver *drv = bs->drv;
3141     if (!drv)
3142         return -ENOMEDIUM;
3143
3144     if (drv->has_variable_length) {
3145         int ret = refresh_total_sectors(bs, bs->total_sectors);
3146         if (ret < 0) {
3147             return ret;
3148         }
3149     }
3150     return bs->total_sectors * BDRV_SECTOR_SIZE;
3151 }
3152
3153 /* return 0 as number of sectors if no device present or error */
3154 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
3155 {
3156     int64_t length;
3157     length = bdrv_getlength(bs);
3158     if (length < 0)
3159         length = 0;
3160     else
3161         length = length >> BDRV_SECTOR_BITS;
3162     *nb_sectors_ptr = length;
3163 }
3164
3165 void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
3166                        BlockdevOnError on_write_error)
3167 {
3168     bs->on_read_error = on_read_error;
3169     bs->on_write_error = on_write_error;
3170 }
3171
3172 BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
3173 {
3174     return is_read ? bs->on_read_error : bs->on_write_error;
3175 }
3176
3177 BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
3178 {
3179     BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
3180
3181     switch (on_err) {
3182     case BLOCKDEV_ON_ERROR_ENOSPC:
3183         return (error == ENOSPC) ? BDRV_ACTION_STOP : BDRV_ACTION_REPORT;
3184     case BLOCKDEV_ON_ERROR_STOP:
3185         return BDRV_ACTION_STOP;
3186     case BLOCKDEV_ON_ERROR_REPORT:
3187         return BDRV_ACTION_REPORT;
3188     case BLOCKDEV_ON_ERROR_IGNORE:
3189         return BDRV_ACTION_IGNORE;
3190     default:
3191         abort();
3192     }
3193 }
3194
3195 /* This is done by device models because, while the block layer knows
3196  * about the error, it does not know whether an operation comes from
3197  * the device or the block layer (from a job, for example).
3198  */
3199 void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
3200                        bool is_read, int error)
3201 {
3202     assert(error >= 0);
3203     bdrv_emit_qmp_error_event(bs, QEVENT_BLOCK_IO_ERROR, action, is_read);
3204     if (action == BDRV_ACTION_STOP) {
3205         vm_stop(RUN_STATE_IO_ERROR);
3206         bdrv_iostatus_set_err(bs, error);
3207     }
3208 }
3209
3210 int bdrv_is_read_only(BlockDriverState *bs)
3211 {
3212     return bs->read_only;
3213 }
3214
3215 int bdrv_is_sg(BlockDriverState *bs)
3216 {
3217     return bs->sg;
3218 }
3219
3220 int bdrv_enable_write_cache(BlockDriverState *bs)
3221 {
3222     return bs->enable_write_cache;
3223 }
3224
3225 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
3226 {
3227     bs->enable_write_cache = wce;
3228
3229     /* so a reopen() will preserve wce */
3230     if (wce) {
3231         bs->open_flags |= BDRV_O_CACHE_WB;
3232     } else {
3233         bs->open_flags &= ~BDRV_O_CACHE_WB;
3234     }
3235 }
3236
3237 int bdrv_is_encrypted(BlockDriverState *bs)
3238 {
3239     if (bs->backing_hd && bs->backing_hd->encrypted)
3240         return 1;
3241     return bs->encrypted;
3242 }
3243
3244 int bdrv_key_required(BlockDriverState *bs)
3245 {
3246     BlockDriverState *backing_hd = bs->backing_hd;
3247
3248     if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
3249         return 1;
3250     return (bs->encrypted && !bs->valid_key);
3251 }
3252
3253 int bdrv_set_key(BlockDriverState *bs, const char *key)
3254 {
3255     int ret;
3256     if (bs->backing_hd && bs->backing_hd->encrypted) {
3257         ret = bdrv_set_key(bs->backing_hd, key);
3258         if (ret < 0)
3259             return ret;
3260         if (!bs->encrypted)
3261             return 0;
3262     }
3263     if (!bs->encrypted) {
3264         return -EINVAL;
3265     } else if (!bs->drv || !bs->drv->bdrv_set_key) {
3266         return -ENOMEDIUM;
3267     }
3268     ret = bs->drv->bdrv_set_key(bs, key);
3269     if (ret < 0) {
3270         bs->valid_key = 0;
3271     } else if (!bs->valid_key) {
3272         bs->valid_key = 1;
3273         /* call the change callback now, we skipped it on open */
3274         bdrv_dev_change_media_cb(bs, true);
3275     }
3276     return ret;
3277 }
3278
3279 const char *bdrv_get_format_name(BlockDriverState *bs)
3280 {
3281     return bs->drv ? bs->drv->format_name : NULL;
3282 }
3283
3284 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
3285                          void *opaque)
3286 {
3287     BlockDriver *drv;
3288
3289     QLIST_FOREACH(drv, &bdrv_drivers, list) {
3290         it(opaque, drv->format_name);
3291     }
3292 }
3293
3294 /* This function is to find block backend bs */
3295 BlockDriverState *bdrv_find(const char *name)
3296 {
3297     BlockDriverState *bs;
3298
3299     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3300         if (!strcmp(name, bs->device_name)) {
3301             return bs;
3302         }
3303     }
3304     return NULL;
3305 }
3306
3307 /* This function is to find a node in the bs graph */
3308 BlockDriverState *bdrv_find_node(const char *node_name)
3309 {
3310     BlockDriverState *bs;
3311
3312     assert(node_name);
3313
3314     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3315         if (!strcmp(node_name, bs->node_name)) {
3316             return bs;
3317         }
3318     }
3319     return NULL;
3320 }
3321
3322 /* Put this QMP function here so it can access the static graph_bdrv_states. */
3323 BlockDeviceInfoList *bdrv_named_nodes_list(void)
3324 {
3325     BlockDeviceInfoList *list, *entry;
3326     BlockDriverState *bs;
3327
3328     list = NULL;
3329     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3330         entry = g_malloc0(sizeof(*entry));
3331         entry->value = bdrv_block_device_info(bs);
3332         entry->next = list;
3333         list = entry;
3334     }
3335
3336     return list;
3337 }
3338
3339 BlockDriverState *bdrv_lookup_bs(const char *device,
3340                                  const char *node_name,
3341                                  Error **errp)
3342 {
3343     BlockDriverState *bs = NULL;
3344
3345     if ((!device && !node_name) || (device && node_name)) {
3346         error_setg(errp, "Use either device or node-name but not both");
3347         return NULL;
3348     }
3349
3350     if (device) {
3351         bs = bdrv_find(device);
3352
3353         if (!bs) {
3354             error_set(errp, QERR_DEVICE_NOT_FOUND, device);
3355             return NULL;
3356         }
3357
3358         return bs;
3359     }
3360
3361     bs = bdrv_find_node(node_name);
3362
3363     if (!bs) {
3364         error_set(errp, QERR_DEVICE_NOT_FOUND, node_name);
3365         return NULL;
3366     }
3367
3368     return bs;
3369 }
3370
3371 BlockDriverState *bdrv_next(BlockDriverState *bs)
3372 {
3373     if (!bs) {
3374         return QTAILQ_FIRST(&bdrv_states);
3375     }
3376     return QTAILQ_NEXT(bs, device_list);
3377 }
3378
3379 void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque)
3380 {
3381     BlockDriverState *bs;
3382
3383     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3384         it(opaque, bs);
3385     }
3386 }
3387
3388 const char *bdrv_get_device_name(BlockDriverState *bs)
3389 {
3390     return bs->device_name;
3391 }
3392
3393 int bdrv_get_flags(BlockDriverState *bs)
3394 {
3395     return bs->open_flags;
3396 }
3397
3398 int bdrv_flush_all(void)
3399 {
3400     BlockDriverState *bs;
3401     int result = 0;
3402
3403     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3404         int ret = bdrv_flush(bs);
3405         if (ret < 0 && !result) {
3406             result = ret;
3407         }
3408     }
3409
3410     return result;
3411 }
3412
3413 int bdrv_has_zero_init_1(BlockDriverState *bs)
3414 {
3415     return 1;
3416 }
3417
3418 int bdrv_has_zero_init(BlockDriverState *bs)
3419 {
3420     assert(bs->drv);
3421
3422     /* If BS is a copy on write image, it is initialized to
3423        the contents of the base image, which may not be zeroes.  */
3424     if (bs->backing_hd) {
3425         return 0;
3426     }
3427     if (bs->drv->bdrv_has_zero_init) {
3428         return bs->drv->bdrv_has_zero_init(bs);
3429     }
3430
3431     /* safe default */
3432     return 0;
3433 }
3434
3435 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3436 {
3437     BlockDriverInfo bdi;
3438
3439     if (bs->backing_hd) {
3440         return false;
3441     }
3442
3443     if (bdrv_get_info(bs, &bdi) == 0) {
3444         return bdi.unallocated_blocks_are_zero;
3445     }
3446
3447     return false;
3448 }
3449
3450 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3451 {
3452     BlockDriverInfo bdi;
3453
3454     if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
3455         return false;
3456     }
3457
3458     if (bdrv_get_info(bs, &bdi) == 0) {
3459         return bdi.can_write_zeroes_with_unmap;
3460     }
3461
3462     return false;
3463 }
3464
3465 typedef struct BdrvCoGetBlockStatusData {
3466     BlockDriverState *bs;
3467     BlockDriverState *base;
3468     int64_t sector_num;
3469     int nb_sectors;
3470     int *pnum;
3471     int64_t ret;
3472     bool done;
3473 } BdrvCoGetBlockStatusData;
3474
3475 /*
3476  * Returns true iff the specified sector is present in the disk image. Drivers
3477  * not implementing the functionality are assumed to not support backing files,
3478  * hence all their sectors are reported as allocated.
3479  *
3480  * If 'sector_num' is beyond the end of the disk image the return value is 0
3481  * and 'pnum' is set to 0.
3482  *
3483  * 'pnum' is set to the number of sectors (including and immediately following
3484  * the specified sector) that are known to be in the same
3485  * allocated/unallocated state.
3486  *
3487  * 'nb_sectors' is the max value 'pnum' should be set to.  If nb_sectors goes
3488  * beyond the end of the disk image it will be clamped.
3489  */
3490 static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
3491                                                      int64_t sector_num,
3492                                                      int nb_sectors, int *pnum)
3493 {
3494     int64_t length;
3495     int64_t n;
3496     int64_t ret, ret2;
3497
3498     length = bdrv_getlength(bs);
3499     if (length < 0) {
3500         return length;
3501     }
3502
3503     if (sector_num >= (length >> BDRV_SECTOR_BITS)) {
3504         *pnum = 0;
3505         return 0;
3506     }
3507
3508     n = bs->total_sectors - sector_num;
3509     if (n < nb_sectors) {
3510         nb_sectors = n;
3511     }
3512
3513     if (!bs->drv->bdrv_co_get_block_status) {
3514         *pnum = nb_sectors;
3515         ret = BDRV_BLOCK_DATA;
3516         if (bs->drv->protocol_name) {
3517             ret |= BDRV_BLOCK_OFFSET_VALID | (sector_num * BDRV_SECTOR_SIZE);
3518         }
3519         return ret;
3520     }
3521
3522     ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum);
3523     if (ret < 0) {
3524         *pnum = 0;
3525         return ret;
3526     }
3527
3528     if (ret & BDRV_BLOCK_RAW) {
3529         assert(ret & BDRV_BLOCK_OFFSET_VALID);
3530         return bdrv_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
3531                                      *pnum, pnum);
3532     }
3533
3534     if (!(ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO)) {
3535         if (bdrv_unallocated_blocks_are_zero(bs)) {
3536             ret |= BDRV_BLOCK_ZERO;
3537         } else if (bs->backing_hd) {
3538             BlockDriverState *bs2 = bs->backing_hd;
3539             int64_t length2 = bdrv_getlength(bs2);
3540             if (length2 >= 0 && sector_num >= (length2 >> BDRV_SECTOR_BITS)) {
3541                 ret |= BDRV_BLOCK_ZERO;
3542             }
3543         }
3544     }
3545
3546     if (bs->file &&
3547         (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) &&
3548         (ret & BDRV_BLOCK_OFFSET_VALID)) {
3549         ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
3550                                         *pnum, pnum);
3551         if (ret2 >= 0) {
3552             /* Ignore errors.  This is just providing extra information, it
3553              * is useful but not necessary.
3554              */
3555             ret |= (ret2 & BDRV_BLOCK_ZERO);
3556         }
3557     }
3558
3559     return ret;
3560 }
3561
3562 /* Coroutine wrapper for bdrv_get_block_status() */
3563 static void coroutine_fn bdrv_get_block_status_co_entry(void *opaque)
3564 {
3565     BdrvCoGetBlockStatusData *data = opaque;
3566     BlockDriverState *bs = data->bs;
3567
3568     data->ret = bdrv_co_get_block_status(bs, data->sector_num, data->nb_sectors,
3569                                          data->pnum);
3570     data->done = true;
3571 }
3572
3573 /*
3574  * Synchronous wrapper around bdrv_co_get_block_status().
3575  *
3576  * See bdrv_co_get_block_status() for details.
3577  */
3578 int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
3579                               int nb_sectors, int *pnum)
3580 {
3581     Coroutine *co;
3582     BdrvCoGetBlockStatusData data = {
3583         .bs = bs,
3584         .sector_num = sector_num,
3585         .nb_sectors = nb_sectors,
3586         .pnum = pnum,
3587         .done = false,
3588     };
3589
3590     if (qemu_in_coroutine()) {
3591         /* Fast-path if already in coroutine context */
3592         bdrv_get_block_status_co_entry(&data);
3593     } else {
3594         co = qemu_coroutine_create(bdrv_get_block_status_co_entry);
3595         qemu_coroutine_enter(co, &data);
3596         while (!data.done) {
3597             qemu_aio_wait();
3598         }
3599     }
3600     return data.ret;
3601 }
3602
3603 int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num,
3604                                    int nb_sectors, int *pnum)
3605 {
3606     int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
3607     if (ret < 0) {
3608         return ret;
3609     }
3610     return
3611         (ret & BDRV_BLOCK_DATA) ||
3612         ((ret & BDRV_BLOCK_ZERO) && !bdrv_has_zero_init(bs));
3613 }
3614
3615 /*
3616  * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP]
3617  *
3618  * Return true if the given sector is allocated in any image between
3619  * BASE and TOP (inclusive).  BASE can be NULL to check if the given
3620  * sector is allocated in any image of the chain.  Return false otherwise.
3621  *
3622  * 'pnum' is set to the number of sectors (including and immediately following
3623  *  the specified sector) that are known to be in the same
3624  *  allocated/unallocated state.
3625  *
3626  */
3627 int bdrv_is_allocated_above(BlockDriverState *top,
3628                             BlockDriverState *base,
3629                             int64_t sector_num,
3630                             int nb_sectors, int *pnum)
3631 {
3632     BlockDriverState *intermediate;
3633     int ret, n = nb_sectors;
3634
3635     intermediate = top;
3636     while (intermediate && intermediate != base) {
3637         int pnum_inter;
3638         ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors,
3639                                 &pnum_inter);
3640         if (ret < 0) {
3641             return ret;
3642         } else if (ret) {
3643             *pnum = pnum_inter;
3644             return 1;
3645         }
3646
3647         /*
3648          * [sector_num, nb_sectors] is unallocated on top but intermediate
3649          * might have
3650          *
3651          * [sector_num+x, nr_sectors] allocated.
3652          */
3653         if (n > pnum_inter &&
3654             (intermediate == top ||
3655              sector_num + pnum_inter < intermediate->total_sectors)) {
3656             n = pnum_inter;
3657         }
3658
3659         intermediate = intermediate->backing_hd;
3660     }
3661
3662     *pnum = n;
3663     return 0;
3664 }
3665
3666 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
3667 {
3668     if (bs->backing_hd && bs->backing_hd->encrypted)
3669         return bs->backing_file;
3670     else if (bs->encrypted)
3671         return bs->filename;
3672     else
3673         return NULL;
3674 }
3675
3676 void bdrv_get_backing_filename(BlockDriverState *bs,
3677                                char *filename, int filename_size)
3678 {
3679     pstrcpy(filename, filename_size, bs->backing_file);
3680 }
3681
3682 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
3683                           const uint8_t *buf, int nb_sectors)
3684 {
3685     BlockDriver *drv = bs->drv;
3686     if (!drv)
3687         return -ENOMEDIUM;
3688     if (!drv->bdrv_write_compressed)
3689         return -ENOTSUP;
3690     if (bdrv_check_request(bs, sector_num, nb_sectors))
3691         return -EIO;
3692
3693     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
3694
3695     return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
3696 }
3697
3698 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
3699 {
3700     BlockDriver *drv = bs->drv;
3701     if (!drv)
3702         return -ENOMEDIUM;
3703     if (!drv->bdrv_get_info)
3704         return -ENOTSUP;
3705     memset(bdi, 0, sizeof(*bdi));
3706     return drv->bdrv_get_info(bs, bdi);
3707 }
3708
3709 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
3710 {
3711     BlockDriver *drv = bs->drv;
3712     if (drv && drv->bdrv_get_specific_info) {
3713         return drv->bdrv_get_specific_info(bs);
3714     }
3715     return NULL;
3716 }
3717
3718 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
3719                       int64_t pos, int size)
3720 {
3721     QEMUIOVector qiov;
3722     struct iovec iov = {
3723         .iov_base   = (void *) buf,
3724         .iov_len    = size,
3725     };
3726
3727     qemu_iovec_init_external(&qiov, &iov, 1);
3728     return bdrv_writev_vmstate(bs, &qiov, pos);
3729 }
3730
3731 int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
3732 {
3733     BlockDriver *drv = bs->drv;
3734
3735     if (!drv) {
3736         return -ENOMEDIUM;
3737     } else if (drv->bdrv_save_vmstate) {
3738         return drv->bdrv_save_vmstate(bs, qiov, pos);
3739     } else if (bs->file) {
3740         return bdrv_writev_vmstate(bs->file, qiov, pos);
3741     }
3742
3743     return -ENOTSUP;
3744 }
3745
3746 int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
3747                       int64_t pos, int size)
3748 {
3749     BlockDriver *drv = bs->drv;
3750     if (!drv)
3751         return -ENOMEDIUM;
3752     if (drv->bdrv_load_vmstate)
3753         return drv->bdrv_load_vmstate(bs, buf, pos, size);
3754     if (bs->file)
3755         return bdrv_load_vmstate(bs->file, buf, pos, size);
3756     return -ENOTSUP;
3757 }
3758
3759 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
3760 {
3761     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
3762         return;
3763     }
3764
3765     bs->drv->bdrv_debug_event(bs, event);
3766 }
3767
3768 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
3769                           const char *tag)
3770 {
3771     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
3772         bs = bs->file;
3773     }
3774
3775     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
3776         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
3777     }
3778
3779     return -ENOTSUP;
3780 }
3781
3782 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
3783 {
3784     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
3785         bs = bs->file;
3786     }
3787
3788     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
3789         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
3790     }
3791
3792     return -ENOTSUP;
3793 }
3794
3795 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
3796 {
3797     while (bs && bs->drv && !bs->drv->bdrv_debug_resume) {
3798         bs = bs->file;
3799     }
3800
3801     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
3802         return bs->drv->bdrv_debug_resume(bs, tag);
3803     }
3804
3805     return -ENOTSUP;
3806 }
3807
3808 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
3809 {
3810     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
3811         bs = bs->file;
3812     }
3813
3814     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
3815         return bs->drv->bdrv_debug_is_suspended(bs, tag);
3816     }
3817
3818     return false;
3819 }
3820
3821 int bdrv_is_snapshot(BlockDriverState *bs)
3822 {
3823     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
3824 }
3825
3826 /* backing_file can either be relative, or absolute, or a protocol.  If it is
3827  * relative, it must be relative to the chain.  So, passing in bs->filename
3828  * from a BDS as backing_file should not be done, as that may be relative to
3829  * the CWD rather than the chain. */
3830 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
3831         const char *backing_file)
3832 {
3833     char *filename_full = NULL;
3834     char *backing_file_full = NULL;
3835     char *filename_tmp = NULL;
3836     int is_protocol = 0;
3837     BlockDriverState *curr_bs = NULL;
3838     BlockDriverState *retval = NULL;
3839
3840     if (!bs || !bs->drv || !backing_file) {
3841         return NULL;
3842     }
3843
3844     filename_full     = g_malloc(PATH_MAX);
3845     backing_file_full = g_malloc(PATH_MAX);
3846     filename_tmp      = g_malloc(PATH_MAX);
3847
3848     is_protocol = path_has_protocol(backing_file);
3849
3850     for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
3851
3852         /* If either of the filename paths is actually a protocol, then
3853          * compare unmodified paths; otherwise make paths relative */
3854         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
3855             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
3856                 retval = curr_bs->backing_hd;
3857                 break;
3858             }
3859         } else {
3860             /* If not an absolute filename path, make it relative to the current
3861              * image's filename path */
3862             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3863                          backing_file);
3864
3865             /* We are going to compare absolute pathnames */
3866             if (!realpath(filename_tmp, filename_full)) {
3867                 continue;
3868             }
3869
3870             /* We need to make sure the backing filename we are comparing against
3871              * is relative to the current image filename (or absolute) */
3872             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
3873                          curr_bs->backing_file);
3874
3875             if (!realpath(filename_tmp, backing_file_full)) {
3876                 continue;
3877             }
3878
3879             if (strcmp(backing_file_full, filename_full) == 0) {
3880                 retval = curr_bs->backing_hd;
3881                 break;
3882             }
3883         }
3884     }
3885
3886     g_free(filename_full);
3887     g_free(backing_file_full);
3888     g_free(filename_tmp);
3889     return retval;
3890 }
3891
3892 int bdrv_get_backing_file_depth(BlockDriverState *bs)
3893 {
3894     if (!bs->drv) {
3895         return 0;
3896     }
3897
3898     if (!bs->backing_hd) {
3899         return 0;
3900     }
3901
3902     return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
3903 }
3904
3905 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
3906 {
3907     BlockDriverState *curr_bs = NULL;
3908
3909     if (!bs) {
3910         return NULL;
3911     }
3912
3913     curr_bs = bs;
3914
3915     while (curr_bs->backing_hd) {
3916         curr_bs = curr_bs->backing_hd;
3917     }
3918     return curr_bs;
3919 }
3920
3921 /**************************************************************/
3922 /* async I/Os */
3923
3924 BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
3925                                  QEMUIOVector *qiov, int nb_sectors,
3926                                  BlockDriverCompletionFunc *cb, void *opaque)
3927 {
3928     trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
3929
3930     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
3931                                  cb, opaque, false);
3932 }
3933
3934 BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
3935                                   QEMUIOVector *qiov, int nb_sectors,
3936                                   BlockDriverCompletionFunc *cb, void *opaque)
3937 {
3938     trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque);
3939
3940     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
3941                                  cb, opaque, true);
3942 }
3943
3944 BlockDriverAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs,
3945         int64_t sector_num, int nb_sectors, BdrvRequestFlags flags,
3946         BlockDriverCompletionFunc *cb, void *opaque)
3947 {
3948     trace_bdrv_aio_write_zeroes(bs, sector_num, nb_sectors, flags, opaque);
3949
3950     return bdrv_co_aio_rw_vector(bs, sector_num, NULL, nb_sectors,
3951                                  BDRV_REQ_ZERO_WRITE | flags,
3952                                  cb, opaque, true);
3953 }
3954
3955
3956 typedef struct MultiwriteCB {
3957     int error;
3958     int num_requests;
3959     int num_callbacks;
3960     struct {
3961         BlockDriverCompletionFunc *cb;
3962         void *opaque;
3963         QEMUIOVector *free_qiov;
3964     } callbacks[];
3965 } MultiwriteCB;
3966
3967 static void multiwrite_user_cb(MultiwriteCB *mcb)
3968 {
3969     int i;
3970
3971     for (i = 0; i < mcb->num_callbacks; i++) {
3972         mcb->callbacks[i].cb(mcb->callbacks[i].opaque, mcb->error);
3973         if (mcb->callbacks[i].free_qiov) {
3974             qemu_iovec_destroy(mcb->callbacks[i].free_qiov);
3975         }
3976         g_free(mcb->callbacks[i].free_qiov);
3977     }
3978 }
3979
3980 static void multiwrite_cb(void *opaque, int ret)
3981 {
3982     MultiwriteCB *mcb = opaque;
3983
3984     trace_multiwrite_cb(mcb, ret);
3985
3986     if (ret < 0 && !mcb->error) {
3987         mcb->error = ret;
3988     }
3989
3990     mcb->num_requests--;
3991     if (mcb->num_requests == 0) {
3992         multiwrite_user_cb(mcb);
3993         g_free(mcb);
3994     }
3995 }
3996
3997 static int multiwrite_req_compare(const void *a, const void *b)
3998 {
3999     const BlockRequest *req1 = a, *req2 = b;
4000
4001     /*
4002      * Note that we can't simply subtract req2->sector from req1->sector
4003      * here as that could overflow the return value.
4004      */
4005     if (req1->sector > req2->sector) {
4006         return 1;
4007     } else if (req1->sector < req2->sector) {
4008         return -1;
4009     } else {
4010         return 0;
4011     }
4012 }
4013
4014 /*
4015  * Takes a bunch of requests and tries to merge them. Returns the number of
4016  * requests that remain after merging.
4017  */
4018 static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
4019     int num_reqs, MultiwriteCB *mcb)
4020 {
4021     int i, outidx;
4022
4023     // Sort requests by start sector
4024     qsort(reqs, num_reqs, sizeof(*reqs), &multiwrite_req_compare);
4025
4026     // Check if adjacent requests touch the same clusters. If so, combine them,
4027     // filling up gaps with zero sectors.
4028     outidx = 0;
4029     for (i = 1; i < num_reqs; i++) {
4030         int merge = 0;
4031         int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
4032
4033         // Handle exactly sequential writes and overlapping writes.
4034         if (reqs[i].sector <= oldreq_last) {
4035             merge = 1;
4036         }
4037
4038         if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) {
4039             merge = 0;
4040         }
4041
4042         if (merge) {
4043             size_t size;
4044             QEMUIOVector *qiov = g_malloc0(sizeof(*qiov));
4045             qemu_iovec_init(qiov,
4046                 reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1);
4047
4048             // Add the first request to the merged one. If the requests are
4049             // overlapping, drop the last sectors of the first request.
4050             size = (reqs[i].sector - reqs[outidx].sector) << 9;
4051             qemu_iovec_concat(qiov, reqs[outidx].qiov, 0, size);
4052
4053             // We should need to add any zeros between the two requests
4054             assert (reqs[i].sector <= oldreq_last);
4055
4056             // Add the second request
4057             qemu_iovec_concat(qiov, reqs[i].qiov, 0, reqs[i].qiov->size);
4058
4059             reqs[outidx].nb_sectors = qiov->size >> 9;
4060             reqs[outidx].qiov = qiov;
4061
4062             mcb->callbacks[i].free_qiov = reqs[outidx].qiov;
4063         } else {
4064             outidx++;
4065             reqs[outidx].sector     = reqs[i].sector;
4066             reqs[outidx].nb_sectors = reqs[i].nb_sectors;
4067             reqs[outidx].qiov       = reqs[i].qiov;
4068         }
4069     }
4070
4071     return outidx + 1;
4072 }
4073
4074 /*
4075  * Submit multiple AIO write requests at once.
4076  *
4077  * On success, the function returns 0 and all requests in the reqs array have
4078  * been submitted. In error case this function returns -1, and any of the
4079  * requests may or may not be submitted yet. In particular, this means that the
4080  * callback will be called for some of the requests, for others it won't. The
4081  * caller must check the error field of the BlockRequest to wait for the right
4082  * callbacks (if error != 0, no callback will be called).
4083  *
4084  * The implementation may modify the contents of the reqs array, e.g. to merge
4085  * requests. However, the fields opaque and error are left unmodified as they
4086  * are used to signal failure for a single request to the caller.
4087  */
4088 int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
4089 {
4090     MultiwriteCB *mcb;
4091     int i;
4092
4093     /* don't submit writes if we don't have a medium */
4094     if (bs->drv == NULL) {
4095         for (i = 0; i < num_reqs; i++) {
4096             reqs[i].error = -ENOMEDIUM;
4097         }
4098         return -1;
4099     }
4100
4101     if (num_reqs == 0) {
4102         return 0;
4103     }
4104
4105     // Create MultiwriteCB structure
4106     mcb = g_malloc0(sizeof(*mcb) + num_reqs * sizeof(*mcb->callbacks));
4107     mcb->num_requests = 0;
4108     mcb->num_callbacks = num_reqs;
4109
4110     for (i = 0; i < num_reqs; i++) {
4111         mcb->callbacks[i].cb = reqs[i].cb;
4112         mcb->callbacks[i].opaque = reqs[i].opaque;
4113     }
4114
4115     // Check for mergable requests
4116     num_reqs = multiwrite_merge(bs, reqs, num_reqs, mcb);
4117
4118     trace_bdrv_aio_multiwrite(mcb, mcb->num_callbacks, num_reqs);
4119
4120     /* Run the aio requests. */
4121     mcb->num_requests = num_reqs;
4122     for (i = 0; i < num_reqs; i++) {
4123         bdrv_co_aio_rw_vector(bs, reqs[i].sector, reqs[i].qiov,
4124                               reqs[i].nb_sectors, reqs[i].flags,
4125                               multiwrite_cb, mcb,
4126                               true);
4127     }
4128
4129     return 0;
4130 }
4131
4132 void bdrv_aio_cancel(BlockDriverAIOCB *acb)
4133 {
4134     acb->aiocb_info->cancel(acb);
4135 }
4136
4137 /**************************************************************/
4138 /* async block device emulation */
4139
4140 typedef struct BlockDriverAIOCBSync {
4141     BlockDriverAIOCB common;
4142     QEMUBH *bh;
4143     int ret;
4144     /* vector translation state */
4145     QEMUIOVector *qiov;
4146     uint8_t *bounce;
4147     int is_write;
4148 } BlockDriverAIOCBSync;
4149
4150 static void bdrv_aio_cancel_em(BlockDriverAIOCB *blockacb)
4151 {
4152     BlockDriverAIOCBSync *acb =
4153         container_of(blockacb, BlockDriverAIOCBSync, common);
4154     qemu_bh_delete(acb->bh);
4155     acb->bh = NULL;
4156     qemu_aio_release(acb);
4157 }
4158
4159 static const AIOCBInfo bdrv_em_aiocb_info = {
4160     .aiocb_size         = sizeof(BlockDriverAIOCBSync),
4161     .cancel             = bdrv_aio_cancel_em,
4162 };
4163
4164 static void bdrv_aio_bh_cb(void *opaque)
4165 {
4166     BlockDriverAIOCBSync *acb = opaque;
4167
4168     if (!acb->is_write)
4169         qemu_iovec_from_buf(acb->qiov, 0, acb->bounce, acb->qiov->size);
4170     qemu_vfree(acb->bounce);
4171     acb->common.cb(acb->common.opaque, acb->ret);
4172     qemu_bh_delete(acb->bh);
4173     acb->bh = NULL;
4174     qemu_aio_release(acb);
4175 }
4176
4177 static BlockDriverAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
4178                                             int64_t sector_num,
4179                                             QEMUIOVector *qiov,
4180                                             int nb_sectors,
4181                                             BlockDriverCompletionFunc *cb,
4182                                             void *opaque,
4183                                             int is_write)
4184
4185 {
4186     BlockDriverAIOCBSync *acb;
4187
4188     acb = qemu_aio_get(&bdrv_em_aiocb_info, bs, cb, opaque);
4189     acb->is_write = is_write;
4190     acb->qiov = qiov;
4191     acb->bounce = qemu_blockalign(bs, qiov->size);
4192     acb->bh = qemu_bh_new(bdrv_aio_bh_cb, acb);
4193
4194     if (is_write) {
4195         qemu_iovec_to_buf(acb->qiov, 0, acb->bounce, qiov->size);
4196         acb->ret = bs->drv->bdrv_write(bs, sector_num, acb->bounce, nb_sectors);
4197     } else {
4198         acb->ret = bs->drv->bdrv_read(bs, sector_num, acb->bounce, nb_sectors);
4199     }
4200
4201     qemu_bh_schedule(acb->bh);
4202
4203     return &acb->common;
4204 }
4205
4206 static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
4207         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4208         BlockDriverCompletionFunc *cb, void *opaque)
4209 {
4210     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 0);
4211 }
4212
4213 static BlockDriverAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
4214         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4215         BlockDriverCompletionFunc *cb, void *opaque)
4216 {
4217     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 1);
4218 }
4219
4220
4221 typedef struct BlockDriverAIOCBCoroutine {
4222     BlockDriverAIOCB common;
4223     BlockRequest req;
4224     bool is_write;
4225     bool *done;
4226     QEMUBH* bh;
4227 } BlockDriverAIOCBCoroutine;
4228
4229 static void bdrv_aio_co_cancel_em(BlockDriverAIOCB *blockacb)
4230 {
4231     BlockDriverAIOCBCoroutine *acb =
4232         container_of(blockacb, BlockDriverAIOCBCoroutine, common);
4233     bool done = false;
4234
4235     acb->done = &done;
4236     while (!done) {
4237         qemu_aio_wait();
4238     }
4239 }
4240
4241 static const AIOCBInfo bdrv_em_co_aiocb_info = {
4242     .aiocb_size         = sizeof(BlockDriverAIOCBCoroutine),
4243     .cancel             = bdrv_aio_co_cancel_em,
4244 };
4245
4246 static void bdrv_co_em_bh(void *opaque)
4247 {
4248     BlockDriverAIOCBCoroutine *acb = opaque;
4249
4250     acb->common.cb(acb->common.opaque, acb->req.error);
4251
4252     if (acb->done) {
4253         *acb->done = true;
4254     }
4255
4256     qemu_bh_delete(acb->bh);
4257     qemu_aio_release(acb);
4258 }
4259
4260 /* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
4261 static void coroutine_fn bdrv_co_do_rw(void *opaque)
4262 {
4263     BlockDriverAIOCBCoroutine *acb = opaque;
4264     BlockDriverState *bs = acb->common.bs;
4265
4266     if (!acb->is_write) {
4267         acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
4268             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4269     } else {
4270         acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
4271             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4272     }
4273
4274     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4275     qemu_bh_schedule(acb->bh);
4276 }
4277
4278 static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
4279                                                int64_t sector_num,
4280                                                QEMUIOVector *qiov,
4281                                                int nb_sectors,
4282                                                BdrvRequestFlags flags,
4283                                                BlockDriverCompletionFunc *cb,
4284                                                void *opaque,
4285                                                bool is_write)
4286 {
4287     Coroutine *co;
4288     BlockDriverAIOCBCoroutine *acb;
4289
4290     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4291     acb->req.sector = sector_num;
4292     acb->req.nb_sectors = nb_sectors;
4293     acb->req.qiov = qiov;
4294     acb->req.flags = flags;
4295     acb->is_write = is_write;
4296     acb->done = NULL;
4297
4298     co = qemu_coroutine_create(bdrv_co_do_rw);
4299     qemu_coroutine_enter(co, acb);
4300
4301     return &acb->common;
4302 }
4303
4304 static void coroutine_fn bdrv_aio_flush_co_entry(void *opaque)
4305 {
4306     BlockDriverAIOCBCoroutine *acb = opaque;
4307     BlockDriverState *bs = acb->common.bs;
4308
4309     acb->req.error = bdrv_co_flush(bs);
4310     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4311     qemu_bh_schedule(acb->bh);
4312 }
4313
4314 BlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs,
4315         BlockDriverCompletionFunc *cb, void *opaque)
4316 {
4317     trace_bdrv_aio_flush(bs, opaque);
4318
4319     Coroutine *co;
4320     BlockDriverAIOCBCoroutine *acb;
4321
4322     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4323     acb->done = NULL;
4324
4325     co = qemu_coroutine_create(bdrv_aio_flush_co_entry);
4326     qemu_coroutine_enter(co, acb);
4327
4328     return &acb->common;
4329 }
4330
4331 static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque)
4332 {
4333     BlockDriverAIOCBCoroutine *acb = opaque;
4334     BlockDriverState *bs = acb->common.bs;
4335
4336     acb->req.error = bdrv_co_discard(bs, acb->req.sector, acb->req.nb_sectors);
4337     acb->bh = qemu_bh_new(bdrv_co_em_bh, acb);
4338     qemu_bh_schedule(acb->bh);
4339 }
4340
4341 BlockDriverAIOCB *bdrv_aio_discard(BlockDriverState *bs,
4342         int64_t sector_num, int nb_sectors,
4343         BlockDriverCompletionFunc *cb, void *opaque)
4344 {
4345     Coroutine *co;
4346     BlockDriverAIOCBCoroutine *acb;
4347
4348     trace_bdrv_aio_discard(bs, sector_num, nb_sectors, opaque);
4349
4350     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4351     acb->req.sector = sector_num;
4352     acb->req.nb_sectors = nb_sectors;
4353     acb->done = NULL;
4354     co = qemu_coroutine_create(bdrv_aio_discard_co_entry);
4355     qemu_coroutine_enter(co, acb);
4356
4357     return &acb->common;
4358 }
4359
4360 void bdrv_init(void)
4361 {
4362     module_call_init(MODULE_INIT_BLOCK);
4363 }
4364
4365 void bdrv_init_with_whitelist(void)
4366 {
4367     use_bdrv_whitelist = 1;
4368     bdrv_init();
4369 }
4370
4371 void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
4372                    BlockDriverCompletionFunc *cb, void *opaque)
4373 {
4374     BlockDriverAIOCB *acb;
4375
4376     acb = g_slice_alloc(aiocb_info->aiocb_size);
4377     acb->aiocb_info = aiocb_info;
4378     acb->bs = bs;
4379     acb->cb = cb;
4380     acb->opaque = opaque;
4381     return acb;
4382 }
4383
4384 void qemu_aio_release(void *p)
4385 {
4386     BlockDriverAIOCB *acb = p;
4387     g_slice_free1(acb->aiocb_info->aiocb_size, acb);
4388 }
4389
4390 /**************************************************************/
4391 /* Coroutine block device emulation */
4392
4393 typedef struct CoroutineIOCompletion {
4394     Coroutine *coroutine;
4395     int ret;
4396 } CoroutineIOCompletion;
4397
4398 static void bdrv_co_io_em_complete(void *opaque, int ret)
4399 {
4400     CoroutineIOCompletion *co = opaque;
4401
4402     co->ret = ret;
4403     qemu_coroutine_enter(co->coroutine, NULL);
4404 }
4405
4406 static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
4407                                       int nb_sectors, QEMUIOVector *iov,
4408                                       bool is_write)
4409 {
4410     CoroutineIOCompletion co = {
4411         .coroutine = qemu_coroutine_self(),
4412     };
4413     BlockDriverAIOCB *acb;
4414
4415     if (is_write) {
4416         acb = bs->drv->bdrv_aio_writev(bs, sector_num, iov, nb_sectors,
4417                                        bdrv_co_io_em_complete, &co);
4418     } else {
4419         acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors,
4420                                       bdrv_co_io_em_complete, &co);
4421     }
4422
4423     trace_bdrv_co_io_em(bs, sector_num, nb_sectors, is_write, acb);
4424     if (!acb) {
4425         return -EIO;
4426     }
4427     qemu_coroutine_yield();
4428
4429     return co.ret;
4430 }
4431
4432 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
4433                                          int64_t sector_num, int nb_sectors,
4434                                          QEMUIOVector *iov)
4435 {
4436     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, false);
4437 }
4438
4439 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
4440                                          int64_t sector_num, int nb_sectors,
4441                                          QEMUIOVector *iov)
4442 {
4443     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, true);
4444 }
4445
4446 static void coroutine_fn bdrv_flush_co_entry(void *opaque)
4447 {
4448     RwCo *rwco = opaque;
4449
4450     rwco->ret = bdrv_co_flush(rwco->bs);
4451 }
4452
4453 int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
4454 {
4455     int ret;
4456
4457     if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
4458         return 0;
4459     }
4460
4461     /* Write back cached data to the OS even with cache=unsafe */
4462     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS);
4463     if (bs->drv->bdrv_co_flush_to_os) {
4464         ret = bs->drv->bdrv_co_flush_to_os(bs);
4465         if (ret < 0) {
4466             return ret;
4467         }
4468     }
4469
4470     /* But don't actually force it to the disk with cache=unsafe */
4471     if (bs->open_flags & BDRV_O_NO_FLUSH) {
4472         goto flush_parent;
4473     }
4474
4475     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_DISK);
4476     if (bs->drv->bdrv_co_flush_to_disk) {
4477         ret = bs->drv->bdrv_co_flush_to_disk(bs);
4478     } else if (bs->drv->bdrv_aio_flush) {
4479         BlockDriverAIOCB *acb;
4480         CoroutineIOCompletion co = {
4481             .coroutine = qemu_coroutine_self(),
4482         };
4483
4484         acb = bs->drv->bdrv_aio_flush(bs, bdrv_co_io_em_complete, &co);
4485         if (acb == NULL) {
4486             ret = -EIO;
4487         } else {
4488             qemu_coroutine_yield();
4489             ret = co.ret;
4490         }
4491     } else {
4492         /*
4493          * Some block drivers always operate in either writethrough or unsafe
4494          * mode and don't support bdrv_flush therefore. Usually qemu doesn't
4495          * know how the server works (because the behaviour is hardcoded or
4496          * depends on server-side configuration), so we can't ensure that
4497          * everything is safe on disk. Returning an error doesn't work because
4498          * that would break guests even if the server operates in writethrough
4499          * mode.
4500          *
4501          * Let's hope the user knows what he's doing.
4502          */
4503         ret = 0;
4504     }
4505     if (ret < 0) {
4506         return ret;
4507     }
4508
4509     /* Now flush the underlying protocol.  It will also have BDRV_O_NO_FLUSH
4510      * in the case of cache=unsafe, so there are no useless flushes.
4511      */
4512 flush_parent:
4513     return bdrv_co_flush(bs->file);
4514 }
4515
4516 void bdrv_invalidate_cache(BlockDriverState *bs)
4517 {
4518     if (bs->drv && bs->drv->bdrv_invalidate_cache) {
4519         bs->drv->bdrv_invalidate_cache(bs);
4520     }
4521 }
4522
4523 void bdrv_invalidate_cache_all(void)
4524 {
4525     BlockDriverState *bs;
4526
4527     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4528         bdrv_invalidate_cache(bs);
4529     }
4530 }
4531
4532 void bdrv_clear_incoming_migration_all(void)
4533 {
4534     BlockDriverState *bs;
4535
4536     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
4537         bs->open_flags = bs->open_flags & ~(BDRV_O_INCOMING);
4538     }
4539 }
4540
4541 int bdrv_flush(BlockDriverState *bs)
4542 {
4543     Coroutine *co;
4544     RwCo rwco = {
4545         .bs = bs,
4546         .ret = NOT_DONE,
4547     };
4548
4549     if (qemu_in_coroutine()) {
4550         /* Fast-path if already in coroutine context */
4551         bdrv_flush_co_entry(&rwco);
4552     } else {
4553         co = qemu_coroutine_create(bdrv_flush_co_entry);
4554         qemu_coroutine_enter(co, &rwco);
4555         while (rwco.ret == NOT_DONE) {
4556             qemu_aio_wait();
4557         }
4558     }
4559
4560     return rwco.ret;
4561 }
4562
4563 static void coroutine_fn bdrv_discard_co_entry(void *opaque)
4564 {
4565     RwCo *rwco = opaque;
4566
4567     rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors);
4568 }
4569
4570 /* if no limit is specified in the BlockLimits use a default
4571  * of 32768 512-byte sectors (16 MiB) per request.
4572  */
4573 #define MAX_DISCARD_DEFAULT 32768
4574
4575 int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
4576                                  int nb_sectors)
4577 {
4578     int max_discard;
4579
4580     if (!bs->drv) {
4581         return -ENOMEDIUM;
4582     } else if (bdrv_check_request(bs, sector_num, nb_sectors)) {
4583         return -EIO;
4584     } else if (bs->read_only) {
4585         return -EROFS;
4586     }
4587
4588     bdrv_reset_dirty(bs, sector_num, nb_sectors);
4589
4590     /* Do nothing if disabled.  */
4591     if (!(bs->open_flags & BDRV_O_UNMAP)) {
4592         return 0;
4593     }
4594
4595     if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_discard) {
4596         return 0;
4597     }
4598
4599     max_discard = bs->bl.max_discard ?  bs->bl.max_discard : MAX_DISCARD_DEFAULT;
4600     while (nb_sectors > 0) {
4601         int ret;
4602         int num = nb_sectors;
4603
4604         /* align request */
4605         if (bs->bl.discard_alignment &&
4606             num >= bs->bl.discard_alignment &&
4607             sector_num % bs->bl.discard_alignment) {
4608             if (num > bs->bl.discard_alignment) {
4609                 num = bs->bl.discard_alignment;
4610             }
4611             num -= sector_num % bs->bl.discard_alignment;
4612         }
4613
4614         /* limit request size */
4615         if (num > max_discard) {
4616             num = max_discard;
4617         }
4618
4619         if (bs->drv->bdrv_co_discard) {
4620             ret = bs->drv->bdrv_co_discard(bs, sector_num, num);
4621         } else {
4622             BlockDriverAIOCB *acb;
4623             CoroutineIOCompletion co = {
4624                 .coroutine = qemu_coroutine_self(),
4625             };
4626
4627             acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors,
4628                                             bdrv_co_io_em_complete, &co);
4629             if (acb == NULL) {
4630                 return -EIO;
4631             } else {
4632                 qemu_coroutine_yield();
4633                 ret = co.ret;
4634             }
4635         }
4636         if (ret && ret != -ENOTSUP) {
4637             return ret;
4638         }
4639
4640         sector_num += num;
4641         nb_sectors -= num;
4642     }
4643     return 0;
4644 }
4645
4646 int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
4647 {
4648     Coroutine *co;
4649     RwCo rwco = {
4650         .bs = bs,
4651         .sector_num = sector_num,
4652         .nb_sectors = nb_sectors,
4653         .ret = NOT_DONE,
4654     };
4655
4656     if (qemu_in_coroutine()) {
4657         /* Fast-path if already in coroutine context */
4658         bdrv_discard_co_entry(&rwco);
4659     } else {
4660         co = qemu_coroutine_create(bdrv_discard_co_entry);
4661         qemu_coroutine_enter(co, &rwco);
4662         while (rwco.ret == NOT_DONE) {
4663             qemu_aio_wait();
4664         }
4665     }
4666
4667     return rwco.ret;
4668 }
4669
4670 /**************************************************************/
4671 /* removable device support */
4672
4673 /**
4674  * Return TRUE if the media is present
4675  */
4676 int bdrv_is_inserted(BlockDriverState *bs)
4677 {
4678     BlockDriver *drv = bs->drv;
4679
4680     if (!drv)
4681         return 0;
4682     if (!drv->bdrv_is_inserted)
4683         return 1;
4684     return drv->bdrv_is_inserted(bs);
4685 }
4686
4687 /**
4688  * Return whether the media changed since the last call to this
4689  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
4690  */
4691 int bdrv_media_changed(BlockDriverState *bs)
4692 {
4693     BlockDriver *drv = bs->drv;
4694
4695     if (drv && drv->bdrv_media_changed) {
4696         return drv->bdrv_media_changed(bs);
4697     }
4698     return -ENOTSUP;
4699 }
4700
4701 /**
4702  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
4703  */
4704 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
4705 {
4706     BlockDriver *drv = bs->drv;
4707
4708     if (drv && drv->bdrv_eject) {
4709         drv->bdrv_eject(bs, eject_flag);
4710     }
4711
4712     if (bs->device_name[0] != '\0') {
4713         bdrv_emit_qmp_eject_event(bs, eject_flag);
4714     }
4715 }
4716
4717 /**
4718  * Lock or unlock the media (if it is locked, the user won't be able
4719  * to eject it manually).
4720  */
4721 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
4722 {
4723     BlockDriver *drv = bs->drv;
4724
4725     trace_bdrv_lock_medium(bs, locked);
4726
4727     if (drv && drv->bdrv_lock_medium) {
4728         drv->bdrv_lock_medium(bs, locked);
4729     }
4730 }
4731
4732 /* needed for generic scsi interface */
4733
4734 int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
4735 {
4736     BlockDriver *drv = bs->drv;
4737
4738     if (drv && drv->bdrv_ioctl)
4739         return drv->bdrv_ioctl(bs, req, buf);
4740     return -ENOTSUP;
4741 }
4742
4743 BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs,
4744         unsigned long int req, void *buf,
4745         BlockDriverCompletionFunc *cb, void *opaque)
4746 {
4747     BlockDriver *drv = bs->drv;
4748
4749     if (drv && drv->bdrv_aio_ioctl)
4750         return drv->bdrv_aio_ioctl(bs, req, buf, cb, opaque);
4751     return NULL;
4752 }
4753
4754 void bdrv_set_buffer_alignment(BlockDriverState *bs, int align)
4755 {
4756     bs->buffer_alignment = align;
4757 }
4758
4759 void *qemu_blockalign(BlockDriverState *bs, size_t size)
4760 {
4761     return qemu_memalign((bs && bs->buffer_alignment) ? bs->buffer_alignment : 512, size);
4762 }
4763
4764 /*
4765  * Check if all memory in this vector is sector aligned.
4766  */
4767 bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
4768 {
4769     int i;
4770
4771     for (i = 0; i < qiov->niov; i++) {
4772         if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) {
4773             return false;
4774         }
4775     }
4776
4777     return true;
4778 }
4779
4780 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity)
4781 {
4782     int64_t bitmap_size;
4783     BdrvDirtyBitmap *bitmap;
4784
4785     assert((granularity & (granularity - 1)) == 0);
4786
4787     granularity >>= BDRV_SECTOR_BITS;
4788     assert(granularity);
4789     bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS);
4790     bitmap = g_malloc0(sizeof(BdrvDirtyBitmap));
4791     bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1);
4792     QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
4793     return bitmap;
4794 }
4795
4796 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
4797 {
4798     BdrvDirtyBitmap *bm, *next;
4799     QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
4800         if (bm == bitmap) {
4801             QLIST_REMOVE(bitmap, list);
4802             hbitmap_free(bitmap->bitmap);
4803             g_free(bitmap);
4804             return;
4805         }
4806     }
4807 }
4808
4809 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
4810 {
4811     BdrvDirtyBitmap *bm;
4812     BlockDirtyInfoList *list = NULL;
4813     BlockDirtyInfoList **plist = &list;
4814
4815     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
4816         BlockDirtyInfo *info = g_malloc0(sizeof(BlockDirtyInfo));
4817         BlockDirtyInfoList *entry = g_malloc0(sizeof(BlockDirtyInfoList));
4818         info->count = bdrv_get_dirty_count(bs, bm);
4819         info->granularity =
4820             ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bm->bitmap));
4821         entry->value = info;
4822         *plist = entry;
4823         plist = &entry->next;
4824     }
4825
4826     return list;
4827 }
4828
4829 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
4830 {
4831     if (bitmap) {
4832         return hbitmap_get(bitmap->bitmap, sector);
4833     } else {
4834         return 0;
4835     }
4836 }
4837
4838 void bdrv_dirty_iter_init(BlockDriverState *bs,
4839                           BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
4840 {
4841     hbitmap_iter_init(hbi, bitmap->bitmap, 0);
4842 }
4843
4844 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
4845                     int nr_sectors)
4846 {
4847     BdrvDirtyBitmap *bitmap;
4848     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
4849         hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
4850     }
4851 }
4852
4853 void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors)
4854 {
4855     BdrvDirtyBitmap *bitmap;
4856     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
4857         hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
4858     }
4859 }
4860
4861 int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
4862 {
4863     return hbitmap_count(bitmap->bitmap);
4864 }
4865
4866 /* Get a reference to bs */
4867 void bdrv_ref(BlockDriverState *bs)
4868 {
4869     bs->refcnt++;
4870 }
4871
4872 /* Release a previously grabbed reference to bs.
4873  * If after releasing, reference count is zero, the BlockDriverState is
4874  * deleted. */
4875 void bdrv_unref(BlockDriverState *bs)
4876 {
4877     assert(bs->refcnt > 0);
4878     if (--bs->refcnt == 0) {
4879         bdrv_delete(bs);
4880     }
4881 }
4882
4883 void bdrv_set_in_use(BlockDriverState *bs, int in_use)
4884 {
4885     assert(bs->in_use != in_use);
4886     bs->in_use = in_use;
4887 }
4888
4889 int bdrv_in_use(BlockDriverState *bs)
4890 {
4891     return bs->in_use;
4892 }
4893
4894 void bdrv_iostatus_enable(BlockDriverState *bs)
4895 {
4896     bs->iostatus_enabled = true;
4897     bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
4898 }
4899
4900 /* The I/O status is only enabled if the drive explicitly
4901  * enables it _and_ the VM is configured to stop on errors */
4902 bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
4903 {
4904     return (bs->iostatus_enabled &&
4905            (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
4906             bs->on_write_error == BLOCKDEV_ON_ERROR_STOP   ||
4907             bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
4908 }
4909
4910 void bdrv_iostatus_disable(BlockDriverState *bs)
4911 {
4912     bs->iostatus_enabled = false;
4913 }
4914
4915 void bdrv_iostatus_reset(BlockDriverState *bs)
4916 {
4917     if (bdrv_iostatus_is_enabled(bs)) {
4918         bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
4919         if (bs->job) {
4920             block_job_iostatus_reset(bs->job);
4921         }
4922     }
4923 }
4924
4925 void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
4926 {
4927     assert(bdrv_iostatus_is_enabled(bs));
4928     if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
4929         bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
4930                                          BLOCK_DEVICE_IO_STATUS_FAILED;
4931     }
4932 }
4933
4934 void
4935 bdrv_acct_start(BlockDriverState *bs, BlockAcctCookie *cookie, int64_t bytes,
4936         enum BlockAcctType type)
4937 {
4938     assert(type < BDRV_MAX_IOTYPE);
4939
4940     cookie->bytes = bytes;
4941     cookie->start_time_ns = get_clock();
4942     cookie->type = type;
4943 }
4944
4945 void
4946 bdrv_acct_done(BlockDriverState *bs, BlockAcctCookie *cookie)
4947 {
4948     assert(cookie->type < BDRV_MAX_IOTYPE);
4949
4950     bs->nr_bytes[cookie->type] += cookie->bytes;
4951     bs->nr_ops[cookie->type]++;
4952     bs->total_time_ns[cookie->type] += get_clock() - cookie->start_time_ns;
4953 }
4954
4955 void bdrv_img_create(const char *filename, const char *fmt,
4956                      const char *base_filename, const char *base_fmt,
4957                      char *options, uint64_t img_size, int flags,
4958                      Error **errp, bool quiet)
4959 {
4960     QEMUOptionParameter *param = NULL, *create_options = NULL;
4961     QEMUOptionParameter *backing_fmt, *backing_file, *size;
4962     BlockDriver *drv, *proto_drv;
4963     BlockDriver *backing_drv = NULL;
4964     Error *local_err = NULL;
4965     int ret = 0;
4966
4967     /* Find driver and parse its options */
4968     drv = bdrv_find_format(fmt);
4969     if (!drv) {
4970         error_setg(errp, "Unknown file format '%s'", fmt);
4971         return;
4972     }
4973
4974     proto_drv = bdrv_find_protocol(filename, true);
4975     if (!proto_drv) {
4976         error_setg(errp, "Unknown protocol '%s'", filename);
4977         return;
4978     }
4979
4980     create_options = append_option_parameters(create_options,
4981                                               drv->create_options);
4982     create_options = append_option_parameters(create_options,
4983                                               proto_drv->create_options);
4984
4985     /* Create parameter list with default values */
4986     param = parse_option_parameters("", create_options, param);
4987
4988     set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
4989
4990     /* Parse -o options */
4991     if (options) {
4992         param = parse_option_parameters(options, create_options, param);
4993         if (param == NULL) {
4994             error_setg(errp, "Invalid options for file format '%s'.", fmt);
4995             goto out;
4996         }
4997     }
4998
4999     if (base_filename) {
5000         if (set_option_parameter(param, BLOCK_OPT_BACKING_FILE,
5001                                  base_filename)) {
5002             error_setg(errp, "Backing file not supported for file format '%s'",
5003                        fmt);
5004             goto out;
5005         }
5006     }
5007
5008     if (base_fmt) {
5009         if (set_option_parameter(param, BLOCK_OPT_BACKING_FMT, base_fmt)) {
5010             error_setg(errp, "Backing file format not supported for file "
5011                              "format '%s'", fmt);
5012             goto out;
5013         }
5014     }
5015
5016     backing_file = get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
5017     if (backing_file && backing_file->value.s) {
5018         if (!strcmp(filename, backing_file->value.s)) {
5019             error_setg(errp, "Error: Trying to create an image with the "
5020                              "same filename as the backing file");
5021             goto out;
5022         }
5023     }
5024
5025     backing_fmt = get_option_parameter(param, BLOCK_OPT_BACKING_FMT);
5026     if (backing_fmt && backing_fmt->value.s) {
5027         backing_drv = bdrv_find_format(backing_fmt->value.s);
5028         if (!backing_drv) {
5029             error_setg(errp, "Unknown backing file format '%s'",
5030                        backing_fmt->value.s);
5031             goto out;
5032         }
5033     }
5034
5035     // The size for the image must always be specified, with one exception:
5036     // If we are using a backing file, we can obtain the size from there
5037     size = get_option_parameter(param, BLOCK_OPT_SIZE);
5038     if (size && size->value.n == -1) {
5039         if (backing_file && backing_file->value.s) {
5040             BlockDriverState *bs;
5041             uint64_t size;
5042             char buf[32];
5043             int back_flags;
5044
5045             /* backing files always opened read-only */
5046             back_flags =
5047                 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
5048
5049             bs = bdrv_new("");
5050
5051             ret = bdrv_open(bs, backing_file->value.s, NULL, back_flags,
5052                             backing_drv, &local_err);
5053             if (ret < 0) {
5054                 error_setg_errno(errp, -ret, "Could not open '%s': %s",
5055                                  backing_file->value.s,
5056                                  error_get_pretty(local_err));
5057                 error_free(local_err);
5058                 local_err = NULL;
5059                 bdrv_unref(bs);
5060                 goto out;
5061             }
5062             bdrv_get_geometry(bs, &size);
5063             size *= 512;
5064
5065             snprintf(buf, sizeof(buf), "%" PRId64, size);
5066             set_option_parameter(param, BLOCK_OPT_SIZE, buf);
5067
5068             bdrv_unref(bs);
5069         } else {
5070             error_setg(errp, "Image creation needs a size parameter");
5071             goto out;
5072         }
5073     }
5074
5075     if (!quiet) {
5076         printf("Formatting '%s', fmt=%s ", filename, fmt);
5077         print_option_parameters(param);
5078         puts("");
5079     }
5080     ret = bdrv_create(drv, filename, param, &local_err);
5081     if (ret == -EFBIG) {
5082         /* This is generally a better message than whatever the driver would
5083          * deliver (especially because of the cluster_size_hint), since that
5084          * is most probably not much different from "image too large". */
5085         const char *cluster_size_hint = "";
5086         if (get_option_parameter(create_options, BLOCK_OPT_CLUSTER_SIZE)) {
5087             cluster_size_hint = " (try using a larger cluster size)";
5088         }
5089         error_setg(errp, "The image size is too large for file format '%s'"
5090                    "%s", fmt, cluster_size_hint);
5091         error_free(local_err);
5092         local_err = NULL;
5093     }
5094
5095 out:
5096     free_option_parameters(create_options);
5097     free_option_parameters(param);
5098
5099     if (error_is_set(&local_err)) {
5100         error_propagate(errp, local_err);
5101     }
5102 }
5103
5104 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
5105 {
5106     /* Currently BlockDriverState always uses the main loop AioContext */
5107     return qemu_get_aio_context();
5108 }
5109
5110 void bdrv_add_before_write_notifier(BlockDriverState *bs,
5111                                     NotifierWithReturn *notifier)
5112 {
5113     notifier_with_return_list_add(&bs->before_write_notifiers, notifier);
5114 }
5115
5116 int bdrv_amend_options(BlockDriverState *bs, QEMUOptionParameter *options)
5117 {
5118     if (bs->drv->bdrv_amend_options == NULL) {
5119         return -ENOTSUP;
5120     }
5121     return bs->drv->bdrv_amend_options(bs, options);
5122 }
5123
5124 /* Used to recurse on single child block filters.
5125  * Single child block filter will store their child in bs->file.
5126  */
5127 bool bdrv_generic_is_first_non_filter(BlockDriverState *bs,
5128                                       BlockDriverState *candidate)
5129 {
5130     if (!bs->drv) {
5131         return false;
5132     }
5133
5134     if (!bs->drv->authorizations[BS_IS_A_FILTER]) {
5135         if (bs == candidate) {
5136             return true;
5137         } else {
5138             return false;
5139         }
5140     }
5141
5142     if (!bs->drv->authorizations[BS_FILTER_PASS_DOWN]) {
5143         return false;
5144     }
5145
5146     if (!bs->file) {
5147         return false;
5148     }
5149
5150     return bdrv_recurse_is_first_non_filter(bs->file, candidate);
5151 }
5152
5153 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
5154                                       BlockDriverState *candidate)
5155 {
5156     if (bs->drv && bs->drv->bdrv_recurse_is_first_non_filter) {
5157         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
5158     }
5159
5160     return bdrv_generic_is_first_non_filter(bs, candidate);
5161 }
5162
5163 /* This function checks if the candidate is the first non filter bs down it's
5164  * bs chain. Since we don't have pointers to parents it explore all bs chains
5165  * from the top. Some filters can choose not to pass down the recursion.
5166  */
5167 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
5168 {
5169     BlockDriverState *bs;
5170
5171     /* walk down the bs forest recursively */
5172     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5173         bool perm;
5174
5175         if (!bs->file) {
5176             continue;
5177         }
5178
5179         perm = bdrv_recurse_is_first_non_filter(bs->file, candidate);
5180
5181         /* candidate is the first non filter */
5182         if (perm) {
5183             return true;
5184         }
5185     }
5186
5187     return false;
5188 }
This page took 0.299517 seconds and 4 git commands to generate.