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