]> Git Repo - qemu.git/blob - block.c
block: Get full backing filename from string
[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 "block/block_int.h"
28 #include "block/blockjob.h"
29 #include "qemu/module.h"
30 #include "qapi/qmp/qjson.h"
31 #include "sysemu/block-backend.h"
32 #include "sysemu/sysemu.h"
33 #include "qemu/notify.h"
34 #include "block/coroutine.h"
35 #include "block/qapi.h"
36 #include "qmp-commands.h"
37 #include "qemu/timer.h"
38 #include "qapi-event.h"
39
40 #ifdef CONFIG_BSD
41 #include <sys/types.h>
42 #include <sys/stat.h>
43 #include <sys/ioctl.h>
44 #include <sys/queue.h>
45 #ifndef __DragonFly__
46 #include <sys/disk.h>
47 #endif
48 #endif
49
50 #ifdef _WIN32
51 #include <windows.h>
52 #endif
53
54 struct BdrvDirtyBitmap {
55     HBitmap *bitmap;
56     QLIST_ENTRY(BdrvDirtyBitmap) list;
57 };
58
59 #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
60
61 static BlockAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
62         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
63         BlockCompletionFunc *cb, void *opaque);
64 static BlockAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
65         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
66         BlockCompletionFunc *cb, void *opaque);
67 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
68                                          int64_t sector_num, int nb_sectors,
69                                          QEMUIOVector *iov);
70 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
71                                          int64_t sector_num, int nb_sectors,
72                                          QEMUIOVector *iov);
73 static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
74     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
75     BdrvRequestFlags flags);
76 static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs,
77     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
78     BdrvRequestFlags flags);
79 static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
80                                          int64_t sector_num,
81                                          QEMUIOVector *qiov,
82                                          int nb_sectors,
83                                          BdrvRequestFlags flags,
84                                          BlockCompletionFunc *cb,
85                                          void *opaque,
86                                          bool is_write);
87 static void coroutine_fn bdrv_co_do_rw(void *opaque);
88 static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs,
89     int64_t sector_num, int nb_sectors, BdrvRequestFlags flags);
90
91 static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
92     QTAILQ_HEAD_INITIALIZER(bdrv_states);
93
94 static QTAILQ_HEAD(, BlockDriverState) graph_bdrv_states =
95     QTAILQ_HEAD_INITIALIZER(graph_bdrv_states);
96
97 static QLIST_HEAD(, BlockDriver) bdrv_drivers =
98     QLIST_HEAD_INITIALIZER(bdrv_drivers);
99
100 /* If non-zero, use only whitelisted block drivers */
101 static int use_bdrv_whitelist;
102
103 #ifdef _WIN32
104 static int is_windows_drive_prefix(const char *filename)
105 {
106     return (((filename[0] >= 'a' && filename[0] <= 'z') ||
107              (filename[0] >= 'A' && filename[0] <= 'Z')) &&
108             filename[1] == ':');
109 }
110
111 int is_windows_drive(const char *filename)
112 {
113     if (is_windows_drive_prefix(filename) &&
114         filename[2] == '\0')
115         return 1;
116     if (strstart(filename, "\\\\.\\", NULL) ||
117         strstart(filename, "//./", NULL))
118         return 1;
119     return 0;
120 }
121 #endif
122
123 /* throttling disk I/O limits */
124 void bdrv_set_io_limits(BlockDriverState *bs,
125                         ThrottleConfig *cfg)
126 {
127     int i;
128
129     throttle_config(&bs->throttle_state, cfg);
130
131     for (i = 0; i < 2; i++) {
132         qemu_co_enter_next(&bs->throttled_reqs[i]);
133     }
134 }
135
136 /* this function drain all the throttled IOs */
137 static bool bdrv_start_throttled_reqs(BlockDriverState *bs)
138 {
139     bool drained = false;
140     bool enabled = bs->io_limits_enabled;
141     int i;
142
143     bs->io_limits_enabled = false;
144
145     for (i = 0; i < 2; i++) {
146         while (qemu_co_enter_next(&bs->throttled_reqs[i])) {
147             drained = true;
148         }
149     }
150
151     bs->io_limits_enabled = enabled;
152
153     return drained;
154 }
155
156 void bdrv_io_limits_disable(BlockDriverState *bs)
157 {
158     bs->io_limits_enabled = false;
159
160     bdrv_start_throttled_reqs(bs);
161
162     throttle_destroy(&bs->throttle_state);
163 }
164
165 static void bdrv_throttle_read_timer_cb(void *opaque)
166 {
167     BlockDriverState *bs = opaque;
168     qemu_co_enter_next(&bs->throttled_reqs[0]);
169 }
170
171 static void bdrv_throttle_write_timer_cb(void *opaque)
172 {
173     BlockDriverState *bs = opaque;
174     qemu_co_enter_next(&bs->throttled_reqs[1]);
175 }
176
177 /* should be called before bdrv_set_io_limits if a limit is set */
178 void bdrv_io_limits_enable(BlockDriverState *bs)
179 {
180     assert(!bs->io_limits_enabled);
181     throttle_init(&bs->throttle_state,
182                   bdrv_get_aio_context(bs),
183                   QEMU_CLOCK_VIRTUAL,
184                   bdrv_throttle_read_timer_cb,
185                   bdrv_throttle_write_timer_cb,
186                   bs);
187     bs->io_limits_enabled = true;
188 }
189
190 /* This function makes an IO wait if needed
191  *
192  * @nb_sectors: the number of sectors of the IO
193  * @is_write:   is the IO a write
194  */
195 static void bdrv_io_limits_intercept(BlockDriverState *bs,
196                                      unsigned int bytes,
197                                      bool is_write)
198 {
199     /* does this io must wait */
200     bool must_wait = throttle_schedule_timer(&bs->throttle_state, is_write);
201
202     /* if must wait or any request of this type throttled queue the IO */
203     if (must_wait ||
204         !qemu_co_queue_empty(&bs->throttled_reqs[is_write])) {
205         qemu_co_queue_wait(&bs->throttled_reqs[is_write]);
206     }
207
208     /* the IO will be executed, do the accounting */
209     throttle_account(&bs->throttle_state, is_write, bytes);
210
211
212     /* if the next request must wait -> do nothing */
213     if (throttle_schedule_timer(&bs->throttle_state, is_write)) {
214         return;
215     }
216
217     /* else queue next request for execution */
218     qemu_co_queue_next(&bs->throttled_reqs[is_write]);
219 }
220
221 size_t bdrv_opt_mem_align(BlockDriverState *bs)
222 {
223     if (!bs || !bs->drv) {
224         /* 4k should be on the safe side */
225         return 4096;
226     }
227
228     return bs->bl.opt_mem_alignment;
229 }
230
231 /* check if the path starts with "<protocol>:" */
232 int path_has_protocol(const char *path)
233 {
234     const char *p;
235
236 #ifdef _WIN32
237     if (is_windows_drive(path) ||
238         is_windows_drive_prefix(path)) {
239         return 0;
240     }
241     p = path + strcspn(path, ":/\\");
242 #else
243     p = path + strcspn(path, ":/");
244 #endif
245
246     return *p == ':';
247 }
248
249 int path_is_absolute(const char *path)
250 {
251 #ifdef _WIN32
252     /* specific case for names like: "\\.\d:" */
253     if (is_windows_drive(path) || is_windows_drive_prefix(path)) {
254         return 1;
255     }
256     return (*path == '/' || *path == '\\');
257 #else
258     return (*path == '/');
259 #endif
260 }
261
262 /* if filename is absolute, just copy it to dest. Otherwise, build a
263    path to it by considering it is relative to base_path. URL are
264    supported. */
265 void path_combine(char *dest, int dest_size,
266                   const char *base_path,
267                   const char *filename)
268 {
269     const char *p, *p1;
270     int len;
271
272     if (dest_size <= 0)
273         return;
274     if (path_is_absolute(filename)) {
275         pstrcpy(dest, dest_size, filename);
276     } else {
277         p = strchr(base_path, ':');
278         if (p)
279             p++;
280         else
281             p = base_path;
282         p1 = strrchr(base_path, '/');
283 #ifdef _WIN32
284         {
285             const char *p2;
286             p2 = strrchr(base_path, '\\');
287             if (!p1 || p2 > p1)
288                 p1 = p2;
289         }
290 #endif
291         if (p1)
292             p1++;
293         else
294             p1 = base_path;
295         if (p1 > p)
296             p = p1;
297         len = p - base_path;
298         if (len > dest_size - 1)
299             len = dest_size - 1;
300         memcpy(dest, base_path, len);
301         dest[len] = '\0';
302         pstrcat(dest, dest_size, filename);
303     }
304 }
305
306 void bdrv_get_full_backing_filename_from_filename(const char *backed,
307                                                   const char *backing,
308                                                   char *dest, size_t sz)
309 {
310     if (backing[0] == '\0' || path_has_protocol(backing)) {
311         pstrcpy(dest, sz, backing);
312     } else {
313         path_combine(dest, sz, backed, backing);
314     }
315 }
316
317 void bdrv_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz)
318 {
319     bdrv_get_full_backing_filename_from_filename(bs->filename, bs->backing_file,
320                                                  dest, sz);
321 }
322
323 void bdrv_register(BlockDriver *bdrv)
324 {
325     /* Block drivers without coroutine functions need emulation */
326     if (!bdrv->bdrv_co_readv) {
327         bdrv->bdrv_co_readv = bdrv_co_readv_em;
328         bdrv->bdrv_co_writev = bdrv_co_writev_em;
329
330         /* bdrv_co_readv_em()/brdv_co_writev_em() work in terms of aio, so if
331          * the block driver lacks aio we need to emulate that too.
332          */
333         if (!bdrv->bdrv_aio_readv) {
334             /* add AIO emulation layer */
335             bdrv->bdrv_aio_readv = bdrv_aio_readv_em;
336             bdrv->bdrv_aio_writev = bdrv_aio_writev_em;
337         }
338     }
339
340     QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
341 }
342
343 BlockDriverState *bdrv_new_root(void)
344 {
345     BlockDriverState *bs = bdrv_new();
346
347     QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
348     return bs;
349 }
350
351 BlockDriverState *bdrv_new(void)
352 {
353     BlockDriverState *bs;
354     int i;
355
356     bs = g_new0(BlockDriverState, 1);
357     QLIST_INIT(&bs->dirty_bitmaps);
358     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
359         QLIST_INIT(&bs->op_blockers[i]);
360     }
361     bdrv_iostatus_disable(bs);
362     notifier_list_init(&bs->close_notifiers);
363     notifier_with_return_list_init(&bs->before_write_notifiers);
364     qemu_co_queue_init(&bs->throttled_reqs[0]);
365     qemu_co_queue_init(&bs->throttled_reqs[1]);
366     bs->refcnt = 1;
367     bs->aio_context = qemu_get_aio_context();
368
369     return bs;
370 }
371
372 void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
373 {
374     notifier_list_add(&bs->close_notifiers, notify);
375 }
376
377 BlockDriver *bdrv_find_format(const char *format_name)
378 {
379     BlockDriver *drv1;
380     QLIST_FOREACH(drv1, &bdrv_drivers, list) {
381         if (!strcmp(drv1->format_name, format_name)) {
382             return drv1;
383         }
384     }
385     return NULL;
386 }
387
388 static int bdrv_is_whitelisted(BlockDriver *drv, bool read_only)
389 {
390     static const char *whitelist_rw[] = {
391         CONFIG_BDRV_RW_WHITELIST
392     };
393     static const char *whitelist_ro[] = {
394         CONFIG_BDRV_RO_WHITELIST
395     };
396     const char **p;
397
398     if (!whitelist_rw[0] && !whitelist_ro[0]) {
399         return 1;               /* no whitelist, anything goes */
400     }
401
402     for (p = whitelist_rw; *p; p++) {
403         if (!strcmp(drv->format_name, *p)) {
404             return 1;
405         }
406     }
407     if (read_only) {
408         for (p = whitelist_ro; *p; p++) {
409             if (!strcmp(drv->format_name, *p)) {
410                 return 1;
411             }
412         }
413     }
414     return 0;
415 }
416
417 BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
418                                           bool read_only)
419 {
420     BlockDriver *drv = bdrv_find_format(format_name);
421     return drv && bdrv_is_whitelisted(drv, read_only) ? drv : NULL;
422 }
423
424 typedef struct CreateCo {
425     BlockDriver *drv;
426     char *filename;
427     QemuOpts *opts;
428     int ret;
429     Error *err;
430 } CreateCo;
431
432 static void coroutine_fn bdrv_create_co_entry(void *opaque)
433 {
434     Error *local_err = NULL;
435     int ret;
436
437     CreateCo *cco = opaque;
438     assert(cco->drv);
439
440     ret = cco->drv->bdrv_create(cco->filename, cco->opts, &local_err);
441     if (local_err) {
442         error_propagate(&cco->err, local_err);
443     }
444     cco->ret = ret;
445 }
446
447 int bdrv_create(BlockDriver *drv, const char* filename,
448                 QemuOpts *opts, Error **errp)
449 {
450     int ret;
451
452     Coroutine *co;
453     CreateCo cco = {
454         .drv = drv,
455         .filename = g_strdup(filename),
456         .opts = opts,
457         .ret = NOT_DONE,
458         .err = NULL,
459     };
460
461     if (!drv->bdrv_create) {
462         error_setg(errp, "Driver '%s' does not support image creation", drv->format_name);
463         ret = -ENOTSUP;
464         goto out;
465     }
466
467     if (qemu_in_coroutine()) {
468         /* Fast-path if already in coroutine context */
469         bdrv_create_co_entry(&cco);
470     } else {
471         co = qemu_coroutine_create(bdrv_create_co_entry);
472         qemu_coroutine_enter(co, &cco);
473         while (cco.ret == NOT_DONE) {
474             aio_poll(qemu_get_aio_context(), true);
475         }
476     }
477
478     ret = cco.ret;
479     if (ret < 0) {
480         if (cco.err) {
481             error_propagate(errp, cco.err);
482         } else {
483             error_setg_errno(errp, -ret, "Could not create image");
484         }
485     }
486
487 out:
488     g_free(cco.filename);
489     return ret;
490 }
491
492 int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp)
493 {
494     BlockDriver *drv;
495     Error *local_err = NULL;
496     int ret;
497
498     drv = bdrv_find_protocol(filename, true);
499     if (drv == NULL) {
500         error_setg(errp, "Could not find protocol for file '%s'", filename);
501         return -ENOENT;
502     }
503
504     ret = bdrv_create(drv, filename, opts, &local_err);
505     if (local_err) {
506         error_propagate(errp, local_err);
507     }
508     return ret;
509 }
510
511 void bdrv_refresh_limits(BlockDriverState *bs, Error **errp)
512 {
513     BlockDriver *drv = bs->drv;
514     Error *local_err = NULL;
515
516     memset(&bs->bl, 0, sizeof(bs->bl));
517
518     if (!drv) {
519         return;
520     }
521
522     /* Take some limits from the children as a default */
523     if (bs->file) {
524         bdrv_refresh_limits(bs->file, &local_err);
525         if (local_err) {
526             error_propagate(errp, local_err);
527             return;
528         }
529         bs->bl.opt_transfer_length = bs->file->bl.opt_transfer_length;
530         bs->bl.max_transfer_length = bs->file->bl.max_transfer_length;
531         bs->bl.opt_mem_alignment = bs->file->bl.opt_mem_alignment;
532     } else {
533         bs->bl.opt_mem_alignment = 512;
534     }
535
536     if (bs->backing_hd) {
537         bdrv_refresh_limits(bs->backing_hd, &local_err);
538         if (local_err) {
539             error_propagate(errp, local_err);
540             return;
541         }
542         bs->bl.opt_transfer_length =
543             MAX(bs->bl.opt_transfer_length,
544                 bs->backing_hd->bl.opt_transfer_length);
545         bs->bl.max_transfer_length =
546             MIN_NON_ZERO(bs->bl.max_transfer_length,
547                          bs->backing_hd->bl.max_transfer_length);
548         bs->bl.opt_mem_alignment =
549             MAX(bs->bl.opt_mem_alignment,
550                 bs->backing_hd->bl.opt_mem_alignment);
551     }
552
553     /* Then let the driver override it */
554     if (drv->bdrv_refresh_limits) {
555         drv->bdrv_refresh_limits(bs, errp);
556     }
557 }
558
559 /*
560  * Create a uniquely-named empty temporary file.
561  * Return 0 upon success, otherwise a negative errno value.
562  */
563 int get_tmp_filename(char *filename, int size)
564 {
565 #ifdef _WIN32
566     char temp_dir[MAX_PATH];
567     /* GetTempFileName requires that its output buffer (4th param)
568        have length MAX_PATH or greater.  */
569     assert(size >= MAX_PATH);
570     return (GetTempPath(MAX_PATH, temp_dir)
571             && GetTempFileName(temp_dir, "qem", 0, filename)
572             ? 0 : -GetLastError());
573 #else
574     int fd;
575     const char *tmpdir;
576     tmpdir = getenv("TMPDIR");
577     if (!tmpdir) {
578         tmpdir = "/var/tmp";
579     }
580     if (snprintf(filename, size, "%s/vl.XXXXXX", tmpdir) >= size) {
581         return -EOVERFLOW;
582     }
583     fd = mkstemp(filename);
584     if (fd < 0) {
585         return -errno;
586     }
587     if (close(fd) != 0) {
588         unlink(filename);
589         return -errno;
590     }
591     return 0;
592 #endif
593 }
594
595 /*
596  * Detect host devices. By convention, /dev/cdrom[N] is always
597  * recognized as a host CDROM.
598  */
599 static BlockDriver *find_hdev_driver(const char *filename)
600 {
601     int score_max = 0, score;
602     BlockDriver *drv = NULL, *d;
603
604     QLIST_FOREACH(d, &bdrv_drivers, list) {
605         if (d->bdrv_probe_device) {
606             score = d->bdrv_probe_device(filename);
607             if (score > score_max) {
608                 score_max = score;
609                 drv = d;
610             }
611         }
612     }
613
614     return drv;
615 }
616
617 BlockDriver *bdrv_find_protocol(const char *filename,
618                                 bool allow_protocol_prefix)
619 {
620     BlockDriver *drv1;
621     char protocol[128];
622     int len;
623     const char *p;
624
625     /* TODO Drivers without bdrv_file_open must be specified explicitly */
626
627     /*
628      * XXX(hch): we really should not let host device detection
629      * override an explicit protocol specification, but moving this
630      * later breaks access to device names with colons in them.
631      * Thanks to the brain-dead persistent naming schemes on udev-
632      * based Linux systems those actually are quite common.
633      */
634     drv1 = find_hdev_driver(filename);
635     if (drv1) {
636         return drv1;
637     }
638
639     if (!path_has_protocol(filename) || !allow_protocol_prefix) {
640         return &bdrv_file;
641     }
642
643     p = strchr(filename, ':');
644     assert(p != NULL);
645     len = p - filename;
646     if (len > sizeof(protocol) - 1)
647         len = sizeof(protocol) - 1;
648     memcpy(protocol, filename, len);
649     protocol[len] = '\0';
650     QLIST_FOREACH(drv1, &bdrv_drivers, list) {
651         if (drv1->protocol_name &&
652             !strcmp(drv1->protocol_name, protocol)) {
653             return drv1;
654         }
655     }
656     return NULL;
657 }
658
659 /*
660  * Guess image format by probing its contents.
661  * This is not a good idea when your image is raw (CVE-2008-2004), but
662  * we do it anyway for backward compatibility.
663  *
664  * @buf         contains the image's first @buf_size bytes.
665  * @buf_size    is the buffer size in bytes (generally BLOCK_PROBE_BUF_SIZE,
666  *              but can be smaller if the image file is smaller)
667  * @filename    is its filename.
668  *
669  * For all block drivers, call the bdrv_probe() method to get its
670  * probing score.
671  * Return the first block driver with the highest probing score.
672  */
673 BlockDriver *bdrv_probe_all(const uint8_t *buf, int buf_size,
674                             const char *filename)
675 {
676     int score_max = 0, score;
677     BlockDriver *drv = NULL, *d;
678
679     QLIST_FOREACH(d, &bdrv_drivers, list) {
680         if (d->bdrv_probe) {
681             score = d->bdrv_probe(buf, buf_size, filename);
682             if (score > score_max) {
683                 score_max = score;
684                 drv = d;
685             }
686         }
687     }
688
689     return drv;
690 }
691
692 static int find_image_format(BlockDriverState *bs, const char *filename,
693                              BlockDriver **pdrv, Error **errp)
694 {
695     BlockDriver *drv;
696     uint8_t buf[BLOCK_PROBE_BUF_SIZE];
697     int ret = 0;
698
699     /* Return the raw BlockDriver * to scsi-generic devices or empty drives */
700     if (bs->sg || !bdrv_is_inserted(bs) || bdrv_getlength(bs) == 0) {
701         *pdrv = &bdrv_raw;
702         return ret;
703     }
704
705     ret = bdrv_pread(bs, 0, buf, sizeof(buf));
706     if (ret < 0) {
707         error_setg_errno(errp, -ret, "Could not read image for determining its "
708                          "format");
709         *pdrv = NULL;
710         return ret;
711     }
712
713     drv = bdrv_probe_all(buf, ret, filename);
714     if (!drv) {
715         error_setg(errp, "Could not determine image format: No compatible "
716                    "driver found");
717         ret = -ENOENT;
718     }
719     *pdrv = drv;
720     return ret;
721 }
722
723 /**
724  * Set the current 'total_sectors' value
725  * Return 0 on success, -errno on error.
726  */
727 static int refresh_total_sectors(BlockDriverState *bs, int64_t hint)
728 {
729     BlockDriver *drv = bs->drv;
730
731     /* Do not attempt drv->bdrv_getlength() on scsi-generic devices */
732     if (bs->sg)
733         return 0;
734
735     /* query actual device if possible, otherwise just trust the hint */
736     if (drv->bdrv_getlength) {
737         int64_t length = drv->bdrv_getlength(bs);
738         if (length < 0) {
739             return length;
740         }
741         hint = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE);
742     }
743
744     bs->total_sectors = hint;
745     return 0;
746 }
747
748 /**
749  * Set open flags for a given discard mode
750  *
751  * Return 0 on success, -1 if the discard mode was invalid.
752  */
753 int bdrv_parse_discard_flags(const char *mode, int *flags)
754 {
755     *flags &= ~BDRV_O_UNMAP;
756
757     if (!strcmp(mode, "off") || !strcmp(mode, "ignore")) {
758         /* do nothing */
759     } else if (!strcmp(mode, "on") || !strcmp(mode, "unmap")) {
760         *flags |= BDRV_O_UNMAP;
761     } else {
762         return -1;
763     }
764
765     return 0;
766 }
767
768 /**
769  * Set open flags for a given cache mode
770  *
771  * Return 0 on success, -1 if the cache mode was invalid.
772  */
773 int bdrv_parse_cache_flags(const char *mode, int *flags)
774 {
775     *flags &= ~BDRV_O_CACHE_MASK;
776
777     if (!strcmp(mode, "off") || !strcmp(mode, "none")) {
778         *flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB;
779     } else if (!strcmp(mode, "directsync")) {
780         *flags |= BDRV_O_NOCACHE;
781     } else if (!strcmp(mode, "writeback")) {
782         *flags |= BDRV_O_CACHE_WB;
783     } else if (!strcmp(mode, "unsafe")) {
784         *flags |= BDRV_O_CACHE_WB;
785         *flags |= BDRV_O_NO_FLUSH;
786     } else if (!strcmp(mode, "writethrough")) {
787         /* this is the default */
788     } else {
789         return -1;
790     }
791
792     return 0;
793 }
794
795 /**
796  * The copy-on-read flag is actually a reference count so multiple users may
797  * use the feature without worrying about clobbering its previous state.
798  * Copy-on-read stays enabled until all users have called to disable it.
799  */
800 void bdrv_enable_copy_on_read(BlockDriverState *bs)
801 {
802     bs->copy_on_read++;
803 }
804
805 void bdrv_disable_copy_on_read(BlockDriverState *bs)
806 {
807     assert(bs->copy_on_read > 0);
808     bs->copy_on_read--;
809 }
810
811 /*
812  * Returns the flags that a temporary snapshot should get, based on the
813  * originally requested flags (the originally requested image will have flags
814  * like a backing file)
815  */
816 static int bdrv_temp_snapshot_flags(int flags)
817 {
818     return (flags & ~BDRV_O_SNAPSHOT) | BDRV_O_TEMPORARY;
819 }
820
821 /*
822  * Returns the flags that bs->file should get, based on the given flags for
823  * the parent BDS
824  */
825 static int bdrv_inherited_flags(int flags)
826 {
827     /* Enable protocol handling, disable format probing for bs->file */
828     flags |= BDRV_O_PROTOCOL;
829
830     /* Our block drivers take care to send flushes and respect unmap policy,
831      * so we can enable both unconditionally on lower layers. */
832     flags |= BDRV_O_CACHE_WB | BDRV_O_UNMAP;
833
834     /* Clear flags that only apply to the top layer */
835     flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
836
837     return flags;
838 }
839
840 /*
841  * Returns the flags that bs->backing_hd should get, based on the given flags
842  * for the parent BDS
843  */
844 static int bdrv_backing_flags(int flags)
845 {
846     /* backing files always opened read-only */
847     flags &= ~(BDRV_O_RDWR | BDRV_O_COPY_ON_READ);
848
849     /* snapshot=on is handled on the top layer */
850     flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_TEMPORARY);
851
852     return flags;
853 }
854
855 static int bdrv_open_flags(BlockDriverState *bs, int flags)
856 {
857     int open_flags = flags | BDRV_O_CACHE_WB;
858
859     /*
860      * Clear flags that are internal to the block layer before opening the
861      * image.
862      */
863     open_flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_PROTOCOL);
864
865     /*
866      * Snapshots should be writable.
867      */
868     if (flags & BDRV_O_TEMPORARY) {
869         open_flags |= BDRV_O_RDWR;
870     }
871
872     return open_flags;
873 }
874
875 static void bdrv_assign_node_name(BlockDriverState *bs,
876                                   const char *node_name,
877                                   Error **errp)
878 {
879     if (!node_name) {
880         return;
881     }
882
883     /* Check for empty string or invalid characters */
884     if (!id_wellformed(node_name)) {
885         error_setg(errp, "Invalid node name");
886         return;
887     }
888
889     /* takes care of avoiding namespaces collisions */
890     if (blk_by_name(node_name)) {
891         error_setg(errp, "node-name=%s is conflicting with a device id",
892                    node_name);
893         return;
894     }
895
896     /* takes care of avoiding duplicates node names */
897     if (bdrv_find_node(node_name)) {
898         error_setg(errp, "Duplicate node name");
899         return;
900     }
901
902     /* copy node name into the bs and insert it into the graph list */
903     pstrcpy(bs->node_name, sizeof(bs->node_name), node_name);
904     QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs, node_list);
905 }
906
907 /*
908  * Common part for opening disk images and files
909  *
910  * Removes all processed options from *options.
911  */
912 static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,
913     QDict *options, int flags, BlockDriver *drv, Error **errp)
914 {
915     int ret, open_flags;
916     const char *filename;
917     const char *node_name = NULL;
918     Error *local_err = NULL;
919
920     assert(drv != NULL);
921     assert(bs->file == NULL);
922     assert(options != NULL && bs->options != options);
923
924     if (file != NULL) {
925         filename = file->filename;
926     } else {
927         filename = qdict_get_try_str(options, "filename");
928     }
929
930     if (drv->bdrv_needs_filename && !filename) {
931         error_setg(errp, "The '%s' block driver requires a file name",
932                    drv->format_name);
933         return -EINVAL;
934     }
935
936     trace_bdrv_open_common(bs, filename ?: "", flags, drv->format_name);
937
938     node_name = qdict_get_try_str(options, "node-name");
939     bdrv_assign_node_name(bs, node_name, &local_err);
940     if (local_err) {
941         error_propagate(errp, local_err);
942         return -EINVAL;
943     }
944     qdict_del(options, "node-name");
945
946     /* bdrv_open() with directly using a protocol as drv. This layer is already
947      * opened, so assign it to bs (while file becomes a closed BlockDriverState)
948      * and return immediately. */
949     if (file != NULL && drv->bdrv_file_open) {
950         bdrv_swap(file, bs);
951         return 0;
952     }
953
954     bs->open_flags = flags;
955     bs->guest_block_size = 512;
956     bs->request_alignment = 512;
957     bs->zero_beyond_eof = true;
958     open_flags = bdrv_open_flags(bs, flags);
959     bs->read_only = !(open_flags & BDRV_O_RDWR);
960     bs->growable = !!(flags & BDRV_O_PROTOCOL);
961
962     if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv, bs->read_only)) {
963         error_setg(errp,
964                    !bs->read_only && bdrv_is_whitelisted(drv, true)
965                         ? "Driver '%s' can only be used for read-only devices"
966                         : "Driver '%s' is not whitelisted",
967                    drv->format_name);
968         return -ENOTSUP;
969     }
970
971     assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
972     if (flags & BDRV_O_COPY_ON_READ) {
973         if (!bs->read_only) {
974             bdrv_enable_copy_on_read(bs);
975         } else {
976             error_setg(errp, "Can't use copy-on-read on read-only device");
977             return -EINVAL;
978         }
979     }
980
981     if (filename != NULL) {
982         pstrcpy(bs->filename, sizeof(bs->filename), filename);
983     } else {
984         bs->filename[0] = '\0';
985     }
986     pstrcpy(bs->exact_filename, sizeof(bs->exact_filename), bs->filename);
987
988     bs->drv = drv;
989     bs->opaque = g_malloc0(drv->instance_size);
990
991     bs->enable_write_cache = !!(flags & BDRV_O_CACHE_WB);
992
993     /* Open the image, either directly or using a protocol */
994     if (drv->bdrv_file_open) {
995         assert(file == NULL);
996         assert(!drv->bdrv_needs_filename || filename != NULL);
997         ret = drv->bdrv_file_open(bs, options, open_flags, &local_err);
998     } else {
999         if (file == NULL) {
1000             error_setg(errp, "Can't use '%s' as a block driver for the "
1001                        "protocol level", drv->format_name);
1002             ret = -EINVAL;
1003             goto free_and_fail;
1004         }
1005         bs->file = file;
1006         ret = drv->bdrv_open(bs, options, open_flags, &local_err);
1007     }
1008
1009     if (ret < 0) {
1010         if (local_err) {
1011             error_propagate(errp, local_err);
1012         } else if (bs->filename[0]) {
1013             error_setg_errno(errp, -ret, "Could not open '%s'", bs->filename);
1014         } else {
1015             error_setg_errno(errp, -ret, "Could not open image");
1016         }
1017         goto free_and_fail;
1018     }
1019
1020     ret = refresh_total_sectors(bs, bs->total_sectors);
1021     if (ret < 0) {
1022         error_setg_errno(errp, -ret, "Could not refresh total sector count");
1023         goto free_and_fail;
1024     }
1025
1026     bdrv_refresh_limits(bs, &local_err);
1027     if (local_err) {
1028         error_propagate(errp, local_err);
1029         ret = -EINVAL;
1030         goto free_and_fail;
1031     }
1032
1033     assert(bdrv_opt_mem_align(bs) != 0);
1034     assert((bs->request_alignment != 0) || bs->sg);
1035     return 0;
1036
1037 free_and_fail:
1038     bs->file = NULL;
1039     g_free(bs->opaque);
1040     bs->opaque = NULL;
1041     bs->drv = NULL;
1042     return ret;
1043 }
1044
1045 static QDict *parse_json_filename(const char *filename, Error **errp)
1046 {
1047     QObject *options_obj;
1048     QDict *options;
1049     int ret;
1050
1051     ret = strstart(filename, "json:", &filename);
1052     assert(ret);
1053
1054     options_obj = qobject_from_json(filename);
1055     if (!options_obj) {
1056         error_setg(errp, "Could not parse the JSON options");
1057         return NULL;
1058     }
1059
1060     if (qobject_type(options_obj) != QTYPE_QDICT) {
1061         qobject_decref(options_obj);
1062         error_setg(errp, "Invalid JSON object given");
1063         return NULL;
1064     }
1065
1066     options = qobject_to_qdict(options_obj);
1067     qdict_flatten(options);
1068
1069     return options;
1070 }
1071
1072 /*
1073  * Fills in default options for opening images and converts the legacy
1074  * filename/flags pair to option QDict entries.
1075  */
1076 static int bdrv_fill_options(QDict **options, const char **pfilename, int flags,
1077                              BlockDriver *drv, Error **errp)
1078 {
1079     const char *filename = *pfilename;
1080     const char *drvname;
1081     bool protocol = flags & BDRV_O_PROTOCOL;
1082     bool parse_filename = false;
1083     Error *local_err = NULL;
1084
1085     /* Parse json: pseudo-protocol */
1086     if (filename && g_str_has_prefix(filename, "json:")) {
1087         QDict *json_options = parse_json_filename(filename, &local_err);
1088         if (local_err) {
1089             error_propagate(errp, local_err);
1090             return -EINVAL;
1091         }
1092
1093         /* Options given in the filename have lower priority than options
1094          * specified directly */
1095         qdict_join(*options, json_options, false);
1096         QDECREF(json_options);
1097         *pfilename = filename = NULL;
1098     }
1099
1100     /* Fetch the file name from the options QDict if necessary */
1101     if (protocol && filename) {
1102         if (!qdict_haskey(*options, "filename")) {
1103             qdict_put(*options, "filename", qstring_from_str(filename));
1104             parse_filename = true;
1105         } else {
1106             error_setg(errp, "Can't specify 'file' and 'filename' options at "
1107                              "the same time");
1108             return -EINVAL;
1109         }
1110     }
1111
1112     /* Find the right block driver */
1113     filename = qdict_get_try_str(*options, "filename");
1114     drvname = qdict_get_try_str(*options, "driver");
1115
1116     if (drv) {
1117         if (drvname) {
1118             error_setg(errp, "Driver specified twice");
1119             return -EINVAL;
1120         }
1121         drvname = drv->format_name;
1122         qdict_put(*options, "driver", qstring_from_str(drvname));
1123     } else {
1124         if (!drvname && protocol) {
1125             if (filename) {
1126                 drv = bdrv_find_protocol(filename, parse_filename);
1127                 if (!drv) {
1128                     error_setg(errp, "Unknown protocol");
1129                     return -EINVAL;
1130                 }
1131
1132                 drvname = drv->format_name;
1133                 qdict_put(*options, "driver", qstring_from_str(drvname));
1134             } else {
1135                 error_setg(errp, "Must specify either driver or file");
1136                 return -EINVAL;
1137             }
1138         } else if (drvname) {
1139             drv = bdrv_find_format(drvname);
1140             if (!drv) {
1141                 error_setg(errp, "Unknown driver '%s'", drvname);
1142                 return -ENOENT;
1143             }
1144         }
1145     }
1146
1147     assert(drv || !protocol);
1148
1149     /* Driver-specific filename parsing */
1150     if (drv && drv->bdrv_parse_filename && parse_filename) {
1151         drv->bdrv_parse_filename(filename, *options, &local_err);
1152         if (local_err) {
1153             error_propagate(errp, local_err);
1154             return -EINVAL;
1155         }
1156
1157         if (!drv->bdrv_needs_filename) {
1158             qdict_del(*options, "filename");
1159         }
1160     }
1161
1162     return 0;
1163 }
1164
1165 void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
1166 {
1167
1168     if (bs->backing_hd) {
1169         assert(bs->backing_blocker);
1170         bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
1171     } else if (backing_hd) {
1172         error_setg(&bs->backing_blocker,
1173                    "device is used as backing hd of '%s'",
1174                    bdrv_get_device_name(bs));
1175     }
1176
1177     bs->backing_hd = backing_hd;
1178     if (!backing_hd) {
1179         error_free(bs->backing_blocker);
1180         bs->backing_blocker = NULL;
1181         goto out;
1182     }
1183     bs->open_flags &= ~BDRV_O_NO_BACKING;
1184     pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_hd->filename);
1185     pstrcpy(bs->backing_format, sizeof(bs->backing_format),
1186             backing_hd->drv ? backing_hd->drv->format_name : "");
1187
1188     bdrv_op_block_all(bs->backing_hd, bs->backing_blocker);
1189     /* Otherwise we won't be able to commit due to check in bdrv_commit */
1190     bdrv_op_unblock(bs->backing_hd, BLOCK_OP_TYPE_COMMIT,
1191                     bs->backing_blocker);
1192 out:
1193     bdrv_refresh_limits(bs, NULL);
1194 }
1195
1196 /*
1197  * Opens the backing file for a BlockDriverState if not yet open
1198  *
1199  * options is a QDict of options to pass to the block drivers, or NULL for an
1200  * empty set of options. The reference to the QDict is transferred to this
1201  * function (even on failure), so if the caller intends to reuse the dictionary,
1202  * it needs to use QINCREF() before calling bdrv_file_open.
1203  */
1204 int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
1205 {
1206     char *backing_filename = g_malloc0(PATH_MAX);
1207     int ret = 0;
1208     BlockDriverState *backing_hd;
1209     Error *local_err = NULL;
1210
1211     if (bs->backing_hd != NULL) {
1212         QDECREF(options);
1213         goto free_exit;
1214     }
1215
1216     /* NULL means an empty set of options */
1217     if (options == NULL) {
1218         options = qdict_new();
1219     }
1220
1221     bs->open_flags &= ~BDRV_O_NO_BACKING;
1222     if (qdict_haskey(options, "file.filename")) {
1223         backing_filename[0] = '\0';
1224     } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
1225         QDECREF(options);
1226         goto free_exit;
1227     } else {
1228         bdrv_get_full_backing_filename(bs, backing_filename, PATH_MAX);
1229     }
1230
1231     if (!bs->drv || !bs->drv->supports_backing) {
1232         ret = -EINVAL;
1233         error_setg(errp, "Driver doesn't support backing files");
1234         QDECREF(options);
1235         goto free_exit;
1236     }
1237
1238     backing_hd = bdrv_new();
1239
1240     if (bs->backing_format[0] != '\0' && !qdict_haskey(options, "driver")) {
1241         qdict_put(options, "driver", qstring_from_str(bs->backing_format));
1242     }
1243
1244     assert(bs->backing_hd == NULL);
1245     ret = bdrv_open(&backing_hd,
1246                     *backing_filename ? backing_filename : NULL, NULL, options,
1247                     bdrv_backing_flags(bs->open_flags), NULL, &local_err);
1248     if (ret < 0) {
1249         bdrv_unref(backing_hd);
1250         backing_hd = NULL;
1251         bs->open_flags |= BDRV_O_NO_BACKING;
1252         error_setg(errp, "Could not open backing file: %s",
1253                    error_get_pretty(local_err));
1254         error_free(local_err);
1255         goto free_exit;
1256     }
1257     bdrv_set_backing_hd(bs, backing_hd);
1258
1259 free_exit:
1260     g_free(backing_filename);
1261     return ret;
1262 }
1263
1264 /*
1265  * Opens a disk image whose options are given as BlockdevRef in another block
1266  * device's options.
1267  *
1268  * If allow_none is true, no image will be opened if filename is false and no
1269  * BlockdevRef is given. *pbs will remain unchanged and 0 will be returned.
1270  *
1271  * bdrev_key specifies the key for the image's BlockdevRef in the options QDict.
1272  * That QDict has to be flattened; therefore, if the BlockdevRef is a QDict
1273  * itself, all options starting with "${bdref_key}." are considered part of the
1274  * BlockdevRef.
1275  *
1276  * The BlockdevRef will be removed from the options QDict.
1277  *
1278  * To conform with the behavior of bdrv_open(), *pbs has to be NULL.
1279  */
1280 int bdrv_open_image(BlockDriverState **pbs, const char *filename,
1281                     QDict *options, const char *bdref_key, int flags,
1282                     bool allow_none, Error **errp)
1283 {
1284     QDict *image_options;
1285     int ret;
1286     char *bdref_key_dot;
1287     const char *reference;
1288
1289     assert(pbs);
1290     assert(*pbs == NULL);
1291
1292     bdref_key_dot = g_strdup_printf("%s.", bdref_key);
1293     qdict_extract_subqdict(options, &image_options, bdref_key_dot);
1294     g_free(bdref_key_dot);
1295
1296     reference = qdict_get_try_str(options, bdref_key);
1297     if (!filename && !reference && !qdict_size(image_options)) {
1298         if (allow_none) {
1299             ret = 0;
1300         } else {
1301             error_setg(errp, "A block device must be specified for \"%s\"",
1302                        bdref_key);
1303             ret = -EINVAL;
1304         }
1305         QDECREF(image_options);
1306         goto done;
1307     }
1308
1309     ret = bdrv_open(pbs, filename, reference, image_options, flags, NULL, errp);
1310
1311 done:
1312     qdict_del(options, bdref_key);
1313     return ret;
1314 }
1315
1316 int bdrv_append_temp_snapshot(BlockDriverState *bs, int flags, Error **errp)
1317 {
1318     /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
1319     char *tmp_filename = g_malloc0(PATH_MAX + 1);
1320     int64_t total_size;
1321     QemuOpts *opts = NULL;
1322     QDict *snapshot_options;
1323     BlockDriverState *bs_snapshot;
1324     Error *local_err;
1325     int ret;
1326
1327     /* if snapshot, we create a temporary backing file and open it
1328        instead of opening 'filename' directly */
1329
1330     /* Get the required size from the image */
1331     total_size = bdrv_getlength(bs);
1332     if (total_size < 0) {
1333         ret = total_size;
1334         error_setg_errno(errp, -total_size, "Could not get image size");
1335         goto out;
1336     }
1337
1338     /* Create the temporary image */
1339     ret = get_tmp_filename(tmp_filename, PATH_MAX + 1);
1340     if (ret < 0) {
1341         error_setg_errno(errp, -ret, "Could not get temporary filename");
1342         goto out;
1343     }
1344
1345     opts = qemu_opts_create(bdrv_qcow2.create_opts, NULL, 0,
1346                             &error_abort);
1347     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_size);
1348     ret = bdrv_create(&bdrv_qcow2, tmp_filename, opts, &local_err);
1349     qemu_opts_del(opts);
1350     if (ret < 0) {
1351         error_setg_errno(errp, -ret, "Could not create temporary overlay "
1352                          "'%s': %s", tmp_filename,
1353                          error_get_pretty(local_err));
1354         error_free(local_err);
1355         goto out;
1356     }
1357
1358     /* Prepare a new options QDict for the temporary file */
1359     snapshot_options = qdict_new();
1360     qdict_put(snapshot_options, "file.driver",
1361               qstring_from_str("file"));
1362     qdict_put(snapshot_options, "file.filename",
1363               qstring_from_str(tmp_filename));
1364
1365     bs_snapshot = bdrv_new();
1366
1367     ret = bdrv_open(&bs_snapshot, NULL, NULL, snapshot_options,
1368                     flags, &bdrv_qcow2, &local_err);
1369     if (ret < 0) {
1370         error_propagate(errp, local_err);
1371         goto out;
1372     }
1373
1374     bdrv_append(bs_snapshot, bs);
1375
1376 out:
1377     g_free(tmp_filename);
1378     return ret;
1379 }
1380
1381 /*
1382  * Opens a disk image (raw, qcow2, vmdk, ...)
1383  *
1384  * options is a QDict of options to pass to the block drivers, or NULL for an
1385  * empty set of options. The reference to the QDict belongs to the block layer
1386  * after the call (even on failure), so if the caller intends to reuse the
1387  * dictionary, it needs to use QINCREF() before calling bdrv_open.
1388  *
1389  * If *pbs is NULL, a new BDS will be created with a pointer to it stored there.
1390  * If it is not NULL, the referenced BDS will be reused.
1391  *
1392  * The reference parameter may be used to specify an existing block device which
1393  * should be opened. If specified, neither options nor a filename may be given,
1394  * nor can an existing BDS be reused (that is, *pbs has to be NULL).
1395  */
1396 int bdrv_open(BlockDriverState **pbs, const char *filename,
1397               const char *reference, QDict *options, int flags,
1398               BlockDriver *drv, Error **errp)
1399 {
1400     int ret;
1401     BlockDriverState *file = NULL, *bs;
1402     const char *drvname;
1403     Error *local_err = NULL;
1404     int snapshot_flags = 0;
1405
1406     assert(pbs);
1407
1408     if (reference) {
1409         bool options_non_empty = options ? qdict_size(options) : false;
1410         QDECREF(options);
1411
1412         if (*pbs) {
1413             error_setg(errp, "Cannot reuse an existing BDS when referencing "
1414                        "another block device");
1415             return -EINVAL;
1416         }
1417
1418         if (filename || options_non_empty) {
1419             error_setg(errp, "Cannot reference an existing block device with "
1420                        "additional options or a new filename");
1421             return -EINVAL;
1422         }
1423
1424         bs = bdrv_lookup_bs(reference, reference, errp);
1425         if (!bs) {
1426             return -ENODEV;
1427         }
1428         bdrv_ref(bs);
1429         *pbs = bs;
1430         return 0;
1431     }
1432
1433     if (*pbs) {
1434         bs = *pbs;
1435     } else {
1436         bs = bdrv_new();
1437     }
1438
1439     /* NULL means an empty set of options */
1440     if (options == NULL) {
1441         options = qdict_new();
1442     }
1443
1444     ret = bdrv_fill_options(&options, &filename, flags, drv, &local_err);
1445     if (local_err) {
1446         goto fail;
1447     }
1448
1449     /* Find the right image format driver */
1450     drv = NULL;
1451     drvname = qdict_get_try_str(options, "driver");
1452     if (drvname) {
1453         drv = bdrv_find_format(drvname);
1454         qdict_del(options, "driver");
1455         if (!drv) {
1456             error_setg(errp, "Unknown driver: '%s'", drvname);
1457             ret = -EINVAL;
1458             goto fail;
1459         }
1460     }
1461
1462     assert(drvname || !(flags & BDRV_O_PROTOCOL));
1463     if (drv && !drv->bdrv_file_open) {
1464         /* If the user explicitly wants a format driver here, we'll need to add
1465          * another layer for the protocol in bs->file */
1466         flags &= ~BDRV_O_PROTOCOL;
1467     }
1468
1469     bs->options = options;
1470     options = qdict_clone_shallow(options);
1471
1472     /* Open image file without format layer */
1473     if ((flags & BDRV_O_PROTOCOL) == 0) {
1474         if (flags & BDRV_O_RDWR) {
1475             flags |= BDRV_O_ALLOW_RDWR;
1476         }
1477         if (flags & BDRV_O_SNAPSHOT) {
1478             snapshot_flags = bdrv_temp_snapshot_flags(flags);
1479             flags = bdrv_backing_flags(flags);
1480         }
1481
1482         assert(file == NULL);
1483         ret = bdrv_open_image(&file, filename, options, "file",
1484                               bdrv_inherited_flags(flags),
1485                               true, &local_err);
1486         if (ret < 0) {
1487             goto fail;
1488         }
1489     }
1490
1491     /* Image format probing */
1492     bs->probed = !drv;
1493     if (!drv && file) {
1494         ret = find_image_format(file, filename, &drv, &local_err);
1495         if (ret < 0) {
1496             goto fail;
1497         }
1498     } else if (!drv) {
1499         error_setg(errp, "Must specify either driver or file");
1500         ret = -EINVAL;
1501         goto fail;
1502     }
1503
1504     /* Open the image */
1505     ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
1506     if (ret < 0) {
1507         goto fail;
1508     }
1509
1510     if (file && (bs->file != file)) {
1511         bdrv_unref(file);
1512         file = NULL;
1513     }
1514
1515     /* If there is a backing file, use it */
1516     if ((flags & BDRV_O_NO_BACKING) == 0) {
1517         QDict *backing_options;
1518
1519         qdict_extract_subqdict(options, &backing_options, "backing.");
1520         ret = bdrv_open_backing_file(bs, backing_options, &local_err);
1521         if (ret < 0) {
1522             goto close_and_fail;
1523         }
1524     }
1525
1526     bdrv_refresh_filename(bs);
1527
1528     /* For snapshot=on, create a temporary qcow2 overlay. bs points to the
1529      * temporary snapshot afterwards. */
1530     if (snapshot_flags) {
1531         ret = bdrv_append_temp_snapshot(bs, snapshot_flags, &local_err);
1532         if (local_err) {
1533             goto close_and_fail;
1534         }
1535     }
1536
1537     /* Check if any unknown options were used */
1538     if (options && (qdict_size(options) != 0)) {
1539         const QDictEntry *entry = qdict_first(options);
1540         if (flags & BDRV_O_PROTOCOL) {
1541             error_setg(errp, "Block protocol '%s' doesn't support the option "
1542                        "'%s'", drv->format_name, entry->key);
1543         } else {
1544             error_setg(errp, "Block format '%s' used by device '%s' doesn't "
1545                        "support the option '%s'", drv->format_name,
1546                        bdrv_get_device_name(bs), entry->key);
1547         }
1548
1549         ret = -EINVAL;
1550         goto close_and_fail;
1551     }
1552
1553     if (!bdrv_key_required(bs)) {
1554         if (bs->blk) {
1555             blk_dev_change_media_cb(bs->blk, true);
1556         }
1557     } else if (!runstate_check(RUN_STATE_PRELAUNCH)
1558                && !runstate_check(RUN_STATE_INMIGRATE)
1559                && !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
1560         error_setg(errp,
1561                    "Guest must be stopped for opening of encrypted image");
1562         ret = -EBUSY;
1563         goto close_and_fail;
1564     }
1565
1566     QDECREF(options);
1567     *pbs = bs;
1568     return 0;
1569
1570 fail:
1571     if (file != NULL) {
1572         bdrv_unref(file);
1573     }
1574     QDECREF(bs->options);
1575     QDECREF(options);
1576     bs->options = NULL;
1577     if (!*pbs) {
1578         /* If *pbs is NULL, a new BDS has been created in this function and
1579            needs to be freed now. Otherwise, it does not need to be closed,
1580            since it has not really been opened yet. */
1581         bdrv_unref(bs);
1582     }
1583     if (local_err) {
1584         error_propagate(errp, local_err);
1585     }
1586     return ret;
1587
1588 close_and_fail:
1589     /* See fail path, but now the BDS has to be always closed */
1590     if (*pbs) {
1591         bdrv_close(bs);
1592     } else {
1593         bdrv_unref(bs);
1594     }
1595     QDECREF(options);
1596     if (local_err) {
1597         error_propagate(errp, local_err);
1598     }
1599     return ret;
1600 }
1601
1602 typedef struct BlockReopenQueueEntry {
1603      bool prepared;
1604      BDRVReopenState state;
1605      QSIMPLEQ_ENTRY(BlockReopenQueueEntry) entry;
1606 } BlockReopenQueueEntry;
1607
1608 /*
1609  * Adds a BlockDriverState to a simple queue for an atomic, transactional
1610  * reopen of multiple devices.
1611  *
1612  * bs_queue can either be an existing BlockReopenQueue that has had QSIMPLE_INIT
1613  * already performed, or alternatively may be NULL a new BlockReopenQueue will
1614  * be created and initialized. This newly created BlockReopenQueue should be
1615  * passed back in for subsequent calls that are intended to be of the same
1616  * atomic 'set'.
1617  *
1618  * bs is the BlockDriverState to add to the reopen queue.
1619  *
1620  * flags contains the open flags for the associated bs
1621  *
1622  * returns a pointer to bs_queue, which is either the newly allocated
1623  * bs_queue, or the existing bs_queue being used.
1624  *
1625  */
1626 BlockReopenQueue *bdrv_reopen_queue(BlockReopenQueue *bs_queue,
1627                                     BlockDriverState *bs, int flags)
1628 {
1629     assert(bs != NULL);
1630
1631     BlockReopenQueueEntry *bs_entry;
1632     if (bs_queue == NULL) {
1633         bs_queue = g_new0(BlockReopenQueue, 1);
1634         QSIMPLEQ_INIT(bs_queue);
1635     }
1636
1637     /* bdrv_open() masks this flag out */
1638     flags &= ~BDRV_O_PROTOCOL;
1639
1640     if (bs->file) {
1641         bdrv_reopen_queue(bs_queue, bs->file, bdrv_inherited_flags(flags));
1642     }
1643
1644     bs_entry = g_new0(BlockReopenQueueEntry, 1);
1645     QSIMPLEQ_INSERT_TAIL(bs_queue, bs_entry, entry);
1646
1647     bs_entry->state.bs = bs;
1648     bs_entry->state.flags = flags;
1649
1650     return bs_queue;
1651 }
1652
1653 /*
1654  * Reopen multiple BlockDriverStates atomically & transactionally.
1655  *
1656  * The queue passed in (bs_queue) must have been built up previous
1657  * via bdrv_reopen_queue().
1658  *
1659  * Reopens all BDS specified in the queue, with the appropriate
1660  * flags.  All devices are prepared for reopen, and failure of any
1661  * device will cause all device changes to be abandonded, and intermediate
1662  * data cleaned up.
1663  *
1664  * If all devices prepare successfully, then the changes are committed
1665  * to all devices.
1666  *
1667  */
1668 int bdrv_reopen_multiple(BlockReopenQueue *bs_queue, Error **errp)
1669 {
1670     int ret = -1;
1671     BlockReopenQueueEntry *bs_entry, *next;
1672     Error *local_err = NULL;
1673
1674     assert(bs_queue != NULL);
1675
1676     bdrv_drain_all();
1677
1678     QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1679         if (bdrv_reopen_prepare(&bs_entry->state, bs_queue, &local_err)) {
1680             error_propagate(errp, local_err);
1681             goto cleanup;
1682         }
1683         bs_entry->prepared = true;
1684     }
1685
1686     /* If we reach this point, we have success and just need to apply the
1687      * changes
1688      */
1689     QSIMPLEQ_FOREACH(bs_entry, bs_queue, entry) {
1690         bdrv_reopen_commit(&bs_entry->state);
1691     }
1692
1693     ret = 0;
1694
1695 cleanup:
1696     QSIMPLEQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) {
1697         if (ret && bs_entry->prepared) {
1698             bdrv_reopen_abort(&bs_entry->state);
1699         }
1700         g_free(bs_entry);
1701     }
1702     g_free(bs_queue);
1703     return ret;
1704 }
1705
1706
1707 /* Reopen a single BlockDriverState with the specified flags. */
1708 int bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp)
1709 {
1710     int ret = -1;
1711     Error *local_err = NULL;
1712     BlockReopenQueue *queue = bdrv_reopen_queue(NULL, bs, bdrv_flags);
1713
1714     ret = bdrv_reopen_multiple(queue, &local_err);
1715     if (local_err != NULL) {
1716         error_propagate(errp, local_err);
1717     }
1718     return ret;
1719 }
1720
1721
1722 /*
1723  * Prepares a BlockDriverState for reopen. All changes are staged in the
1724  * 'opaque' field of the BDRVReopenState, which is used and allocated by
1725  * the block driver layer .bdrv_reopen_prepare()
1726  *
1727  * bs is the BlockDriverState to reopen
1728  * flags are the new open flags
1729  * queue is the reopen queue
1730  *
1731  * Returns 0 on success, non-zero on error.  On error errp will be set
1732  * as well.
1733  *
1734  * On failure, bdrv_reopen_abort() will be called to clean up any data.
1735  * It is the responsibility of the caller to then call the abort() or
1736  * commit() for any other BDS that have been left in a prepare() state
1737  *
1738  */
1739 int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
1740                         Error **errp)
1741 {
1742     int ret = -1;
1743     Error *local_err = NULL;
1744     BlockDriver *drv;
1745
1746     assert(reopen_state != NULL);
1747     assert(reopen_state->bs->drv != NULL);
1748     drv = reopen_state->bs->drv;
1749
1750     /* if we are to stay read-only, do not allow permission change
1751      * to r/w */
1752     if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
1753         reopen_state->flags & BDRV_O_RDWR) {
1754         error_set(errp, QERR_DEVICE_IS_READ_ONLY,
1755                   bdrv_get_device_name(reopen_state->bs));
1756         goto error;
1757     }
1758
1759
1760     ret = bdrv_flush(reopen_state->bs);
1761     if (ret) {
1762         error_set(errp, ERROR_CLASS_GENERIC_ERROR, "Error (%s) flushing drive",
1763                   strerror(-ret));
1764         goto error;
1765     }
1766
1767     if (drv->bdrv_reopen_prepare) {
1768         ret = drv->bdrv_reopen_prepare(reopen_state, queue, &local_err);
1769         if (ret) {
1770             if (local_err != NULL) {
1771                 error_propagate(errp, local_err);
1772             } else {
1773                 error_setg(errp, "failed while preparing to reopen image '%s'",
1774                            reopen_state->bs->filename);
1775             }
1776             goto error;
1777         }
1778     } else {
1779         /* It is currently mandatory to have a bdrv_reopen_prepare()
1780          * handler for each supported drv. */
1781         error_set(errp, QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
1782                   drv->format_name, bdrv_get_device_name(reopen_state->bs),
1783                  "reopening of file");
1784         ret = -1;
1785         goto error;
1786     }
1787
1788     ret = 0;
1789
1790 error:
1791     return ret;
1792 }
1793
1794 /*
1795  * Takes the staged changes for the reopen from bdrv_reopen_prepare(), and
1796  * makes them final by swapping the staging BlockDriverState contents into
1797  * the active BlockDriverState contents.
1798  */
1799 void bdrv_reopen_commit(BDRVReopenState *reopen_state)
1800 {
1801     BlockDriver *drv;
1802
1803     assert(reopen_state != NULL);
1804     drv = reopen_state->bs->drv;
1805     assert(drv != NULL);
1806
1807     /* If there are any driver level actions to take */
1808     if (drv->bdrv_reopen_commit) {
1809         drv->bdrv_reopen_commit(reopen_state);
1810     }
1811
1812     /* set BDS specific flags now */
1813     reopen_state->bs->open_flags         = reopen_state->flags;
1814     reopen_state->bs->enable_write_cache = !!(reopen_state->flags &
1815                                               BDRV_O_CACHE_WB);
1816     reopen_state->bs->read_only = !(reopen_state->flags & BDRV_O_RDWR);
1817
1818     bdrv_refresh_limits(reopen_state->bs, NULL);
1819 }
1820
1821 /*
1822  * Abort the reopen, and delete and free the staged changes in
1823  * reopen_state
1824  */
1825 void bdrv_reopen_abort(BDRVReopenState *reopen_state)
1826 {
1827     BlockDriver *drv;
1828
1829     assert(reopen_state != NULL);
1830     drv = reopen_state->bs->drv;
1831     assert(drv != NULL);
1832
1833     if (drv->bdrv_reopen_abort) {
1834         drv->bdrv_reopen_abort(reopen_state);
1835     }
1836 }
1837
1838
1839 void bdrv_close(BlockDriverState *bs)
1840 {
1841     BdrvAioNotifier *ban, *ban_next;
1842
1843     if (bs->job) {
1844         block_job_cancel_sync(bs->job);
1845     }
1846     bdrv_drain_all(); /* complete I/O */
1847     bdrv_flush(bs);
1848     bdrv_drain_all(); /* in case flush left pending I/O */
1849     notifier_list_notify(&bs->close_notifiers, bs);
1850
1851     if (bs->drv) {
1852         if (bs->backing_hd) {
1853             BlockDriverState *backing_hd = bs->backing_hd;
1854             bdrv_set_backing_hd(bs, NULL);
1855             bdrv_unref(backing_hd);
1856         }
1857         bs->drv->bdrv_close(bs);
1858         g_free(bs->opaque);
1859         bs->opaque = NULL;
1860         bs->drv = NULL;
1861         bs->copy_on_read = 0;
1862         bs->backing_file[0] = '\0';
1863         bs->backing_format[0] = '\0';
1864         bs->total_sectors = 0;
1865         bs->encrypted = 0;
1866         bs->valid_key = 0;
1867         bs->sg = 0;
1868         bs->growable = 0;
1869         bs->zero_beyond_eof = false;
1870         QDECREF(bs->options);
1871         bs->options = NULL;
1872         QDECREF(bs->full_open_options);
1873         bs->full_open_options = NULL;
1874
1875         if (bs->file != NULL) {
1876             bdrv_unref(bs->file);
1877             bs->file = NULL;
1878         }
1879     }
1880
1881     if (bs->blk) {
1882         blk_dev_change_media_cb(bs->blk, false);
1883     }
1884
1885     /*throttling disk I/O limits*/
1886     if (bs->io_limits_enabled) {
1887         bdrv_io_limits_disable(bs);
1888     }
1889
1890     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
1891         g_free(ban);
1892     }
1893     QLIST_INIT(&bs->aio_notifiers);
1894 }
1895
1896 void bdrv_close_all(void)
1897 {
1898     BlockDriverState *bs;
1899
1900     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
1901         AioContext *aio_context = bdrv_get_aio_context(bs);
1902
1903         aio_context_acquire(aio_context);
1904         bdrv_close(bs);
1905         aio_context_release(aio_context);
1906     }
1907 }
1908
1909 /* Check if any requests are in-flight (including throttled requests) */
1910 static bool bdrv_requests_pending(BlockDriverState *bs)
1911 {
1912     if (!QLIST_EMPTY(&bs->tracked_requests)) {
1913         return true;
1914     }
1915     if (!qemu_co_queue_empty(&bs->throttled_reqs[0])) {
1916         return true;
1917     }
1918     if (!qemu_co_queue_empty(&bs->throttled_reqs[1])) {
1919         return true;
1920     }
1921     if (bs->file && bdrv_requests_pending(bs->file)) {
1922         return true;
1923     }
1924     if (bs->backing_hd && bdrv_requests_pending(bs->backing_hd)) {
1925         return true;
1926     }
1927     return false;
1928 }
1929
1930 static bool bdrv_drain_one(BlockDriverState *bs)
1931 {
1932     bool bs_busy;
1933
1934     bdrv_flush_io_queue(bs);
1935     bdrv_start_throttled_reqs(bs);
1936     bs_busy = bdrv_requests_pending(bs);
1937     bs_busy |= aio_poll(bdrv_get_aio_context(bs), bs_busy);
1938     return bs_busy;
1939 }
1940
1941 /*
1942  * Wait for pending requests to complete on a single BlockDriverState subtree
1943  *
1944  * See the warning in bdrv_drain_all().  This function can only be called if
1945  * you are sure nothing can generate I/O because you have op blockers
1946  * installed.
1947  *
1948  * Note that unlike bdrv_drain_all(), the caller must hold the BlockDriverState
1949  * AioContext.
1950  */
1951 void bdrv_drain(BlockDriverState *bs)
1952 {
1953     while (bdrv_drain_one(bs)) {
1954         /* Keep iterating */
1955     }
1956 }
1957
1958 /*
1959  * Wait for pending requests to complete across all BlockDriverStates
1960  *
1961  * This function does not flush data to disk, use bdrv_flush_all() for that
1962  * after calling this function.
1963  *
1964  * Note that completion of an asynchronous I/O operation can trigger any
1965  * number of other I/O operations on other devices---for example a coroutine
1966  * can be arbitrarily complex and a constant flow of I/O can come until the
1967  * coroutine is complete.  Because of this, it is not possible to have a
1968  * function to drain a single device's I/O queue.
1969  */
1970 void bdrv_drain_all(void)
1971 {
1972     /* Always run first iteration so any pending completion BHs run */
1973     bool busy = true;
1974     BlockDriverState *bs;
1975
1976     while (busy) {
1977         busy = false;
1978
1979         QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
1980             AioContext *aio_context = bdrv_get_aio_context(bs);
1981
1982             aio_context_acquire(aio_context);
1983             busy |= bdrv_drain_one(bs);
1984             aio_context_release(aio_context);
1985         }
1986     }
1987 }
1988
1989 /* make a BlockDriverState anonymous by removing from bdrv_state and
1990  * graph_bdrv_state list.
1991    Also, NULL terminate the device_name to prevent double remove */
1992 void bdrv_make_anon(BlockDriverState *bs)
1993 {
1994     /*
1995      * Take care to remove bs from bdrv_states only when it's actually
1996      * in it.  Note that bs->device_list.tqe_prev is initially null,
1997      * and gets set to non-null by QTAILQ_INSERT_TAIL().  Establish
1998      * the useful invariant "bs in bdrv_states iff bs->tqe_prev" by
1999      * resetting it to null on remove.
2000      */
2001     if (bs->device_list.tqe_prev) {
2002         QTAILQ_REMOVE(&bdrv_states, bs, device_list);
2003         bs->device_list.tqe_prev = NULL;
2004     }
2005     if (bs->node_name[0] != '\0') {
2006         QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
2007     }
2008     bs->node_name[0] = '\0';
2009 }
2010
2011 static void bdrv_rebind(BlockDriverState *bs)
2012 {
2013     if (bs->drv && bs->drv->bdrv_rebind) {
2014         bs->drv->bdrv_rebind(bs);
2015     }
2016 }
2017
2018 static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
2019                                      BlockDriverState *bs_src)
2020 {
2021     /* move some fields that need to stay attached to the device */
2022
2023     /* dev info */
2024     bs_dest->guest_block_size   = bs_src->guest_block_size;
2025     bs_dest->copy_on_read       = bs_src->copy_on_read;
2026
2027     bs_dest->enable_write_cache = bs_src->enable_write_cache;
2028
2029     /* i/o throttled req */
2030     memcpy(&bs_dest->throttle_state,
2031            &bs_src->throttle_state,
2032            sizeof(ThrottleState));
2033     bs_dest->throttled_reqs[0]  = bs_src->throttled_reqs[0];
2034     bs_dest->throttled_reqs[1]  = bs_src->throttled_reqs[1];
2035     bs_dest->io_limits_enabled  = bs_src->io_limits_enabled;
2036
2037     /* r/w error */
2038     bs_dest->on_read_error      = bs_src->on_read_error;
2039     bs_dest->on_write_error     = bs_src->on_write_error;
2040
2041     /* i/o status */
2042     bs_dest->iostatus_enabled   = bs_src->iostatus_enabled;
2043     bs_dest->iostatus           = bs_src->iostatus;
2044
2045     /* dirty bitmap */
2046     bs_dest->dirty_bitmaps      = bs_src->dirty_bitmaps;
2047
2048     /* reference count */
2049     bs_dest->refcnt             = bs_src->refcnt;
2050
2051     /* job */
2052     bs_dest->job                = bs_src->job;
2053
2054     /* keep the same entry in bdrv_states */
2055     bs_dest->device_list = bs_src->device_list;
2056     bs_dest->blk = bs_src->blk;
2057
2058     memcpy(bs_dest->op_blockers, bs_src->op_blockers,
2059            sizeof(bs_dest->op_blockers));
2060 }
2061
2062 /*
2063  * Swap bs contents for two image chains while they are live,
2064  * while keeping required fields on the BlockDriverState that is
2065  * actually attached to a device.
2066  *
2067  * This will modify the BlockDriverState fields, and swap contents
2068  * between bs_new and bs_old. Both bs_new and bs_old are modified.
2069  *
2070  * bs_new must not be attached to a BlockBackend.
2071  *
2072  * This function does not create any image files.
2073  */
2074 void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
2075 {
2076     BlockDriverState tmp;
2077
2078     /* The code needs to swap the node_name but simply swapping node_list won't
2079      * work so first remove the nodes from the graph list, do the swap then
2080      * insert them back if needed.
2081      */
2082     if (bs_new->node_name[0] != '\0') {
2083         QTAILQ_REMOVE(&graph_bdrv_states, bs_new, node_list);
2084     }
2085     if (bs_old->node_name[0] != '\0') {
2086         QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
2087     }
2088
2089     /* bs_new must be unattached and shouldn't have anything fancy enabled */
2090     assert(!bs_new->blk);
2091     assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
2092     assert(bs_new->job == NULL);
2093     assert(bs_new->io_limits_enabled == false);
2094     assert(!throttle_have_timer(&bs_new->throttle_state));
2095
2096     tmp = *bs_new;
2097     *bs_new = *bs_old;
2098     *bs_old = tmp;
2099
2100     /* there are some fields that should not be swapped, move them back */
2101     bdrv_move_feature_fields(&tmp, bs_old);
2102     bdrv_move_feature_fields(bs_old, bs_new);
2103     bdrv_move_feature_fields(bs_new, &tmp);
2104
2105     /* bs_new must remain unattached */
2106     assert(!bs_new->blk);
2107
2108     /* Check a few fields that should remain attached to the device */
2109     assert(bs_new->job == NULL);
2110     assert(bs_new->io_limits_enabled == false);
2111     assert(!throttle_have_timer(&bs_new->throttle_state));
2112
2113     /* insert the nodes back into the graph node list if needed */
2114     if (bs_new->node_name[0] != '\0') {
2115         QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_new, node_list);
2116     }
2117     if (bs_old->node_name[0] != '\0') {
2118         QTAILQ_INSERT_TAIL(&graph_bdrv_states, bs_old, node_list);
2119     }
2120
2121     bdrv_rebind(bs_new);
2122     bdrv_rebind(bs_old);
2123 }
2124
2125 /*
2126  * Add new bs contents at the top of an image chain while the chain is
2127  * live, while keeping required fields on the top layer.
2128  *
2129  * This will modify the BlockDriverState fields, and swap contents
2130  * between bs_new and bs_top. Both bs_new and bs_top are modified.
2131  *
2132  * bs_new must not be attached to a BlockBackend.
2133  *
2134  * This function does not create any image files.
2135  */
2136 void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
2137 {
2138     bdrv_swap(bs_new, bs_top);
2139
2140     /* The contents of 'tmp' will become bs_top, as we are
2141      * swapping bs_new and bs_top contents. */
2142     bdrv_set_backing_hd(bs_top, bs_new);
2143 }
2144
2145 static void bdrv_delete(BlockDriverState *bs)
2146 {
2147     assert(!bs->job);
2148     assert(bdrv_op_blocker_is_empty(bs));
2149     assert(!bs->refcnt);
2150     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
2151
2152     bdrv_close(bs);
2153
2154     /* remove from list, if necessary */
2155     bdrv_make_anon(bs);
2156
2157     g_free(bs);
2158 }
2159
2160 /*
2161  * Run consistency checks on an image
2162  *
2163  * Returns 0 if the check could be completed (it doesn't mean that the image is
2164  * free of errors) or -errno when an internal error occurred. The results of the
2165  * check are stored in res.
2166  */
2167 int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix)
2168 {
2169     if (bs->drv == NULL) {
2170         return -ENOMEDIUM;
2171     }
2172     if (bs->drv->bdrv_check == NULL) {
2173         return -ENOTSUP;
2174     }
2175
2176     memset(res, 0, sizeof(*res));
2177     return bs->drv->bdrv_check(bs, res, fix);
2178 }
2179
2180 #define COMMIT_BUF_SECTORS 2048
2181
2182 /* commit COW file into the raw image */
2183 int bdrv_commit(BlockDriverState *bs)
2184 {
2185     BlockDriver *drv = bs->drv;
2186     int64_t sector, total_sectors, length, backing_length;
2187     int n, ro, open_flags;
2188     int ret = 0;
2189     uint8_t *buf = NULL;
2190     char filename[PATH_MAX];
2191
2192     if (!drv)
2193         return -ENOMEDIUM;
2194
2195     if (!bs->backing_hd) {
2196         return -ENOTSUP;
2197     }
2198
2199     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT, NULL) ||
2200         bdrv_op_is_blocked(bs->backing_hd, BLOCK_OP_TYPE_COMMIT, NULL)) {
2201         return -EBUSY;
2202     }
2203
2204     ro = bs->backing_hd->read_only;
2205     /* Use pstrcpy (not strncpy): filename must be NUL-terminated. */
2206     pstrcpy(filename, sizeof(filename), bs->backing_hd->filename);
2207     open_flags =  bs->backing_hd->open_flags;
2208
2209     if (ro) {
2210         if (bdrv_reopen(bs->backing_hd, open_flags | BDRV_O_RDWR, NULL)) {
2211             return -EACCES;
2212         }
2213     }
2214
2215     length = bdrv_getlength(bs);
2216     if (length < 0) {
2217         ret = length;
2218         goto ro_cleanup;
2219     }
2220
2221     backing_length = bdrv_getlength(bs->backing_hd);
2222     if (backing_length < 0) {
2223         ret = backing_length;
2224         goto ro_cleanup;
2225     }
2226
2227     /* If our top snapshot is larger than the backing file image,
2228      * grow the backing file image if possible.  If not possible,
2229      * we must return an error */
2230     if (length > backing_length) {
2231         ret = bdrv_truncate(bs->backing_hd, length);
2232         if (ret < 0) {
2233             goto ro_cleanup;
2234         }
2235     }
2236
2237     total_sectors = length >> BDRV_SECTOR_BITS;
2238
2239     /* qemu_try_blockalign() for bs will choose an alignment that works for
2240      * bs->backing_hd as well, so no need to compare the alignment manually. */
2241     buf = qemu_try_blockalign(bs, COMMIT_BUF_SECTORS * BDRV_SECTOR_SIZE);
2242     if (buf == NULL) {
2243         ret = -ENOMEM;
2244         goto ro_cleanup;
2245     }
2246
2247     for (sector = 0; sector < total_sectors; sector += n) {
2248         ret = bdrv_is_allocated(bs, sector, COMMIT_BUF_SECTORS, &n);
2249         if (ret < 0) {
2250             goto ro_cleanup;
2251         }
2252         if (ret) {
2253             ret = bdrv_read(bs, sector, buf, n);
2254             if (ret < 0) {
2255                 goto ro_cleanup;
2256             }
2257
2258             ret = bdrv_write(bs->backing_hd, sector, buf, n);
2259             if (ret < 0) {
2260                 goto ro_cleanup;
2261             }
2262         }
2263     }
2264
2265     if (drv->bdrv_make_empty) {
2266         ret = drv->bdrv_make_empty(bs);
2267         if (ret < 0) {
2268             goto ro_cleanup;
2269         }
2270         bdrv_flush(bs);
2271     }
2272
2273     /*
2274      * Make sure all data we wrote to the backing device is actually
2275      * stable on disk.
2276      */
2277     if (bs->backing_hd) {
2278         bdrv_flush(bs->backing_hd);
2279     }
2280
2281     ret = 0;
2282 ro_cleanup:
2283     qemu_vfree(buf);
2284
2285     if (ro) {
2286         /* ignoring error return here */
2287         bdrv_reopen(bs->backing_hd, open_flags & ~BDRV_O_RDWR, NULL);
2288     }
2289
2290     return ret;
2291 }
2292
2293 int bdrv_commit_all(void)
2294 {
2295     BlockDriverState *bs;
2296
2297     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
2298         AioContext *aio_context = bdrv_get_aio_context(bs);
2299
2300         aio_context_acquire(aio_context);
2301         if (bs->drv && bs->backing_hd) {
2302             int ret = bdrv_commit(bs);
2303             if (ret < 0) {
2304                 aio_context_release(aio_context);
2305                 return ret;
2306             }
2307         }
2308         aio_context_release(aio_context);
2309     }
2310     return 0;
2311 }
2312
2313 /**
2314  * Remove an active request from the tracked requests list
2315  *
2316  * This function should be called when a tracked request is completing.
2317  */
2318 static void tracked_request_end(BdrvTrackedRequest *req)
2319 {
2320     if (req->serialising) {
2321         req->bs->serialising_in_flight--;
2322     }
2323
2324     QLIST_REMOVE(req, list);
2325     qemu_co_queue_restart_all(&req->wait_queue);
2326 }
2327
2328 /**
2329  * Add an active request to the tracked requests list
2330  */
2331 static void tracked_request_begin(BdrvTrackedRequest *req,
2332                                   BlockDriverState *bs,
2333                                   int64_t offset,
2334                                   unsigned int bytes, bool is_write)
2335 {
2336     *req = (BdrvTrackedRequest){
2337         .bs = bs,
2338         .offset         = offset,
2339         .bytes          = bytes,
2340         .is_write       = is_write,
2341         .co             = qemu_coroutine_self(),
2342         .serialising    = false,
2343         .overlap_offset = offset,
2344         .overlap_bytes  = bytes,
2345     };
2346
2347     qemu_co_queue_init(&req->wait_queue);
2348
2349     QLIST_INSERT_HEAD(&bs->tracked_requests, req, list);
2350 }
2351
2352 static void mark_request_serialising(BdrvTrackedRequest *req, uint64_t align)
2353 {
2354     int64_t overlap_offset = req->offset & ~(align - 1);
2355     unsigned int overlap_bytes = ROUND_UP(req->offset + req->bytes, align)
2356                                - overlap_offset;
2357
2358     if (!req->serialising) {
2359         req->bs->serialising_in_flight++;
2360         req->serialising = true;
2361     }
2362
2363     req->overlap_offset = MIN(req->overlap_offset, overlap_offset);
2364     req->overlap_bytes = MAX(req->overlap_bytes, overlap_bytes);
2365 }
2366
2367 /**
2368  * Round a region to cluster boundaries
2369  */
2370 void bdrv_round_to_clusters(BlockDriverState *bs,
2371                             int64_t sector_num, int nb_sectors,
2372                             int64_t *cluster_sector_num,
2373                             int *cluster_nb_sectors)
2374 {
2375     BlockDriverInfo bdi;
2376
2377     if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) {
2378         *cluster_sector_num = sector_num;
2379         *cluster_nb_sectors = nb_sectors;
2380     } else {
2381         int64_t c = bdi.cluster_size / BDRV_SECTOR_SIZE;
2382         *cluster_sector_num = QEMU_ALIGN_DOWN(sector_num, c);
2383         *cluster_nb_sectors = QEMU_ALIGN_UP(sector_num - *cluster_sector_num +
2384                                             nb_sectors, c);
2385     }
2386 }
2387
2388 static int bdrv_get_cluster_size(BlockDriverState *bs)
2389 {
2390     BlockDriverInfo bdi;
2391     int ret;
2392
2393     ret = bdrv_get_info(bs, &bdi);
2394     if (ret < 0 || bdi.cluster_size == 0) {
2395         return bs->request_alignment;
2396     } else {
2397         return bdi.cluster_size;
2398     }
2399 }
2400
2401 static bool tracked_request_overlaps(BdrvTrackedRequest *req,
2402                                      int64_t offset, unsigned int bytes)
2403 {
2404     /*        aaaa   bbbb */
2405     if (offset >= req->overlap_offset + req->overlap_bytes) {
2406         return false;
2407     }
2408     /* bbbb   aaaa        */
2409     if (req->overlap_offset >= offset + bytes) {
2410         return false;
2411     }
2412     return true;
2413 }
2414
2415 static bool coroutine_fn wait_serialising_requests(BdrvTrackedRequest *self)
2416 {
2417     BlockDriverState *bs = self->bs;
2418     BdrvTrackedRequest *req;
2419     bool retry;
2420     bool waited = false;
2421
2422     if (!bs->serialising_in_flight) {
2423         return false;
2424     }
2425
2426     do {
2427         retry = false;
2428         QLIST_FOREACH(req, &bs->tracked_requests, list) {
2429             if (req == self || (!req->serialising && !self->serialising)) {
2430                 continue;
2431             }
2432             if (tracked_request_overlaps(req, self->overlap_offset,
2433                                          self->overlap_bytes))
2434             {
2435                 /* Hitting this means there was a reentrant request, for
2436                  * example, a block driver issuing nested requests.  This must
2437                  * never happen since it means deadlock.
2438                  */
2439                 assert(qemu_coroutine_self() != req->co);
2440
2441                 /* If the request is already (indirectly) waiting for us, or
2442                  * will wait for us as soon as it wakes up, then just go on
2443                  * (instead of producing a deadlock in the former case). */
2444                 if (!req->waiting_for) {
2445                     self->waiting_for = req;
2446                     qemu_co_queue_wait(&req->wait_queue);
2447                     self->waiting_for = NULL;
2448                     retry = true;
2449                     waited = true;
2450                     break;
2451                 }
2452             }
2453         }
2454     } while (retry);
2455
2456     return waited;
2457 }
2458
2459 /*
2460  * Return values:
2461  * 0        - success
2462  * -EINVAL  - backing format specified, but no file
2463  * -ENOSPC  - can't update the backing file because no space is left in the
2464  *            image file header
2465  * -ENOTSUP - format driver doesn't support changing the backing file
2466  */
2467 int bdrv_change_backing_file(BlockDriverState *bs,
2468     const char *backing_file, const char *backing_fmt)
2469 {
2470     BlockDriver *drv = bs->drv;
2471     int ret;
2472
2473     /* Backing file format doesn't make sense without a backing file */
2474     if (backing_fmt && !backing_file) {
2475         return -EINVAL;
2476     }
2477
2478     if (drv->bdrv_change_backing_file != NULL) {
2479         ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt);
2480     } else {
2481         ret = -ENOTSUP;
2482     }
2483
2484     if (ret == 0) {
2485         pstrcpy(bs->backing_file, sizeof(bs->backing_file), backing_file ?: "");
2486         pstrcpy(bs->backing_format, sizeof(bs->backing_format), backing_fmt ?: "");
2487     }
2488     return ret;
2489 }
2490
2491 /*
2492  * Finds the image layer in the chain that has 'bs' as its backing file.
2493  *
2494  * active is the current topmost image.
2495  *
2496  * Returns NULL if bs is not found in active's image chain,
2497  * or if active == bs.
2498  *
2499  * Returns the bottommost base image if bs == NULL.
2500  */
2501 BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
2502                                     BlockDriverState *bs)
2503 {
2504     while (active && bs != active->backing_hd) {
2505         active = active->backing_hd;
2506     }
2507
2508     return active;
2509 }
2510
2511 /* Given a BDS, searches for the base layer. */
2512 BlockDriverState *bdrv_find_base(BlockDriverState *bs)
2513 {
2514     return bdrv_find_overlay(bs, NULL);
2515 }
2516
2517 typedef struct BlkIntermediateStates {
2518     BlockDriverState *bs;
2519     QSIMPLEQ_ENTRY(BlkIntermediateStates) entry;
2520 } BlkIntermediateStates;
2521
2522
2523 /*
2524  * Drops images above 'base' up to and including 'top', and sets the image
2525  * above 'top' to have base as its backing file.
2526  *
2527  * Requires that the overlay to 'top' is opened r/w, so that the backing file
2528  * information in 'bs' can be properly updated.
2529  *
2530  * E.g., this will convert the following chain:
2531  * bottom <- base <- intermediate <- top <- active
2532  *
2533  * to
2534  *
2535  * bottom <- base <- active
2536  *
2537  * It is allowed for bottom==base, in which case it converts:
2538  *
2539  * base <- intermediate <- top <- active
2540  *
2541  * to
2542  *
2543  * base <- active
2544  *
2545  * If backing_file_str is non-NULL, it will be used when modifying top's
2546  * overlay image metadata.
2547  *
2548  * Error conditions:
2549  *  if active == top, that is considered an error
2550  *
2551  */
2552 int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
2553                            BlockDriverState *base, const char *backing_file_str)
2554 {
2555     BlockDriverState *intermediate;
2556     BlockDriverState *base_bs = NULL;
2557     BlockDriverState *new_top_bs = NULL;
2558     BlkIntermediateStates *intermediate_state, *next;
2559     int ret = -EIO;
2560
2561     QSIMPLEQ_HEAD(states_to_delete, BlkIntermediateStates) states_to_delete;
2562     QSIMPLEQ_INIT(&states_to_delete);
2563
2564     if (!top->drv || !base->drv) {
2565         goto exit;
2566     }
2567
2568     new_top_bs = bdrv_find_overlay(active, top);
2569
2570     if (new_top_bs == NULL) {
2571         /* we could not find the image above 'top', this is an error */
2572         goto exit;
2573     }
2574
2575     /* special case of new_top_bs->backing_hd already pointing to base - nothing
2576      * to do, no intermediate images */
2577     if (new_top_bs->backing_hd == base) {
2578         ret = 0;
2579         goto exit;
2580     }
2581
2582     intermediate = top;
2583
2584     /* now we will go down through the list, and add each BDS we find
2585      * into our deletion queue, until we hit the 'base'
2586      */
2587     while (intermediate) {
2588         intermediate_state = g_new0(BlkIntermediateStates, 1);
2589         intermediate_state->bs = intermediate;
2590         QSIMPLEQ_INSERT_TAIL(&states_to_delete, intermediate_state, entry);
2591
2592         if (intermediate->backing_hd == base) {
2593             base_bs = intermediate->backing_hd;
2594             break;
2595         }
2596         intermediate = intermediate->backing_hd;
2597     }
2598     if (base_bs == NULL) {
2599         /* something went wrong, we did not end at the base. safely
2600          * unravel everything, and exit with error */
2601         goto exit;
2602     }
2603
2604     /* success - we can delete the intermediate states, and link top->base */
2605     backing_file_str = backing_file_str ? backing_file_str : base_bs->filename;
2606     ret = bdrv_change_backing_file(new_top_bs, backing_file_str,
2607                                    base_bs->drv ? base_bs->drv->format_name : "");
2608     if (ret) {
2609         goto exit;
2610     }
2611     bdrv_set_backing_hd(new_top_bs, base_bs);
2612
2613     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2614         /* so that bdrv_close() does not recursively close the chain */
2615         bdrv_set_backing_hd(intermediate_state->bs, NULL);
2616         bdrv_unref(intermediate_state->bs);
2617     }
2618     ret = 0;
2619
2620 exit:
2621     QSIMPLEQ_FOREACH_SAFE(intermediate_state, &states_to_delete, entry, next) {
2622         g_free(intermediate_state);
2623     }
2624     return ret;
2625 }
2626
2627
2628 static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset,
2629                                    size_t size)
2630 {
2631     int64_t len;
2632
2633     if (size > INT_MAX) {
2634         return -EIO;
2635     }
2636
2637     if (!bdrv_is_inserted(bs))
2638         return -ENOMEDIUM;
2639
2640     if (bs->growable)
2641         return 0;
2642
2643     len = bdrv_getlength(bs);
2644
2645     if (offset < 0)
2646         return -EIO;
2647
2648     if ((offset > len) || (len - offset < size))
2649         return -EIO;
2650
2651     return 0;
2652 }
2653
2654 static int bdrv_check_request(BlockDriverState *bs, int64_t sector_num,
2655                               int nb_sectors)
2656 {
2657     if (nb_sectors < 0 || nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) {
2658         return -EIO;
2659     }
2660
2661     return bdrv_check_byte_request(bs, sector_num * BDRV_SECTOR_SIZE,
2662                                    nb_sectors * BDRV_SECTOR_SIZE);
2663 }
2664
2665 typedef struct RwCo {
2666     BlockDriverState *bs;
2667     int64_t offset;
2668     QEMUIOVector *qiov;
2669     bool is_write;
2670     int ret;
2671     BdrvRequestFlags flags;
2672 } RwCo;
2673
2674 static void coroutine_fn bdrv_rw_co_entry(void *opaque)
2675 {
2676     RwCo *rwco = opaque;
2677
2678     if (!rwco->is_write) {
2679         rwco->ret = bdrv_co_do_preadv(rwco->bs, rwco->offset,
2680                                       rwco->qiov->size, rwco->qiov,
2681                                       rwco->flags);
2682     } else {
2683         rwco->ret = bdrv_co_do_pwritev(rwco->bs, rwco->offset,
2684                                        rwco->qiov->size, rwco->qiov,
2685                                        rwco->flags);
2686     }
2687 }
2688
2689 /*
2690  * Process a vectored synchronous request using coroutines
2691  */
2692 static int bdrv_prwv_co(BlockDriverState *bs, int64_t offset,
2693                         QEMUIOVector *qiov, bool is_write,
2694                         BdrvRequestFlags flags)
2695 {
2696     Coroutine *co;
2697     RwCo rwco = {
2698         .bs = bs,
2699         .offset = offset,
2700         .qiov = qiov,
2701         .is_write = is_write,
2702         .ret = NOT_DONE,
2703         .flags = flags,
2704     };
2705
2706     /**
2707      * In sync call context, when the vcpu is blocked, this throttling timer
2708      * will not fire; so the I/O throttling function has to be disabled here
2709      * if it has been enabled.
2710      */
2711     if (bs->io_limits_enabled) {
2712         fprintf(stderr, "Disabling I/O throttling on '%s' due "
2713                         "to synchronous I/O.\n", bdrv_get_device_name(bs));
2714         bdrv_io_limits_disable(bs);
2715     }
2716
2717     if (qemu_in_coroutine()) {
2718         /* Fast-path if already in coroutine context */
2719         bdrv_rw_co_entry(&rwco);
2720     } else {
2721         AioContext *aio_context = bdrv_get_aio_context(bs);
2722
2723         co = qemu_coroutine_create(bdrv_rw_co_entry);
2724         qemu_coroutine_enter(co, &rwco);
2725         while (rwco.ret == NOT_DONE) {
2726             aio_poll(aio_context, true);
2727         }
2728     }
2729     return rwco.ret;
2730 }
2731
2732 /*
2733  * Process a synchronous request using coroutines
2734  */
2735 static int bdrv_rw_co(BlockDriverState *bs, int64_t sector_num, uint8_t *buf,
2736                       int nb_sectors, bool is_write, BdrvRequestFlags flags)
2737 {
2738     QEMUIOVector qiov;
2739     struct iovec iov = {
2740         .iov_base = (void *)buf,
2741         .iov_len = nb_sectors * BDRV_SECTOR_SIZE,
2742     };
2743
2744     if (nb_sectors < 0 || nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) {
2745         return -EINVAL;
2746     }
2747
2748     qemu_iovec_init_external(&qiov, &iov, 1);
2749     return bdrv_prwv_co(bs, sector_num << BDRV_SECTOR_BITS,
2750                         &qiov, is_write, flags);
2751 }
2752
2753 /* return < 0 if error. See bdrv_write() for the return codes */
2754 int bdrv_read(BlockDriverState *bs, int64_t sector_num,
2755               uint8_t *buf, int nb_sectors)
2756 {
2757     return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false, 0);
2758 }
2759
2760 /* Just like bdrv_read(), but with I/O throttling temporarily disabled */
2761 int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num,
2762                           uint8_t *buf, int nb_sectors)
2763 {
2764     bool enabled;
2765     int ret;
2766
2767     enabled = bs->io_limits_enabled;
2768     bs->io_limits_enabled = false;
2769     ret = bdrv_read(bs, sector_num, buf, nb_sectors);
2770     bs->io_limits_enabled = enabled;
2771     return ret;
2772 }
2773
2774 /* Return < 0 if error. Important errors are:
2775   -EIO         generic I/O error (may happen for all errors)
2776   -ENOMEDIUM   No media inserted.
2777   -EINVAL      Invalid sector number or nb_sectors
2778   -EACCES      Trying to write a read-only device
2779 */
2780 int bdrv_write(BlockDriverState *bs, int64_t sector_num,
2781                const uint8_t *buf, int nb_sectors)
2782 {
2783     return bdrv_rw_co(bs, sector_num, (uint8_t *)buf, nb_sectors, true, 0);
2784 }
2785
2786 int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num,
2787                       int nb_sectors, BdrvRequestFlags flags)
2788 {
2789     return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true,
2790                       BDRV_REQ_ZERO_WRITE | flags);
2791 }
2792
2793 /*
2794  * Completely zero out a block device with the help of bdrv_write_zeroes.
2795  * The operation is sped up by checking the block status and only writing
2796  * zeroes to the device if they currently do not return zeroes. Optional
2797  * flags are passed through to bdrv_write_zeroes (e.g. BDRV_REQ_MAY_UNMAP).
2798  *
2799  * Returns < 0 on error, 0 on success. For error codes see bdrv_write().
2800  */
2801 int bdrv_make_zero(BlockDriverState *bs, BdrvRequestFlags flags)
2802 {
2803     int64_t target_sectors, ret, nb_sectors, sector_num = 0;
2804     int n;
2805
2806     target_sectors = bdrv_nb_sectors(bs);
2807     if (target_sectors < 0) {
2808         return target_sectors;
2809     }
2810
2811     for (;;) {
2812         nb_sectors = target_sectors - sector_num;
2813         if (nb_sectors <= 0) {
2814             return 0;
2815         }
2816         if (nb_sectors > INT_MAX / BDRV_SECTOR_SIZE) {
2817             nb_sectors = INT_MAX / BDRV_SECTOR_SIZE;
2818         }
2819         ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &n);
2820         if (ret < 0) {
2821             error_report("error getting block status at sector %" PRId64 ": %s",
2822                          sector_num, strerror(-ret));
2823             return ret;
2824         }
2825         if (ret & BDRV_BLOCK_ZERO) {
2826             sector_num += n;
2827             continue;
2828         }
2829         ret = bdrv_write_zeroes(bs, sector_num, n, flags);
2830         if (ret < 0) {
2831             error_report("error writing zeroes at sector %" PRId64 ": %s",
2832                          sector_num, strerror(-ret));
2833             return ret;
2834         }
2835         sector_num += n;
2836     }
2837 }
2838
2839 int bdrv_pread(BlockDriverState *bs, int64_t offset, void *buf, int bytes)
2840 {
2841     QEMUIOVector qiov;
2842     struct iovec iov = {
2843         .iov_base = (void *)buf,
2844         .iov_len = bytes,
2845     };
2846     int ret;
2847
2848     if (bytes < 0) {
2849         return -EINVAL;
2850     }
2851
2852     qemu_iovec_init_external(&qiov, &iov, 1);
2853     ret = bdrv_prwv_co(bs, offset, &qiov, false, 0);
2854     if (ret < 0) {
2855         return ret;
2856     }
2857
2858     return bytes;
2859 }
2860
2861 int bdrv_pwritev(BlockDriverState *bs, int64_t offset, QEMUIOVector *qiov)
2862 {
2863     int ret;
2864
2865     ret = bdrv_prwv_co(bs, offset, qiov, true, 0);
2866     if (ret < 0) {
2867         return ret;
2868     }
2869
2870     return qiov->size;
2871 }
2872
2873 int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
2874                 const void *buf, int bytes)
2875 {
2876     QEMUIOVector qiov;
2877     struct iovec iov = {
2878         .iov_base   = (void *) buf,
2879         .iov_len    = bytes,
2880     };
2881
2882     if (bytes < 0) {
2883         return -EINVAL;
2884     }
2885
2886     qemu_iovec_init_external(&qiov, &iov, 1);
2887     return bdrv_pwritev(bs, offset, &qiov);
2888 }
2889
2890 /*
2891  * Writes to the file and ensures that no writes are reordered across this
2892  * request (acts as a barrier)
2893  *
2894  * Returns 0 on success, -errno in error cases.
2895  */
2896 int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset,
2897     const void *buf, int count)
2898 {
2899     int ret;
2900
2901     ret = bdrv_pwrite(bs, offset, buf, count);
2902     if (ret < 0) {
2903         return ret;
2904     }
2905
2906     /* No flush needed for cache modes that already do it */
2907     if (bs->enable_write_cache) {
2908         bdrv_flush(bs);
2909     }
2910
2911     return 0;
2912 }
2913
2914 static int coroutine_fn bdrv_co_do_copy_on_readv(BlockDriverState *bs,
2915         int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
2916 {
2917     /* Perform I/O through a temporary buffer so that users who scribble over
2918      * their read buffer while the operation is in progress do not end up
2919      * modifying the image file.  This is critical for zero-copy guest I/O
2920      * where anything might happen inside guest memory.
2921      */
2922     void *bounce_buffer;
2923
2924     BlockDriver *drv = bs->drv;
2925     struct iovec iov;
2926     QEMUIOVector bounce_qiov;
2927     int64_t cluster_sector_num;
2928     int cluster_nb_sectors;
2929     size_t skip_bytes;
2930     int ret;
2931
2932     /* Cover entire cluster so no additional backing file I/O is required when
2933      * allocating cluster in the image file.
2934      */
2935     bdrv_round_to_clusters(bs, sector_num, nb_sectors,
2936                            &cluster_sector_num, &cluster_nb_sectors);
2937
2938     trace_bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors,
2939                                    cluster_sector_num, cluster_nb_sectors);
2940
2941     iov.iov_len = cluster_nb_sectors * BDRV_SECTOR_SIZE;
2942     iov.iov_base = bounce_buffer = qemu_try_blockalign(bs, iov.iov_len);
2943     if (bounce_buffer == NULL) {
2944         ret = -ENOMEM;
2945         goto err;
2946     }
2947
2948     qemu_iovec_init_external(&bounce_qiov, &iov, 1);
2949
2950     ret = drv->bdrv_co_readv(bs, cluster_sector_num, cluster_nb_sectors,
2951                              &bounce_qiov);
2952     if (ret < 0) {
2953         goto err;
2954     }
2955
2956     if (drv->bdrv_co_write_zeroes &&
2957         buffer_is_zero(bounce_buffer, iov.iov_len)) {
2958         ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num,
2959                                       cluster_nb_sectors, 0);
2960     } else {
2961         /* This does not change the data on the disk, it is not necessary
2962          * to flush even in cache=writethrough mode.
2963          */
2964         ret = drv->bdrv_co_writev(bs, cluster_sector_num, cluster_nb_sectors,
2965                                   &bounce_qiov);
2966     }
2967
2968     if (ret < 0) {
2969         /* It might be okay to ignore write errors for guest requests.  If this
2970          * is a deliberate copy-on-read then we don't want to ignore the error.
2971          * Simply report it in all cases.
2972          */
2973         goto err;
2974     }
2975
2976     skip_bytes = (sector_num - cluster_sector_num) * BDRV_SECTOR_SIZE;
2977     qemu_iovec_from_buf(qiov, 0, bounce_buffer + skip_bytes,
2978                         nb_sectors * BDRV_SECTOR_SIZE);
2979
2980 err:
2981     qemu_vfree(bounce_buffer);
2982     return ret;
2983 }
2984
2985 /*
2986  * Forwards an already correctly aligned request to the BlockDriver. This
2987  * handles copy on read and zeroing after EOF; any other features must be
2988  * implemented by the caller.
2989  */
2990 static int coroutine_fn bdrv_aligned_preadv(BlockDriverState *bs,
2991     BdrvTrackedRequest *req, int64_t offset, unsigned int bytes,
2992     int64_t align, QEMUIOVector *qiov, int flags)
2993 {
2994     BlockDriver *drv = bs->drv;
2995     int ret;
2996
2997     int64_t sector_num = offset >> BDRV_SECTOR_BITS;
2998     unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS;
2999
3000     assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0);
3001     assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0);
3002     assert(!qiov || bytes == qiov->size);
3003
3004     /* Handle Copy on Read and associated serialisation */
3005     if (flags & BDRV_REQ_COPY_ON_READ) {
3006         /* If we touch the same cluster it counts as an overlap.  This
3007          * guarantees that allocating writes will be serialized and not race
3008          * with each other for the same cluster.  For example, in copy-on-read
3009          * it ensures that the CoR read and write operations are atomic and
3010          * guest writes cannot interleave between them. */
3011         mark_request_serialising(req, bdrv_get_cluster_size(bs));
3012     }
3013
3014     wait_serialising_requests(req);
3015
3016     if (flags & BDRV_REQ_COPY_ON_READ) {
3017         int pnum;
3018
3019         ret = bdrv_is_allocated(bs, sector_num, nb_sectors, &pnum);
3020         if (ret < 0) {
3021             goto out;
3022         }
3023
3024         if (!ret || pnum != nb_sectors) {
3025             ret = bdrv_co_do_copy_on_readv(bs, sector_num, nb_sectors, qiov);
3026             goto out;
3027         }
3028     }
3029
3030     /* Forward the request to the BlockDriver */
3031     if (!(bs->zero_beyond_eof && bs->growable)) {
3032         ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov);
3033     } else {
3034         /* Read zeros after EOF of growable BDSes */
3035         int64_t total_sectors, max_nb_sectors;
3036
3037         total_sectors = bdrv_nb_sectors(bs);
3038         if (total_sectors < 0) {
3039             ret = total_sectors;
3040             goto out;
3041         }
3042
3043         max_nb_sectors = ROUND_UP(MAX(0, total_sectors - sector_num),
3044                                   align >> BDRV_SECTOR_BITS);
3045         if (nb_sectors < max_nb_sectors) {
3046             ret = drv->bdrv_co_readv(bs, sector_num, nb_sectors, qiov);
3047         } else if (max_nb_sectors > 0) {
3048             QEMUIOVector local_qiov;
3049
3050             qemu_iovec_init(&local_qiov, qiov->niov);
3051             qemu_iovec_concat(&local_qiov, qiov, 0,
3052                               max_nb_sectors * BDRV_SECTOR_SIZE);
3053
3054             ret = drv->bdrv_co_readv(bs, sector_num, max_nb_sectors,
3055                                      &local_qiov);
3056
3057             qemu_iovec_destroy(&local_qiov);
3058         } else {
3059             ret = 0;
3060         }
3061
3062         /* Reading beyond end of file is supposed to produce zeroes */
3063         if (ret == 0 && total_sectors < sector_num + nb_sectors) {
3064             uint64_t offset = MAX(0, total_sectors - sector_num);
3065             uint64_t bytes = (sector_num + nb_sectors - offset) *
3066                               BDRV_SECTOR_SIZE;
3067             qemu_iovec_memset(qiov, offset * BDRV_SECTOR_SIZE, 0, bytes);
3068         }
3069     }
3070
3071 out:
3072     return ret;
3073 }
3074
3075 /*
3076  * Handle a read request in coroutine context
3077  */
3078 static int coroutine_fn bdrv_co_do_preadv(BlockDriverState *bs,
3079     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
3080     BdrvRequestFlags flags)
3081 {
3082     BlockDriver *drv = bs->drv;
3083     BdrvTrackedRequest req;
3084
3085     /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
3086     uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
3087     uint8_t *head_buf = NULL;
3088     uint8_t *tail_buf = NULL;
3089     QEMUIOVector local_qiov;
3090     bool use_local_qiov = false;
3091     int ret;
3092
3093     if (!drv) {
3094         return -ENOMEDIUM;
3095     }
3096     if (bdrv_check_byte_request(bs, offset, bytes)) {
3097         return -EIO;
3098     }
3099
3100     if (bs->copy_on_read) {
3101         flags |= BDRV_REQ_COPY_ON_READ;
3102     }
3103
3104     /* throttling disk I/O */
3105     if (bs->io_limits_enabled) {
3106         bdrv_io_limits_intercept(bs, bytes, false);
3107     }
3108
3109     /* Align read if necessary by padding qiov */
3110     if (offset & (align - 1)) {
3111         head_buf = qemu_blockalign(bs, align);
3112         qemu_iovec_init(&local_qiov, qiov->niov + 2);
3113         qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1));
3114         qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3115         use_local_qiov = true;
3116
3117         bytes += offset & (align - 1);
3118         offset = offset & ~(align - 1);
3119     }
3120
3121     if ((offset + bytes) & (align - 1)) {
3122         if (!use_local_qiov) {
3123             qemu_iovec_init(&local_qiov, qiov->niov + 1);
3124             qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3125             use_local_qiov = true;
3126         }
3127         tail_buf = qemu_blockalign(bs, align);
3128         qemu_iovec_add(&local_qiov, tail_buf,
3129                        align - ((offset + bytes) & (align - 1)));
3130
3131         bytes = ROUND_UP(bytes, align);
3132     }
3133
3134     tracked_request_begin(&req, bs, offset, bytes, false);
3135     ret = bdrv_aligned_preadv(bs, &req, offset, bytes, align,
3136                               use_local_qiov ? &local_qiov : qiov,
3137                               flags);
3138     tracked_request_end(&req);
3139
3140     if (use_local_qiov) {
3141         qemu_iovec_destroy(&local_qiov);
3142         qemu_vfree(head_buf);
3143         qemu_vfree(tail_buf);
3144     }
3145
3146     return ret;
3147 }
3148
3149 static int coroutine_fn bdrv_co_do_readv(BlockDriverState *bs,
3150     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
3151     BdrvRequestFlags flags)
3152 {
3153     if (nb_sectors < 0 || nb_sectors > (UINT_MAX >> BDRV_SECTOR_BITS)) {
3154         return -EINVAL;
3155     }
3156
3157     return bdrv_co_do_preadv(bs, sector_num << BDRV_SECTOR_BITS,
3158                              nb_sectors << BDRV_SECTOR_BITS, qiov, flags);
3159 }
3160
3161 int coroutine_fn bdrv_co_readv(BlockDriverState *bs, int64_t sector_num,
3162     int nb_sectors, QEMUIOVector *qiov)
3163 {
3164     trace_bdrv_co_readv(bs, sector_num, nb_sectors);
3165
3166     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov, 0);
3167 }
3168
3169 int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs,
3170     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov)
3171 {
3172     trace_bdrv_co_copy_on_readv(bs, sector_num, nb_sectors);
3173
3174     return bdrv_co_do_readv(bs, sector_num, nb_sectors, qiov,
3175                             BDRV_REQ_COPY_ON_READ);
3176 }
3177
3178 /* if no limit is specified in the BlockLimits use a default
3179  * of 32768 512-byte sectors (16 MiB) per request.
3180  */
3181 #define MAX_WRITE_ZEROES_DEFAULT 32768
3182
3183 static int coroutine_fn bdrv_co_do_write_zeroes(BlockDriverState *bs,
3184     int64_t sector_num, int nb_sectors, BdrvRequestFlags flags)
3185 {
3186     BlockDriver *drv = bs->drv;
3187     QEMUIOVector qiov;
3188     struct iovec iov = {0};
3189     int ret = 0;
3190
3191     int max_write_zeroes = bs->bl.max_write_zeroes ?
3192                            bs->bl.max_write_zeroes : MAX_WRITE_ZEROES_DEFAULT;
3193
3194     while (nb_sectors > 0 && !ret) {
3195         int num = nb_sectors;
3196
3197         /* Align request.  Block drivers can expect the "bulk" of the request
3198          * to be aligned.
3199          */
3200         if (bs->bl.write_zeroes_alignment
3201             && num > bs->bl.write_zeroes_alignment) {
3202             if (sector_num % bs->bl.write_zeroes_alignment != 0) {
3203                 /* Make a small request up to the first aligned sector.  */
3204                 num = bs->bl.write_zeroes_alignment;
3205                 num -= sector_num % bs->bl.write_zeroes_alignment;
3206             } else if ((sector_num + num) % bs->bl.write_zeroes_alignment != 0) {
3207                 /* Shorten the request to the last aligned sector.  num cannot
3208                  * underflow because num > bs->bl.write_zeroes_alignment.
3209                  */
3210                 num -= (sector_num + num) % bs->bl.write_zeroes_alignment;
3211             }
3212         }
3213
3214         /* limit request size */
3215         if (num > max_write_zeroes) {
3216             num = max_write_zeroes;
3217         }
3218
3219         ret = -ENOTSUP;
3220         /* First try the efficient write zeroes operation */
3221         if (drv->bdrv_co_write_zeroes) {
3222             ret = drv->bdrv_co_write_zeroes(bs, sector_num, num, flags);
3223         }
3224
3225         if (ret == -ENOTSUP) {
3226             /* Fall back to bounce buffer if write zeroes is unsupported */
3227             iov.iov_len = num * BDRV_SECTOR_SIZE;
3228             if (iov.iov_base == NULL) {
3229                 iov.iov_base = qemu_try_blockalign(bs, num * BDRV_SECTOR_SIZE);
3230                 if (iov.iov_base == NULL) {
3231                     ret = -ENOMEM;
3232                     goto fail;
3233                 }
3234                 memset(iov.iov_base, 0, num * BDRV_SECTOR_SIZE);
3235             }
3236             qemu_iovec_init_external(&qiov, &iov, 1);
3237
3238             ret = drv->bdrv_co_writev(bs, sector_num, num, &qiov);
3239
3240             /* Keep bounce buffer around if it is big enough for all
3241              * all future requests.
3242              */
3243             if (num < max_write_zeroes) {
3244                 qemu_vfree(iov.iov_base);
3245                 iov.iov_base = NULL;
3246             }
3247         }
3248
3249         sector_num += num;
3250         nb_sectors -= num;
3251     }
3252
3253 fail:
3254     qemu_vfree(iov.iov_base);
3255     return ret;
3256 }
3257
3258 /*
3259  * Forwards an already correctly aligned write request to the BlockDriver.
3260  */
3261 static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs,
3262     BdrvTrackedRequest *req, int64_t offset, unsigned int bytes,
3263     QEMUIOVector *qiov, int flags)
3264 {
3265     BlockDriver *drv = bs->drv;
3266     bool waited;
3267     int ret;
3268
3269     int64_t sector_num = offset >> BDRV_SECTOR_BITS;
3270     unsigned int nb_sectors = bytes >> BDRV_SECTOR_BITS;
3271
3272     assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0);
3273     assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0);
3274     assert(!qiov || bytes == qiov->size);
3275
3276     waited = wait_serialising_requests(req);
3277     assert(!waited || !req->serialising);
3278     assert(req->overlap_offset <= offset);
3279     assert(offset + bytes <= req->overlap_offset + req->overlap_bytes);
3280
3281     ret = notifier_with_return_list_notify(&bs->before_write_notifiers, req);
3282
3283     if (!ret && bs->detect_zeroes != BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF &&
3284         !(flags & BDRV_REQ_ZERO_WRITE) && drv->bdrv_co_write_zeroes &&
3285         qemu_iovec_is_zero(qiov)) {
3286         flags |= BDRV_REQ_ZERO_WRITE;
3287         if (bs->detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP) {
3288             flags |= BDRV_REQ_MAY_UNMAP;
3289         }
3290     }
3291
3292     if (ret < 0) {
3293         /* Do nothing, write notifier decided to fail this request */
3294     } else if (flags & BDRV_REQ_ZERO_WRITE) {
3295         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_ZERO);
3296         ret = bdrv_co_do_write_zeroes(bs, sector_num, nb_sectors, flags);
3297     } else {
3298         BLKDBG_EVENT(bs, BLKDBG_PWRITEV);
3299         ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
3300     }
3301     BLKDBG_EVENT(bs, BLKDBG_PWRITEV_DONE);
3302
3303     if (ret == 0 && !bs->enable_write_cache) {
3304         ret = bdrv_co_flush(bs);
3305     }
3306
3307     bdrv_set_dirty(bs, sector_num, nb_sectors);
3308
3309     block_acct_highest_sector(&bs->stats, sector_num, nb_sectors);
3310
3311     if (bs->growable && ret >= 0) {
3312         bs->total_sectors = MAX(bs->total_sectors, sector_num + nb_sectors);
3313     }
3314
3315     return ret;
3316 }
3317
3318 /*
3319  * Handle a write request in coroutine context
3320  */
3321 static int coroutine_fn bdrv_co_do_pwritev(BlockDriverState *bs,
3322     int64_t offset, unsigned int bytes, QEMUIOVector *qiov,
3323     BdrvRequestFlags flags)
3324 {
3325     BdrvTrackedRequest req;
3326     /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
3327     uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
3328     uint8_t *head_buf = NULL;
3329     uint8_t *tail_buf = NULL;
3330     QEMUIOVector local_qiov;
3331     bool use_local_qiov = false;
3332     int ret;
3333
3334     if (!bs->drv) {
3335         return -ENOMEDIUM;
3336     }
3337     if (bs->read_only) {
3338         return -EACCES;
3339     }
3340     if (bdrv_check_byte_request(bs, offset, bytes)) {
3341         return -EIO;
3342     }
3343
3344     /* throttling disk I/O */
3345     if (bs->io_limits_enabled) {
3346         bdrv_io_limits_intercept(bs, bytes, true);
3347     }
3348
3349     /*
3350      * Align write if necessary by performing a read-modify-write cycle.
3351      * Pad qiov with the read parts and be sure to have a tracked request not
3352      * only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle.
3353      */
3354     tracked_request_begin(&req, bs, offset, bytes, true);
3355
3356     if (offset & (align - 1)) {
3357         QEMUIOVector head_qiov;
3358         struct iovec head_iov;
3359
3360         mark_request_serialising(&req, align);
3361         wait_serialising_requests(&req);
3362
3363         head_buf = qemu_blockalign(bs, align);
3364         head_iov = (struct iovec) {
3365             .iov_base   = head_buf,
3366             .iov_len    = align,
3367         };
3368         qemu_iovec_init_external(&head_qiov, &head_iov, 1);
3369
3370         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_HEAD);
3371         ret = bdrv_aligned_preadv(bs, &req, offset & ~(align - 1), align,
3372                                   align, &head_qiov, 0);
3373         if (ret < 0) {
3374             goto fail;
3375         }
3376         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_HEAD);
3377
3378         qemu_iovec_init(&local_qiov, qiov->niov + 2);
3379         qemu_iovec_add(&local_qiov, head_buf, offset & (align - 1));
3380         qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3381         use_local_qiov = true;
3382
3383         bytes += offset & (align - 1);
3384         offset = offset & ~(align - 1);
3385     }
3386
3387     if ((offset + bytes) & (align - 1)) {
3388         QEMUIOVector tail_qiov;
3389         struct iovec tail_iov;
3390         size_t tail_bytes;
3391         bool waited;
3392
3393         mark_request_serialising(&req, align);
3394         waited = wait_serialising_requests(&req);
3395         assert(!waited || !use_local_qiov);
3396
3397         tail_buf = qemu_blockalign(bs, align);
3398         tail_iov = (struct iovec) {
3399             .iov_base   = tail_buf,
3400             .iov_len    = align,
3401         };
3402         qemu_iovec_init_external(&tail_qiov, &tail_iov, 1);
3403
3404         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_TAIL);
3405         ret = bdrv_aligned_preadv(bs, &req, (offset + bytes) & ~(align - 1), align,
3406                                   align, &tail_qiov, 0);
3407         if (ret < 0) {
3408             goto fail;
3409         }
3410         BLKDBG_EVENT(bs, BLKDBG_PWRITEV_RMW_AFTER_TAIL);
3411
3412         if (!use_local_qiov) {
3413             qemu_iovec_init(&local_qiov, qiov->niov + 1);
3414             qemu_iovec_concat(&local_qiov, qiov, 0, qiov->size);
3415             use_local_qiov = true;
3416         }
3417
3418         tail_bytes = (offset + bytes) & (align - 1);
3419         qemu_iovec_add(&local_qiov, tail_buf + tail_bytes, align - tail_bytes);
3420
3421         bytes = ROUND_UP(bytes, align);
3422     }
3423
3424     ret = bdrv_aligned_pwritev(bs, &req, offset, bytes,
3425                                use_local_qiov ? &local_qiov : qiov,
3426                                flags);
3427
3428 fail:
3429     tracked_request_end(&req);
3430
3431     if (use_local_qiov) {
3432         qemu_iovec_destroy(&local_qiov);
3433     }
3434     qemu_vfree(head_buf);
3435     qemu_vfree(tail_buf);
3436
3437     return ret;
3438 }
3439
3440 static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
3441     int64_t sector_num, int nb_sectors, QEMUIOVector *qiov,
3442     BdrvRequestFlags flags)
3443 {
3444     if (nb_sectors < 0 || nb_sectors > (INT_MAX >> BDRV_SECTOR_BITS)) {
3445         return -EINVAL;
3446     }
3447
3448     return bdrv_co_do_pwritev(bs, sector_num << BDRV_SECTOR_BITS,
3449                               nb_sectors << BDRV_SECTOR_BITS, qiov, flags);
3450 }
3451
3452 int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
3453     int nb_sectors, QEMUIOVector *qiov)
3454 {
3455     trace_bdrv_co_writev(bs, sector_num, nb_sectors);
3456
3457     return bdrv_co_do_writev(bs, sector_num, nb_sectors, qiov, 0);
3458 }
3459
3460 int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs,
3461                                       int64_t sector_num, int nb_sectors,
3462                                       BdrvRequestFlags flags)
3463 {
3464     trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags);
3465
3466     if (!(bs->open_flags & BDRV_O_UNMAP)) {
3467         flags &= ~BDRV_REQ_MAY_UNMAP;
3468     }
3469
3470     return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
3471                              BDRV_REQ_ZERO_WRITE | flags);
3472 }
3473
3474 /**
3475  * Truncate file to 'offset' bytes (needed only for file protocols)
3476  */
3477 int bdrv_truncate(BlockDriverState *bs, int64_t offset)
3478 {
3479     BlockDriver *drv = bs->drv;
3480     int ret;
3481     if (!drv)
3482         return -ENOMEDIUM;
3483     if (!drv->bdrv_truncate)
3484         return -ENOTSUP;
3485     if (bs->read_only)
3486         return -EACCES;
3487
3488     ret = drv->bdrv_truncate(bs, offset);
3489     if (ret == 0) {
3490         ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);
3491         if (bs->blk) {
3492             blk_dev_resize_cb(bs->blk);
3493         }
3494     }
3495     return ret;
3496 }
3497
3498 /**
3499  * Length of a allocated file in bytes. Sparse files are counted by actual
3500  * allocated space. Return < 0 if error or unknown.
3501  */
3502 int64_t bdrv_get_allocated_file_size(BlockDriverState *bs)
3503 {
3504     BlockDriver *drv = bs->drv;
3505     if (!drv) {
3506         return -ENOMEDIUM;
3507     }
3508     if (drv->bdrv_get_allocated_file_size) {
3509         return drv->bdrv_get_allocated_file_size(bs);
3510     }
3511     if (bs->file) {
3512         return bdrv_get_allocated_file_size(bs->file);
3513     }
3514     return -ENOTSUP;
3515 }
3516
3517 /**
3518  * Return number of sectors on success, -errno on error.
3519  */
3520 int64_t bdrv_nb_sectors(BlockDriverState *bs)
3521 {
3522     BlockDriver *drv = bs->drv;
3523
3524     if (!drv)
3525         return -ENOMEDIUM;
3526
3527     if (drv->has_variable_length) {
3528         int ret = refresh_total_sectors(bs, bs->total_sectors);
3529         if (ret < 0) {
3530             return ret;
3531         }
3532     }
3533     return bs->total_sectors;
3534 }
3535
3536 /**
3537  * Return length in bytes on success, -errno on error.
3538  * The length is always a multiple of BDRV_SECTOR_SIZE.
3539  */
3540 int64_t bdrv_getlength(BlockDriverState *bs)
3541 {
3542     int64_t ret = bdrv_nb_sectors(bs);
3543
3544     return ret < 0 ? ret : ret * BDRV_SECTOR_SIZE;
3545 }
3546
3547 /* return 0 as number of sectors if no device present or error */
3548 void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr)
3549 {
3550     int64_t nb_sectors = bdrv_nb_sectors(bs);
3551
3552     *nb_sectors_ptr = nb_sectors < 0 ? 0 : nb_sectors;
3553 }
3554
3555 void bdrv_set_on_error(BlockDriverState *bs, BlockdevOnError on_read_error,
3556                        BlockdevOnError on_write_error)
3557 {
3558     bs->on_read_error = on_read_error;
3559     bs->on_write_error = on_write_error;
3560 }
3561
3562 BlockdevOnError bdrv_get_on_error(BlockDriverState *bs, bool is_read)
3563 {
3564     return is_read ? bs->on_read_error : bs->on_write_error;
3565 }
3566
3567 BlockErrorAction bdrv_get_error_action(BlockDriverState *bs, bool is_read, int error)
3568 {
3569     BlockdevOnError on_err = is_read ? bs->on_read_error : bs->on_write_error;
3570
3571     switch (on_err) {
3572     case BLOCKDEV_ON_ERROR_ENOSPC:
3573         return (error == ENOSPC) ?
3574                BLOCK_ERROR_ACTION_STOP : BLOCK_ERROR_ACTION_REPORT;
3575     case BLOCKDEV_ON_ERROR_STOP:
3576         return BLOCK_ERROR_ACTION_STOP;
3577     case BLOCKDEV_ON_ERROR_REPORT:
3578         return BLOCK_ERROR_ACTION_REPORT;
3579     case BLOCKDEV_ON_ERROR_IGNORE:
3580         return BLOCK_ERROR_ACTION_IGNORE;
3581     default:
3582         abort();
3583     }
3584 }
3585
3586 static void send_qmp_error_event(BlockDriverState *bs,
3587                                  BlockErrorAction action,
3588                                  bool is_read, int error)
3589 {
3590     IoOperationType optype;
3591
3592     optype = is_read ? IO_OPERATION_TYPE_READ : IO_OPERATION_TYPE_WRITE;
3593     qapi_event_send_block_io_error(bdrv_get_device_name(bs), optype, action,
3594                                    bdrv_iostatus_is_enabled(bs),
3595                                    error == ENOSPC, strerror(error),
3596                                    &error_abort);
3597 }
3598
3599 /* This is done by device models because, while the block layer knows
3600  * about the error, it does not know whether an operation comes from
3601  * the device or the block layer (from a job, for example).
3602  */
3603 void bdrv_error_action(BlockDriverState *bs, BlockErrorAction action,
3604                        bool is_read, int error)
3605 {
3606     assert(error >= 0);
3607
3608     if (action == BLOCK_ERROR_ACTION_STOP) {
3609         /* First set the iostatus, so that "info block" returns an iostatus
3610          * that matches the events raised so far (an additional error iostatus
3611          * is fine, but not a lost one).
3612          */
3613         bdrv_iostatus_set_err(bs, error);
3614
3615         /* Then raise the request to stop the VM and the event.
3616          * qemu_system_vmstop_request_prepare has two effects.  First,
3617          * it ensures that the STOP event always comes after the
3618          * BLOCK_IO_ERROR event.  Second, it ensures that even if management
3619          * can observe the STOP event and do a "cont" before the STOP
3620          * event is issued, the VM will not stop.  In this case, vm_start()
3621          * also ensures that the STOP/RESUME pair of events is emitted.
3622          */
3623         qemu_system_vmstop_request_prepare();
3624         send_qmp_error_event(bs, action, is_read, error);
3625         qemu_system_vmstop_request(RUN_STATE_IO_ERROR);
3626     } else {
3627         send_qmp_error_event(bs, action, is_read, error);
3628     }
3629 }
3630
3631 int bdrv_is_read_only(BlockDriverState *bs)
3632 {
3633     return bs->read_only;
3634 }
3635
3636 int bdrv_is_sg(BlockDriverState *bs)
3637 {
3638     return bs->sg;
3639 }
3640
3641 int bdrv_enable_write_cache(BlockDriverState *bs)
3642 {
3643     return bs->enable_write_cache;
3644 }
3645
3646 void bdrv_set_enable_write_cache(BlockDriverState *bs, bool wce)
3647 {
3648     bs->enable_write_cache = wce;
3649
3650     /* so a reopen() will preserve wce */
3651     if (wce) {
3652         bs->open_flags |= BDRV_O_CACHE_WB;
3653     } else {
3654         bs->open_flags &= ~BDRV_O_CACHE_WB;
3655     }
3656 }
3657
3658 int bdrv_is_encrypted(BlockDriverState *bs)
3659 {
3660     if (bs->backing_hd && bs->backing_hd->encrypted)
3661         return 1;
3662     return bs->encrypted;
3663 }
3664
3665 int bdrv_key_required(BlockDriverState *bs)
3666 {
3667     BlockDriverState *backing_hd = bs->backing_hd;
3668
3669     if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
3670         return 1;
3671     return (bs->encrypted && !bs->valid_key);
3672 }
3673
3674 int bdrv_set_key(BlockDriverState *bs, const char *key)
3675 {
3676     int ret;
3677     if (bs->backing_hd && bs->backing_hd->encrypted) {
3678         ret = bdrv_set_key(bs->backing_hd, key);
3679         if (ret < 0)
3680             return ret;
3681         if (!bs->encrypted)
3682             return 0;
3683     }
3684     if (!bs->encrypted) {
3685         return -EINVAL;
3686     } else if (!bs->drv || !bs->drv->bdrv_set_key) {
3687         return -ENOMEDIUM;
3688     }
3689     ret = bs->drv->bdrv_set_key(bs, key);
3690     if (ret < 0) {
3691         bs->valid_key = 0;
3692     } else if (!bs->valid_key) {
3693         bs->valid_key = 1;
3694         if (bs->blk) {
3695             /* call the change callback now, we skipped it on open */
3696             blk_dev_change_media_cb(bs->blk, true);
3697         }
3698     }
3699     return ret;
3700 }
3701
3702 const char *bdrv_get_format_name(BlockDriverState *bs)
3703 {
3704     return bs->drv ? bs->drv->format_name : NULL;
3705 }
3706
3707 static int qsort_strcmp(const void *a, const void *b)
3708 {
3709     return strcmp(a, b);
3710 }
3711
3712 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
3713                          void *opaque)
3714 {
3715     BlockDriver *drv;
3716     int count = 0;
3717     int i;
3718     const char **formats = NULL;
3719
3720     QLIST_FOREACH(drv, &bdrv_drivers, list) {
3721         if (drv->format_name) {
3722             bool found = false;
3723             int i = count;
3724             while (formats && i && !found) {
3725                 found = !strcmp(formats[--i], drv->format_name);
3726             }
3727
3728             if (!found) {
3729                 formats = g_renew(const char *, formats, count + 1);
3730                 formats[count++] = drv->format_name;
3731             }
3732         }
3733     }
3734
3735     qsort(formats, count, sizeof(formats[0]), qsort_strcmp);
3736
3737     for (i = 0; i < count; i++) {
3738         it(opaque, formats[i]);
3739     }
3740
3741     g_free(formats);
3742 }
3743
3744 /* This function is to find block backend bs */
3745 /* TODO convert callers to blk_by_name(), then remove */
3746 BlockDriverState *bdrv_find(const char *name)
3747 {
3748     BlockBackend *blk = blk_by_name(name);
3749
3750     return blk ? blk_bs(blk) : NULL;
3751 }
3752
3753 /* This function is to find a node in the bs graph */
3754 BlockDriverState *bdrv_find_node(const char *node_name)
3755 {
3756     BlockDriverState *bs;
3757
3758     assert(node_name);
3759
3760     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3761         if (!strcmp(node_name, bs->node_name)) {
3762             return bs;
3763         }
3764     }
3765     return NULL;
3766 }
3767
3768 /* Put this QMP function here so it can access the static graph_bdrv_states. */
3769 BlockDeviceInfoList *bdrv_named_nodes_list(void)
3770 {
3771     BlockDeviceInfoList *list, *entry;
3772     BlockDriverState *bs;
3773
3774     list = NULL;
3775     QTAILQ_FOREACH(bs, &graph_bdrv_states, node_list) {
3776         entry = g_malloc0(sizeof(*entry));
3777         entry->value = bdrv_block_device_info(bs);
3778         entry->next = list;
3779         list = entry;
3780     }
3781
3782     return list;
3783 }
3784
3785 BlockDriverState *bdrv_lookup_bs(const char *device,
3786                                  const char *node_name,
3787                                  Error **errp)
3788 {
3789     BlockBackend *blk;
3790     BlockDriverState *bs;
3791
3792     if (device) {
3793         blk = blk_by_name(device);
3794
3795         if (blk) {
3796             return blk_bs(blk);
3797         }
3798     }
3799
3800     if (node_name) {
3801         bs = bdrv_find_node(node_name);
3802
3803         if (bs) {
3804             return bs;
3805         }
3806     }
3807
3808     error_setg(errp, "Cannot find device=%s nor node_name=%s",
3809                      device ? device : "",
3810                      node_name ? node_name : "");
3811     return NULL;
3812 }
3813
3814 /* If 'base' is in the same chain as 'top', return true. Otherwise,
3815  * return false.  If either argument is NULL, return false. */
3816 bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base)
3817 {
3818     while (top && top != base) {
3819         top = top->backing_hd;
3820     }
3821
3822     return top != NULL;
3823 }
3824
3825 BlockDriverState *bdrv_next_node(BlockDriverState *bs)
3826 {
3827     if (!bs) {
3828         return QTAILQ_FIRST(&graph_bdrv_states);
3829     }
3830     return QTAILQ_NEXT(bs, node_list);
3831 }
3832
3833 BlockDriverState *bdrv_next(BlockDriverState *bs)
3834 {
3835     if (!bs) {
3836         return QTAILQ_FIRST(&bdrv_states);
3837     }
3838     return QTAILQ_NEXT(bs, device_list);
3839 }
3840
3841 const char *bdrv_get_node_name(const BlockDriverState *bs)
3842 {
3843     return bs->node_name;
3844 }
3845
3846 /* TODO check what callers really want: bs->node_name or blk_name() */
3847 const char *bdrv_get_device_name(const BlockDriverState *bs)
3848 {
3849     return bs->blk ? blk_name(bs->blk) : "";
3850 }
3851
3852 int bdrv_get_flags(BlockDriverState *bs)
3853 {
3854     return bs->open_flags;
3855 }
3856
3857 int bdrv_flush_all(void)
3858 {
3859     BlockDriverState *bs;
3860     int result = 0;
3861
3862     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
3863         AioContext *aio_context = bdrv_get_aio_context(bs);
3864         int ret;
3865
3866         aio_context_acquire(aio_context);
3867         ret = bdrv_flush(bs);
3868         if (ret < 0 && !result) {
3869             result = ret;
3870         }
3871         aio_context_release(aio_context);
3872     }
3873
3874     return result;
3875 }
3876
3877 int bdrv_has_zero_init_1(BlockDriverState *bs)
3878 {
3879     return 1;
3880 }
3881
3882 int bdrv_has_zero_init(BlockDriverState *bs)
3883 {
3884     assert(bs->drv);
3885
3886     /* If BS is a copy on write image, it is initialized to
3887        the contents of the base image, which may not be zeroes.  */
3888     if (bs->backing_hd) {
3889         return 0;
3890     }
3891     if (bs->drv->bdrv_has_zero_init) {
3892         return bs->drv->bdrv_has_zero_init(bs);
3893     }
3894
3895     /* safe default */
3896     return 0;
3897 }
3898
3899 bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
3900 {
3901     BlockDriverInfo bdi;
3902
3903     if (bs->backing_hd) {
3904         return false;
3905     }
3906
3907     if (bdrv_get_info(bs, &bdi) == 0) {
3908         return bdi.unallocated_blocks_are_zero;
3909     }
3910
3911     return false;
3912 }
3913
3914 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs)
3915 {
3916     BlockDriverInfo bdi;
3917
3918     if (bs->backing_hd || !(bs->open_flags & BDRV_O_UNMAP)) {
3919         return false;
3920     }
3921
3922     if (bdrv_get_info(bs, &bdi) == 0) {
3923         return bdi.can_write_zeroes_with_unmap;
3924     }
3925
3926     return false;
3927 }
3928
3929 typedef struct BdrvCoGetBlockStatusData {
3930     BlockDriverState *bs;
3931     BlockDriverState *base;
3932     int64_t sector_num;
3933     int nb_sectors;
3934     int *pnum;
3935     int64_t ret;
3936     bool done;
3937 } BdrvCoGetBlockStatusData;
3938
3939 /*
3940  * Returns the allocation status of the specified sectors.
3941  * Drivers not implementing the functionality are assumed to not support
3942  * backing files, hence all their sectors are reported as allocated.
3943  *
3944  * If 'sector_num' is beyond the end of the disk image the return value is 0
3945  * and 'pnum' is set to 0.
3946  *
3947  * 'pnum' is set to the number of sectors (including and immediately following
3948  * the specified sector) that are known to be in the same
3949  * allocated/unallocated state.
3950  *
3951  * 'nb_sectors' is the max value 'pnum' should be set to.  If nb_sectors goes
3952  * beyond the end of the disk image it will be clamped.
3953  */
3954 static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
3955                                                      int64_t sector_num,
3956                                                      int nb_sectors, int *pnum)
3957 {
3958     int64_t total_sectors;
3959     int64_t n;
3960     int64_t ret, ret2;
3961
3962     total_sectors = bdrv_nb_sectors(bs);
3963     if (total_sectors < 0) {
3964         return total_sectors;
3965     }
3966
3967     if (sector_num >= total_sectors) {
3968         *pnum = 0;
3969         return 0;
3970     }
3971
3972     n = total_sectors - sector_num;
3973     if (n < nb_sectors) {
3974         nb_sectors = n;
3975     }
3976
3977     if (!bs->drv->bdrv_co_get_block_status) {
3978         *pnum = nb_sectors;
3979         ret = BDRV_BLOCK_DATA | BDRV_BLOCK_ALLOCATED;
3980         if (bs->drv->protocol_name) {
3981             ret |= BDRV_BLOCK_OFFSET_VALID | (sector_num * BDRV_SECTOR_SIZE);
3982         }
3983         return ret;
3984     }
3985
3986     ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum);
3987     if (ret < 0) {
3988         *pnum = 0;
3989         return ret;
3990     }
3991
3992     if (ret & BDRV_BLOCK_RAW) {
3993         assert(ret & BDRV_BLOCK_OFFSET_VALID);
3994         return bdrv_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
3995                                      *pnum, pnum);
3996     }
3997
3998     if (ret & (BDRV_BLOCK_DATA | BDRV_BLOCK_ZERO)) {
3999         ret |= BDRV_BLOCK_ALLOCATED;
4000     }
4001
4002     if (!(ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO)) {
4003         if (bdrv_unallocated_blocks_are_zero(bs)) {
4004             ret |= BDRV_BLOCK_ZERO;
4005         } else if (bs->backing_hd) {
4006             BlockDriverState *bs2 = bs->backing_hd;
4007             int64_t nb_sectors2 = bdrv_nb_sectors(bs2);
4008             if (nb_sectors2 >= 0 && sector_num >= nb_sectors2) {
4009                 ret |= BDRV_BLOCK_ZERO;
4010             }
4011         }
4012     }
4013
4014     if (bs->file &&
4015         (ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO) &&
4016         (ret & BDRV_BLOCK_OFFSET_VALID)) {
4017         int file_pnum;
4018
4019         ret2 = bdrv_co_get_block_status(bs->file, ret >> BDRV_SECTOR_BITS,
4020                                         *pnum, &file_pnum);
4021         if (ret2 >= 0) {
4022             /* Ignore errors.  This is just providing extra information, it
4023              * is useful but not necessary.
4024              */
4025             if (!file_pnum) {
4026                 /* !file_pnum indicates an offset at or beyond the EOF; it is
4027                  * perfectly valid for the format block driver to point to such
4028                  * offsets, so catch it and mark everything as zero */
4029                 ret |= BDRV_BLOCK_ZERO;
4030             } else {
4031                 /* Limit request to the range reported by the protocol driver */
4032                 *pnum = file_pnum;
4033                 ret |= (ret2 & BDRV_BLOCK_ZERO);
4034             }
4035         }
4036     }
4037
4038     return ret;
4039 }
4040
4041 /* Coroutine wrapper for bdrv_get_block_status() */
4042 static void coroutine_fn bdrv_get_block_status_co_entry(void *opaque)
4043 {
4044     BdrvCoGetBlockStatusData *data = opaque;
4045     BlockDriverState *bs = data->bs;
4046
4047     data->ret = bdrv_co_get_block_status(bs, data->sector_num, data->nb_sectors,
4048                                          data->pnum);
4049     data->done = true;
4050 }
4051
4052 /*
4053  * Synchronous wrapper around bdrv_co_get_block_status().
4054  *
4055  * See bdrv_co_get_block_status() for details.
4056  */
4057 int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
4058                               int nb_sectors, int *pnum)
4059 {
4060     Coroutine *co;
4061     BdrvCoGetBlockStatusData data = {
4062         .bs = bs,
4063         .sector_num = sector_num,
4064         .nb_sectors = nb_sectors,
4065         .pnum = pnum,
4066         .done = false,
4067     };
4068
4069     if (qemu_in_coroutine()) {
4070         /* Fast-path if already in coroutine context */
4071         bdrv_get_block_status_co_entry(&data);
4072     } else {
4073         AioContext *aio_context = bdrv_get_aio_context(bs);
4074
4075         co = qemu_coroutine_create(bdrv_get_block_status_co_entry);
4076         qemu_coroutine_enter(co, &data);
4077         while (!data.done) {
4078             aio_poll(aio_context, true);
4079         }
4080     }
4081     return data.ret;
4082 }
4083
4084 int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num,
4085                                    int nb_sectors, int *pnum)
4086 {
4087     int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
4088     if (ret < 0) {
4089         return ret;
4090     }
4091     return !!(ret & BDRV_BLOCK_ALLOCATED);
4092 }
4093
4094 /*
4095  * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP]
4096  *
4097  * Return true if the given sector is allocated in any image between
4098  * BASE and TOP (inclusive).  BASE can be NULL to check if the given
4099  * sector is allocated in any image of the chain.  Return false otherwise.
4100  *
4101  * 'pnum' is set to the number of sectors (including and immediately following
4102  *  the specified sector) that are known to be in the same
4103  *  allocated/unallocated state.
4104  *
4105  */
4106 int bdrv_is_allocated_above(BlockDriverState *top,
4107                             BlockDriverState *base,
4108                             int64_t sector_num,
4109                             int nb_sectors, int *pnum)
4110 {
4111     BlockDriverState *intermediate;
4112     int ret, n = nb_sectors;
4113
4114     intermediate = top;
4115     while (intermediate && intermediate != base) {
4116         int pnum_inter;
4117         ret = bdrv_is_allocated(intermediate, sector_num, nb_sectors,
4118                                 &pnum_inter);
4119         if (ret < 0) {
4120             return ret;
4121         } else if (ret) {
4122             *pnum = pnum_inter;
4123             return 1;
4124         }
4125
4126         /*
4127          * [sector_num, nb_sectors] is unallocated on top but intermediate
4128          * might have
4129          *
4130          * [sector_num+x, nr_sectors] allocated.
4131          */
4132         if (n > pnum_inter &&
4133             (intermediate == top ||
4134              sector_num + pnum_inter < intermediate->total_sectors)) {
4135             n = pnum_inter;
4136         }
4137
4138         intermediate = intermediate->backing_hd;
4139     }
4140
4141     *pnum = n;
4142     return 0;
4143 }
4144
4145 const char *bdrv_get_encrypted_filename(BlockDriverState *bs)
4146 {
4147     if (bs->backing_hd && bs->backing_hd->encrypted)
4148         return bs->backing_file;
4149     else if (bs->encrypted)
4150         return bs->filename;
4151     else
4152         return NULL;
4153 }
4154
4155 void bdrv_get_backing_filename(BlockDriverState *bs,
4156                                char *filename, int filename_size)
4157 {
4158     pstrcpy(filename, filename_size, bs->backing_file);
4159 }
4160
4161 int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
4162                           const uint8_t *buf, int nb_sectors)
4163 {
4164     BlockDriver *drv = bs->drv;
4165     if (!drv)
4166         return -ENOMEDIUM;
4167     if (!drv->bdrv_write_compressed)
4168         return -ENOTSUP;
4169     if (bdrv_check_request(bs, sector_num, nb_sectors))
4170         return -EIO;
4171
4172     assert(QLIST_EMPTY(&bs->dirty_bitmaps));
4173
4174     return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
4175 }
4176
4177 int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
4178 {
4179     BlockDriver *drv = bs->drv;
4180     if (!drv)
4181         return -ENOMEDIUM;
4182     if (!drv->bdrv_get_info)
4183         return -ENOTSUP;
4184     memset(bdi, 0, sizeof(*bdi));
4185     return drv->bdrv_get_info(bs, bdi);
4186 }
4187
4188 ImageInfoSpecific *bdrv_get_specific_info(BlockDriverState *bs)
4189 {
4190     BlockDriver *drv = bs->drv;
4191     if (drv && drv->bdrv_get_specific_info) {
4192         return drv->bdrv_get_specific_info(bs);
4193     }
4194     return NULL;
4195 }
4196
4197 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf,
4198                       int64_t pos, int size)
4199 {
4200     QEMUIOVector qiov;
4201     struct iovec iov = {
4202         .iov_base   = (void *) buf,
4203         .iov_len    = size,
4204     };
4205
4206     qemu_iovec_init_external(&qiov, &iov, 1);
4207     return bdrv_writev_vmstate(bs, &qiov, pos);
4208 }
4209
4210 int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
4211 {
4212     BlockDriver *drv = bs->drv;
4213
4214     if (!drv) {
4215         return -ENOMEDIUM;
4216     } else if (drv->bdrv_save_vmstate) {
4217         return drv->bdrv_save_vmstate(bs, qiov, pos);
4218     } else if (bs->file) {
4219         return bdrv_writev_vmstate(bs->file, qiov, pos);
4220     }
4221
4222     return -ENOTSUP;
4223 }
4224
4225 int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf,
4226                       int64_t pos, int size)
4227 {
4228     BlockDriver *drv = bs->drv;
4229     if (!drv)
4230         return -ENOMEDIUM;
4231     if (drv->bdrv_load_vmstate)
4232         return drv->bdrv_load_vmstate(bs, buf, pos, size);
4233     if (bs->file)
4234         return bdrv_load_vmstate(bs->file, buf, pos, size);
4235     return -ENOTSUP;
4236 }
4237
4238 void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event)
4239 {
4240     if (!bs || !bs->drv || !bs->drv->bdrv_debug_event) {
4241         return;
4242     }
4243
4244     bs->drv->bdrv_debug_event(bs, event);
4245 }
4246
4247 int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
4248                           const char *tag)
4249 {
4250     while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
4251         bs = bs->file;
4252     }
4253
4254     if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
4255         return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
4256     }
4257
4258     return -ENOTSUP;
4259 }
4260
4261 int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
4262 {
4263     while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
4264         bs = bs->file;
4265     }
4266
4267     if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
4268         return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
4269     }
4270
4271     return -ENOTSUP;
4272 }
4273
4274 int bdrv_debug_resume(BlockDriverState *bs, const char *tag)
4275 {
4276     while (bs && (!bs->drv || !bs->drv->bdrv_debug_resume)) {
4277         bs = bs->file;
4278     }
4279
4280     if (bs && bs->drv && bs->drv->bdrv_debug_resume) {
4281         return bs->drv->bdrv_debug_resume(bs, tag);
4282     }
4283
4284     return -ENOTSUP;
4285 }
4286
4287 bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag)
4288 {
4289     while (bs && bs->drv && !bs->drv->bdrv_debug_is_suspended) {
4290         bs = bs->file;
4291     }
4292
4293     if (bs && bs->drv && bs->drv->bdrv_debug_is_suspended) {
4294         return bs->drv->bdrv_debug_is_suspended(bs, tag);
4295     }
4296
4297     return false;
4298 }
4299
4300 int bdrv_is_snapshot(BlockDriverState *bs)
4301 {
4302     return !!(bs->open_flags & BDRV_O_SNAPSHOT);
4303 }
4304
4305 /* backing_file can either be relative, or absolute, or a protocol.  If it is
4306  * relative, it must be relative to the chain.  So, passing in bs->filename
4307  * from a BDS as backing_file should not be done, as that may be relative to
4308  * the CWD rather than the chain. */
4309 BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
4310         const char *backing_file)
4311 {
4312     char *filename_full = NULL;
4313     char *backing_file_full = NULL;
4314     char *filename_tmp = NULL;
4315     int is_protocol = 0;
4316     BlockDriverState *curr_bs = NULL;
4317     BlockDriverState *retval = NULL;
4318
4319     if (!bs || !bs->drv || !backing_file) {
4320         return NULL;
4321     }
4322
4323     filename_full     = g_malloc(PATH_MAX);
4324     backing_file_full = g_malloc(PATH_MAX);
4325     filename_tmp      = g_malloc(PATH_MAX);
4326
4327     is_protocol = path_has_protocol(backing_file);
4328
4329     for (curr_bs = bs; curr_bs->backing_hd; curr_bs = curr_bs->backing_hd) {
4330
4331         /* If either of the filename paths is actually a protocol, then
4332          * compare unmodified paths; otherwise make paths relative */
4333         if (is_protocol || path_has_protocol(curr_bs->backing_file)) {
4334             if (strcmp(backing_file, curr_bs->backing_file) == 0) {
4335                 retval = curr_bs->backing_hd;
4336                 break;
4337             }
4338         } else {
4339             /* If not an absolute filename path, make it relative to the current
4340              * image's filename path */
4341             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4342                          backing_file);
4343
4344             /* We are going to compare absolute pathnames */
4345             if (!realpath(filename_tmp, filename_full)) {
4346                 continue;
4347             }
4348
4349             /* We need to make sure the backing filename we are comparing against
4350              * is relative to the current image filename (or absolute) */
4351             path_combine(filename_tmp, PATH_MAX, curr_bs->filename,
4352                          curr_bs->backing_file);
4353
4354             if (!realpath(filename_tmp, backing_file_full)) {
4355                 continue;
4356             }
4357
4358             if (strcmp(backing_file_full, filename_full) == 0) {
4359                 retval = curr_bs->backing_hd;
4360                 break;
4361             }
4362         }
4363     }
4364
4365     g_free(filename_full);
4366     g_free(backing_file_full);
4367     g_free(filename_tmp);
4368     return retval;
4369 }
4370
4371 int bdrv_get_backing_file_depth(BlockDriverState *bs)
4372 {
4373     if (!bs->drv) {
4374         return 0;
4375     }
4376
4377     if (!bs->backing_hd) {
4378         return 0;
4379     }
4380
4381     return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
4382 }
4383
4384 /**************************************************************/
4385 /* async I/Os */
4386
4387 BlockAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
4388                            QEMUIOVector *qiov, int nb_sectors,
4389                            BlockCompletionFunc *cb, void *opaque)
4390 {
4391     trace_bdrv_aio_readv(bs, sector_num, nb_sectors, opaque);
4392
4393     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4394                                  cb, opaque, false);
4395 }
4396
4397 BlockAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
4398                             QEMUIOVector *qiov, int nb_sectors,
4399                             BlockCompletionFunc *cb, void *opaque)
4400 {
4401     trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque);
4402
4403     return bdrv_co_aio_rw_vector(bs, sector_num, qiov, nb_sectors, 0,
4404                                  cb, opaque, true);
4405 }
4406
4407 BlockAIOCB *bdrv_aio_write_zeroes(BlockDriverState *bs,
4408         int64_t sector_num, int nb_sectors, BdrvRequestFlags flags,
4409         BlockCompletionFunc *cb, void *opaque)
4410 {
4411     trace_bdrv_aio_write_zeroes(bs, sector_num, nb_sectors, flags, opaque);
4412
4413     return bdrv_co_aio_rw_vector(bs, sector_num, NULL, nb_sectors,
4414                                  BDRV_REQ_ZERO_WRITE | flags,
4415                                  cb, opaque, true);
4416 }
4417
4418
4419 typedef struct MultiwriteCB {
4420     int error;
4421     int num_requests;
4422     int num_callbacks;
4423     struct {
4424         BlockCompletionFunc *cb;
4425         void *opaque;
4426         QEMUIOVector *free_qiov;
4427     } callbacks[];
4428 } MultiwriteCB;
4429
4430 static void multiwrite_user_cb(MultiwriteCB *mcb)
4431 {
4432     int i;
4433
4434     for (i = 0; i < mcb->num_callbacks; i++) {
4435         mcb->callbacks[i].cb(mcb->callbacks[i].opaque, mcb->error);
4436         if (mcb->callbacks[i].free_qiov) {
4437             qemu_iovec_destroy(mcb->callbacks[i].free_qiov);
4438         }
4439         g_free(mcb->callbacks[i].free_qiov);
4440     }
4441 }
4442
4443 static void multiwrite_cb(void *opaque, int ret)
4444 {
4445     MultiwriteCB *mcb = opaque;
4446
4447     trace_multiwrite_cb(mcb, ret);
4448
4449     if (ret < 0 && !mcb->error) {
4450         mcb->error = ret;
4451     }
4452
4453     mcb->num_requests--;
4454     if (mcb->num_requests == 0) {
4455         multiwrite_user_cb(mcb);
4456         g_free(mcb);
4457     }
4458 }
4459
4460 static int multiwrite_req_compare(const void *a, const void *b)
4461 {
4462     const BlockRequest *req1 = a, *req2 = b;
4463
4464     /*
4465      * Note that we can't simply subtract req2->sector from req1->sector
4466      * here as that could overflow the return value.
4467      */
4468     if (req1->sector > req2->sector) {
4469         return 1;
4470     } else if (req1->sector < req2->sector) {
4471         return -1;
4472     } else {
4473         return 0;
4474     }
4475 }
4476
4477 /*
4478  * Takes a bunch of requests and tries to merge them. Returns the number of
4479  * requests that remain after merging.
4480  */
4481 static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
4482     int num_reqs, MultiwriteCB *mcb)
4483 {
4484     int i, outidx;
4485
4486     // Sort requests by start sector
4487     qsort(reqs, num_reqs, sizeof(*reqs), &multiwrite_req_compare);
4488
4489     // Check if adjacent requests touch the same clusters. If so, combine them,
4490     // filling up gaps with zero sectors.
4491     outidx = 0;
4492     for (i = 1; i < num_reqs; i++) {
4493         int merge = 0;
4494         int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
4495
4496         // Handle exactly sequential writes and overlapping writes.
4497         if (reqs[i].sector <= oldreq_last) {
4498             merge = 1;
4499         }
4500
4501         if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) {
4502             merge = 0;
4503         }
4504
4505         if (bs->bl.max_transfer_length && reqs[outidx].nb_sectors +
4506             reqs[i].nb_sectors > bs->bl.max_transfer_length) {
4507             merge = 0;
4508         }
4509
4510         if (merge) {
4511             size_t size;
4512             QEMUIOVector *qiov = g_malloc0(sizeof(*qiov));
4513             qemu_iovec_init(qiov,
4514                 reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1);
4515
4516             // Add the first request to the merged one. If the requests are
4517             // overlapping, drop the last sectors of the first request.
4518             size = (reqs[i].sector - reqs[outidx].sector) << 9;
4519             qemu_iovec_concat(qiov, reqs[outidx].qiov, 0, size);
4520
4521             // We should need to add any zeros between the two requests
4522             assert (reqs[i].sector <= oldreq_last);
4523
4524             // Add the second request
4525             qemu_iovec_concat(qiov, reqs[i].qiov, 0, reqs[i].qiov->size);
4526
4527             // Add tail of first request, if necessary
4528             if (qiov->size < reqs[outidx].qiov->size) {
4529                 qemu_iovec_concat(qiov, reqs[outidx].qiov, qiov->size,
4530                                   reqs[outidx].qiov->size - qiov->size);
4531             }
4532
4533             reqs[outidx].nb_sectors = qiov->size >> 9;
4534             reqs[outidx].qiov = qiov;
4535
4536             mcb->callbacks[i].free_qiov = reqs[outidx].qiov;
4537         } else {
4538             outidx++;
4539             reqs[outidx].sector     = reqs[i].sector;
4540             reqs[outidx].nb_sectors = reqs[i].nb_sectors;
4541             reqs[outidx].qiov       = reqs[i].qiov;
4542         }
4543     }
4544
4545     return outidx + 1;
4546 }
4547
4548 /*
4549  * Submit multiple AIO write requests at once.
4550  *
4551  * On success, the function returns 0 and all requests in the reqs array have
4552  * been submitted. In error case this function returns -1, and any of the
4553  * requests may or may not be submitted yet. In particular, this means that the
4554  * callback will be called for some of the requests, for others it won't. The
4555  * caller must check the error field of the BlockRequest to wait for the right
4556  * callbacks (if error != 0, no callback will be called).
4557  *
4558  * The implementation may modify the contents of the reqs array, e.g. to merge
4559  * requests. However, the fields opaque and error are left unmodified as they
4560  * are used to signal failure for a single request to the caller.
4561  */
4562 int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
4563 {
4564     MultiwriteCB *mcb;
4565     int i;
4566
4567     /* don't submit writes if we don't have a medium */
4568     if (bs->drv == NULL) {
4569         for (i = 0; i < num_reqs; i++) {
4570             reqs[i].error = -ENOMEDIUM;
4571         }
4572         return -1;
4573     }
4574
4575     if (num_reqs == 0) {
4576         return 0;
4577     }
4578
4579     // Create MultiwriteCB structure
4580     mcb = g_malloc0(sizeof(*mcb) + num_reqs * sizeof(*mcb->callbacks));
4581     mcb->num_requests = 0;
4582     mcb->num_callbacks = num_reqs;
4583
4584     for (i = 0; i < num_reqs; i++) {
4585         mcb->callbacks[i].cb = reqs[i].cb;
4586         mcb->callbacks[i].opaque = reqs[i].opaque;
4587     }
4588
4589     // Check for mergable requests
4590     num_reqs = multiwrite_merge(bs, reqs, num_reqs, mcb);
4591
4592     trace_bdrv_aio_multiwrite(mcb, mcb->num_callbacks, num_reqs);
4593
4594     /* Run the aio requests. */
4595     mcb->num_requests = num_reqs;
4596     for (i = 0; i < num_reqs; i++) {
4597         bdrv_co_aio_rw_vector(bs, reqs[i].sector, reqs[i].qiov,
4598                               reqs[i].nb_sectors, reqs[i].flags,
4599                               multiwrite_cb, mcb,
4600                               true);
4601     }
4602
4603     return 0;
4604 }
4605
4606 void bdrv_aio_cancel(BlockAIOCB *acb)
4607 {
4608     qemu_aio_ref(acb);
4609     bdrv_aio_cancel_async(acb);
4610     while (acb->refcnt > 1) {
4611         if (acb->aiocb_info->get_aio_context) {
4612             aio_poll(acb->aiocb_info->get_aio_context(acb), true);
4613         } else if (acb->bs) {
4614             aio_poll(bdrv_get_aio_context(acb->bs), true);
4615         } else {
4616             abort();
4617         }
4618     }
4619     qemu_aio_unref(acb);
4620 }
4621
4622 /* Async version of aio cancel. The caller is not blocked if the acb implements
4623  * cancel_async, otherwise we do nothing and let the request normally complete.
4624  * In either case the completion callback must be called. */
4625 void bdrv_aio_cancel_async(BlockAIOCB *acb)
4626 {
4627     if (acb->aiocb_info->cancel_async) {
4628         acb->aiocb_info->cancel_async(acb);
4629     }
4630 }
4631
4632 /**************************************************************/
4633 /* async block device emulation */
4634
4635 typedef struct BlockAIOCBSync {
4636     BlockAIOCB common;
4637     QEMUBH *bh;
4638     int ret;
4639     /* vector translation state */
4640     QEMUIOVector *qiov;
4641     uint8_t *bounce;
4642     int is_write;
4643 } BlockAIOCBSync;
4644
4645 static const AIOCBInfo bdrv_em_aiocb_info = {
4646     .aiocb_size         = sizeof(BlockAIOCBSync),
4647 };
4648
4649 static void bdrv_aio_bh_cb(void *opaque)
4650 {
4651     BlockAIOCBSync *acb = opaque;
4652
4653     if (!acb->is_write && acb->ret >= 0) {
4654         qemu_iovec_from_buf(acb->qiov, 0, acb->bounce, acb->qiov->size);
4655     }
4656     qemu_vfree(acb->bounce);
4657     acb->common.cb(acb->common.opaque, acb->ret);
4658     qemu_bh_delete(acb->bh);
4659     acb->bh = NULL;
4660     qemu_aio_unref(acb);
4661 }
4662
4663 static BlockAIOCB *bdrv_aio_rw_vector(BlockDriverState *bs,
4664                                       int64_t sector_num,
4665                                       QEMUIOVector *qiov,
4666                                       int nb_sectors,
4667                                       BlockCompletionFunc *cb,
4668                                       void *opaque,
4669                                       int is_write)
4670
4671 {
4672     BlockAIOCBSync *acb;
4673
4674     acb = qemu_aio_get(&bdrv_em_aiocb_info, bs, cb, opaque);
4675     acb->is_write = is_write;
4676     acb->qiov = qiov;
4677     acb->bounce = qemu_try_blockalign(bs, qiov->size);
4678     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_aio_bh_cb, acb);
4679
4680     if (acb->bounce == NULL) {
4681         acb->ret = -ENOMEM;
4682     } else if (is_write) {
4683         qemu_iovec_to_buf(acb->qiov, 0, acb->bounce, qiov->size);
4684         acb->ret = bs->drv->bdrv_write(bs, sector_num, acb->bounce, nb_sectors);
4685     } else {
4686         acb->ret = bs->drv->bdrv_read(bs, sector_num, acb->bounce, nb_sectors);
4687     }
4688
4689     qemu_bh_schedule(acb->bh);
4690
4691     return &acb->common;
4692 }
4693
4694 static BlockAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
4695         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4696         BlockCompletionFunc *cb, void *opaque)
4697 {
4698     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 0);
4699 }
4700
4701 static BlockAIOCB *bdrv_aio_writev_em(BlockDriverState *bs,
4702         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
4703         BlockCompletionFunc *cb, void *opaque)
4704 {
4705     return bdrv_aio_rw_vector(bs, sector_num, qiov, nb_sectors, cb, opaque, 1);
4706 }
4707
4708
4709 typedef struct BlockAIOCBCoroutine {
4710     BlockAIOCB common;
4711     BlockRequest req;
4712     bool is_write;
4713     bool *done;
4714     QEMUBH* bh;
4715 } BlockAIOCBCoroutine;
4716
4717 static const AIOCBInfo bdrv_em_co_aiocb_info = {
4718     .aiocb_size         = sizeof(BlockAIOCBCoroutine),
4719 };
4720
4721 static void bdrv_co_em_bh(void *opaque)
4722 {
4723     BlockAIOCBCoroutine *acb = opaque;
4724
4725     acb->common.cb(acb->common.opaque, acb->req.error);
4726
4727     qemu_bh_delete(acb->bh);
4728     qemu_aio_unref(acb);
4729 }
4730
4731 /* Invoke bdrv_co_do_readv/bdrv_co_do_writev */
4732 static void coroutine_fn bdrv_co_do_rw(void *opaque)
4733 {
4734     BlockAIOCBCoroutine *acb = opaque;
4735     BlockDriverState *bs = acb->common.bs;
4736
4737     if (!acb->is_write) {
4738         acb->req.error = bdrv_co_do_readv(bs, acb->req.sector,
4739             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4740     } else {
4741         acb->req.error = bdrv_co_do_writev(bs, acb->req.sector,
4742             acb->req.nb_sectors, acb->req.qiov, acb->req.flags);
4743     }
4744
4745     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4746     qemu_bh_schedule(acb->bh);
4747 }
4748
4749 static BlockAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
4750                                          int64_t sector_num,
4751                                          QEMUIOVector *qiov,
4752                                          int nb_sectors,
4753                                          BdrvRequestFlags flags,
4754                                          BlockCompletionFunc *cb,
4755                                          void *opaque,
4756                                          bool is_write)
4757 {
4758     Coroutine *co;
4759     BlockAIOCBCoroutine *acb;
4760
4761     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4762     acb->req.sector = sector_num;
4763     acb->req.nb_sectors = nb_sectors;
4764     acb->req.qiov = qiov;
4765     acb->req.flags = flags;
4766     acb->is_write = is_write;
4767
4768     co = qemu_coroutine_create(bdrv_co_do_rw);
4769     qemu_coroutine_enter(co, acb);
4770
4771     return &acb->common;
4772 }
4773
4774 static void coroutine_fn bdrv_aio_flush_co_entry(void *opaque)
4775 {
4776     BlockAIOCBCoroutine *acb = opaque;
4777     BlockDriverState *bs = acb->common.bs;
4778
4779     acb->req.error = bdrv_co_flush(bs);
4780     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4781     qemu_bh_schedule(acb->bh);
4782 }
4783
4784 BlockAIOCB *bdrv_aio_flush(BlockDriverState *bs,
4785         BlockCompletionFunc *cb, void *opaque)
4786 {
4787     trace_bdrv_aio_flush(bs, opaque);
4788
4789     Coroutine *co;
4790     BlockAIOCBCoroutine *acb;
4791
4792     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4793
4794     co = qemu_coroutine_create(bdrv_aio_flush_co_entry);
4795     qemu_coroutine_enter(co, acb);
4796
4797     return &acb->common;
4798 }
4799
4800 static void coroutine_fn bdrv_aio_discard_co_entry(void *opaque)
4801 {
4802     BlockAIOCBCoroutine *acb = opaque;
4803     BlockDriverState *bs = acb->common.bs;
4804
4805     acb->req.error = bdrv_co_discard(bs, acb->req.sector, acb->req.nb_sectors);
4806     acb->bh = aio_bh_new(bdrv_get_aio_context(bs), bdrv_co_em_bh, acb);
4807     qemu_bh_schedule(acb->bh);
4808 }
4809
4810 BlockAIOCB *bdrv_aio_discard(BlockDriverState *bs,
4811         int64_t sector_num, int nb_sectors,
4812         BlockCompletionFunc *cb, void *opaque)
4813 {
4814     Coroutine *co;
4815     BlockAIOCBCoroutine *acb;
4816
4817     trace_bdrv_aio_discard(bs, sector_num, nb_sectors, opaque);
4818
4819     acb = qemu_aio_get(&bdrv_em_co_aiocb_info, bs, cb, opaque);
4820     acb->req.sector = sector_num;
4821     acb->req.nb_sectors = nb_sectors;
4822     co = qemu_coroutine_create(bdrv_aio_discard_co_entry);
4823     qemu_coroutine_enter(co, acb);
4824
4825     return &acb->common;
4826 }
4827
4828 void bdrv_init(void)
4829 {
4830     module_call_init(MODULE_INIT_BLOCK);
4831 }
4832
4833 void bdrv_init_with_whitelist(void)
4834 {
4835     use_bdrv_whitelist = 1;
4836     bdrv_init();
4837 }
4838
4839 void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
4840                    BlockCompletionFunc *cb, void *opaque)
4841 {
4842     BlockAIOCB *acb;
4843
4844     acb = g_slice_alloc(aiocb_info->aiocb_size);
4845     acb->aiocb_info = aiocb_info;
4846     acb->bs = bs;
4847     acb->cb = cb;
4848     acb->opaque = opaque;
4849     acb->refcnt = 1;
4850     return acb;
4851 }
4852
4853 void qemu_aio_ref(void *p)
4854 {
4855     BlockAIOCB *acb = p;
4856     acb->refcnt++;
4857 }
4858
4859 void qemu_aio_unref(void *p)
4860 {
4861     BlockAIOCB *acb = p;
4862     assert(acb->refcnt > 0);
4863     if (--acb->refcnt == 0) {
4864         g_slice_free1(acb->aiocb_info->aiocb_size, acb);
4865     }
4866 }
4867
4868 /**************************************************************/
4869 /* Coroutine block device emulation */
4870
4871 typedef struct CoroutineIOCompletion {
4872     Coroutine *coroutine;
4873     int ret;
4874 } CoroutineIOCompletion;
4875
4876 static void bdrv_co_io_em_complete(void *opaque, int ret)
4877 {
4878     CoroutineIOCompletion *co = opaque;
4879
4880     co->ret = ret;
4881     qemu_coroutine_enter(co->coroutine, NULL);
4882 }
4883
4884 static int coroutine_fn bdrv_co_io_em(BlockDriverState *bs, int64_t sector_num,
4885                                       int nb_sectors, QEMUIOVector *iov,
4886                                       bool is_write)
4887 {
4888     CoroutineIOCompletion co = {
4889         .coroutine = qemu_coroutine_self(),
4890     };
4891     BlockAIOCB *acb;
4892
4893     if (is_write) {
4894         acb = bs->drv->bdrv_aio_writev(bs, sector_num, iov, nb_sectors,
4895                                        bdrv_co_io_em_complete, &co);
4896     } else {
4897         acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors,
4898                                       bdrv_co_io_em_complete, &co);
4899     }
4900
4901     trace_bdrv_co_io_em(bs, sector_num, nb_sectors, is_write, acb);
4902     if (!acb) {
4903         return -EIO;
4904     }
4905     qemu_coroutine_yield();
4906
4907     return co.ret;
4908 }
4909
4910 static int coroutine_fn bdrv_co_readv_em(BlockDriverState *bs,
4911                                          int64_t sector_num, int nb_sectors,
4912                                          QEMUIOVector *iov)
4913 {
4914     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, false);
4915 }
4916
4917 static int coroutine_fn bdrv_co_writev_em(BlockDriverState *bs,
4918                                          int64_t sector_num, int nb_sectors,
4919                                          QEMUIOVector *iov)
4920 {
4921     return bdrv_co_io_em(bs, sector_num, nb_sectors, iov, true);
4922 }
4923
4924 static void coroutine_fn bdrv_flush_co_entry(void *opaque)
4925 {
4926     RwCo *rwco = opaque;
4927
4928     rwco->ret = bdrv_co_flush(rwco->bs);
4929 }
4930
4931 int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
4932 {
4933     int ret;
4934
4935     if (!bs || !bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
4936         return 0;
4937     }
4938
4939     /* Write back cached data to the OS even with cache=unsafe */
4940     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS);
4941     if (bs->drv->bdrv_co_flush_to_os) {
4942         ret = bs->drv->bdrv_co_flush_to_os(bs);
4943         if (ret < 0) {
4944             return ret;
4945         }
4946     }
4947
4948     /* But don't actually force it to the disk with cache=unsafe */
4949     if (bs->open_flags & BDRV_O_NO_FLUSH) {
4950         goto flush_parent;
4951     }
4952
4953     BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_DISK);
4954     if (bs->drv->bdrv_co_flush_to_disk) {
4955         ret = bs->drv->bdrv_co_flush_to_disk(bs);
4956     } else if (bs->drv->bdrv_aio_flush) {
4957         BlockAIOCB *acb;
4958         CoroutineIOCompletion co = {
4959             .coroutine = qemu_coroutine_self(),
4960         };
4961
4962         acb = bs->drv->bdrv_aio_flush(bs, bdrv_co_io_em_complete, &co);
4963         if (acb == NULL) {
4964             ret = -EIO;
4965         } else {
4966             qemu_coroutine_yield();
4967             ret = co.ret;
4968         }
4969     } else {
4970         /*
4971          * Some block drivers always operate in either writethrough or unsafe
4972          * mode and don't support bdrv_flush therefore. Usually qemu doesn't
4973          * know how the server works (because the behaviour is hardcoded or
4974          * depends on server-side configuration), so we can't ensure that
4975          * everything is safe on disk. Returning an error doesn't work because
4976          * that would break guests even if the server operates in writethrough
4977          * mode.
4978          *
4979          * Let's hope the user knows what he's doing.
4980          */
4981         ret = 0;
4982     }
4983     if (ret < 0) {
4984         return ret;
4985     }
4986
4987     /* Now flush the underlying protocol.  It will also have BDRV_O_NO_FLUSH
4988      * in the case of cache=unsafe, so there are no useless flushes.
4989      */
4990 flush_parent:
4991     return bdrv_co_flush(bs->file);
4992 }
4993
4994 void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp)
4995 {
4996     Error *local_err = NULL;
4997     int ret;
4998
4999     if (!bs->drv)  {
5000         return;
5001     }
5002
5003     if (!(bs->open_flags & BDRV_O_INCOMING)) {
5004         return;
5005     }
5006     bs->open_flags &= ~BDRV_O_INCOMING;
5007
5008     if (bs->drv->bdrv_invalidate_cache) {
5009         bs->drv->bdrv_invalidate_cache(bs, &local_err);
5010     } else if (bs->file) {
5011         bdrv_invalidate_cache(bs->file, &local_err);
5012     }
5013     if (local_err) {
5014         error_propagate(errp, local_err);
5015         return;
5016     }
5017
5018     ret = refresh_total_sectors(bs, bs->total_sectors);
5019     if (ret < 0) {
5020         error_setg_errno(errp, -ret, "Could not refresh total sector count");
5021         return;
5022     }
5023 }
5024
5025 void bdrv_invalidate_cache_all(Error **errp)
5026 {
5027     BlockDriverState *bs;
5028     Error *local_err = NULL;
5029
5030     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5031         AioContext *aio_context = bdrv_get_aio_context(bs);
5032
5033         aio_context_acquire(aio_context);
5034         bdrv_invalidate_cache(bs, &local_err);
5035         aio_context_release(aio_context);
5036         if (local_err) {
5037             error_propagate(errp, local_err);
5038             return;
5039         }
5040     }
5041 }
5042
5043 int bdrv_flush(BlockDriverState *bs)
5044 {
5045     Coroutine *co;
5046     RwCo rwco = {
5047         .bs = bs,
5048         .ret = NOT_DONE,
5049     };
5050
5051     if (qemu_in_coroutine()) {
5052         /* Fast-path if already in coroutine context */
5053         bdrv_flush_co_entry(&rwco);
5054     } else {
5055         AioContext *aio_context = bdrv_get_aio_context(bs);
5056
5057         co = qemu_coroutine_create(bdrv_flush_co_entry);
5058         qemu_coroutine_enter(co, &rwco);
5059         while (rwco.ret == NOT_DONE) {
5060             aio_poll(aio_context, true);
5061         }
5062     }
5063
5064     return rwco.ret;
5065 }
5066
5067 typedef struct DiscardCo {
5068     BlockDriverState *bs;
5069     int64_t sector_num;
5070     int nb_sectors;
5071     int ret;
5072 } DiscardCo;
5073 static void coroutine_fn bdrv_discard_co_entry(void *opaque)
5074 {
5075     DiscardCo *rwco = opaque;
5076
5077     rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors);
5078 }
5079
5080 /* if no limit is specified in the BlockLimits use a default
5081  * of 32768 512-byte sectors (16 MiB) per request.
5082  */
5083 #define MAX_DISCARD_DEFAULT 32768
5084
5085 int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
5086                                  int nb_sectors)
5087 {
5088     int max_discard;
5089
5090     if (!bs->drv) {
5091         return -ENOMEDIUM;
5092     } else if (bdrv_check_request(bs, sector_num, nb_sectors)) {
5093         return -EIO;
5094     } else if (bs->read_only) {
5095         return -EROFS;
5096     }
5097
5098     bdrv_reset_dirty(bs, sector_num, nb_sectors);
5099
5100     /* Do nothing if disabled.  */
5101     if (!(bs->open_flags & BDRV_O_UNMAP)) {
5102         return 0;
5103     }
5104
5105     if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_discard) {
5106         return 0;
5107     }
5108
5109     max_discard = bs->bl.max_discard ?  bs->bl.max_discard : MAX_DISCARD_DEFAULT;
5110     while (nb_sectors > 0) {
5111         int ret;
5112         int num = nb_sectors;
5113
5114         /* align request */
5115         if (bs->bl.discard_alignment &&
5116             num >= bs->bl.discard_alignment &&
5117             sector_num % bs->bl.discard_alignment) {
5118             if (num > bs->bl.discard_alignment) {
5119                 num = bs->bl.discard_alignment;
5120             }
5121             num -= sector_num % bs->bl.discard_alignment;
5122         }
5123
5124         /* limit request size */
5125         if (num > max_discard) {
5126             num = max_discard;
5127         }
5128
5129         if (bs->drv->bdrv_co_discard) {
5130             ret = bs->drv->bdrv_co_discard(bs, sector_num, num);
5131         } else {
5132             BlockAIOCB *acb;
5133             CoroutineIOCompletion co = {
5134                 .coroutine = qemu_coroutine_self(),
5135             };
5136
5137             acb = bs->drv->bdrv_aio_discard(bs, sector_num, nb_sectors,
5138                                             bdrv_co_io_em_complete, &co);
5139             if (acb == NULL) {
5140                 return -EIO;
5141             } else {
5142                 qemu_coroutine_yield();
5143                 ret = co.ret;
5144             }
5145         }
5146         if (ret && ret != -ENOTSUP) {
5147             return ret;
5148         }
5149
5150         sector_num += num;
5151         nb_sectors -= num;
5152     }
5153     return 0;
5154 }
5155
5156 int bdrv_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
5157 {
5158     Coroutine *co;
5159     DiscardCo rwco = {
5160         .bs = bs,
5161         .sector_num = sector_num,
5162         .nb_sectors = nb_sectors,
5163         .ret = NOT_DONE,
5164     };
5165
5166     if (qemu_in_coroutine()) {
5167         /* Fast-path if already in coroutine context */
5168         bdrv_discard_co_entry(&rwco);
5169     } else {
5170         AioContext *aio_context = bdrv_get_aio_context(bs);
5171
5172         co = qemu_coroutine_create(bdrv_discard_co_entry);
5173         qemu_coroutine_enter(co, &rwco);
5174         while (rwco.ret == NOT_DONE) {
5175             aio_poll(aio_context, true);
5176         }
5177     }
5178
5179     return rwco.ret;
5180 }
5181
5182 /**************************************************************/
5183 /* removable device support */
5184
5185 /**
5186  * Return TRUE if the media is present
5187  */
5188 int bdrv_is_inserted(BlockDriverState *bs)
5189 {
5190     BlockDriver *drv = bs->drv;
5191
5192     if (!drv)
5193         return 0;
5194     if (!drv->bdrv_is_inserted)
5195         return 1;
5196     return drv->bdrv_is_inserted(bs);
5197 }
5198
5199 /**
5200  * Return whether the media changed since the last call to this
5201  * function, or -ENOTSUP if we don't know.  Most drivers don't know.
5202  */
5203 int bdrv_media_changed(BlockDriverState *bs)
5204 {
5205     BlockDriver *drv = bs->drv;
5206
5207     if (drv && drv->bdrv_media_changed) {
5208         return drv->bdrv_media_changed(bs);
5209     }
5210     return -ENOTSUP;
5211 }
5212
5213 /**
5214  * If eject_flag is TRUE, eject the media. Otherwise, close the tray
5215  */
5216 void bdrv_eject(BlockDriverState *bs, bool eject_flag)
5217 {
5218     BlockDriver *drv = bs->drv;
5219     const char *device_name;
5220
5221     if (drv && drv->bdrv_eject) {
5222         drv->bdrv_eject(bs, eject_flag);
5223     }
5224
5225     device_name = bdrv_get_device_name(bs);
5226     if (device_name[0] != '\0') {
5227         qapi_event_send_device_tray_moved(device_name,
5228                                           eject_flag, &error_abort);
5229     }
5230 }
5231
5232 /**
5233  * Lock or unlock the media (if it is locked, the user won't be able
5234  * to eject it manually).
5235  */
5236 void bdrv_lock_medium(BlockDriverState *bs, bool locked)
5237 {
5238     BlockDriver *drv = bs->drv;
5239
5240     trace_bdrv_lock_medium(bs, locked);
5241
5242     if (drv && drv->bdrv_lock_medium) {
5243         drv->bdrv_lock_medium(bs, locked);
5244     }
5245 }
5246
5247 /* needed for generic scsi interface */
5248
5249 int bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
5250 {
5251     BlockDriver *drv = bs->drv;
5252
5253     if (drv && drv->bdrv_ioctl)
5254         return drv->bdrv_ioctl(bs, req, buf);
5255     return -ENOTSUP;
5256 }
5257
5258 BlockAIOCB *bdrv_aio_ioctl(BlockDriverState *bs,
5259         unsigned long int req, void *buf,
5260         BlockCompletionFunc *cb, void *opaque)
5261 {
5262     BlockDriver *drv = bs->drv;
5263
5264     if (drv && drv->bdrv_aio_ioctl)
5265         return drv->bdrv_aio_ioctl(bs, req, buf, cb, opaque);
5266     return NULL;
5267 }
5268
5269 void bdrv_set_guest_block_size(BlockDriverState *bs, int align)
5270 {
5271     bs->guest_block_size = align;
5272 }
5273
5274 void *qemu_blockalign(BlockDriverState *bs, size_t size)
5275 {
5276     return qemu_memalign(bdrv_opt_mem_align(bs), size);
5277 }
5278
5279 void *qemu_blockalign0(BlockDriverState *bs, size_t size)
5280 {
5281     return memset(qemu_blockalign(bs, size), 0, size);
5282 }
5283
5284 void *qemu_try_blockalign(BlockDriverState *bs, size_t size)
5285 {
5286     size_t align = bdrv_opt_mem_align(bs);
5287
5288     /* Ensure that NULL is never returned on success */
5289     assert(align > 0);
5290     if (size == 0) {
5291         size = align;
5292     }
5293
5294     return qemu_try_memalign(align, size);
5295 }
5296
5297 void *qemu_try_blockalign0(BlockDriverState *bs, size_t size)
5298 {
5299     void *mem = qemu_try_blockalign(bs, size);
5300
5301     if (mem) {
5302         memset(mem, 0, size);
5303     }
5304
5305     return mem;
5306 }
5307
5308 /*
5309  * Check if all memory in this vector is sector aligned.
5310  */
5311 bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
5312 {
5313     int i;
5314     size_t alignment = bdrv_opt_mem_align(bs);
5315
5316     for (i = 0; i < qiov->niov; i++) {
5317         if ((uintptr_t) qiov->iov[i].iov_base % alignment) {
5318             return false;
5319         }
5320         if (qiov->iov[i].iov_len % alignment) {
5321             return false;
5322         }
5323     }
5324
5325     return true;
5326 }
5327
5328 BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity,
5329                                           Error **errp)
5330 {
5331     int64_t bitmap_size;
5332     BdrvDirtyBitmap *bitmap;
5333
5334     assert((granularity & (granularity - 1)) == 0);
5335
5336     granularity >>= BDRV_SECTOR_BITS;
5337     assert(granularity);
5338     bitmap_size = bdrv_nb_sectors(bs);
5339     if (bitmap_size < 0) {
5340         error_setg_errno(errp, -bitmap_size, "could not get length of device");
5341         errno = -bitmap_size;
5342         return NULL;
5343     }
5344     bitmap = g_new0(BdrvDirtyBitmap, 1);
5345     bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1);
5346     QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
5347     return bitmap;
5348 }
5349
5350 void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5351 {
5352     BdrvDirtyBitmap *bm, *next;
5353     QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
5354         if (bm == bitmap) {
5355             QLIST_REMOVE(bitmap, list);
5356             hbitmap_free(bitmap->bitmap);
5357             g_free(bitmap);
5358             return;
5359         }
5360     }
5361 }
5362
5363 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
5364 {
5365     BdrvDirtyBitmap *bm;
5366     BlockDirtyInfoList *list = NULL;
5367     BlockDirtyInfoList **plist = &list;
5368
5369     QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
5370         BlockDirtyInfo *info = g_new0(BlockDirtyInfo, 1);
5371         BlockDirtyInfoList *entry = g_new0(BlockDirtyInfoList, 1);
5372         info->count = bdrv_get_dirty_count(bs, bm);
5373         info->granularity =
5374             ((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bm->bitmap));
5375         entry->value = info;
5376         *plist = entry;
5377         plist = &entry->next;
5378     }
5379
5380     return list;
5381 }
5382
5383 int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
5384 {
5385     if (bitmap) {
5386         return hbitmap_get(bitmap->bitmap, sector);
5387     } else {
5388         return 0;
5389     }
5390 }
5391
5392 void bdrv_dirty_iter_init(BlockDriverState *bs,
5393                           BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
5394 {
5395     hbitmap_iter_init(hbi, bitmap->bitmap, 0);
5396 }
5397
5398 void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
5399                     int nr_sectors)
5400 {
5401     BdrvDirtyBitmap *bitmap;
5402     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5403         hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
5404     }
5405 }
5406
5407 void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors)
5408 {
5409     BdrvDirtyBitmap *bitmap;
5410     QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
5411         hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
5412     }
5413 }
5414
5415 int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
5416 {
5417     return hbitmap_count(bitmap->bitmap);
5418 }
5419
5420 /* Get a reference to bs */
5421 void bdrv_ref(BlockDriverState *bs)
5422 {
5423     bs->refcnt++;
5424 }
5425
5426 /* Release a previously grabbed reference to bs.
5427  * If after releasing, reference count is zero, the BlockDriverState is
5428  * deleted. */
5429 void bdrv_unref(BlockDriverState *bs)
5430 {
5431     if (!bs) {
5432         return;
5433     }
5434     assert(bs->refcnt > 0);
5435     if (--bs->refcnt == 0) {
5436         bdrv_delete(bs);
5437     }
5438 }
5439
5440 struct BdrvOpBlocker {
5441     Error *reason;
5442     QLIST_ENTRY(BdrvOpBlocker) list;
5443 };
5444
5445 bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
5446 {
5447     BdrvOpBlocker *blocker;
5448     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5449     if (!QLIST_EMPTY(&bs->op_blockers[op])) {
5450         blocker = QLIST_FIRST(&bs->op_blockers[op]);
5451         if (errp) {
5452             error_setg(errp, "Device '%s' is busy: %s",
5453                        bdrv_get_device_name(bs),
5454                        error_get_pretty(blocker->reason));
5455         }
5456         return true;
5457     }
5458     return false;
5459 }
5460
5461 void bdrv_op_block(BlockDriverState *bs, BlockOpType op, Error *reason)
5462 {
5463     BdrvOpBlocker *blocker;
5464     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5465
5466     blocker = g_new0(BdrvOpBlocker, 1);
5467     blocker->reason = reason;
5468     QLIST_INSERT_HEAD(&bs->op_blockers[op], blocker, list);
5469 }
5470
5471 void bdrv_op_unblock(BlockDriverState *bs, BlockOpType op, Error *reason)
5472 {
5473     BdrvOpBlocker *blocker, *next;
5474     assert((int) op >= 0 && op < BLOCK_OP_TYPE_MAX);
5475     QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
5476         if (blocker->reason == reason) {
5477             QLIST_REMOVE(blocker, list);
5478             g_free(blocker);
5479         }
5480     }
5481 }
5482
5483 void bdrv_op_block_all(BlockDriverState *bs, Error *reason)
5484 {
5485     int i;
5486     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5487         bdrv_op_block(bs, i, reason);
5488     }
5489 }
5490
5491 void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason)
5492 {
5493     int i;
5494     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5495         bdrv_op_unblock(bs, i, reason);
5496     }
5497 }
5498
5499 bool bdrv_op_blocker_is_empty(BlockDriverState *bs)
5500 {
5501     int i;
5502
5503     for (i = 0; i < BLOCK_OP_TYPE_MAX; i++) {
5504         if (!QLIST_EMPTY(&bs->op_blockers[i])) {
5505             return false;
5506         }
5507     }
5508     return true;
5509 }
5510
5511 void bdrv_iostatus_enable(BlockDriverState *bs)
5512 {
5513     bs->iostatus_enabled = true;
5514     bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5515 }
5516
5517 /* The I/O status is only enabled if the drive explicitly
5518  * enables it _and_ the VM is configured to stop on errors */
5519 bool bdrv_iostatus_is_enabled(const BlockDriverState *bs)
5520 {
5521     return (bs->iostatus_enabled &&
5522            (bs->on_write_error == BLOCKDEV_ON_ERROR_ENOSPC ||
5523             bs->on_write_error == BLOCKDEV_ON_ERROR_STOP   ||
5524             bs->on_read_error == BLOCKDEV_ON_ERROR_STOP));
5525 }
5526
5527 void bdrv_iostatus_disable(BlockDriverState *bs)
5528 {
5529     bs->iostatus_enabled = false;
5530 }
5531
5532 void bdrv_iostatus_reset(BlockDriverState *bs)
5533 {
5534     if (bdrv_iostatus_is_enabled(bs)) {
5535         bs->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
5536         if (bs->job) {
5537             block_job_iostatus_reset(bs->job);
5538         }
5539     }
5540 }
5541
5542 void bdrv_iostatus_set_err(BlockDriverState *bs, int error)
5543 {
5544     assert(bdrv_iostatus_is_enabled(bs));
5545     if (bs->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
5546         bs->iostatus = error == ENOSPC ? BLOCK_DEVICE_IO_STATUS_NOSPACE :
5547                                          BLOCK_DEVICE_IO_STATUS_FAILED;
5548     }
5549 }
5550
5551 void bdrv_img_create(const char *filename, const char *fmt,
5552                      const char *base_filename, const char *base_fmt,
5553                      char *options, uint64_t img_size, int flags,
5554                      Error **errp, bool quiet)
5555 {
5556     QemuOptsList *create_opts = NULL;
5557     QemuOpts *opts = NULL;
5558     const char *backing_fmt, *backing_file;
5559     int64_t size;
5560     BlockDriver *drv, *proto_drv;
5561     BlockDriver *backing_drv = NULL;
5562     Error *local_err = NULL;
5563     int ret = 0;
5564
5565     /* Find driver and parse its options */
5566     drv = bdrv_find_format(fmt);
5567     if (!drv) {
5568         error_setg(errp, "Unknown file format '%s'", fmt);
5569         return;
5570     }
5571
5572     proto_drv = bdrv_find_protocol(filename, true);
5573     if (!proto_drv) {
5574         error_setg(errp, "Unknown protocol '%s'", filename);
5575         return;
5576     }
5577
5578     if (!drv->create_opts) {
5579         error_setg(errp, "Format driver '%s' does not support image creation",
5580                    drv->format_name);
5581         return;
5582     }
5583
5584     if (!proto_drv->create_opts) {
5585         error_setg(errp, "Protocol driver '%s' does not support image creation",
5586                    proto_drv->format_name);
5587         return;
5588     }
5589
5590     create_opts = qemu_opts_append(create_opts, drv->create_opts);
5591     create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
5592
5593     /* Create parameter list with default values */
5594     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
5595     qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size);
5596
5597     /* Parse -o options */
5598     if (options) {
5599         if (qemu_opts_do_parse(opts, options, NULL) != 0) {
5600             error_setg(errp, "Invalid options for file format '%s'", fmt);
5601             goto out;
5602         }
5603     }
5604
5605     if (base_filename) {
5606         if (qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename)) {
5607             error_setg(errp, "Backing file not supported for file format '%s'",
5608                        fmt);
5609             goto out;
5610         }
5611     }
5612
5613     if (base_fmt) {
5614         if (qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt)) {
5615             error_setg(errp, "Backing file format not supported for file "
5616                              "format '%s'", fmt);
5617             goto out;
5618         }
5619     }
5620
5621     backing_file = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
5622     if (backing_file) {
5623         if (!strcmp(filename, backing_file)) {
5624             error_setg(errp, "Error: Trying to create an image with the "
5625                              "same filename as the backing file");
5626             goto out;
5627         }
5628     }
5629
5630     backing_fmt = qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT);
5631     if (backing_fmt) {
5632         backing_drv = bdrv_find_format(backing_fmt);
5633         if (!backing_drv) {
5634             error_setg(errp, "Unknown backing file format '%s'",
5635                        backing_fmt);
5636             goto out;
5637         }
5638     }
5639
5640     // The size for the image must always be specified, with one exception:
5641     // If we are using a backing file, we can obtain the size from there
5642     size = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 0);
5643     if (size == -1) {
5644         if (backing_file) {
5645             BlockDriverState *bs;
5646             int64_t size;
5647             int back_flags;
5648
5649             /* backing files always opened read-only */
5650             back_flags =
5651                 flags & ~(BDRV_O_RDWR | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING);
5652
5653             bs = NULL;
5654             ret = bdrv_open(&bs, backing_file, NULL, NULL, back_flags,
5655                             backing_drv, &local_err);
5656             if (ret < 0) {
5657                 goto out;
5658             }
5659             size = bdrv_getlength(bs);
5660             if (size < 0) {
5661                 error_setg_errno(errp, -size, "Could not get size of '%s'",
5662                                  backing_file);
5663                 bdrv_unref(bs);
5664                 goto out;
5665             }
5666
5667             qemu_opt_set_number(opts, BLOCK_OPT_SIZE, size);
5668
5669             bdrv_unref(bs);
5670         } else {
5671             error_setg(errp, "Image creation needs a size parameter");
5672             goto out;
5673         }
5674     }
5675
5676     if (!quiet) {
5677         printf("Formatting '%s', fmt=%s", filename, fmt);
5678         qemu_opts_print(opts, " ");
5679         puts("");
5680     }
5681
5682     ret = bdrv_create(drv, filename, opts, &local_err);
5683
5684     if (ret == -EFBIG) {
5685         /* This is generally a better message than whatever the driver would
5686          * deliver (especially because of the cluster_size_hint), since that
5687          * is most probably not much different from "image too large". */
5688         const char *cluster_size_hint = "";
5689         if (qemu_opt_get_size(opts, BLOCK_OPT_CLUSTER_SIZE, 0)) {
5690             cluster_size_hint = " (try using a larger cluster size)";
5691         }
5692         error_setg(errp, "The image size is too large for file format '%s'"
5693                    "%s", fmt, cluster_size_hint);
5694         error_free(local_err);
5695         local_err = NULL;
5696     }
5697
5698 out:
5699     qemu_opts_del(opts);
5700     qemu_opts_free(create_opts);
5701     if (local_err) {
5702         error_propagate(errp, local_err);
5703     }
5704 }
5705
5706 AioContext *bdrv_get_aio_context(BlockDriverState *bs)
5707 {
5708     return bs->aio_context;
5709 }
5710
5711 void bdrv_detach_aio_context(BlockDriverState *bs)
5712 {
5713     BdrvAioNotifier *baf;
5714
5715     if (!bs->drv) {
5716         return;
5717     }
5718
5719     QLIST_FOREACH(baf, &bs->aio_notifiers, list) {
5720         baf->detach_aio_context(baf->opaque);
5721     }
5722
5723     if (bs->io_limits_enabled) {
5724         throttle_detach_aio_context(&bs->throttle_state);
5725     }
5726     if (bs->drv->bdrv_detach_aio_context) {
5727         bs->drv->bdrv_detach_aio_context(bs);
5728     }
5729     if (bs->file) {
5730         bdrv_detach_aio_context(bs->file);
5731     }
5732     if (bs->backing_hd) {
5733         bdrv_detach_aio_context(bs->backing_hd);
5734     }
5735
5736     bs->aio_context = NULL;
5737 }
5738
5739 void bdrv_attach_aio_context(BlockDriverState *bs,
5740                              AioContext *new_context)
5741 {
5742     BdrvAioNotifier *ban;
5743
5744     if (!bs->drv) {
5745         return;
5746     }
5747
5748     bs->aio_context = new_context;
5749
5750     if (bs->backing_hd) {
5751         bdrv_attach_aio_context(bs->backing_hd, new_context);
5752     }
5753     if (bs->file) {
5754         bdrv_attach_aio_context(bs->file, new_context);
5755     }
5756     if (bs->drv->bdrv_attach_aio_context) {
5757         bs->drv->bdrv_attach_aio_context(bs, new_context);
5758     }
5759     if (bs->io_limits_enabled) {
5760         throttle_attach_aio_context(&bs->throttle_state, new_context);
5761     }
5762
5763     QLIST_FOREACH(ban, &bs->aio_notifiers, list) {
5764         ban->attached_aio_context(new_context, ban->opaque);
5765     }
5766 }
5767
5768 void bdrv_set_aio_context(BlockDriverState *bs, AioContext *new_context)
5769 {
5770     bdrv_drain_all(); /* ensure there are no in-flight requests */
5771
5772     bdrv_detach_aio_context(bs);
5773
5774     /* This function executes in the old AioContext so acquire the new one in
5775      * case it runs in a different thread.
5776      */
5777     aio_context_acquire(new_context);
5778     bdrv_attach_aio_context(bs, new_context);
5779     aio_context_release(new_context);
5780 }
5781
5782 void bdrv_add_aio_context_notifier(BlockDriverState *bs,
5783         void (*attached_aio_context)(AioContext *new_context, void *opaque),
5784         void (*detach_aio_context)(void *opaque), void *opaque)
5785 {
5786     BdrvAioNotifier *ban = g_new(BdrvAioNotifier, 1);
5787     *ban = (BdrvAioNotifier){
5788         .attached_aio_context = attached_aio_context,
5789         .detach_aio_context   = detach_aio_context,
5790         .opaque               = opaque
5791     };
5792
5793     QLIST_INSERT_HEAD(&bs->aio_notifiers, ban, list);
5794 }
5795
5796 void bdrv_remove_aio_context_notifier(BlockDriverState *bs,
5797                                       void (*attached_aio_context)(AioContext *,
5798                                                                    void *),
5799                                       void (*detach_aio_context)(void *),
5800                                       void *opaque)
5801 {
5802     BdrvAioNotifier *ban, *ban_next;
5803
5804     QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
5805         if (ban->attached_aio_context == attached_aio_context &&
5806             ban->detach_aio_context   == detach_aio_context   &&
5807             ban->opaque               == opaque)
5808         {
5809             QLIST_REMOVE(ban, list);
5810             g_free(ban);
5811
5812             return;
5813         }
5814     }
5815
5816     abort();
5817 }
5818
5819 void bdrv_add_before_write_notifier(BlockDriverState *bs,
5820                                     NotifierWithReturn *notifier)
5821 {
5822     notifier_with_return_list_add(&bs->before_write_notifiers, notifier);
5823 }
5824
5825 int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts,
5826                        BlockDriverAmendStatusCB *status_cb)
5827 {
5828     if (!bs->drv->bdrv_amend_options) {
5829         return -ENOTSUP;
5830     }
5831     return bs->drv->bdrv_amend_options(bs, opts, status_cb);
5832 }
5833
5834 /* This function will be called by the bdrv_recurse_is_first_non_filter method
5835  * of block filter and by bdrv_is_first_non_filter.
5836  * It is used to test if the given bs is the candidate or recurse more in the
5837  * node graph.
5838  */
5839 bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
5840                                       BlockDriverState *candidate)
5841 {
5842     /* return false if basic checks fails */
5843     if (!bs || !bs->drv) {
5844         return false;
5845     }
5846
5847     /* the code reached a non block filter driver -> check if the bs is
5848      * the same as the candidate. It's the recursion termination condition.
5849      */
5850     if (!bs->drv->is_filter) {
5851         return bs == candidate;
5852     }
5853     /* Down this path the driver is a block filter driver */
5854
5855     /* If the block filter recursion method is defined use it to recurse down
5856      * the node graph.
5857      */
5858     if (bs->drv->bdrv_recurse_is_first_non_filter) {
5859         return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
5860     }
5861
5862     /* the driver is a block filter but don't allow to recurse -> return false
5863      */
5864     return false;
5865 }
5866
5867 /* This function checks if the candidate is the first non filter bs down it's
5868  * bs chain. Since we don't have pointers to parents it explore all bs chains
5869  * from the top. Some filters can choose not to pass down the recursion.
5870  */
5871 bool bdrv_is_first_non_filter(BlockDriverState *candidate)
5872 {
5873     BlockDriverState *bs;
5874
5875     /* walk down the bs forest recursively */
5876     QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
5877         bool perm;
5878
5879         /* try to recurse in this top level bs */
5880         perm = bdrv_recurse_is_first_non_filter(bs, candidate);
5881
5882         /* candidate is the first non filter */
5883         if (perm) {
5884             return true;
5885         }
5886     }
5887
5888     return false;
5889 }
5890
5891 BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
5892 {
5893     BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
5894     AioContext *aio_context;
5895
5896     if (!to_replace_bs) {
5897         error_setg(errp, "Node name '%s' not found", node_name);
5898         return NULL;
5899     }
5900
5901     aio_context = bdrv_get_aio_context(to_replace_bs);
5902     aio_context_acquire(aio_context);
5903
5904     if (bdrv_op_is_blocked(to_replace_bs, BLOCK_OP_TYPE_REPLACE, errp)) {
5905         to_replace_bs = NULL;
5906         goto out;
5907     }
5908
5909     /* We don't want arbitrary node of the BDS chain to be replaced only the top
5910      * most non filter in order to prevent data corruption.
5911      * Another benefit is that this tests exclude backing files which are
5912      * blocked by the backing blockers.
5913      */
5914     if (!bdrv_is_first_non_filter(to_replace_bs)) {
5915         error_setg(errp, "Only top most non filter can be replaced");
5916         to_replace_bs = NULL;
5917         goto out;
5918     }
5919
5920 out:
5921     aio_context_release(aio_context);
5922     return to_replace_bs;
5923 }
5924
5925 void bdrv_io_plug(BlockDriverState *bs)
5926 {
5927     BlockDriver *drv = bs->drv;
5928     if (drv && drv->bdrv_io_plug) {
5929         drv->bdrv_io_plug(bs);
5930     } else if (bs->file) {
5931         bdrv_io_plug(bs->file);
5932     }
5933 }
5934
5935 void bdrv_io_unplug(BlockDriverState *bs)
5936 {
5937     BlockDriver *drv = bs->drv;
5938     if (drv && drv->bdrv_io_unplug) {
5939         drv->bdrv_io_unplug(bs);
5940     } else if (bs->file) {
5941         bdrv_io_unplug(bs->file);
5942     }
5943 }
5944
5945 void bdrv_flush_io_queue(BlockDriverState *bs)
5946 {
5947     BlockDriver *drv = bs->drv;
5948     if (drv && drv->bdrv_flush_io_queue) {
5949         drv->bdrv_flush_io_queue(bs);
5950     } else if (bs->file) {
5951         bdrv_flush_io_queue(bs->file);
5952     }
5953 }
5954
5955 static bool append_open_options(QDict *d, BlockDriverState *bs)
5956 {
5957     const QDictEntry *entry;
5958     bool found_any = false;
5959
5960     for (entry = qdict_first(bs->options); entry;
5961          entry = qdict_next(bs->options, entry))
5962     {
5963         /* Only take options for this level and exclude all non-driver-specific
5964          * options */
5965         if (!strchr(qdict_entry_key(entry), '.') &&
5966             strcmp(qdict_entry_key(entry), "node-name"))
5967         {
5968             qobject_incref(qdict_entry_value(entry));
5969             qdict_put_obj(d, qdict_entry_key(entry), qdict_entry_value(entry));
5970             found_any = true;
5971         }
5972     }
5973
5974     return found_any;
5975 }
5976
5977 /* Updates the following BDS fields:
5978  *  - exact_filename: A filename which may be used for opening a block device
5979  *                    which (mostly) equals the given BDS (even without any
5980  *                    other options; so reading and writing must return the same
5981  *                    results, but caching etc. may be different)
5982  *  - full_open_options: Options which, when given when opening a block device
5983  *                       (without a filename), result in a BDS (mostly)
5984  *                       equalling the given one
5985  *  - filename: If exact_filename is set, it is copied here. Otherwise,
5986  *              full_open_options is converted to a JSON object, prefixed with
5987  *              "json:" (for use through the JSON pseudo protocol) and put here.
5988  */
5989 void bdrv_refresh_filename(BlockDriverState *bs)
5990 {
5991     BlockDriver *drv = bs->drv;
5992     QDict *opts;
5993
5994     if (!drv) {
5995         return;
5996     }
5997
5998     /* This BDS's file name will most probably depend on its file's name, so
5999      * refresh that first */
6000     if (bs->file) {
6001         bdrv_refresh_filename(bs->file);
6002     }
6003
6004     if (drv->bdrv_refresh_filename) {
6005         /* Obsolete information is of no use here, so drop the old file name
6006          * information before refreshing it */
6007         bs->exact_filename[0] = '\0';
6008         if (bs->full_open_options) {
6009             QDECREF(bs->full_open_options);
6010             bs->full_open_options = NULL;
6011         }
6012
6013         drv->bdrv_refresh_filename(bs);
6014     } else if (bs->file) {
6015         /* Try to reconstruct valid information from the underlying file */
6016         bool has_open_options;
6017
6018         bs->exact_filename[0] = '\0';
6019         if (bs->full_open_options) {
6020             QDECREF(bs->full_open_options);
6021             bs->full_open_options = NULL;
6022         }
6023
6024         opts = qdict_new();
6025         has_open_options = append_open_options(opts, bs);
6026
6027         /* If no specific options have been given for this BDS, the filename of
6028          * the underlying file should suffice for this one as well */
6029         if (bs->file->exact_filename[0] && !has_open_options) {
6030             strcpy(bs->exact_filename, bs->file->exact_filename);
6031         }
6032         /* Reconstructing the full options QDict is simple for most format block
6033          * drivers, as long as the full options are known for the underlying
6034          * file BDS. The full options QDict of that file BDS should somehow
6035          * contain a representation of the filename, therefore the following
6036          * suffices without querying the (exact_)filename of this BDS. */
6037         if (bs->file->full_open_options) {
6038             qdict_put_obj(opts, "driver",
6039                           QOBJECT(qstring_from_str(drv->format_name)));
6040             QINCREF(bs->file->full_open_options);
6041             qdict_put_obj(opts, "file", QOBJECT(bs->file->full_open_options));
6042
6043             bs->full_open_options = opts;
6044         } else {
6045             QDECREF(opts);
6046         }
6047     } else if (!bs->full_open_options && qdict_size(bs->options)) {
6048         /* There is no underlying file BDS (at least referenced by BDS.file),
6049          * so the full options QDict should be equal to the options given
6050          * specifically for this block device when it was opened (plus the
6051          * driver specification).
6052          * Because those options don't change, there is no need to update
6053          * full_open_options when it's already set. */
6054
6055         opts = qdict_new();
6056         append_open_options(opts, bs);
6057         qdict_put_obj(opts, "driver",
6058                       QOBJECT(qstring_from_str(drv->format_name)));
6059
6060         if (bs->exact_filename[0]) {
6061             /* This may not work for all block protocol drivers (some may
6062              * require this filename to be parsed), but we have to find some
6063              * default solution here, so just include it. If some block driver
6064              * does not support pure options without any filename at all or
6065              * needs some special format of the options QDict, it needs to
6066              * implement the driver-specific bdrv_refresh_filename() function.
6067              */
6068             qdict_put_obj(opts, "filename",
6069                           QOBJECT(qstring_from_str(bs->exact_filename)));
6070         }
6071
6072         bs->full_open_options = opts;
6073     }
6074
6075     if (bs->exact_filename[0]) {
6076         pstrcpy(bs->filename, sizeof(bs->filename), bs->exact_filename);
6077     } else if (bs->full_open_options) {
6078         QString *json = qobject_to_json(QOBJECT(bs->full_open_options));
6079         snprintf(bs->filename, sizeof(bs->filename), "json:%s",
6080                  qstring_get_str(json));
6081         QDECREF(json);
6082     }
6083 }
6084
6085 /* This accessor function purpose is to allow the device models to access the
6086  * BlockAcctStats structure embedded inside a BlockDriverState without being
6087  * aware of the BlockDriverState structure layout.
6088  * It will go away when the BlockAcctStats structure will be moved inside
6089  * the device models.
6090  */
6091 BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
6092 {
6093     return &bs->stats;
6094 }
This page took 0.35702 seconds and 4 git commands to generate.