xref: /openbmc/qemu/qemu-img.c (revision 729cc683)
1 /*
2  * QEMU disk image utility
3  *
4  * Copyright (c) 2003-2008 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 
25 #include "qemu/osdep.h"
26 #include <getopt.h>
27 
28 #include "qemu-common.h"
29 #include "qemu-version.h"
30 #include "qapi/error.h"
31 #include "qapi/qapi-commands-block-core.h"
32 #include "qapi/qapi-visit-block-core.h"
33 #include "qapi/qobject-output-visitor.h"
34 #include "qapi/qmp/qjson.h"
35 #include "qapi/qmp/qdict.h"
36 #include "qemu/cutils.h"
37 #include "qemu/config-file.h"
38 #include "qemu/option.h"
39 #include "qemu/error-report.h"
40 #include "qemu/log.h"
41 #include "qemu/main-loop.h"
42 #include "qemu/module.h"
43 #include "qemu/sockets.h"
44 #include "qemu/units.h"
45 #include "qom/object_interfaces.h"
46 #include "sysemu/block-backend.h"
47 #include "block/block_int.h"
48 #include "block/blockjob.h"
49 #include "block/qapi.h"
50 #include "crypto/init.h"
51 #include "trace/control.h"
52 #include "qemu/throttle.h"
53 #include "block/throttle-groups.h"
54 
55 #define QEMU_IMG_VERSION "qemu-img version " QEMU_FULL_VERSION \
56                           "\n" QEMU_COPYRIGHT "\n"
57 
58 typedef struct img_cmd_t {
59     const char *name;
60     int (*handler)(int argc, char **argv);
61 } img_cmd_t;
62 
63 enum {
64     OPTION_OUTPUT = 256,
65     OPTION_BACKING_CHAIN = 257,
66     OPTION_OBJECT = 258,
67     OPTION_IMAGE_OPTS = 259,
68     OPTION_PATTERN = 260,
69     OPTION_FLUSH_INTERVAL = 261,
70     OPTION_NO_DRAIN = 262,
71     OPTION_TARGET_IMAGE_OPTS = 263,
72     OPTION_SIZE = 264,
73     OPTION_PREALLOCATION = 265,
74     OPTION_SHRINK = 266,
75     OPTION_SALVAGE = 267,
76     OPTION_TARGET_IS_ZERO = 268,
77     OPTION_ADD = 269,
78     OPTION_REMOVE = 270,
79     OPTION_CLEAR = 271,
80     OPTION_ENABLE = 272,
81     OPTION_DISABLE = 273,
82     OPTION_MERGE = 274,
83     OPTION_BITMAPS = 275,
84     OPTION_FORCE = 276,
85 };
86 
87 typedef enum OutputFormat {
88     OFORMAT_JSON,
89     OFORMAT_HUMAN,
90 } OutputFormat;
91 
92 /* Default to cache=writeback as data integrity is not important for qemu-img */
93 #define BDRV_DEFAULT_CACHE "writeback"
94 
95 static void format_print(void *opaque, const char *name)
96 {
97     printf(" %s", name);
98 }
99 
100 static void QEMU_NORETURN GCC_FMT_ATTR(1, 2) error_exit(const char *fmt, ...)
101 {
102     va_list ap;
103 
104     va_start(ap, fmt);
105     error_vreport(fmt, ap);
106     va_end(ap);
107 
108     error_printf("Try 'qemu-img --help' for more information\n");
109     exit(EXIT_FAILURE);
110 }
111 
112 static void QEMU_NORETURN missing_argument(const char *option)
113 {
114     error_exit("missing argument for option '%s'", option);
115 }
116 
117 static void QEMU_NORETURN unrecognized_option(const char *option)
118 {
119     error_exit("unrecognized option '%s'", option);
120 }
121 
122 /* Please keep in synch with docs/tools/qemu-img.rst */
123 static void QEMU_NORETURN help(void)
124 {
125     const char *help_msg =
126            QEMU_IMG_VERSION
127            "usage: qemu-img [standard options] command [command options]\n"
128            "QEMU disk image utility\n"
129            "\n"
130            "    '-h', '--help'       display this help and exit\n"
131            "    '-V', '--version'    output version information and exit\n"
132            "    '-T', '--trace'      [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
133            "                         specify tracing options\n"
134            "\n"
135            "Command syntax:\n"
136 #define DEF(option, callback, arg_string)        \
137            "  " arg_string "\n"
138 #include "qemu-img-cmds.h"
139 #undef DEF
140            "\n"
141            "Command parameters:\n"
142            "  'filename' is a disk image filename\n"
143            "  'objectdef' is a QEMU user creatable object definition. See the qemu(1)\n"
144            "    manual page for a description of the object properties. The most common\n"
145            "    object type is a 'secret', which is used to supply passwords and/or\n"
146            "    encryption keys.\n"
147            "  'fmt' is the disk image format. It is guessed automatically in most cases\n"
148            "  'cache' is the cache mode used to write the output disk image, the valid\n"
149            "    options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
150            "    'directsync' and 'unsafe' (default for convert)\n"
151            "  'src_cache' is the cache mode used to read input disk images, the valid\n"
152            "    options are the same as for the 'cache' option\n"
153            "  'size' is the disk image size in bytes. Optional suffixes\n"
154            "    'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),\n"
155            "    'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P)  are\n"
156            "    supported. 'b' is ignored.\n"
157            "  'output_filename' is the destination disk image filename\n"
158            "  'output_fmt' is the destination format\n"
159            "  'options' is a comma separated list of format specific options in a\n"
160            "    name=value format. Use -o ? for an overview of the options supported by the\n"
161            "    used format\n"
162            "  'snapshot_param' is param used for internal snapshot, format\n"
163            "    is 'snapshot.id=[ID],snapshot.name=[NAME]', or\n"
164            "    '[ID_OR_NAME]'\n"
165            "  '-c' indicates that target image must be compressed (qcow format only)\n"
166            "  '-u' allows unsafe backing chains. For rebasing, it is assumed that old and\n"
167            "       new backing file match exactly. The image doesn't need a working\n"
168            "       backing file before rebasing in this case (useful for renaming the\n"
169            "       backing file). For image creation, allow creating without attempting\n"
170            "       to open the backing file.\n"
171            "  '-h' with or without a command shows this help and lists the supported formats\n"
172            "  '-p' show progress of command (only certain commands)\n"
173            "  '-q' use Quiet mode - do not print any output (except errors)\n"
174            "  '-S' indicates the consecutive number of bytes (defaults to 4k) that must\n"
175            "       contain only zeros for qemu-img to create a sparse image during\n"
176            "       conversion. If the number of bytes is 0, the source will not be scanned for\n"
177            "       unallocated or zero sectors, and the destination image will always be\n"
178            "       fully allocated\n"
179            "  '--output' takes the format in which the output must be done (human or json)\n"
180            "  '-n' skips the target volume creation (useful if the volume is created\n"
181            "       prior to running qemu-img)\n"
182            "\n"
183            "Parameters to bitmap subcommand:\n"
184            "  'bitmap' is the name of the bitmap to manipulate, through one or more\n"
185            "       actions from '--add', '--remove', '--clear', '--enable', '--disable',\n"
186            "       or '--merge source'\n"
187            "  '-g granularity' sets the granularity for '--add' actions\n"
188            "  '-b source' and '-F src_fmt' tell '--merge' actions to find the source\n"
189            "       bitmaps from an alternative file\n"
190            "\n"
191            "Parameters to check subcommand:\n"
192            "  '-r' tries to repair any inconsistencies that are found during the check.\n"
193            "       '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
194            "       kinds of errors, with a higher risk of choosing the wrong fix or\n"
195            "       hiding corruption that has already occurred.\n"
196            "\n"
197            "Parameters to convert subcommand:\n"
198            "  '--bitmaps' copies all top-level persistent bitmaps to destination\n"
199            "  '-m' specifies how many coroutines work in parallel during the convert\n"
200            "       process (defaults to 8)\n"
201            "  '-W' allow to write to the target out of order rather than sequential\n"
202            "\n"
203            "Parameters to snapshot subcommand:\n"
204            "  'snapshot' is the name of the snapshot to create, apply or delete\n"
205            "  '-a' applies a snapshot (revert disk to saved state)\n"
206            "  '-c' creates a snapshot\n"
207            "  '-d' deletes a snapshot\n"
208            "  '-l' lists all snapshots in the given image\n"
209            "\n"
210            "Parameters to compare subcommand:\n"
211            "  '-f' first image format\n"
212            "  '-F' second image format\n"
213            "  '-s' run in Strict mode - fail on different image size or sector allocation\n"
214            "\n"
215            "Parameters to dd subcommand:\n"
216            "  'bs=BYTES' read and write up to BYTES bytes at a time "
217            "(default: 512)\n"
218            "  'count=N' copy only N input blocks\n"
219            "  'if=FILE' read from FILE\n"
220            "  'of=FILE' write to FILE\n"
221            "  'skip=N' skip N bs-sized blocks at the start of input\n";
222 
223     printf("%s\nSupported formats:", help_msg);
224     bdrv_iterate_format(format_print, NULL, false);
225     printf("\n\n" QEMU_HELP_BOTTOM "\n");
226     exit(EXIT_SUCCESS);
227 }
228 
229 static QemuOptsList qemu_object_opts = {
230     .name = "object",
231     .implied_opt_name = "qom-type",
232     .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
233     .desc = {
234         { }
235     },
236 };
237 
238 static bool qemu_img_object_print_help(const char *type, QemuOpts *opts)
239 {
240     if (user_creatable_print_help(type, opts)) {
241         exit(0);
242     }
243     return true;
244 }
245 
246 /*
247  * Is @optarg safe for accumulate_options()?
248  * It is when multiple of them can be joined together separated by ','.
249  * To make that work, @optarg must not start with ',' (or else a
250  * separating ',' preceding it gets escaped), and it must not end with
251  * an odd number of ',' (or else a separating ',' following it gets
252  * escaped), or be empty (or else a separating ',' preceding it can
253  * escape a separating ',' following it).
254  *
255  */
256 static bool is_valid_option_list(const char *optarg)
257 {
258     size_t len = strlen(optarg);
259     size_t i;
260 
261     if (!optarg[0] || optarg[0] == ',') {
262         return false;
263     }
264 
265     for (i = len; i > 0 && optarg[i - 1] == ','; i--) {
266     }
267     if ((len - i) % 2) {
268         return false;
269     }
270 
271     return true;
272 }
273 
274 static int accumulate_options(char **options, char *optarg)
275 {
276     char *new_options;
277 
278     if (!is_valid_option_list(optarg)) {
279         error_report("Invalid option list: %s", optarg);
280         return -1;
281     }
282 
283     if (!*options) {
284         *options = g_strdup(optarg);
285     } else {
286         new_options = g_strdup_printf("%s,%s", *options, optarg);
287         g_free(*options);
288         *options = new_options;
289     }
290     return 0;
291 }
292 
293 static QemuOptsList qemu_source_opts = {
294     .name = "source",
295     .implied_opt_name = "file",
296     .head = QTAILQ_HEAD_INITIALIZER(qemu_source_opts.head),
297     .desc = {
298         { }
299     },
300 };
301 
302 static int GCC_FMT_ATTR(2, 3) qprintf(bool quiet, const char *fmt, ...)
303 {
304     int ret = 0;
305     if (!quiet) {
306         va_list args;
307         va_start(args, fmt);
308         ret = vprintf(fmt, args);
309         va_end(args);
310     }
311     return ret;
312 }
313 
314 
315 static int print_block_option_help(const char *filename, const char *fmt)
316 {
317     BlockDriver *drv, *proto_drv;
318     QemuOptsList *create_opts = NULL;
319     Error *local_err = NULL;
320 
321     /* Find driver and parse its options */
322     drv = bdrv_find_format(fmt);
323     if (!drv) {
324         error_report("Unknown file format '%s'", fmt);
325         return 1;
326     }
327 
328     if (!drv->create_opts) {
329         error_report("Format driver '%s' does not support image creation", fmt);
330         return 1;
331     }
332 
333     create_opts = qemu_opts_append(create_opts, drv->create_opts);
334     if (filename) {
335         proto_drv = bdrv_find_protocol(filename, true, &local_err);
336         if (!proto_drv) {
337             error_report_err(local_err);
338             qemu_opts_free(create_opts);
339             return 1;
340         }
341         if (!proto_drv->create_opts) {
342             error_report("Protocol driver '%s' does not support image creation",
343                          proto_drv->format_name);
344             qemu_opts_free(create_opts);
345             return 1;
346         }
347         create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
348     }
349 
350     if (filename) {
351         printf("Supported options:\n");
352     } else {
353         printf("Supported %s options:\n", fmt);
354     }
355     qemu_opts_print_help(create_opts, false);
356     qemu_opts_free(create_opts);
357 
358     if (!filename) {
359         printf("\n"
360                "The protocol level may support further options.\n"
361                "Specify the target filename to include those options.\n");
362     }
363 
364     return 0;
365 }
366 
367 
368 static BlockBackend *img_open_opts(const char *optstr,
369                                    QemuOpts *opts, int flags, bool writethrough,
370                                    bool quiet, bool force_share)
371 {
372     QDict *options;
373     Error *local_err = NULL;
374     BlockBackend *blk;
375     options = qemu_opts_to_qdict(opts, NULL);
376     if (force_share) {
377         if (qdict_haskey(options, BDRV_OPT_FORCE_SHARE)
378             && strcmp(qdict_get_str(options, BDRV_OPT_FORCE_SHARE), "on")) {
379             error_report("--force-share/-U conflicts with image options");
380             qobject_unref(options);
381             return NULL;
382         }
383         qdict_put_str(options, BDRV_OPT_FORCE_SHARE, "on");
384     }
385     blk = blk_new_open(NULL, NULL, options, flags, &local_err);
386     if (!blk) {
387         error_reportf_err(local_err, "Could not open '%s': ", optstr);
388         return NULL;
389     }
390     blk_set_enable_write_cache(blk, !writethrough);
391 
392     return blk;
393 }
394 
395 static BlockBackend *img_open_file(const char *filename,
396                                    QDict *options,
397                                    const char *fmt, int flags,
398                                    bool writethrough, bool quiet,
399                                    bool force_share)
400 {
401     BlockBackend *blk;
402     Error *local_err = NULL;
403 
404     if (!options) {
405         options = qdict_new();
406     }
407     if (fmt) {
408         qdict_put_str(options, "driver", fmt);
409     }
410 
411     if (force_share) {
412         qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true);
413     }
414     blk = blk_new_open(filename, NULL, options, flags, &local_err);
415     if (!blk) {
416         error_reportf_err(local_err, "Could not open '%s': ", filename);
417         return NULL;
418     }
419     blk_set_enable_write_cache(blk, !writethrough);
420 
421     return blk;
422 }
423 
424 
425 static int img_add_key_secrets(void *opaque,
426                                const char *name, const char *value,
427                                Error **errp)
428 {
429     QDict *options = opaque;
430 
431     if (g_str_has_suffix(name, "key-secret")) {
432         qdict_put_str(options, name, value);
433     }
434 
435     return 0;
436 }
437 
438 
439 static BlockBackend *img_open(bool image_opts,
440                               const char *filename,
441                               const char *fmt, int flags, bool writethrough,
442                               bool quiet, bool force_share)
443 {
444     BlockBackend *blk;
445     if (image_opts) {
446         QemuOpts *opts;
447         if (fmt) {
448             error_report("--image-opts and --format are mutually exclusive");
449             return NULL;
450         }
451         opts = qemu_opts_parse_noisily(qemu_find_opts("source"),
452                                        filename, true);
453         if (!opts) {
454             return NULL;
455         }
456         blk = img_open_opts(filename, opts, flags, writethrough, quiet,
457                             force_share);
458     } else {
459         blk = img_open_file(filename, NULL, fmt, flags, writethrough, quiet,
460                             force_share);
461     }
462     return blk;
463 }
464 
465 
466 static int add_old_style_options(const char *fmt, QemuOpts *opts,
467                                  const char *base_filename,
468                                  const char *base_fmt)
469 {
470     if (base_filename) {
471         if (!qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename,
472                           NULL)) {
473             error_report("Backing file not supported for file format '%s'",
474                          fmt);
475             return -1;
476         }
477     }
478     if (base_fmt) {
479         if (!qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, NULL)) {
480             error_report("Backing file format not supported for file "
481                          "format '%s'", fmt);
482             return -1;
483         }
484     }
485     return 0;
486 }
487 
488 static int64_t cvtnum_full(const char *name, const char *value, int64_t min,
489                            int64_t max)
490 {
491     int err;
492     uint64_t res;
493 
494     err = qemu_strtosz(value, NULL, &res);
495     if (err < 0 && err != -ERANGE) {
496         error_report("Invalid %s specified. You may use "
497                      "k, M, G, T, P or E suffixes for", name);
498         error_report("kilobytes, megabytes, gigabytes, terabytes, "
499                      "petabytes and exabytes.");
500         return err;
501     }
502     if (err == -ERANGE || res > max || res < min) {
503         error_report("Invalid %s specified. Must be between %" PRId64
504                      " and %" PRId64 ".", name, min, max);
505         return -ERANGE;
506     }
507     return res;
508 }
509 
510 static int64_t cvtnum(const char *name, const char *value)
511 {
512     return cvtnum_full(name, value, 0, INT64_MAX);
513 }
514 
515 static int img_create(int argc, char **argv)
516 {
517     int c;
518     uint64_t img_size = -1;
519     const char *fmt = "raw";
520     const char *base_fmt = NULL;
521     const char *filename;
522     const char *base_filename = NULL;
523     char *options = NULL;
524     Error *local_err = NULL;
525     bool quiet = false;
526     int flags = 0;
527 
528     for(;;) {
529         static const struct option long_options[] = {
530             {"help", no_argument, 0, 'h'},
531             {"object", required_argument, 0, OPTION_OBJECT},
532             {0, 0, 0, 0}
533         };
534         c = getopt_long(argc, argv, ":F:b:f:ho:qu",
535                         long_options, NULL);
536         if (c == -1) {
537             break;
538         }
539         switch(c) {
540         case ':':
541             missing_argument(argv[optind - 1]);
542             break;
543         case '?':
544             unrecognized_option(argv[optind - 1]);
545             break;
546         case 'h':
547             help();
548             break;
549         case 'F':
550             base_fmt = optarg;
551             break;
552         case 'b':
553             base_filename = optarg;
554             break;
555         case 'f':
556             fmt = optarg;
557             break;
558         case 'o':
559             if (accumulate_options(&options, optarg) < 0) {
560                 goto fail;
561             }
562             break;
563         case 'q':
564             quiet = true;
565             break;
566         case 'u':
567             flags |= BDRV_O_NO_BACKING;
568             break;
569         case OPTION_OBJECT: {
570             QemuOpts *opts;
571             opts = qemu_opts_parse_noisily(&qemu_object_opts,
572                                            optarg, true);
573             if (!opts) {
574                 goto fail;
575             }
576         }   break;
577         }
578     }
579 
580     /* Get the filename */
581     filename = (optind < argc) ? argv[optind] : NULL;
582     if (options && has_help_option(options)) {
583         g_free(options);
584         return print_block_option_help(filename, fmt);
585     }
586 
587     if (optind >= argc) {
588         error_exit("Expecting image file name");
589     }
590     optind++;
591 
592     if (qemu_opts_foreach(&qemu_object_opts,
593                           user_creatable_add_opts_foreach,
594                           qemu_img_object_print_help, &error_fatal)) {
595         goto fail;
596     }
597 
598     /* Get image size, if specified */
599     if (optind < argc) {
600         int64_t sval;
601 
602         sval = cvtnum("image size", argv[optind++]);
603         if (sval < 0) {
604             goto fail;
605         }
606         img_size = (uint64_t)sval;
607     }
608     if (optind != argc) {
609         error_exit("Unexpected argument: %s", argv[optind]);
610     }
611 
612     bdrv_img_create(filename, fmt, base_filename, base_fmt,
613                     options, img_size, flags, quiet, &local_err);
614     if (local_err) {
615         error_reportf_err(local_err, "%s: ", filename);
616         goto fail;
617     }
618 
619     g_free(options);
620     return 0;
621 
622 fail:
623     g_free(options);
624     return 1;
625 }
626 
627 static void dump_json_image_check(ImageCheck *check, bool quiet)
628 {
629     GString *str;
630     QObject *obj;
631     Visitor *v = qobject_output_visitor_new(&obj);
632 
633     visit_type_ImageCheck(v, NULL, &check, &error_abort);
634     visit_complete(v, &obj);
635     str = qobject_to_json_pretty(obj, true);
636     assert(str != NULL);
637     qprintf(quiet, "%s\n", str->str);
638     qobject_unref(obj);
639     visit_free(v);
640     g_string_free(str, true);
641 }
642 
643 static void dump_human_image_check(ImageCheck *check, bool quiet)
644 {
645     if (!(check->corruptions || check->leaks || check->check_errors)) {
646         qprintf(quiet, "No errors were found on the image.\n");
647     } else {
648         if (check->corruptions) {
649             qprintf(quiet, "\n%" PRId64 " errors were found on the image.\n"
650                     "Data may be corrupted, or further writes to the image "
651                     "may corrupt it.\n",
652                     check->corruptions);
653         }
654 
655         if (check->leaks) {
656             qprintf(quiet,
657                     "\n%" PRId64 " leaked clusters were found on the image.\n"
658                     "This means waste of disk space, but no harm to data.\n",
659                     check->leaks);
660         }
661 
662         if (check->check_errors) {
663             qprintf(quiet,
664                     "\n%" PRId64
665                     " internal errors have occurred during the check.\n",
666                     check->check_errors);
667         }
668     }
669 
670     if (check->total_clusters != 0 && check->allocated_clusters != 0) {
671         qprintf(quiet, "%" PRId64 "/%" PRId64 " = %0.2f%% allocated, "
672                 "%0.2f%% fragmented, %0.2f%% compressed clusters\n",
673                 check->allocated_clusters, check->total_clusters,
674                 check->allocated_clusters * 100.0 / check->total_clusters,
675                 check->fragmented_clusters * 100.0 / check->allocated_clusters,
676                 check->compressed_clusters * 100.0 /
677                 check->allocated_clusters);
678     }
679 
680     if (check->image_end_offset) {
681         qprintf(quiet,
682                 "Image end offset: %" PRId64 "\n", check->image_end_offset);
683     }
684 }
685 
686 static int collect_image_check(BlockDriverState *bs,
687                    ImageCheck *check,
688                    const char *filename,
689                    const char *fmt,
690                    int fix)
691 {
692     int ret;
693     BdrvCheckResult result;
694 
695     ret = bdrv_check(bs, &result, fix);
696     if (ret < 0) {
697         return ret;
698     }
699 
700     check->filename                 = g_strdup(filename);
701     check->format                   = g_strdup(bdrv_get_format_name(bs));
702     check->check_errors             = result.check_errors;
703     check->corruptions              = result.corruptions;
704     check->has_corruptions          = result.corruptions != 0;
705     check->leaks                    = result.leaks;
706     check->has_leaks                = result.leaks != 0;
707     check->corruptions_fixed        = result.corruptions_fixed;
708     check->has_corruptions_fixed    = result.corruptions_fixed != 0;
709     check->leaks_fixed              = result.leaks_fixed;
710     check->has_leaks_fixed          = result.leaks_fixed != 0;
711     check->image_end_offset         = result.image_end_offset;
712     check->has_image_end_offset     = result.image_end_offset != 0;
713     check->total_clusters           = result.bfi.total_clusters;
714     check->has_total_clusters       = result.bfi.total_clusters != 0;
715     check->allocated_clusters       = result.bfi.allocated_clusters;
716     check->has_allocated_clusters   = result.bfi.allocated_clusters != 0;
717     check->fragmented_clusters      = result.bfi.fragmented_clusters;
718     check->has_fragmented_clusters  = result.bfi.fragmented_clusters != 0;
719     check->compressed_clusters      = result.bfi.compressed_clusters;
720     check->has_compressed_clusters  = result.bfi.compressed_clusters != 0;
721 
722     return 0;
723 }
724 
725 /*
726  * Checks an image for consistency. Exit codes:
727  *
728  *  0 - Check completed, image is good
729  *  1 - Check not completed because of internal errors
730  *  2 - Check completed, image is corrupted
731  *  3 - Check completed, image has leaked clusters, but is good otherwise
732  * 63 - Checks are not supported by the image format
733  */
734 static int img_check(int argc, char **argv)
735 {
736     int c, ret;
737     OutputFormat output_format = OFORMAT_HUMAN;
738     const char *filename, *fmt, *output, *cache;
739     BlockBackend *blk;
740     BlockDriverState *bs;
741     int fix = 0;
742     int flags = BDRV_O_CHECK;
743     bool writethrough;
744     ImageCheck *check;
745     bool quiet = false;
746     bool image_opts = false;
747     bool force_share = false;
748 
749     fmt = NULL;
750     output = NULL;
751     cache = BDRV_DEFAULT_CACHE;
752 
753     for(;;) {
754         int option_index = 0;
755         static const struct option long_options[] = {
756             {"help", no_argument, 0, 'h'},
757             {"format", required_argument, 0, 'f'},
758             {"repair", required_argument, 0, 'r'},
759             {"output", required_argument, 0, OPTION_OUTPUT},
760             {"object", required_argument, 0, OPTION_OBJECT},
761             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
762             {"force-share", no_argument, 0, 'U'},
763             {0, 0, 0, 0}
764         };
765         c = getopt_long(argc, argv, ":hf:r:T:qU",
766                         long_options, &option_index);
767         if (c == -1) {
768             break;
769         }
770         switch(c) {
771         case ':':
772             missing_argument(argv[optind - 1]);
773             break;
774         case '?':
775             unrecognized_option(argv[optind - 1]);
776             break;
777         case 'h':
778             help();
779             break;
780         case 'f':
781             fmt = optarg;
782             break;
783         case 'r':
784             flags |= BDRV_O_RDWR;
785 
786             if (!strcmp(optarg, "leaks")) {
787                 fix = BDRV_FIX_LEAKS;
788             } else if (!strcmp(optarg, "all")) {
789                 fix = BDRV_FIX_LEAKS | BDRV_FIX_ERRORS;
790             } else {
791                 error_exit("Unknown option value for -r "
792                            "(expecting 'leaks' or 'all'): %s", optarg);
793             }
794             break;
795         case OPTION_OUTPUT:
796             output = optarg;
797             break;
798         case 'T':
799             cache = optarg;
800             break;
801         case 'q':
802             quiet = true;
803             break;
804         case 'U':
805             force_share = true;
806             break;
807         case OPTION_OBJECT: {
808             QemuOpts *opts;
809             opts = qemu_opts_parse_noisily(&qemu_object_opts,
810                                            optarg, true);
811             if (!opts) {
812                 return 1;
813             }
814         }   break;
815         case OPTION_IMAGE_OPTS:
816             image_opts = true;
817             break;
818         }
819     }
820     if (optind != argc - 1) {
821         error_exit("Expecting one image file name");
822     }
823     filename = argv[optind++];
824 
825     if (output && !strcmp(output, "json")) {
826         output_format = OFORMAT_JSON;
827     } else if (output && !strcmp(output, "human")) {
828         output_format = OFORMAT_HUMAN;
829     } else if (output) {
830         error_report("--output must be used with human or json as argument.");
831         return 1;
832     }
833 
834     if (qemu_opts_foreach(&qemu_object_opts,
835                           user_creatable_add_opts_foreach,
836                           qemu_img_object_print_help, &error_fatal)) {
837         return 1;
838     }
839 
840     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
841     if (ret < 0) {
842         error_report("Invalid source cache option: %s", cache);
843         return 1;
844     }
845 
846     blk = img_open(image_opts, filename, fmt, flags, writethrough, quiet,
847                    force_share);
848     if (!blk) {
849         return 1;
850     }
851     bs = blk_bs(blk);
852 
853     check = g_new0(ImageCheck, 1);
854     ret = collect_image_check(bs, check, filename, fmt, fix);
855 
856     if (ret == -ENOTSUP) {
857         error_report("This image format does not support checks");
858         ret = 63;
859         goto fail;
860     }
861 
862     if (check->corruptions_fixed || check->leaks_fixed) {
863         int corruptions_fixed, leaks_fixed;
864         bool has_leaks_fixed, has_corruptions_fixed;
865 
866         leaks_fixed         = check->leaks_fixed;
867         has_leaks_fixed     = check->has_leaks_fixed;
868         corruptions_fixed   = check->corruptions_fixed;
869         has_corruptions_fixed = check->has_corruptions_fixed;
870 
871         if (output_format == OFORMAT_HUMAN) {
872             qprintf(quiet,
873                     "The following inconsistencies were found and repaired:\n\n"
874                     "    %" PRId64 " leaked clusters\n"
875                     "    %" PRId64 " corruptions\n\n"
876                     "Double checking the fixed image now...\n",
877                     check->leaks_fixed,
878                     check->corruptions_fixed);
879         }
880 
881         qapi_free_ImageCheck(check);
882         check = g_new0(ImageCheck, 1);
883         ret = collect_image_check(bs, check, filename, fmt, 0);
884 
885         check->leaks_fixed          = leaks_fixed;
886         check->has_leaks_fixed      = has_leaks_fixed;
887         check->corruptions_fixed    = corruptions_fixed;
888         check->has_corruptions_fixed = has_corruptions_fixed;
889     }
890 
891     if (!ret) {
892         switch (output_format) {
893         case OFORMAT_HUMAN:
894             dump_human_image_check(check, quiet);
895             break;
896         case OFORMAT_JSON:
897             dump_json_image_check(check, quiet);
898             break;
899         }
900     }
901 
902     if (ret || check->check_errors) {
903         if (ret) {
904             error_report("Check failed: %s", strerror(-ret));
905         } else {
906             error_report("Check failed");
907         }
908         ret = 1;
909         goto fail;
910     }
911 
912     if (check->corruptions) {
913         ret = 2;
914     } else if (check->leaks) {
915         ret = 3;
916     } else {
917         ret = 0;
918     }
919 
920 fail:
921     qapi_free_ImageCheck(check);
922     blk_unref(blk);
923     return ret;
924 }
925 
926 typedef struct CommonBlockJobCBInfo {
927     BlockDriverState *bs;
928     Error **errp;
929 } CommonBlockJobCBInfo;
930 
931 static void common_block_job_cb(void *opaque, int ret)
932 {
933     CommonBlockJobCBInfo *cbi = opaque;
934 
935     if (ret < 0) {
936         error_setg_errno(cbi->errp, -ret, "Block job failed");
937     }
938 }
939 
940 static void run_block_job(BlockJob *job, Error **errp)
941 {
942     AioContext *aio_context = blk_get_aio_context(job->blk);
943     int ret = 0;
944 
945     aio_context_acquire(aio_context);
946     job_ref(&job->job);
947     do {
948         float progress = 0.0f;
949         aio_poll(aio_context, true);
950         if (job->job.progress.total) {
951             progress = (float)job->job.progress.current /
952                        job->job.progress.total * 100.f;
953         }
954         qemu_progress_print(progress, 0);
955     } while (!job_is_ready(&job->job) && !job_is_completed(&job->job));
956 
957     if (!job_is_completed(&job->job)) {
958         ret = job_complete_sync(&job->job, errp);
959     } else {
960         ret = job->job.ret;
961     }
962     job_unref(&job->job);
963     aio_context_release(aio_context);
964 
965     /* publish completion progress only when success */
966     if (!ret) {
967         qemu_progress_print(100.f, 0);
968     }
969 }
970 
971 static int img_commit(int argc, char **argv)
972 {
973     int c, ret, flags;
974     const char *filename, *fmt, *cache, *base;
975     BlockBackend *blk;
976     BlockDriverState *bs, *base_bs;
977     BlockJob *job;
978     bool progress = false, quiet = false, drop = false;
979     bool writethrough;
980     Error *local_err = NULL;
981     CommonBlockJobCBInfo cbi;
982     bool image_opts = false;
983     AioContext *aio_context;
984     int64_t rate_limit = 0;
985 
986     fmt = NULL;
987     cache = BDRV_DEFAULT_CACHE;
988     base = NULL;
989     for(;;) {
990         static const struct option long_options[] = {
991             {"help", no_argument, 0, 'h'},
992             {"object", required_argument, 0, OPTION_OBJECT},
993             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
994             {0, 0, 0, 0}
995         };
996         c = getopt_long(argc, argv, ":f:ht:b:dpqr:",
997                         long_options, NULL);
998         if (c == -1) {
999             break;
1000         }
1001         switch(c) {
1002         case ':':
1003             missing_argument(argv[optind - 1]);
1004             break;
1005         case '?':
1006             unrecognized_option(argv[optind - 1]);
1007             break;
1008         case 'h':
1009             help();
1010             break;
1011         case 'f':
1012             fmt = optarg;
1013             break;
1014         case 't':
1015             cache = optarg;
1016             break;
1017         case 'b':
1018             base = optarg;
1019             /* -b implies -d */
1020             drop = true;
1021             break;
1022         case 'd':
1023             drop = true;
1024             break;
1025         case 'p':
1026             progress = true;
1027             break;
1028         case 'q':
1029             quiet = true;
1030             break;
1031         case 'r':
1032             rate_limit = cvtnum("rate limit", optarg);
1033             if (rate_limit < 0) {
1034                 return 1;
1035             }
1036             break;
1037         case OPTION_OBJECT: {
1038             QemuOpts *opts;
1039             opts = qemu_opts_parse_noisily(&qemu_object_opts,
1040                                            optarg, true);
1041             if (!opts) {
1042                 return 1;
1043             }
1044         }   break;
1045         case OPTION_IMAGE_OPTS:
1046             image_opts = true;
1047             break;
1048         }
1049     }
1050 
1051     /* Progress is not shown in Quiet mode */
1052     if (quiet) {
1053         progress = false;
1054     }
1055 
1056     if (optind != argc - 1) {
1057         error_exit("Expecting one image file name");
1058     }
1059     filename = argv[optind++];
1060 
1061     if (qemu_opts_foreach(&qemu_object_opts,
1062                           user_creatable_add_opts_foreach,
1063                           qemu_img_object_print_help, &error_fatal)) {
1064         return 1;
1065     }
1066 
1067     flags = BDRV_O_RDWR | BDRV_O_UNMAP;
1068     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
1069     if (ret < 0) {
1070         error_report("Invalid cache option: %s", cache);
1071         return 1;
1072     }
1073 
1074     blk = img_open(image_opts, filename, fmt, flags, writethrough, quiet,
1075                    false);
1076     if (!blk) {
1077         return 1;
1078     }
1079     bs = blk_bs(blk);
1080 
1081     qemu_progress_init(progress, 1.f);
1082     qemu_progress_print(0.f, 100);
1083 
1084     if (base) {
1085         base_bs = bdrv_find_backing_image(bs, base);
1086         if (!base_bs) {
1087             error_setg(&local_err,
1088                        "Did not find '%s' in the backing chain of '%s'",
1089                        base, filename);
1090             goto done;
1091         }
1092     } else {
1093         /* This is different from QMP, which by default uses the deepest file in
1094          * the backing chain (i.e., the very base); however, the traditional
1095          * behavior of qemu-img commit is using the immediate backing file. */
1096         base_bs = bdrv_backing_chain_next(bs);
1097         if (!base_bs) {
1098             error_setg(&local_err, "Image does not have a backing file");
1099             goto done;
1100         }
1101     }
1102 
1103     cbi = (CommonBlockJobCBInfo){
1104         .errp = &local_err,
1105         .bs   = bs,
1106     };
1107 
1108     aio_context = bdrv_get_aio_context(bs);
1109     aio_context_acquire(aio_context);
1110     commit_active_start("commit", bs, base_bs, JOB_DEFAULT, rate_limit,
1111                         BLOCKDEV_ON_ERROR_REPORT, NULL, common_block_job_cb,
1112                         &cbi, false, &local_err);
1113     aio_context_release(aio_context);
1114     if (local_err) {
1115         goto done;
1116     }
1117 
1118     /* When the block job completes, the BlockBackend reference will point to
1119      * the old backing file. In order to avoid that the top image is already
1120      * deleted, so we can still empty it afterwards, increment the reference
1121      * counter here preemptively. */
1122     if (!drop) {
1123         bdrv_ref(bs);
1124     }
1125 
1126     job = block_job_get("commit");
1127     assert(job);
1128     run_block_job(job, &local_err);
1129     if (local_err) {
1130         goto unref_backing;
1131     }
1132 
1133     if (!drop) {
1134         BlockBackend *old_backing_blk;
1135 
1136         old_backing_blk = blk_new_with_bs(bs, BLK_PERM_WRITE, BLK_PERM_ALL,
1137                                           &local_err);
1138         if (!old_backing_blk) {
1139             goto unref_backing;
1140         }
1141         ret = blk_make_empty(old_backing_blk, &local_err);
1142         blk_unref(old_backing_blk);
1143         if (ret == -ENOTSUP) {
1144             error_free(local_err);
1145             local_err = NULL;
1146         } else if (ret < 0) {
1147             goto unref_backing;
1148         }
1149     }
1150 
1151 unref_backing:
1152     if (!drop) {
1153         bdrv_unref(bs);
1154     }
1155 
1156 done:
1157     qemu_progress_end();
1158 
1159     blk_unref(blk);
1160 
1161     if (local_err) {
1162         error_report_err(local_err);
1163         return 1;
1164     }
1165 
1166     qprintf(quiet, "Image committed.\n");
1167     return 0;
1168 }
1169 
1170 /*
1171  * Returns -1 if 'buf' contains only zeroes, otherwise the byte index
1172  * of the first sector boundary within buf where the sector contains a
1173  * non-zero byte.  This function is robust to a buffer that is not
1174  * sector-aligned.
1175  */
1176 static int64_t find_nonzero(const uint8_t *buf, int64_t n)
1177 {
1178     int64_t i;
1179     int64_t end = QEMU_ALIGN_DOWN(n, BDRV_SECTOR_SIZE);
1180 
1181     for (i = 0; i < end; i += BDRV_SECTOR_SIZE) {
1182         if (!buffer_is_zero(buf + i, BDRV_SECTOR_SIZE)) {
1183             return i;
1184         }
1185     }
1186     if (i < n && !buffer_is_zero(buf + i, n - end)) {
1187         return i;
1188     }
1189     return -1;
1190 }
1191 
1192 /*
1193  * Returns true iff the first sector pointed to by 'buf' contains at least
1194  * a non-NUL byte.
1195  *
1196  * 'pnum' is set to the number of sectors (including and immediately following
1197  * the first one) that are known to be in the same allocated/unallocated state.
1198  * The function will try to align the end offset to alignment boundaries so
1199  * that the request will at least end aligned and consecutive requests will
1200  * also start at an aligned offset.
1201  */
1202 static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum,
1203                                 int64_t sector_num, int alignment)
1204 {
1205     bool is_zero;
1206     int i, tail;
1207 
1208     if (n <= 0) {
1209         *pnum = 0;
1210         return 0;
1211     }
1212     is_zero = buffer_is_zero(buf, BDRV_SECTOR_SIZE);
1213     for(i = 1; i < n; i++) {
1214         buf += BDRV_SECTOR_SIZE;
1215         if (is_zero != buffer_is_zero(buf, BDRV_SECTOR_SIZE)) {
1216             break;
1217         }
1218     }
1219 
1220     tail = (sector_num + i) & (alignment - 1);
1221     if (tail) {
1222         if (is_zero && i <= tail) {
1223             /* treat unallocated areas which only consist
1224              * of a small tail as allocated. */
1225             is_zero = false;
1226         }
1227         if (!is_zero) {
1228             /* align up end offset of allocated areas. */
1229             i += alignment - tail;
1230             i = MIN(i, n);
1231         } else {
1232             /* align down end offset of zero areas. */
1233             i -= tail;
1234         }
1235     }
1236     *pnum = i;
1237     return !is_zero;
1238 }
1239 
1240 /*
1241  * Like is_allocated_sectors, but if the buffer starts with a used sector,
1242  * up to 'min' consecutive sectors containing zeros are ignored. This avoids
1243  * breaking up write requests for only small sparse areas.
1244  */
1245 static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
1246     int min, int64_t sector_num, int alignment)
1247 {
1248     int ret;
1249     int num_checked, num_used;
1250 
1251     if (n < min) {
1252         min = n;
1253     }
1254 
1255     ret = is_allocated_sectors(buf, n, pnum, sector_num, alignment);
1256     if (!ret) {
1257         return ret;
1258     }
1259 
1260     num_used = *pnum;
1261     buf += BDRV_SECTOR_SIZE * *pnum;
1262     n -= *pnum;
1263     sector_num += *pnum;
1264     num_checked = num_used;
1265 
1266     while (n > 0) {
1267         ret = is_allocated_sectors(buf, n, pnum, sector_num, alignment);
1268 
1269         buf += BDRV_SECTOR_SIZE * *pnum;
1270         n -= *pnum;
1271         sector_num += *pnum;
1272         num_checked += *pnum;
1273         if (ret) {
1274             num_used = num_checked;
1275         } else if (*pnum >= min) {
1276             break;
1277         }
1278     }
1279 
1280     *pnum = num_used;
1281     return 1;
1282 }
1283 
1284 /*
1285  * Compares two buffers sector by sector. Returns 0 if the first
1286  * sector of each buffer matches, non-zero otherwise.
1287  *
1288  * pnum is set to the sector-aligned size of the buffer prefix that
1289  * has the same matching status as the first sector.
1290  */
1291 static int compare_buffers(const uint8_t *buf1, const uint8_t *buf2,
1292                            int64_t bytes, int64_t *pnum)
1293 {
1294     bool res;
1295     int64_t i = MIN(bytes, BDRV_SECTOR_SIZE);
1296 
1297     assert(bytes > 0);
1298 
1299     res = !!memcmp(buf1, buf2, i);
1300     while (i < bytes) {
1301         int64_t len = MIN(bytes - i, BDRV_SECTOR_SIZE);
1302 
1303         if (!!memcmp(buf1 + i, buf2 + i, len) != res) {
1304             break;
1305         }
1306         i += len;
1307     }
1308 
1309     *pnum = i;
1310     return res;
1311 }
1312 
1313 #define IO_BUF_SIZE (2 * MiB)
1314 
1315 /*
1316  * Check if passed sectors are empty (not allocated or contain only 0 bytes)
1317  *
1318  * Intended for use by 'qemu-img compare': Returns 0 in case sectors are
1319  * filled with 0, 1 if sectors contain non-zero data (this is a comparison
1320  * failure), and 4 on error (the exit status for read errors), after emitting
1321  * an error message.
1322  *
1323  * @param blk:  BlockBackend for the image
1324  * @param offset: Starting offset to check
1325  * @param bytes: Number of bytes to check
1326  * @param filename: Name of disk file we are checking (logging purpose)
1327  * @param buffer: Allocated buffer for storing read data
1328  * @param quiet: Flag for quiet mode
1329  */
1330 static int check_empty_sectors(BlockBackend *blk, int64_t offset,
1331                                int64_t bytes, const char *filename,
1332                                uint8_t *buffer, bool quiet)
1333 {
1334     int ret = 0;
1335     int64_t idx;
1336 
1337     ret = blk_pread(blk, offset, buffer, bytes);
1338     if (ret < 0) {
1339         error_report("Error while reading offset %" PRId64 " of %s: %s",
1340                      offset, filename, strerror(-ret));
1341         return 4;
1342     }
1343     idx = find_nonzero(buffer, bytes);
1344     if (idx >= 0) {
1345         qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1346                 offset + idx);
1347         return 1;
1348     }
1349 
1350     return 0;
1351 }
1352 
1353 /*
1354  * Compares two images. Exit codes:
1355  *
1356  * 0 - Images are identical
1357  * 1 - Images differ
1358  * >1 - Error occurred
1359  */
1360 static int img_compare(int argc, char **argv)
1361 {
1362     const char *fmt1 = NULL, *fmt2 = NULL, *cache, *filename1, *filename2;
1363     BlockBackend *blk1, *blk2;
1364     BlockDriverState *bs1, *bs2;
1365     int64_t total_size1, total_size2;
1366     uint8_t *buf1 = NULL, *buf2 = NULL;
1367     int64_t pnum1, pnum2;
1368     int allocated1, allocated2;
1369     int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */
1370     bool progress = false, quiet = false, strict = false;
1371     int flags;
1372     bool writethrough;
1373     int64_t total_size;
1374     int64_t offset = 0;
1375     int64_t chunk;
1376     int c;
1377     uint64_t progress_base;
1378     bool image_opts = false;
1379     bool force_share = false;
1380 
1381     cache = BDRV_DEFAULT_CACHE;
1382     for (;;) {
1383         static const struct option long_options[] = {
1384             {"help", no_argument, 0, 'h'},
1385             {"object", required_argument, 0, OPTION_OBJECT},
1386             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
1387             {"force-share", no_argument, 0, 'U'},
1388             {0, 0, 0, 0}
1389         };
1390         c = getopt_long(argc, argv, ":hf:F:T:pqsU",
1391                         long_options, NULL);
1392         if (c == -1) {
1393             break;
1394         }
1395         switch (c) {
1396         case ':':
1397             missing_argument(argv[optind - 1]);
1398             break;
1399         case '?':
1400             unrecognized_option(argv[optind - 1]);
1401             break;
1402         case 'h':
1403             help();
1404             break;
1405         case 'f':
1406             fmt1 = optarg;
1407             break;
1408         case 'F':
1409             fmt2 = optarg;
1410             break;
1411         case 'T':
1412             cache = optarg;
1413             break;
1414         case 'p':
1415             progress = true;
1416             break;
1417         case 'q':
1418             quiet = true;
1419             break;
1420         case 's':
1421             strict = true;
1422             break;
1423         case 'U':
1424             force_share = true;
1425             break;
1426         case OPTION_OBJECT: {
1427             QemuOpts *opts;
1428             opts = qemu_opts_parse_noisily(&qemu_object_opts,
1429                                            optarg, true);
1430             if (!opts) {
1431                 ret = 2;
1432                 goto out4;
1433             }
1434         }   break;
1435         case OPTION_IMAGE_OPTS:
1436             image_opts = true;
1437             break;
1438         }
1439     }
1440 
1441     /* Progress is not shown in Quiet mode */
1442     if (quiet) {
1443         progress = false;
1444     }
1445 
1446 
1447     if (optind != argc - 2) {
1448         error_exit("Expecting two image file names");
1449     }
1450     filename1 = argv[optind++];
1451     filename2 = argv[optind++];
1452 
1453     if (qemu_opts_foreach(&qemu_object_opts,
1454                           user_creatable_add_opts_foreach,
1455                           qemu_img_object_print_help, &error_fatal)) {
1456         ret = 2;
1457         goto out4;
1458     }
1459 
1460     /* Initialize before goto out */
1461     qemu_progress_init(progress, 2.0);
1462 
1463     flags = 0;
1464     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
1465     if (ret < 0) {
1466         error_report("Invalid source cache option: %s", cache);
1467         ret = 2;
1468         goto out3;
1469     }
1470 
1471     blk1 = img_open(image_opts, filename1, fmt1, flags, writethrough, quiet,
1472                     force_share);
1473     if (!blk1) {
1474         ret = 2;
1475         goto out3;
1476     }
1477 
1478     blk2 = img_open(image_opts, filename2, fmt2, flags, writethrough, quiet,
1479                     force_share);
1480     if (!blk2) {
1481         ret = 2;
1482         goto out2;
1483     }
1484     bs1 = blk_bs(blk1);
1485     bs2 = blk_bs(blk2);
1486 
1487     buf1 = blk_blockalign(blk1, IO_BUF_SIZE);
1488     buf2 = blk_blockalign(blk2, IO_BUF_SIZE);
1489     total_size1 = blk_getlength(blk1);
1490     if (total_size1 < 0) {
1491         error_report("Can't get size of %s: %s",
1492                      filename1, strerror(-total_size1));
1493         ret = 4;
1494         goto out;
1495     }
1496     total_size2 = blk_getlength(blk2);
1497     if (total_size2 < 0) {
1498         error_report("Can't get size of %s: %s",
1499                      filename2, strerror(-total_size2));
1500         ret = 4;
1501         goto out;
1502     }
1503     total_size = MIN(total_size1, total_size2);
1504     progress_base = MAX(total_size1, total_size2);
1505 
1506     qemu_progress_print(0, 100);
1507 
1508     if (strict && total_size1 != total_size2) {
1509         ret = 1;
1510         qprintf(quiet, "Strict mode: Image size mismatch!\n");
1511         goto out;
1512     }
1513 
1514     while (offset < total_size) {
1515         int status1, status2;
1516 
1517         status1 = bdrv_block_status_above(bs1, NULL, offset,
1518                                           total_size1 - offset, &pnum1, NULL,
1519                                           NULL);
1520         if (status1 < 0) {
1521             ret = 3;
1522             error_report("Sector allocation test failed for %s", filename1);
1523             goto out;
1524         }
1525         allocated1 = status1 & BDRV_BLOCK_ALLOCATED;
1526 
1527         status2 = bdrv_block_status_above(bs2, NULL, offset,
1528                                           total_size2 - offset, &pnum2, NULL,
1529                                           NULL);
1530         if (status2 < 0) {
1531             ret = 3;
1532             error_report("Sector allocation test failed for %s", filename2);
1533             goto out;
1534         }
1535         allocated2 = status2 & BDRV_BLOCK_ALLOCATED;
1536 
1537         assert(pnum1 && pnum2);
1538         chunk = MIN(pnum1, pnum2);
1539 
1540         if (strict) {
1541             if (status1 != status2) {
1542                 ret = 1;
1543                 qprintf(quiet, "Strict mode: Offset %" PRId64
1544                         " block status mismatch!\n", offset);
1545                 goto out;
1546             }
1547         }
1548         if ((status1 & BDRV_BLOCK_ZERO) && (status2 & BDRV_BLOCK_ZERO)) {
1549             /* nothing to do */
1550         } else if (allocated1 == allocated2) {
1551             if (allocated1) {
1552                 int64_t pnum;
1553 
1554                 chunk = MIN(chunk, IO_BUF_SIZE);
1555                 ret = blk_pread(blk1, offset, buf1, chunk);
1556                 if (ret < 0) {
1557                     error_report("Error while reading offset %" PRId64
1558                                  " of %s: %s",
1559                                  offset, filename1, strerror(-ret));
1560                     ret = 4;
1561                     goto out;
1562                 }
1563                 ret = blk_pread(blk2, offset, buf2, chunk);
1564                 if (ret < 0) {
1565                     error_report("Error while reading offset %" PRId64
1566                                  " of %s: %s",
1567                                  offset, filename2, strerror(-ret));
1568                     ret = 4;
1569                     goto out;
1570                 }
1571                 ret = compare_buffers(buf1, buf2, chunk, &pnum);
1572                 if (ret || pnum != chunk) {
1573                     qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1574                             offset + (ret ? 0 : pnum));
1575                     ret = 1;
1576                     goto out;
1577                 }
1578             }
1579         } else {
1580             chunk = MIN(chunk, IO_BUF_SIZE);
1581             if (allocated1) {
1582                 ret = check_empty_sectors(blk1, offset, chunk,
1583                                           filename1, buf1, quiet);
1584             } else {
1585                 ret = check_empty_sectors(blk2, offset, chunk,
1586                                           filename2, buf1, quiet);
1587             }
1588             if (ret) {
1589                 goto out;
1590             }
1591         }
1592         offset += chunk;
1593         qemu_progress_print(((float) chunk / progress_base) * 100, 100);
1594     }
1595 
1596     if (total_size1 != total_size2) {
1597         BlockBackend *blk_over;
1598         const char *filename_over;
1599 
1600         qprintf(quiet, "Warning: Image size mismatch!\n");
1601         if (total_size1 > total_size2) {
1602             blk_over = blk1;
1603             filename_over = filename1;
1604         } else {
1605             blk_over = blk2;
1606             filename_over = filename2;
1607         }
1608 
1609         while (offset < progress_base) {
1610             ret = bdrv_block_status_above(blk_bs(blk_over), NULL, offset,
1611                                           progress_base - offset, &chunk,
1612                                           NULL, NULL);
1613             if (ret < 0) {
1614                 ret = 3;
1615                 error_report("Sector allocation test failed for %s",
1616                              filename_over);
1617                 goto out;
1618 
1619             }
1620             if (ret & BDRV_BLOCK_ALLOCATED && !(ret & BDRV_BLOCK_ZERO)) {
1621                 chunk = MIN(chunk, IO_BUF_SIZE);
1622                 ret = check_empty_sectors(blk_over, offset, chunk,
1623                                           filename_over, buf1, quiet);
1624                 if (ret) {
1625                     goto out;
1626                 }
1627             }
1628             offset += chunk;
1629             qemu_progress_print(((float) chunk / progress_base) * 100, 100);
1630         }
1631     }
1632 
1633     qprintf(quiet, "Images are identical.\n");
1634     ret = 0;
1635 
1636 out:
1637     qemu_vfree(buf1);
1638     qemu_vfree(buf2);
1639     blk_unref(blk2);
1640 out2:
1641     blk_unref(blk1);
1642 out3:
1643     qemu_progress_end();
1644 out4:
1645     return ret;
1646 }
1647 
1648 /* Convenience wrapper around qmp_block_dirty_bitmap_merge */
1649 static void do_dirty_bitmap_merge(const char *dst_node, const char *dst_name,
1650                                   const char *src_node, const char *src_name,
1651                                   Error **errp)
1652 {
1653     BlockDirtyBitmapMergeSource *merge_src;
1654     BlockDirtyBitmapMergeSourceList *list = NULL;
1655 
1656     merge_src = g_new0(BlockDirtyBitmapMergeSource, 1);
1657     merge_src->type = QTYPE_QDICT;
1658     merge_src->u.external.node = g_strdup(src_node);
1659     merge_src->u.external.name = g_strdup(src_name);
1660     QAPI_LIST_PREPEND(list, merge_src);
1661     qmp_block_dirty_bitmap_merge(dst_node, dst_name, list, errp);
1662     qapi_free_BlockDirtyBitmapMergeSourceList(list);
1663 }
1664 
1665 enum ImgConvertBlockStatus {
1666     BLK_DATA,
1667     BLK_ZERO,
1668     BLK_BACKING_FILE,
1669 };
1670 
1671 #define MAX_COROUTINES 16
1672 #define CONVERT_THROTTLE_GROUP "img_convert"
1673 
1674 typedef struct ImgConvertState {
1675     BlockBackend **src;
1676     int64_t *src_sectors;
1677     int *src_alignment;
1678     int src_num;
1679     int64_t total_sectors;
1680     int64_t allocated_sectors;
1681     int64_t allocated_done;
1682     int64_t sector_num;
1683     int64_t wr_offs;
1684     enum ImgConvertBlockStatus status;
1685     int64_t sector_next_status;
1686     BlockBackend *target;
1687     bool has_zero_init;
1688     bool compressed;
1689     bool target_is_new;
1690     bool target_has_backing;
1691     int64_t target_backing_sectors; /* negative if unknown */
1692     bool wr_in_order;
1693     bool copy_range;
1694     bool salvage;
1695     bool quiet;
1696     int min_sparse;
1697     int alignment;
1698     size_t cluster_sectors;
1699     size_t buf_sectors;
1700     long num_coroutines;
1701     int running_coroutines;
1702     Coroutine *co[MAX_COROUTINES];
1703     int64_t wait_sector_num[MAX_COROUTINES];
1704     CoMutex lock;
1705     int ret;
1706 } ImgConvertState;
1707 
1708 static void convert_select_part(ImgConvertState *s, int64_t sector_num,
1709                                 int *src_cur, int64_t *src_cur_offset)
1710 {
1711     *src_cur = 0;
1712     *src_cur_offset = 0;
1713     while (sector_num - *src_cur_offset >= s->src_sectors[*src_cur]) {
1714         *src_cur_offset += s->src_sectors[*src_cur];
1715         (*src_cur)++;
1716         assert(*src_cur < s->src_num);
1717     }
1718 }
1719 
1720 static int convert_iteration_sectors(ImgConvertState *s, int64_t sector_num)
1721 {
1722     int64_t src_cur_offset;
1723     int ret, n, src_cur;
1724     bool post_backing_zero = false;
1725 
1726     convert_select_part(s, sector_num, &src_cur, &src_cur_offset);
1727 
1728     assert(s->total_sectors > sector_num);
1729     n = MIN(s->total_sectors - sector_num, BDRV_REQUEST_MAX_SECTORS);
1730 
1731     if (s->target_backing_sectors >= 0) {
1732         if (sector_num >= s->target_backing_sectors) {
1733             post_backing_zero = true;
1734         } else if (sector_num + n > s->target_backing_sectors) {
1735             /* Split requests around target_backing_sectors (because
1736              * starting from there, zeros are handled differently) */
1737             n = s->target_backing_sectors - sector_num;
1738         }
1739     }
1740 
1741     if (s->sector_next_status <= sector_num) {
1742         uint64_t offset = (sector_num - src_cur_offset) * BDRV_SECTOR_SIZE;
1743         int64_t count;
1744         int tail;
1745         BlockDriverState *src_bs = blk_bs(s->src[src_cur]);
1746         BlockDriverState *base;
1747 
1748         if (s->target_has_backing) {
1749             base = bdrv_cow_bs(bdrv_skip_filters(src_bs));
1750         } else {
1751             base = NULL;
1752         }
1753 
1754         do {
1755             count = n * BDRV_SECTOR_SIZE;
1756 
1757             ret = bdrv_block_status_above(src_bs, base, offset, count, &count,
1758                                           NULL, NULL);
1759 
1760             if (ret < 0) {
1761                 if (s->salvage) {
1762                     if (n == 1) {
1763                         if (!s->quiet) {
1764                             warn_report("error while reading block status at "
1765                                         "offset %" PRIu64 ": %s", offset,
1766                                         strerror(-ret));
1767                         }
1768                         /* Just try to read the data, then */
1769                         ret = BDRV_BLOCK_DATA;
1770                         count = BDRV_SECTOR_SIZE;
1771                     } else {
1772                         /* Retry on a shorter range */
1773                         n = DIV_ROUND_UP(n, 4);
1774                     }
1775                 } else {
1776                     error_report("error while reading block status at offset "
1777                                  "%" PRIu64 ": %s", offset, strerror(-ret));
1778                     return ret;
1779                 }
1780             }
1781         } while (ret < 0);
1782 
1783         n = DIV_ROUND_UP(count, BDRV_SECTOR_SIZE);
1784 
1785         /*
1786          * Avoid that s->sector_next_status becomes unaligned to the source
1787          * request alignment and/or cluster size to avoid unnecessary read
1788          * cycles.
1789          */
1790         tail = (sector_num - src_cur_offset + n) % s->src_alignment[src_cur];
1791         if (n > tail) {
1792             n -= tail;
1793         }
1794 
1795         if (ret & BDRV_BLOCK_ZERO) {
1796             s->status = post_backing_zero ? BLK_BACKING_FILE : BLK_ZERO;
1797         } else if (ret & BDRV_BLOCK_DATA) {
1798             s->status = BLK_DATA;
1799         } else {
1800             s->status = s->target_has_backing ? BLK_BACKING_FILE : BLK_DATA;
1801         }
1802 
1803         s->sector_next_status = sector_num + n;
1804     }
1805 
1806     n = MIN(n, s->sector_next_status - sector_num);
1807     if (s->status == BLK_DATA) {
1808         n = MIN(n, s->buf_sectors);
1809     }
1810 
1811     /* We need to write complete clusters for compressed images, so if an
1812      * unallocated area is shorter than that, we must consider the whole
1813      * cluster allocated. */
1814     if (s->compressed) {
1815         if (n < s->cluster_sectors) {
1816             n = MIN(s->cluster_sectors, s->total_sectors - sector_num);
1817             s->status = BLK_DATA;
1818         } else {
1819             n = QEMU_ALIGN_DOWN(n, s->cluster_sectors);
1820         }
1821     }
1822 
1823     return n;
1824 }
1825 
1826 static int coroutine_fn convert_co_read(ImgConvertState *s, int64_t sector_num,
1827                                         int nb_sectors, uint8_t *buf)
1828 {
1829     uint64_t single_read_until = 0;
1830     int n, ret;
1831 
1832     assert(nb_sectors <= s->buf_sectors);
1833     while (nb_sectors > 0) {
1834         BlockBackend *blk;
1835         int src_cur;
1836         int64_t bs_sectors, src_cur_offset;
1837         uint64_t offset;
1838 
1839         /* In the case of compression with multiple source files, we can get a
1840          * nb_sectors that spreads into the next part. So we must be able to
1841          * read across multiple BDSes for one convert_read() call. */
1842         convert_select_part(s, sector_num, &src_cur, &src_cur_offset);
1843         blk = s->src[src_cur];
1844         bs_sectors = s->src_sectors[src_cur];
1845 
1846         offset = (sector_num - src_cur_offset) << BDRV_SECTOR_BITS;
1847 
1848         n = MIN(nb_sectors, bs_sectors - (sector_num - src_cur_offset));
1849         if (single_read_until > offset) {
1850             n = 1;
1851         }
1852 
1853         ret = blk_co_pread(blk, offset, n << BDRV_SECTOR_BITS, buf, 0);
1854         if (ret < 0) {
1855             if (s->salvage) {
1856                 if (n > 1) {
1857                     single_read_until = offset + (n << BDRV_SECTOR_BITS);
1858                     continue;
1859                 } else {
1860                     if (!s->quiet) {
1861                         warn_report("error while reading offset %" PRIu64
1862                                     ": %s", offset, strerror(-ret));
1863                     }
1864                     memset(buf, 0, BDRV_SECTOR_SIZE);
1865                 }
1866             } else {
1867                 return ret;
1868             }
1869         }
1870 
1871         sector_num += n;
1872         nb_sectors -= n;
1873         buf += n * BDRV_SECTOR_SIZE;
1874     }
1875 
1876     return 0;
1877 }
1878 
1879 
1880 static int coroutine_fn convert_co_write(ImgConvertState *s, int64_t sector_num,
1881                                          int nb_sectors, uint8_t *buf,
1882                                          enum ImgConvertBlockStatus status)
1883 {
1884     int ret;
1885 
1886     while (nb_sectors > 0) {
1887         int n = nb_sectors;
1888         BdrvRequestFlags flags = s->compressed ? BDRV_REQ_WRITE_COMPRESSED : 0;
1889 
1890         switch (status) {
1891         case BLK_BACKING_FILE:
1892             /* If we have a backing file, leave clusters unallocated that are
1893              * unallocated in the source image, so that the backing file is
1894              * visible at the respective offset. */
1895             assert(s->target_has_backing);
1896             break;
1897 
1898         case BLK_DATA:
1899             /* If we're told to keep the target fully allocated (-S 0) or there
1900              * is real non-zero data, we must write it. Otherwise we can treat
1901              * it as zero sectors.
1902              * Compressed clusters need to be written as a whole, so in that
1903              * case we can only save the write if the buffer is completely
1904              * zeroed. */
1905             if (!s->min_sparse ||
1906                 (!s->compressed &&
1907                  is_allocated_sectors_min(buf, n, &n, s->min_sparse,
1908                                           sector_num, s->alignment)) ||
1909                 (s->compressed &&
1910                  !buffer_is_zero(buf, n * BDRV_SECTOR_SIZE)))
1911             {
1912                 ret = blk_co_pwrite(s->target, sector_num << BDRV_SECTOR_BITS,
1913                                     n << BDRV_SECTOR_BITS, buf, flags);
1914                 if (ret < 0) {
1915                     return ret;
1916                 }
1917                 break;
1918             }
1919             /* fall-through */
1920 
1921         case BLK_ZERO:
1922             if (s->has_zero_init) {
1923                 assert(!s->target_has_backing);
1924                 break;
1925             }
1926             ret = blk_co_pwrite_zeroes(s->target,
1927                                        sector_num << BDRV_SECTOR_BITS,
1928                                        n << BDRV_SECTOR_BITS,
1929                                        BDRV_REQ_MAY_UNMAP);
1930             if (ret < 0) {
1931                 return ret;
1932             }
1933             break;
1934         }
1935 
1936         sector_num += n;
1937         nb_sectors -= n;
1938         buf += n * BDRV_SECTOR_SIZE;
1939     }
1940 
1941     return 0;
1942 }
1943 
1944 static int coroutine_fn convert_co_copy_range(ImgConvertState *s, int64_t sector_num,
1945                                               int nb_sectors)
1946 {
1947     int n, ret;
1948 
1949     while (nb_sectors > 0) {
1950         BlockBackend *blk;
1951         int src_cur;
1952         int64_t bs_sectors, src_cur_offset;
1953         int64_t offset;
1954 
1955         convert_select_part(s, sector_num, &src_cur, &src_cur_offset);
1956         offset = (sector_num - src_cur_offset) << BDRV_SECTOR_BITS;
1957         blk = s->src[src_cur];
1958         bs_sectors = s->src_sectors[src_cur];
1959 
1960         n = MIN(nb_sectors, bs_sectors - (sector_num - src_cur_offset));
1961 
1962         ret = blk_co_copy_range(blk, offset, s->target,
1963                                 sector_num << BDRV_SECTOR_BITS,
1964                                 n << BDRV_SECTOR_BITS, 0, 0);
1965         if (ret < 0) {
1966             return ret;
1967         }
1968 
1969         sector_num += n;
1970         nb_sectors -= n;
1971     }
1972     return 0;
1973 }
1974 
1975 static void coroutine_fn convert_co_do_copy(void *opaque)
1976 {
1977     ImgConvertState *s = opaque;
1978     uint8_t *buf = NULL;
1979     int ret, i;
1980     int index = -1;
1981 
1982     for (i = 0; i < s->num_coroutines; i++) {
1983         if (s->co[i] == qemu_coroutine_self()) {
1984             index = i;
1985             break;
1986         }
1987     }
1988     assert(index >= 0);
1989 
1990     s->running_coroutines++;
1991     buf = blk_blockalign(s->target, s->buf_sectors * BDRV_SECTOR_SIZE);
1992 
1993     while (1) {
1994         int n;
1995         int64_t sector_num;
1996         enum ImgConvertBlockStatus status;
1997         bool copy_range;
1998 
1999         qemu_co_mutex_lock(&s->lock);
2000         if (s->ret != -EINPROGRESS || s->sector_num >= s->total_sectors) {
2001             qemu_co_mutex_unlock(&s->lock);
2002             break;
2003         }
2004         n = convert_iteration_sectors(s, s->sector_num);
2005         if (n < 0) {
2006             qemu_co_mutex_unlock(&s->lock);
2007             s->ret = n;
2008             break;
2009         }
2010         /* save current sector and allocation status to local variables */
2011         sector_num = s->sector_num;
2012         status = s->status;
2013         if (!s->min_sparse && s->status == BLK_ZERO) {
2014             n = MIN(n, s->buf_sectors);
2015         }
2016         /* increment global sector counter so that other coroutines can
2017          * already continue reading beyond this request */
2018         s->sector_num += n;
2019         qemu_co_mutex_unlock(&s->lock);
2020 
2021         if (status == BLK_DATA || (!s->min_sparse && status == BLK_ZERO)) {
2022             s->allocated_done += n;
2023             qemu_progress_print(100.0 * s->allocated_done /
2024                                         s->allocated_sectors, 0);
2025         }
2026 
2027 retry:
2028         copy_range = s->copy_range && s->status == BLK_DATA;
2029         if (status == BLK_DATA && !copy_range) {
2030             ret = convert_co_read(s, sector_num, n, buf);
2031             if (ret < 0) {
2032                 error_report("error while reading at byte %lld: %s",
2033                              sector_num * BDRV_SECTOR_SIZE, strerror(-ret));
2034                 s->ret = ret;
2035             }
2036         } else if (!s->min_sparse && status == BLK_ZERO) {
2037             status = BLK_DATA;
2038             memset(buf, 0x00, n * BDRV_SECTOR_SIZE);
2039         }
2040 
2041         if (s->wr_in_order) {
2042             /* keep writes in order */
2043             while (s->wr_offs != sector_num && s->ret == -EINPROGRESS) {
2044                 s->wait_sector_num[index] = sector_num;
2045                 qemu_coroutine_yield();
2046             }
2047             s->wait_sector_num[index] = -1;
2048         }
2049 
2050         if (s->ret == -EINPROGRESS) {
2051             if (copy_range) {
2052                 ret = convert_co_copy_range(s, sector_num, n);
2053                 if (ret) {
2054                     s->copy_range = false;
2055                     goto retry;
2056                 }
2057             } else {
2058                 ret = convert_co_write(s, sector_num, n, buf, status);
2059             }
2060             if (ret < 0) {
2061                 error_report("error while writing at byte %lld: %s",
2062                              sector_num * BDRV_SECTOR_SIZE, strerror(-ret));
2063                 s->ret = ret;
2064             }
2065         }
2066 
2067         if (s->wr_in_order) {
2068             /* reenter the coroutine that might have waited
2069              * for this write to complete */
2070             s->wr_offs = sector_num + n;
2071             for (i = 0; i < s->num_coroutines; i++) {
2072                 if (s->co[i] && s->wait_sector_num[i] == s->wr_offs) {
2073                     /*
2074                      * A -> B -> A cannot occur because A has
2075                      * s->wait_sector_num[i] == -1 during A -> B.  Therefore
2076                      * B will never enter A during this time window.
2077                      */
2078                     qemu_coroutine_enter(s->co[i]);
2079                     break;
2080                 }
2081             }
2082         }
2083     }
2084 
2085     qemu_vfree(buf);
2086     s->co[index] = NULL;
2087     s->running_coroutines--;
2088     if (!s->running_coroutines && s->ret == -EINPROGRESS) {
2089         /* the convert job finished successfully */
2090         s->ret = 0;
2091     }
2092 }
2093 
2094 static int convert_do_copy(ImgConvertState *s)
2095 {
2096     int ret, i, n;
2097     int64_t sector_num = 0;
2098 
2099     /* Check whether we have zero initialisation or can get it efficiently */
2100     if (!s->has_zero_init && s->target_is_new && s->min_sparse &&
2101         !s->target_has_backing) {
2102         s->has_zero_init = bdrv_has_zero_init(blk_bs(s->target));
2103     }
2104 
2105     /* Allocate buffer for copied data. For compressed images, only one cluster
2106      * can be copied at a time. */
2107     if (s->compressed) {
2108         if (s->cluster_sectors <= 0 || s->cluster_sectors > s->buf_sectors) {
2109             error_report("invalid cluster size");
2110             return -EINVAL;
2111         }
2112         s->buf_sectors = s->cluster_sectors;
2113     }
2114 
2115     while (sector_num < s->total_sectors) {
2116         n = convert_iteration_sectors(s, sector_num);
2117         if (n < 0) {
2118             return n;
2119         }
2120         if (s->status == BLK_DATA || (!s->min_sparse && s->status == BLK_ZERO))
2121         {
2122             s->allocated_sectors += n;
2123         }
2124         sector_num += n;
2125     }
2126 
2127     /* Do the copy */
2128     s->sector_next_status = 0;
2129     s->ret = -EINPROGRESS;
2130 
2131     qemu_co_mutex_init(&s->lock);
2132     for (i = 0; i < s->num_coroutines; i++) {
2133         s->co[i] = qemu_coroutine_create(convert_co_do_copy, s);
2134         s->wait_sector_num[i] = -1;
2135         qemu_coroutine_enter(s->co[i]);
2136     }
2137 
2138     while (s->running_coroutines) {
2139         main_loop_wait(false);
2140     }
2141 
2142     if (s->compressed && !s->ret) {
2143         /* signal EOF to align */
2144         ret = blk_pwrite_compressed(s->target, 0, NULL, 0);
2145         if (ret < 0) {
2146             return ret;
2147         }
2148     }
2149 
2150     return s->ret;
2151 }
2152 
2153 static int convert_copy_bitmaps(BlockDriverState *src, BlockDriverState *dst)
2154 {
2155     BdrvDirtyBitmap *bm;
2156     Error *err = NULL;
2157 
2158     FOR_EACH_DIRTY_BITMAP(src, bm) {
2159         const char *name;
2160 
2161         if (!bdrv_dirty_bitmap_get_persistence(bm)) {
2162             continue;
2163         }
2164         name = bdrv_dirty_bitmap_name(bm);
2165         qmp_block_dirty_bitmap_add(dst->node_name, name,
2166                                    true, bdrv_dirty_bitmap_granularity(bm),
2167                                    true, true,
2168                                    true, !bdrv_dirty_bitmap_enabled(bm),
2169                                    &err);
2170         if (err) {
2171             error_reportf_err(err, "Failed to create bitmap %s: ", name);
2172             return -1;
2173         }
2174 
2175         do_dirty_bitmap_merge(dst->node_name, name, src->node_name, name,
2176                               &err);
2177         if (err) {
2178             error_reportf_err(err, "Failed to populate bitmap %s: ", name);
2179             return -1;
2180         }
2181     }
2182 
2183     return 0;
2184 }
2185 
2186 #define MAX_BUF_SECTORS 32768
2187 
2188 static void set_rate_limit(BlockBackend *blk, int64_t rate_limit)
2189 {
2190     ThrottleConfig cfg;
2191 
2192     throttle_config_init(&cfg);
2193     cfg.buckets[THROTTLE_BPS_WRITE].avg = rate_limit;
2194 
2195     blk_io_limits_enable(blk, CONVERT_THROTTLE_GROUP);
2196     blk_set_io_limits(blk, &cfg);
2197 }
2198 
2199 static int img_convert(int argc, char **argv)
2200 {
2201     int c, bs_i, flags, src_flags = 0;
2202     const char *fmt = NULL, *out_fmt = NULL, *cache = "unsafe",
2203                *src_cache = BDRV_DEFAULT_CACHE, *out_baseimg = NULL,
2204                *out_filename, *out_baseimg_param, *snapshot_name = NULL;
2205     BlockDriver *drv = NULL, *proto_drv = NULL;
2206     BlockDriverInfo bdi;
2207     BlockDriverState *out_bs;
2208     QemuOpts *opts = NULL, *sn_opts = NULL;
2209     QemuOptsList *create_opts = NULL;
2210     QDict *open_opts = NULL;
2211     char *options = NULL;
2212     Error *local_err = NULL;
2213     bool writethrough, src_writethrough, image_opts = false,
2214          skip_create = false, progress = false, tgt_image_opts = false;
2215     int64_t ret = -EINVAL;
2216     bool force_share = false;
2217     bool explict_min_sparse = false;
2218     bool bitmaps = false;
2219     int64_t rate_limit = 0;
2220 
2221     ImgConvertState s = (ImgConvertState) {
2222         /* Need at least 4k of zeros for sparse detection */
2223         .min_sparse         = 8,
2224         .copy_range         = false,
2225         .buf_sectors        = IO_BUF_SIZE / BDRV_SECTOR_SIZE,
2226         .wr_in_order        = true,
2227         .num_coroutines     = 8,
2228     };
2229 
2230     for(;;) {
2231         static const struct option long_options[] = {
2232             {"help", no_argument, 0, 'h'},
2233             {"object", required_argument, 0, OPTION_OBJECT},
2234             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2235             {"force-share", no_argument, 0, 'U'},
2236             {"target-image-opts", no_argument, 0, OPTION_TARGET_IMAGE_OPTS},
2237             {"salvage", no_argument, 0, OPTION_SALVAGE},
2238             {"target-is-zero", no_argument, 0, OPTION_TARGET_IS_ZERO},
2239             {"bitmaps", no_argument, 0, OPTION_BITMAPS},
2240             {0, 0, 0, 0}
2241         };
2242         c = getopt_long(argc, argv, ":hf:O:B:Cco:l:S:pt:T:qnm:WUr:",
2243                         long_options, NULL);
2244         if (c == -1) {
2245             break;
2246         }
2247         switch(c) {
2248         case ':':
2249             missing_argument(argv[optind - 1]);
2250             break;
2251         case '?':
2252             unrecognized_option(argv[optind - 1]);
2253             break;
2254         case 'h':
2255             help();
2256             break;
2257         case 'f':
2258             fmt = optarg;
2259             break;
2260         case 'O':
2261             out_fmt = optarg;
2262             break;
2263         case 'B':
2264             out_baseimg = optarg;
2265             break;
2266         case 'C':
2267             s.copy_range = true;
2268             break;
2269         case 'c':
2270             s.compressed = true;
2271             break;
2272         case 'o':
2273             if (accumulate_options(&options, optarg) < 0) {
2274                 goto fail_getopt;
2275             }
2276             break;
2277         case 'l':
2278             if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
2279                 sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
2280                                                   optarg, false);
2281                 if (!sn_opts) {
2282                     error_report("Failed in parsing snapshot param '%s'",
2283                                  optarg);
2284                     goto fail_getopt;
2285                 }
2286             } else {
2287                 snapshot_name = optarg;
2288             }
2289             break;
2290         case 'S':
2291         {
2292             int64_t sval;
2293 
2294             sval = cvtnum("buffer size for sparse output", optarg);
2295             if (sval < 0) {
2296                 goto fail_getopt;
2297             } else if (!QEMU_IS_ALIGNED(sval, BDRV_SECTOR_SIZE) ||
2298                 sval / BDRV_SECTOR_SIZE > MAX_BUF_SECTORS) {
2299                 error_report("Invalid buffer size for sparse output specified. "
2300                     "Valid sizes are multiples of %llu up to %llu. Select "
2301                     "0 to disable sparse detection (fully allocates output).",
2302                     BDRV_SECTOR_SIZE, MAX_BUF_SECTORS * BDRV_SECTOR_SIZE);
2303                 goto fail_getopt;
2304             }
2305 
2306             s.min_sparse = sval / BDRV_SECTOR_SIZE;
2307             explict_min_sparse = true;
2308             break;
2309         }
2310         case 'p':
2311             progress = true;
2312             break;
2313         case 't':
2314             cache = optarg;
2315             break;
2316         case 'T':
2317             src_cache = optarg;
2318             break;
2319         case 'q':
2320             s.quiet = true;
2321             break;
2322         case 'n':
2323             skip_create = true;
2324             break;
2325         case 'm':
2326             if (qemu_strtol(optarg, NULL, 0, &s.num_coroutines) ||
2327                 s.num_coroutines < 1 || s.num_coroutines > MAX_COROUTINES) {
2328                 error_report("Invalid number of coroutines. Allowed number of"
2329                              " coroutines is between 1 and %d", MAX_COROUTINES);
2330                 goto fail_getopt;
2331             }
2332             break;
2333         case 'W':
2334             s.wr_in_order = false;
2335             break;
2336         case 'U':
2337             force_share = true;
2338             break;
2339         case 'r':
2340             rate_limit = cvtnum("rate limit", optarg);
2341             if (rate_limit < 0) {
2342                 goto fail_getopt;
2343             }
2344             break;
2345         case OPTION_OBJECT: {
2346             QemuOpts *object_opts;
2347             object_opts = qemu_opts_parse_noisily(&qemu_object_opts,
2348                                                   optarg, true);
2349             if (!object_opts) {
2350                 goto fail_getopt;
2351             }
2352             break;
2353         }
2354         case OPTION_IMAGE_OPTS:
2355             image_opts = true;
2356             break;
2357         case OPTION_SALVAGE:
2358             s.salvage = true;
2359             break;
2360         case OPTION_TARGET_IMAGE_OPTS:
2361             tgt_image_opts = true;
2362             break;
2363         case OPTION_TARGET_IS_ZERO:
2364             /*
2365              * The user asserting that the target is blank has the
2366              * same effect as the target driver supporting zero
2367              * initialisation.
2368              */
2369             s.has_zero_init = true;
2370             break;
2371         case OPTION_BITMAPS:
2372             bitmaps = true;
2373             break;
2374         }
2375     }
2376 
2377     if (!out_fmt && !tgt_image_opts) {
2378         out_fmt = "raw";
2379     }
2380 
2381     if (qemu_opts_foreach(&qemu_object_opts,
2382                           user_creatable_add_opts_foreach,
2383                           qemu_img_object_print_help, &error_fatal)) {
2384         goto fail_getopt;
2385     }
2386 
2387     if (s.compressed && s.copy_range) {
2388         error_report("Cannot enable copy offloading when -c is used");
2389         goto fail_getopt;
2390     }
2391 
2392     if (explict_min_sparse && s.copy_range) {
2393         error_report("Cannot enable copy offloading when -S is used");
2394         goto fail_getopt;
2395     }
2396 
2397     if (s.copy_range && s.salvage) {
2398         error_report("Cannot use copy offloading in salvaging mode");
2399         goto fail_getopt;
2400     }
2401 
2402     if (tgt_image_opts && !skip_create) {
2403         error_report("--target-image-opts requires use of -n flag");
2404         goto fail_getopt;
2405     }
2406 
2407     if (skip_create && options) {
2408         error_report("-o has no effect when skipping image creation");
2409         goto fail_getopt;
2410     }
2411 
2412     if (s.has_zero_init && !skip_create) {
2413         error_report("--target-is-zero requires use of -n flag");
2414         goto fail_getopt;
2415     }
2416 
2417     s.src_num = argc - optind - 1;
2418     out_filename = s.src_num >= 1 ? argv[argc - 1] : NULL;
2419 
2420     if (options && has_help_option(options)) {
2421         if (out_fmt) {
2422             ret = print_block_option_help(out_filename, out_fmt);
2423             goto fail_getopt;
2424         } else {
2425             error_report("Option help requires a format be specified");
2426             goto fail_getopt;
2427         }
2428     }
2429 
2430     if (s.src_num < 1) {
2431         error_report("Must specify image file name");
2432         goto fail_getopt;
2433     }
2434 
2435     /* ret is still -EINVAL until here */
2436     ret = bdrv_parse_cache_mode(src_cache, &src_flags, &src_writethrough);
2437     if (ret < 0) {
2438         error_report("Invalid source cache option: %s", src_cache);
2439         goto fail_getopt;
2440     }
2441 
2442     /* Initialize before goto out */
2443     if (s.quiet) {
2444         progress = false;
2445     }
2446     qemu_progress_init(progress, 1.0);
2447     qemu_progress_print(0, 100);
2448 
2449     s.src = g_new0(BlockBackend *, s.src_num);
2450     s.src_sectors = g_new(int64_t, s.src_num);
2451     s.src_alignment = g_new(int, s.src_num);
2452 
2453     for (bs_i = 0; bs_i < s.src_num; bs_i++) {
2454         BlockDriverState *src_bs;
2455         s.src[bs_i] = img_open(image_opts, argv[optind + bs_i],
2456                                fmt, src_flags, src_writethrough, s.quiet,
2457                                force_share);
2458         if (!s.src[bs_i]) {
2459             ret = -1;
2460             goto out;
2461         }
2462         s.src_sectors[bs_i] = blk_nb_sectors(s.src[bs_i]);
2463         if (s.src_sectors[bs_i] < 0) {
2464             error_report("Could not get size of %s: %s",
2465                          argv[optind + bs_i], strerror(-s.src_sectors[bs_i]));
2466             ret = -1;
2467             goto out;
2468         }
2469         src_bs = blk_bs(s.src[bs_i]);
2470         s.src_alignment[bs_i] = DIV_ROUND_UP(src_bs->bl.request_alignment,
2471                                              BDRV_SECTOR_SIZE);
2472         if (!bdrv_get_info(src_bs, &bdi)) {
2473             s.src_alignment[bs_i] = MAX(s.src_alignment[bs_i],
2474                                         bdi.cluster_size / BDRV_SECTOR_SIZE);
2475         }
2476         s.total_sectors += s.src_sectors[bs_i];
2477     }
2478 
2479     if (sn_opts) {
2480         bdrv_snapshot_load_tmp(blk_bs(s.src[0]),
2481                                qemu_opt_get(sn_opts, SNAPSHOT_OPT_ID),
2482                                qemu_opt_get(sn_opts, SNAPSHOT_OPT_NAME),
2483                                &local_err);
2484     } else if (snapshot_name != NULL) {
2485         if (s.src_num > 1) {
2486             error_report("No support for concatenating multiple snapshot");
2487             ret = -1;
2488             goto out;
2489         }
2490 
2491         bdrv_snapshot_load_tmp_by_id_or_name(blk_bs(s.src[0]), snapshot_name,
2492                                              &local_err);
2493     }
2494     if (local_err) {
2495         error_reportf_err(local_err, "Failed to load snapshot: ");
2496         ret = -1;
2497         goto out;
2498     }
2499 
2500     if (!skip_create) {
2501         /* Find driver and parse its options */
2502         drv = bdrv_find_format(out_fmt);
2503         if (!drv) {
2504             error_report("Unknown file format '%s'", out_fmt);
2505             ret = -1;
2506             goto out;
2507         }
2508 
2509         proto_drv = bdrv_find_protocol(out_filename, true, &local_err);
2510         if (!proto_drv) {
2511             error_report_err(local_err);
2512             ret = -1;
2513             goto out;
2514         }
2515 
2516         if (!drv->create_opts) {
2517             error_report("Format driver '%s' does not support image creation",
2518                          drv->format_name);
2519             ret = -1;
2520             goto out;
2521         }
2522 
2523         if (!proto_drv->create_opts) {
2524             error_report("Protocol driver '%s' does not support image creation",
2525                          proto_drv->format_name);
2526             ret = -1;
2527             goto out;
2528         }
2529 
2530         create_opts = qemu_opts_append(create_opts, drv->create_opts);
2531         create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
2532 
2533         opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
2534         if (options) {
2535             if (!qemu_opts_do_parse(opts, options, NULL, &local_err)) {
2536                 error_report_err(local_err);
2537                 ret = -1;
2538                 goto out;
2539             }
2540         }
2541 
2542         qemu_opt_set_number(opts, BLOCK_OPT_SIZE,
2543                             s.total_sectors * BDRV_SECTOR_SIZE, &error_abort);
2544         ret = add_old_style_options(out_fmt, opts, out_baseimg, NULL);
2545         if (ret < 0) {
2546             goto out;
2547         }
2548     }
2549 
2550     /* Get backing file name if -o backing_file was used */
2551     out_baseimg_param = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
2552     if (out_baseimg_param) {
2553         out_baseimg = out_baseimg_param;
2554     }
2555     s.target_has_backing = (bool) out_baseimg;
2556 
2557     if (s.has_zero_init && s.target_has_backing) {
2558         error_report("Cannot use --target-is-zero when the destination "
2559                      "image has a backing file");
2560         goto out;
2561     }
2562 
2563     if (s.src_num > 1 && out_baseimg) {
2564         error_report("Having a backing file for the target makes no sense when "
2565                      "concatenating multiple input images");
2566         ret = -1;
2567         goto out;
2568     }
2569 
2570     if (out_baseimg_param) {
2571         if (!qemu_opt_get(opts, BLOCK_OPT_BACKING_FMT)) {
2572             warn_report("Deprecated use of backing file without explicit "
2573                         "backing format");
2574         }
2575     }
2576 
2577     /* Check if compression is supported */
2578     if (s.compressed) {
2579         bool encryption =
2580             qemu_opt_get_bool(opts, BLOCK_OPT_ENCRYPT, false);
2581         const char *encryptfmt =
2582             qemu_opt_get(opts, BLOCK_OPT_ENCRYPT_FORMAT);
2583         const char *preallocation =
2584             qemu_opt_get(opts, BLOCK_OPT_PREALLOC);
2585 
2586         if (drv && !block_driver_can_compress(drv)) {
2587             error_report("Compression not supported for this file format");
2588             ret = -1;
2589             goto out;
2590         }
2591 
2592         if (encryption || encryptfmt) {
2593             error_report("Compression and encryption not supported at "
2594                          "the same time");
2595             ret = -1;
2596             goto out;
2597         }
2598 
2599         if (preallocation
2600             && strcmp(preallocation, "off"))
2601         {
2602             error_report("Compression and preallocation not supported at "
2603                          "the same time");
2604             ret = -1;
2605             goto out;
2606         }
2607     }
2608 
2609     /* Determine if bitmaps need copying */
2610     if (bitmaps) {
2611         if (s.src_num > 1) {
2612             error_report("Copying bitmaps only possible with single source");
2613             ret = -1;
2614             goto out;
2615         }
2616         if (!bdrv_supports_persistent_dirty_bitmap(blk_bs(s.src[0]))) {
2617             error_report("Source lacks bitmap support");
2618             ret = -1;
2619             goto out;
2620         }
2621     }
2622 
2623     /*
2624      * The later open call will need any decryption secrets, and
2625      * bdrv_create() will purge "opts", so extract them now before
2626      * they are lost.
2627      */
2628     if (!skip_create) {
2629         open_opts = qdict_new();
2630         qemu_opt_foreach(opts, img_add_key_secrets, open_opts, &error_abort);
2631 
2632         /* Create the new image */
2633         ret = bdrv_create(drv, out_filename, opts, &local_err);
2634         if (ret < 0) {
2635             error_reportf_err(local_err, "%s: error while converting %s: ",
2636                               out_filename, out_fmt);
2637             goto out;
2638         }
2639     }
2640 
2641     s.target_is_new = !skip_create;
2642 
2643     flags = s.min_sparse ? (BDRV_O_RDWR | BDRV_O_UNMAP) : BDRV_O_RDWR;
2644     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
2645     if (ret < 0) {
2646         error_report("Invalid cache option: %s", cache);
2647         goto out;
2648     }
2649 
2650     if (skip_create) {
2651         s.target = img_open(tgt_image_opts, out_filename, out_fmt,
2652                             flags, writethrough, s.quiet, false);
2653     } else {
2654         /* TODO ultimately we should allow --target-image-opts
2655          * to be used even when -n is not given.
2656          * That has to wait for bdrv_create to be improved
2657          * to allow filenames in option syntax
2658          */
2659         s.target = img_open_file(out_filename, open_opts, out_fmt,
2660                                  flags, writethrough, s.quiet, false);
2661         open_opts = NULL; /* blk_new_open will have freed it */
2662     }
2663     if (!s.target) {
2664         ret = -1;
2665         goto out;
2666     }
2667     out_bs = blk_bs(s.target);
2668 
2669     if (bitmaps && !bdrv_supports_persistent_dirty_bitmap(out_bs)) {
2670         error_report("Format driver '%s' does not support bitmaps",
2671                      out_bs->drv->format_name);
2672         ret = -1;
2673         goto out;
2674     }
2675 
2676     if (s.compressed && !block_driver_can_compress(out_bs->drv)) {
2677         error_report("Compression not supported for this file format");
2678         ret = -1;
2679         goto out;
2680     }
2681 
2682     /* increase bufsectors from the default 4096 (2M) if opt_transfer
2683      * or discard_alignment of the out_bs is greater. Limit to
2684      * MAX_BUF_SECTORS as maximum which is currently 32768 (16MB). */
2685     s.buf_sectors = MIN(MAX_BUF_SECTORS,
2686                         MAX(s.buf_sectors,
2687                             MAX(out_bs->bl.opt_transfer >> BDRV_SECTOR_BITS,
2688                                 out_bs->bl.pdiscard_alignment >>
2689                                 BDRV_SECTOR_BITS)));
2690 
2691     /* try to align the write requests to the destination to avoid unnecessary
2692      * RMW cycles. */
2693     s.alignment = MAX(pow2floor(s.min_sparse),
2694                       DIV_ROUND_UP(out_bs->bl.request_alignment,
2695                                    BDRV_SECTOR_SIZE));
2696     assert(is_power_of_2(s.alignment));
2697 
2698     if (skip_create) {
2699         int64_t output_sectors = blk_nb_sectors(s.target);
2700         if (output_sectors < 0) {
2701             error_report("unable to get output image length: %s",
2702                          strerror(-output_sectors));
2703             ret = -1;
2704             goto out;
2705         } else if (output_sectors < s.total_sectors) {
2706             error_report("output file is smaller than input file");
2707             ret = -1;
2708             goto out;
2709         }
2710     }
2711 
2712     if (s.target_has_backing && s.target_is_new) {
2713         /* Errors are treated as "backing length unknown" (which means
2714          * s.target_backing_sectors has to be negative, which it will
2715          * be automatically).  The backing file length is used only
2716          * for optimizations, so such a case is not fatal. */
2717         s.target_backing_sectors =
2718             bdrv_nb_sectors(bdrv_backing_chain_next(out_bs));
2719     } else {
2720         s.target_backing_sectors = -1;
2721     }
2722 
2723     ret = bdrv_get_info(out_bs, &bdi);
2724     if (ret < 0) {
2725         if (s.compressed) {
2726             error_report("could not get block driver info");
2727             goto out;
2728         }
2729     } else {
2730         s.compressed = s.compressed || bdi.needs_compressed_writes;
2731         s.cluster_sectors = bdi.cluster_size / BDRV_SECTOR_SIZE;
2732     }
2733 
2734     if (rate_limit) {
2735         set_rate_limit(s.target, rate_limit);
2736     }
2737 
2738     ret = convert_do_copy(&s);
2739 
2740     /* Now copy the bitmaps */
2741     if (bitmaps && ret == 0) {
2742         ret = convert_copy_bitmaps(blk_bs(s.src[0]), out_bs);
2743     }
2744 
2745 out:
2746     if (!ret) {
2747         qemu_progress_print(100, 0);
2748     }
2749     qemu_progress_end();
2750     qemu_opts_del(opts);
2751     qemu_opts_free(create_opts);
2752     qobject_unref(open_opts);
2753     blk_unref(s.target);
2754     if (s.src) {
2755         for (bs_i = 0; bs_i < s.src_num; bs_i++) {
2756             blk_unref(s.src[bs_i]);
2757         }
2758         g_free(s.src);
2759     }
2760     g_free(s.src_sectors);
2761     g_free(s.src_alignment);
2762 fail_getopt:
2763     qemu_opts_del(sn_opts);
2764     g_free(options);
2765 
2766     return !!ret;
2767 }
2768 
2769 
2770 static void dump_snapshots(BlockDriverState *bs)
2771 {
2772     QEMUSnapshotInfo *sn_tab, *sn;
2773     int nb_sns, i;
2774 
2775     nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2776     if (nb_sns <= 0)
2777         return;
2778     printf("Snapshot list:\n");
2779     bdrv_snapshot_dump(NULL);
2780     printf("\n");
2781     for(i = 0; i < nb_sns; i++) {
2782         sn = &sn_tab[i];
2783         bdrv_snapshot_dump(sn);
2784         printf("\n");
2785     }
2786     g_free(sn_tab);
2787 }
2788 
2789 static void dump_json_image_info_list(ImageInfoList *list)
2790 {
2791     GString *str;
2792     QObject *obj;
2793     Visitor *v = qobject_output_visitor_new(&obj);
2794 
2795     visit_type_ImageInfoList(v, NULL, &list, &error_abort);
2796     visit_complete(v, &obj);
2797     str = qobject_to_json_pretty(obj, true);
2798     assert(str != NULL);
2799     printf("%s\n", str->str);
2800     qobject_unref(obj);
2801     visit_free(v);
2802     g_string_free(str, true);
2803 }
2804 
2805 static void dump_json_image_info(ImageInfo *info)
2806 {
2807     GString *str;
2808     QObject *obj;
2809     Visitor *v = qobject_output_visitor_new(&obj);
2810 
2811     visit_type_ImageInfo(v, NULL, &info, &error_abort);
2812     visit_complete(v, &obj);
2813     str = qobject_to_json_pretty(obj, true);
2814     assert(str != NULL);
2815     printf("%s\n", str->str);
2816     qobject_unref(obj);
2817     visit_free(v);
2818     g_string_free(str, true);
2819 }
2820 
2821 static void dump_human_image_info_list(ImageInfoList *list)
2822 {
2823     ImageInfoList *elem;
2824     bool delim = false;
2825 
2826     for (elem = list; elem; elem = elem->next) {
2827         if (delim) {
2828             printf("\n");
2829         }
2830         delim = true;
2831 
2832         bdrv_image_info_dump(elem->value);
2833     }
2834 }
2835 
2836 static gboolean str_equal_func(gconstpointer a, gconstpointer b)
2837 {
2838     return strcmp(a, b) == 0;
2839 }
2840 
2841 /**
2842  * Open an image file chain and return an ImageInfoList
2843  *
2844  * @filename: topmost image filename
2845  * @fmt: topmost image format (may be NULL to autodetect)
2846  * @chain: true  - enumerate entire backing file chain
2847  *         false - only topmost image file
2848  *
2849  * Returns a list of ImageInfo objects or NULL if there was an error opening an
2850  * image file.  If there was an error a message will have been printed to
2851  * stderr.
2852  */
2853 static ImageInfoList *collect_image_info_list(bool image_opts,
2854                                               const char *filename,
2855                                               const char *fmt,
2856                                               bool chain, bool force_share)
2857 {
2858     ImageInfoList *head = NULL;
2859     ImageInfoList **last = &head;
2860     GHashTable *filenames;
2861     Error *err = NULL;
2862 
2863     filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
2864 
2865     while (filename) {
2866         BlockBackend *blk;
2867         BlockDriverState *bs;
2868         ImageInfo *info;
2869         ImageInfoList *elem;
2870 
2871         if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL)) {
2872             error_report("Backing file '%s' creates an infinite loop.",
2873                          filename);
2874             goto err;
2875         }
2876         g_hash_table_insert(filenames, (gpointer)filename, NULL);
2877 
2878         blk = img_open(image_opts, filename, fmt,
2879                        BDRV_O_NO_BACKING | BDRV_O_NO_IO, false, false,
2880                        force_share);
2881         if (!blk) {
2882             goto err;
2883         }
2884         bs = blk_bs(blk);
2885 
2886         bdrv_query_image_info(bs, &info, &err);
2887         if (err) {
2888             error_report_err(err);
2889             blk_unref(blk);
2890             goto err;
2891         }
2892 
2893         elem = g_new0(ImageInfoList, 1);
2894         elem->value = info;
2895         *last = elem;
2896         last = &elem->next;
2897 
2898         blk_unref(blk);
2899 
2900         /* Clear parameters that only apply to the topmost image */
2901         filename = fmt = NULL;
2902         image_opts = false;
2903 
2904         if (chain) {
2905             if (info->has_full_backing_filename) {
2906                 filename = info->full_backing_filename;
2907             } else if (info->has_backing_filename) {
2908                 error_report("Could not determine absolute backing filename,"
2909                              " but backing filename '%s' present",
2910                              info->backing_filename);
2911                 goto err;
2912             }
2913             if (info->has_backing_filename_format) {
2914                 fmt = info->backing_filename_format;
2915             }
2916         }
2917     }
2918     g_hash_table_destroy(filenames);
2919     return head;
2920 
2921 err:
2922     qapi_free_ImageInfoList(head);
2923     g_hash_table_destroy(filenames);
2924     return NULL;
2925 }
2926 
2927 static int img_info(int argc, char **argv)
2928 {
2929     int c;
2930     OutputFormat output_format = OFORMAT_HUMAN;
2931     bool chain = false;
2932     const char *filename, *fmt, *output;
2933     ImageInfoList *list;
2934     bool image_opts = false;
2935     bool force_share = false;
2936 
2937     fmt = NULL;
2938     output = NULL;
2939     for(;;) {
2940         int option_index = 0;
2941         static const struct option long_options[] = {
2942             {"help", no_argument, 0, 'h'},
2943             {"format", required_argument, 0, 'f'},
2944             {"output", required_argument, 0, OPTION_OUTPUT},
2945             {"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
2946             {"object", required_argument, 0, OPTION_OBJECT},
2947             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2948             {"force-share", no_argument, 0, 'U'},
2949             {0, 0, 0, 0}
2950         };
2951         c = getopt_long(argc, argv, ":f:hU",
2952                         long_options, &option_index);
2953         if (c == -1) {
2954             break;
2955         }
2956         switch(c) {
2957         case ':':
2958             missing_argument(argv[optind - 1]);
2959             break;
2960         case '?':
2961             unrecognized_option(argv[optind - 1]);
2962             break;
2963         case 'h':
2964             help();
2965             break;
2966         case 'f':
2967             fmt = optarg;
2968             break;
2969         case 'U':
2970             force_share = true;
2971             break;
2972         case OPTION_OUTPUT:
2973             output = optarg;
2974             break;
2975         case OPTION_BACKING_CHAIN:
2976             chain = true;
2977             break;
2978         case OPTION_OBJECT: {
2979             QemuOpts *opts;
2980             opts = qemu_opts_parse_noisily(&qemu_object_opts,
2981                                            optarg, true);
2982             if (!opts) {
2983                 return 1;
2984             }
2985         }   break;
2986         case OPTION_IMAGE_OPTS:
2987             image_opts = true;
2988             break;
2989         }
2990     }
2991     if (optind != argc - 1) {
2992         error_exit("Expecting one image file name");
2993     }
2994     filename = argv[optind++];
2995 
2996     if (output && !strcmp(output, "json")) {
2997         output_format = OFORMAT_JSON;
2998     } else if (output && !strcmp(output, "human")) {
2999         output_format = OFORMAT_HUMAN;
3000     } else if (output) {
3001         error_report("--output must be used with human or json as argument.");
3002         return 1;
3003     }
3004 
3005     if (qemu_opts_foreach(&qemu_object_opts,
3006                           user_creatable_add_opts_foreach,
3007                           qemu_img_object_print_help, &error_fatal)) {
3008         return 1;
3009     }
3010 
3011     list = collect_image_info_list(image_opts, filename, fmt, chain,
3012                                    force_share);
3013     if (!list) {
3014         return 1;
3015     }
3016 
3017     switch (output_format) {
3018     case OFORMAT_HUMAN:
3019         dump_human_image_info_list(list);
3020         break;
3021     case OFORMAT_JSON:
3022         if (chain) {
3023             dump_json_image_info_list(list);
3024         } else {
3025             dump_json_image_info(list->value);
3026         }
3027         break;
3028     }
3029 
3030     qapi_free_ImageInfoList(list);
3031     return 0;
3032 }
3033 
3034 static int dump_map_entry(OutputFormat output_format, MapEntry *e,
3035                           MapEntry *next)
3036 {
3037     switch (output_format) {
3038     case OFORMAT_HUMAN:
3039         if (e->data && !e->has_offset) {
3040             error_report("File contains external, encrypted or compressed clusters.");
3041             return -1;
3042         }
3043         if (e->data && !e->zero) {
3044             printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n",
3045                    e->start, e->length,
3046                    e->has_offset ? e->offset : 0,
3047                    e->has_filename ? e->filename : "");
3048         }
3049         /* This format ignores the distinction between 0, ZERO and ZERO|DATA.
3050          * Modify the flags here to allow more coalescing.
3051          */
3052         if (next && (!next->data || next->zero)) {
3053             next->data = false;
3054             next->zero = true;
3055         }
3056         break;
3057     case OFORMAT_JSON:
3058         printf("{ \"start\": %"PRId64", \"length\": %"PRId64","
3059                " \"depth\": %"PRId64", \"zero\": %s, \"data\": %s",
3060                e->start, e->length, e->depth,
3061                e->zero ? "true" : "false",
3062                e->data ? "true" : "false");
3063         if (e->has_offset) {
3064             printf(", \"offset\": %"PRId64"", e->offset);
3065         }
3066         putchar('}');
3067 
3068         if (next) {
3069             puts(",");
3070         }
3071         break;
3072     }
3073     return 0;
3074 }
3075 
3076 static int get_block_status(BlockDriverState *bs, int64_t offset,
3077                             int64_t bytes, MapEntry *e)
3078 {
3079     int ret;
3080     int depth;
3081     BlockDriverState *file;
3082     bool has_offset;
3083     int64_t map;
3084     char *filename = NULL;
3085 
3086     /* As an optimization, we could cache the current range of unallocated
3087      * clusters in each file of the chain, and avoid querying the same
3088      * range repeatedly.
3089      */
3090 
3091     depth = 0;
3092     for (;;) {
3093         bs = bdrv_skip_filters(bs);
3094         ret = bdrv_block_status(bs, offset, bytes, &bytes, &map, &file);
3095         if (ret < 0) {
3096             return ret;
3097         }
3098         assert(bytes);
3099         if (ret & (BDRV_BLOCK_ZERO|BDRV_BLOCK_DATA)) {
3100             break;
3101         }
3102         bs = bdrv_cow_bs(bs);
3103         if (bs == NULL) {
3104             ret = 0;
3105             break;
3106         }
3107 
3108         depth++;
3109     }
3110 
3111     has_offset = !!(ret & BDRV_BLOCK_OFFSET_VALID);
3112 
3113     if (file && has_offset) {
3114         bdrv_refresh_filename(file);
3115         filename = file->filename;
3116     }
3117 
3118     *e = (MapEntry) {
3119         .start = offset,
3120         .length = bytes,
3121         .data = !!(ret & BDRV_BLOCK_DATA),
3122         .zero = !!(ret & BDRV_BLOCK_ZERO),
3123         .offset = map,
3124         .has_offset = has_offset,
3125         .depth = depth,
3126         .has_filename = filename,
3127         .filename = filename,
3128     };
3129 
3130     return 0;
3131 }
3132 
3133 static inline bool entry_mergeable(const MapEntry *curr, const MapEntry *next)
3134 {
3135     if (curr->length == 0) {
3136         return false;
3137     }
3138     if (curr->zero != next->zero ||
3139         curr->data != next->data ||
3140         curr->depth != next->depth ||
3141         curr->has_filename != next->has_filename ||
3142         curr->has_offset != next->has_offset) {
3143         return false;
3144     }
3145     if (curr->has_filename && strcmp(curr->filename, next->filename)) {
3146         return false;
3147     }
3148     if (curr->has_offset && curr->offset + curr->length != next->offset) {
3149         return false;
3150     }
3151     return true;
3152 }
3153 
3154 static int img_map(int argc, char **argv)
3155 {
3156     int c;
3157     OutputFormat output_format = OFORMAT_HUMAN;
3158     BlockBackend *blk;
3159     BlockDriverState *bs;
3160     const char *filename, *fmt, *output;
3161     int64_t length;
3162     MapEntry curr = { .length = 0 }, next;
3163     int ret = 0;
3164     bool image_opts = false;
3165     bool force_share = false;
3166     int64_t start_offset = 0;
3167     int64_t max_length = -1;
3168 
3169     fmt = NULL;
3170     output = NULL;
3171     for (;;) {
3172         int option_index = 0;
3173         static const struct option long_options[] = {
3174             {"help", no_argument, 0, 'h'},
3175             {"format", required_argument, 0, 'f'},
3176             {"output", required_argument, 0, OPTION_OUTPUT},
3177             {"object", required_argument, 0, OPTION_OBJECT},
3178             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3179             {"force-share", no_argument, 0, 'U'},
3180             {"start-offset", required_argument, 0, 's'},
3181             {"max-length", required_argument, 0, 'l'},
3182             {0, 0, 0, 0}
3183         };
3184         c = getopt_long(argc, argv, ":f:s:l:hU",
3185                         long_options, &option_index);
3186         if (c == -1) {
3187             break;
3188         }
3189         switch (c) {
3190         case ':':
3191             missing_argument(argv[optind - 1]);
3192             break;
3193         case '?':
3194             unrecognized_option(argv[optind - 1]);
3195             break;
3196         case 'h':
3197             help();
3198             break;
3199         case 'f':
3200             fmt = optarg;
3201             break;
3202         case 'U':
3203             force_share = true;
3204             break;
3205         case OPTION_OUTPUT:
3206             output = optarg;
3207             break;
3208         case 's':
3209             start_offset = cvtnum("start offset", optarg);
3210             if (start_offset < 0) {
3211                 return 1;
3212             }
3213             break;
3214         case 'l':
3215             max_length = cvtnum("max length", optarg);
3216             if (max_length < 0) {
3217                 return 1;
3218             }
3219             break;
3220         case OPTION_OBJECT: {
3221             QemuOpts *opts;
3222             opts = qemu_opts_parse_noisily(&qemu_object_opts,
3223                                            optarg, true);
3224             if (!opts) {
3225                 return 1;
3226             }
3227         }   break;
3228         case OPTION_IMAGE_OPTS:
3229             image_opts = true;
3230             break;
3231         }
3232     }
3233     if (optind != argc - 1) {
3234         error_exit("Expecting one image file name");
3235     }
3236     filename = argv[optind];
3237 
3238     if (output && !strcmp(output, "json")) {
3239         output_format = OFORMAT_JSON;
3240     } else if (output && !strcmp(output, "human")) {
3241         output_format = OFORMAT_HUMAN;
3242     } else if (output) {
3243         error_report("--output must be used with human or json as argument.");
3244         return 1;
3245     }
3246 
3247     if (qemu_opts_foreach(&qemu_object_opts,
3248                           user_creatable_add_opts_foreach,
3249                           qemu_img_object_print_help, &error_fatal)) {
3250         return 1;
3251     }
3252 
3253     blk = img_open(image_opts, filename, fmt, 0, false, false, force_share);
3254     if (!blk) {
3255         return 1;
3256     }
3257     bs = blk_bs(blk);
3258 
3259     if (output_format == OFORMAT_HUMAN) {
3260         printf("%-16s%-16s%-16s%s\n", "Offset", "Length", "Mapped to", "File");
3261     } else if (output_format == OFORMAT_JSON) {
3262         putchar('[');
3263     }
3264 
3265     length = blk_getlength(blk);
3266     if (length < 0) {
3267         error_report("Failed to get size for '%s'", filename);
3268         return 1;
3269     }
3270     if (max_length != -1) {
3271         length = MIN(start_offset + max_length, length);
3272     }
3273 
3274     curr.start = start_offset;
3275     while (curr.start + curr.length < length) {
3276         int64_t offset = curr.start + curr.length;
3277         int64_t n = length - offset;
3278 
3279         ret = get_block_status(bs, offset, n, &next);
3280         if (ret < 0) {
3281             error_report("Could not read file metadata: %s", strerror(-ret));
3282             goto out;
3283         }
3284 
3285         if (entry_mergeable(&curr, &next)) {
3286             curr.length += next.length;
3287             continue;
3288         }
3289 
3290         if (curr.length > 0) {
3291             ret = dump_map_entry(output_format, &curr, &next);
3292             if (ret < 0) {
3293                 goto out;
3294             }
3295         }
3296         curr = next;
3297     }
3298 
3299     ret = dump_map_entry(output_format, &curr, NULL);
3300     if (output_format == OFORMAT_JSON) {
3301         puts("]");
3302     }
3303 
3304 out:
3305     blk_unref(blk);
3306     return ret < 0;
3307 }
3308 
3309 #define SNAPSHOT_LIST   1
3310 #define SNAPSHOT_CREATE 2
3311 #define SNAPSHOT_APPLY  3
3312 #define SNAPSHOT_DELETE 4
3313 
3314 static int img_snapshot(int argc, char **argv)
3315 {
3316     BlockBackend *blk;
3317     BlockDriverState *bs;
3318     QEMUSnapshotInfo sn;
3319     char *filename, *snapshot_name = NULL;
3320     int c, ret = 0, bdrv_oflags;
3321     int action = 0;
3322     qemu_timeval tv;
3323     bool quiet = false;
3324     Error *err = NULL;
3325     bool image_opts = false;
3326     bool force_share = false;
3327 
3328     bdrv_oflags = BDRV_O_RDWR;
3329     /* Parse commandline parameters */
3330     for(;;) {
3331         static const struct option long_options[] = {
3332             {"help", no_argument, 0, 'h'},
3333             {"object", required_argument, 0, OPTION_OBJECT},
3334             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3335             {"force-share", no_argument, 0, 'U'},
3336             {0, 0, 0, 0}
3337         };
3338         c = getopt_long(argc, argv, ":la:c:d:hqU",
3339                         long_options, NULL);
3340         if (c == -1) {
3341             break;
3342         }
3343         switch(c) {
3344         case ':':
3345             missing_argument(argv[optind - 1]);
3346             break;
3347         case '?':
3348             unrecognized_option(argv[optind - 1]);
3349             break;
3350         case 'h':
3351             help();
3352             return 0;
3353         case 'l':
3354             if (action) {
3355                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
3356                 return 0;
3357             }
3358             action = SNAPSHOT_LIST;
3359             bdrv_oflags &= ~BDRV_O_RDWR; /* no need for RW */
3360             break;
3361         case 'a':
3362             if (action) {
3363                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
3364                 return 0;
3365             }
3366             action = SNAPSHOT_APPLY;
3367             snapshot_name = optarg;
3368             break;
3369         case 'c':
3370             if (action) {
3371                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
3372                 return 0;
3373             }
3374             action = SNAPSHOT_CREATE;
3375             snapshot_name = optarg;
3376             break;
3377         case 'd':
3378             if (action) {
3379                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
3380                 return 0;
3381             }
3382             action = SNAPSHOT_DELETE;
3383             snapshot_name = optarg;
3384             break;
3385         case 'q':
3386             quiet = true;
3387             break;
3388         case 'U':
3389             force_share = true;
3390             break;
3391         case OPTION_OBJECT: {
3392             QemuOpts *opts;
3393             opts = qemu_opts_parse_noisily(&qemu_object_opts,
3394                                            optarg, true);
3395             if (!opts) {
3396                 return 1;
3397             }
3398         }   break;
3399         case OPTION_IMAGE_OPTS:
3400             image_opts = true;
3401             break;
3402         }
3403     }
3404 
3405     if (optind != argc - 1) {
3406         error_exit("Expecting one image file name");
3407     }
3408     filename = argv[optind++];
3409 
3410     if (qemu_opts_foreach(&qemu_object_opts,
3411                           user_creatable_add_opts_foreach,
3412                           qemu_img_object_print_help, &error_fatal)) {
3413         return 1;
3414     }
3415 
3416     /* Open the image */
3417     blk = img_open(image_opts, filename, NULL, bdrv_oflags, false, quiet,
3418                    force_share);
3419     if (!blk) {
3420         return 1;
3421     }
3422     bs = blk_bs(blk);
3423 
3424     /* Perform the requested action */
3425     switch(action) {
3426     case SNAPSHOT_LIST:
3427         dump_snapshots(bs);
3428         break;
3429 
3430     case SNAPSHOT_CREATE:
3431         memset(&sn, 0, sizeof(sn));
3432         pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
3433 
3434         qemu_gettimeofday(&tv);
3435         sn.date_sec = tv.tv_sec;
3436         sn.date_nsec = tv.tv_usec * 1000;
3437 
3438         ret = bdrv_snapshot_create(bs, &sn);
3439         if (ret) {
3440             error_report("Could not create snapshot '%s': %d (%s)",
3441                 snapshot_name, ret, strerror(-ret));
3442         }
3443         break;
3444 
3445     case SNAPSHOT_APPLY:
3446         ret = bdrv_snapshot_goto(bs, snapshot_name, &err);
3447         if (ret) {
3448             error_reportf_err(err, "Could not apply snapshot '%s': ",
3449                               snapshot_name);
3450         }
3451         break;
3452 
3453     case SNAPSHOT_DELETE:
3454         ret = bdrv_snapshot_find(bs, &sn, snapshot_name);
3455         if (ret < 0) {
3456             error_report("Could not delete snapshot '%s': snapshot not "
3457                          "found", snapshot_name);
3458             ret = 1;
3459         } else {
3460             ret = bdrv_snapshot_delete(bs, sn.id_str, sn.name, &err);
3461             if (ret < 0) {
3462                 error_reportf_err(err, "Could not delete snapshot '%s': ",
3463                                   snapshot_name);
3464                 ret = 1;
3465             }
3466         }
3467         break;
3468     }
3469 
3470     /* Cleanup */
3471     blk_unref(blk);
3472     if (ret) {
3473         return 1;
3474     }
3475     return 0;
3476 }
3477 
3478 static int img_rebase(int argc, char **argv)
3479 {
3480     BlockBackend *blk = NULL, *blk_old_backing = NULL, *blk_new_backing = NULL;
3481     uint8_t *buf_old = NULL;
3482     uint8_t *buf_new = NULL;
3483     BlockDriverState *bs = NULL, *prefix_chain_bs = NULL;
3484     BlockDriverState *unfiltered_bs;
3485     char *filename;
3486     const char *fmt, *cache, *src_cache, *out_basefmt, *out_baseimg;
3487     int c, flags, src_flags, ret;
3488     bool writethrough, src_writethrough;
3489     int unsafe = 0;
3490     bool force_share = false;
3491     int progress = 0;
3492     bool quiet = false;
3493     Error *local_err = NULL;
3494     bool image_opts = false;
3495 
3496     /* Parse commandline parameters */
3497     fmt = NULL;
3498     cache = BDRV_DEFAULT_CACHE;
3499     src_cache = BDRV_DEFAULT_CACHE;
3500     out_baseimg = NULL;
3501     out_basefmt = NULL;
3502     for(;;) {
3503         static const struct option long_options[] = {
3504             {"help", no_argument, 0, 'h'},
3505             {"object", required_argument, 0, OPTION_OBJECT},
3506             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3507             {"force-share", no_argument, 0, 'U'},
3508             {0, 0, 0, 0}
3509         };
3510         c = getopt_long(argc, argv, ":hf:F:b:upt:T:qU",
3511                         long_options, NULL);
3512         if (c == -1) {
3513             break;
3514         }
3515         switch(c) {
3516         case ':':
3517             missing_argument(argv[optind - 1]);
3518             break;
3519         case '?':
3520             unrecognized_option(argv[optind - 1]);
3521             break;
3522         case 'h':
3523             help();
3524             return 0;
3525         case 'f':
3526             fmt = optarg;
3527             break;
3528         case 'F':
3529             out_basefmt = optarg;
3530             break;
3531         case 'b':
3532             out_baseimg = optarg;
3533             break;
3534         case 'u':
3535             unsafe = 1;
3536             break;
3537         case 'p':
3538             progress = 1;
3539             break;
3540         case 't':
3541             cache = optarg;
3542             break;
3543         case 'T':
3544             src_cache = optarg;
3545             break;
3546         case 'q':
3547             quiet = true;
3548             break;
3549         case OPTION_OBJECT: {
3550             QemuOpts *opts;
3551             opts = qemu_opts_parse_noisily(&qemu_object_opts,
3552                                            optarg, true);
3553             if (!opts) {
3554                 return 1;
3555             }
3556         }   break;
3557         case OPTION_IMAGE_OPTS:
3558             image_opts = true;
3559             break;
3560         case 'U':
3561             force_share = true;
3562             break;
3563         }
3564     }
3565 
3566     if (quiet) {
3567         progress = 0;
3568     }
3569 
3570     if (optind != argc - 1) {
3571         error_exit("Expecting one image file name");
3572     }
3573     if (!unsafe && !out_baseimg) {
3574         error_exit("Must specify backing file (-b) or use unsafe mode (-u)");
3575     }
3576     filename = argv[optind++];
3577 
3578     if (qemu_opts_foreach(&qemu_object_opts,
3579                           user_creatable_add_opts_foreach,
3580                           qemu_img_object_print_help, &error_fatal)) {
3581         return 1;
3582     }
3583 
3584     qemu_progress_init(progress, 2.0);
3585     qemu_progress_print(0, 100);
3586 
3587     flags = BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0);
3588     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
3589     if (ret < 0) {
3590         error_report("Invalid cache option: %s", cache);
3591         goto out;
3592     }
3593 
3594     src_flags = 0;
3595     ret = bdrv_parse_cache_mode(src_cache, &src_flags, &src_writethrough);
3596     if (ret < 0) {
3597         error_report("Invalid source cache option: %s", src_cache);
3598         goto out;
3599     }
3600 
3601     /* The source files are opened read-only, don't care about WCE */
3602     assert((src_flags & BDRV_O_RDWR) == 0);
3603     (void) src_writethrough;
3604 
3605     /*
3606      * Open the images.
3607      *
3608      * Ignore the old backing file for unsafe rebase in case we want to correct
3609      * the reference to a renamed or moved backing file.
3610      */
3611     blk = img_open(image_opts, filename, fmt, flags, writethrough, quiet,
3612                    false);
3613     if (!blk) {
3614         ret = -1;
3615         goto out;
3616     }
3617     bs = blk_bs(blk);
3618 
3619     unfiltered_bs = bdrv_skip_filters(bs);
3620 
3621     if (out_basefmt != NULL) {
3622         if (bdrv_find_format(out_basefmt) == NULL) {
3623             error_report("Invalid format name: '%s'", out_basefmt);
3624             ret = -1;
3625             goto out;
3626         }
3627     }
3628 
3629     /* For safe rebasing we need to compare old and new backing file */
3630     if (!unsafe) {
3631         QDict *options = NULL;
3632         BlockDriverState *base_bs = bdrv_cow_bs(unfiltered_bs);
3633 
3634         if (base_bs) {
3635             blk_old_backing = blk_new(qemu_get_aio_context(),
3636                                       BLK_PERM_CONSISTENT_READ,
3637                                       BLK_PERM_ALL);
3638             ret = blk_insert_bs(blk_old_backing, base_bs,
3639                                 &local_err);
3640             if (ret < 0) {
3641                 error_reportf_err(local_err,
3642                                   "Could not reuse old backing file '%s': ",
3643                                   base_bs->filename);
3644                 goto out;
3645             }
3646         } else {
3647             blk_old_backing = NULL;
3648         }
3649 
3650         if (out_baseimg[0]) {
3651             const char *overlay_filename;
3652             char *out_real_path;
3653 
3654             options = qdict_new();
3655             if (out_basefmt) {
3656                 qdict_put_str(options, "driver", out_basefmt);
3657             }
3658             if (force_share) {
3659                 qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true);
3660             }
3661 
3662             bdrv_refresh_filename(bs);
3663             overlay_filename = bs->exact_filename[0] ? bs->exact_filename
3664                                                      : bs->filename;
3665             out_real_path =
3666                 bdrv_get_full_backing_filename_from_filename(overlay_filename,
3667                                                              out_baseimg,
3668                                                              &local_err);
3669             if (local_err) {
3670                 qobject_unref(options);
3671                 error_reportf_err(local_err,
3672                                   "Could not resolve backing filename: ");
3673                 ret = -1;
3674                 goto out;
3675             }
3676 
3677             /*
3678              * Find out whether we rebase an image on top of a previous image
3679              * in its chain.
3680              */
3681             prefix_chain_bs = bdrv_find_backing_image(bs, out_real_path);
3682             if (prefix_chain_bs) {
3683                 qobject_unref(options);
3684                 g_free(out_real_path);
3685 
3686                 blk_new_backing = blk_new(qemu_get_aio_context(),
3687                                           BLK_PERM_CONSISTENT_READ,
3688                                           BLK_PERM_ALL);
3689                 ret = blk_insert_bs(blk_new_backing, prefix_chain_bs,
3690                                     &local_err);
3691                 if (ret < 0) {
3692                     error_reportf_err(local_err,
3693                                       "Could not reuse backing file '%s': ",
3694                                       out_baseimg);
3695                     goto out;
3696                 }
3697             } else {
3698                 blk_new_backing = blk_new_open(out_real_path, NULL,
3699                                                options, src_flags, &local_err);
3700                 g_free(out_real_path);
3701                 if (!blk_new_backing) {
3702                     error_reportf_err(local_err,
3703                                       "Could not open new backing file '%s': ",
3704                                       out_baseimg);
3705                     ret = -1;
3706                     goto out;
3707                 }
3708             }
3709         }
3710     }
3711 
3712     /*
3713      * Check each unallocated cluster in the COW file. If it is unallocated,
3714      * accesses go to the backing file. We must therefore compare this cluster
3715      * in the old and new backing file, and if they differ we need to copy it
3716      * from the old backing file into the COW file.
3717      *
3718      * If qemu-img crashes during this step, no harm is done. The content of
3719      * the image is the same as the original one at any time.
3720      */
3721     if (!unsafe) {
3722         int64_t size;
3723         int64_t old_backing_size = 0;
3724         int64_t new_backing_size = 0;
3725         uint64_t offset;
3726         int64_t n;
3727         float local_progress = 0;
3728 
3729         buf_old = blk_blockalign(blk, IO_BUF_SIZE);
3730         buf_new = blk_blockalign(blk, IO_BUF_SIZE);
3731 
3732         size = blk_getlength(blk);
3733         if (size < 0) {
3734             error_report("Could not get size of '%s': %s",
3735                          filename, strerror(-size));
3736             ret = -1;
3737             goto out;
3738         }
3739         if (blk_old_backing) {
3740             old_backing_size = blk_getlength(blk_old_backing);
3741             if (old_backing_size < 0) {
3742                 char backing_name[PATH_MAX];
3743 
3744                 bdrv_get_backing_filename(bs, backing_name,
3745                                           sizeof(backing_name));
3746                 error_report("Could not get size of '%s': %s",
3747                              backing_name, strerror(-old_backing_size));
3748                 ret = -1;
3749                 goto out;
3750             }
3751         }
3752         if (blk_new_backing) {
3753             new_backing_size = blk_getlength(blk_new_backing);
3754             if (new_backing_size < 0) {
3755                 error_report("Could not get size of '%s': %s",
3756                              out_baseimg, strerror(-new_backing_size));
3757                 ret = -1;
3758                 goto out;
3759             }
3760         }
3761 
3762         if (size != 0) {
3763             local_progress = (float)100 / (size / MIN(size, IO_BUF_SIZE));
3764         }
3765 
3766         for (offset = 0; offset < size; offset += n) {
3767             bool buf_old_is_zero = false;
3768 
3769             /* How many bytes can we handle with the next read? */
3770             n = MIN(IO_BUF_SIZE, size - offset);
3771 
3772             /* If the cluster is allocated, we don't need to take action */
3773             ret = bdrv_is_allocated(unfiltered_bs, offset, n, &n);
3774             if (ret < 0) {
3775                 error_report("error while reading image metadata: %s",
3776                              strerror(-ret));
3777                 goto out;
3778             }
3779             if (ret) {
3780                 continue;
3781             }
3782 
3783             if (prefix_chain_bs) {
3784                 /*
3785                  * If cluster wasn't changed since prefix_chain, we don't need
3786                  * to take action
3787                  */
3788                 ret = bdrv_is_allocated_above(bdrv_cow_bs(unfiltered_bs),
3789                                               prefix_chain_bs, false,
3790                                               offset, n, &n);
3791                 if (ret < 0) {
3792                     error_report("error while reading image metadata: %s",
3793                                  strerror(-ret));
3794                     goto out;
3795                 }
3796                 if (!ret) {
3797                     continue;
3798                 }
3799             }
3800 
3801             /*
3802              * Read old and new backing file and take into consideration that
3803              * backing files may be smaller than the COW image.
3804              */
3805             if (offset >= old_backing_size) {
3806                 memset(buf_old, 0, n);
3807                 buf_old_is_zero = true;
3808             } else {
3809                 if (offset + n > old_backing_size) {
3810                     n = old_backing_size - offset;
3811                 }
3812 
3813                 ret = blk_pread(blk_old_backing, offset, buf_old, n);
3814                 if (ret < 0) {
3815                     error_report("error while reading from old backing file");
3816                     goto out;
3817                 }
3818             }
3819 
3820             if (offset >= new_backing_size || !blk_new_backing) {
3821                 memset(buf_new, 0, n);
3822             } else {
3823                 if (offset + n > new_backing_size) {
3824                     n = new_backing_size - offset;
3825                 }
3826 
3827                 ret = blk_pread(blk_new_backing, offset, buf_new, n);
3828                 if (ret < 0) {
3829                     error_report("error while reading from new backing file");
3830                     goto out;
3831                 }
3832             }
3833 
3834             /* If they differ, we need to write to the COW file */
3835             uint64_t written = 0;
3836 
3837             while (written < n) {
3838                 int64_t pnum;
3839 
3840                 if (compare_buffers(buf_old + written, buf_new + written,
3841                                     n - written, &pnum))
3842                 {
3843                     if (buf_old_is_zero) {
3844                         ret = blk_pwrite_zeroes(blk, offset + written, pnum, 0);
3845                     } else {
3846                         ret = blk_pwrite(blk, offset + written,
3847                                          buf_old + written, pnum, 0);
3848                     }
3849                     if (ret < 0) {
3850                         error_report("Error while writing to COW image: %s",
3851                             strerror(-ret));
3852                         goto out;
3853                     }
3854                 }
3855 
3856                 written += pnum;
3857             }
3858             qemu_progress_print(local_progress, 100);
3859         }
3860     }
3861 
3862     /*
3863      * Change the backing file. All clusters that are different from the old
3864      * backing file are overwritten in the COW file now, so the visible content
3865      * doesn't change when we switch the backing file.
3866      */
3867     if (out_baseimg && *out_baseimg) {
3868         ret = bdrv_change_backing_file(unfiltered_bs, out_baseimg, out_basefmt,
3869                                        true);
3870     } else {
3871         ret = bdrv_change_backing_file(unfiltered_bs, NULL, NULL, false);
3872     }
3873 
3874     if (ret == -ENOSPC) {
3875         error_report("Could not change the backing file to '%s': No "
3876                      "space left in the file header", out_baseimg);
3877     } else if (ret < 0) {
3878         error_report("Could not change the backing file to '%s': %s",
3879             out_baseimg, strerror(-ret));
3880     }
3881 
3882     qemu_progress_print(100, 0);
3883     /*
3884      * TODO At this point it is possible to check if any clusters that are
3885      * allocated in the COW file are the same in the backing file. If so, they
3886      * could be dropped from the COW file. Don't do this before switching the
3887      * backing file, in case of a crash this would lead to corruption.
3888      */
3889 out:
3890     qemu_progress_end();
3891     /* Cleanup */
3892     if (!unsafe) {
3893         blk_unref(blk_old_backing);
3894         blk_unref(blk_new_backing);
3895     }
3896     qemu_vfree(buf_old);
3897     qemu_vfree(buf_new);
3898 
3899     blk_unref(blk);
3900     if (ret) {
3901         return 1;
3902     }
3903     return 0;
3904 }
3905 
3906 static int img_resize(int argc, char **argv)
3907 {
3908     Error *err = NULL;
3909     int c, ret, relative;
3910     const char *filename, *fmt, *size;
3911     int64_t n, total_size, current_size;
3912     bool quiet = false;
3913     BlockBackend *blk = NULL;
3914     PreallocMode prealloc = PREALLOC_MODE_OFF;
3915     QemuOpts *param;
3916 
3917     static QemuOptsList resize_options = {
3918         .name = "resize_options",
3919         .head = QTAILQ_HEAD_INITIALIZER(resize_options.head),
3920         .desc = {
3921             {
3922                 .name = BLOCK_OPT_SIZE,
3923                 .type = QEMU_OPT_SIZE,
3924                 .help = "Virtual disk size"
3925             }, {
3926                 /* end of list */
3927             }
3928         },
3929     };
3930     bool image_opts = false;
3931     bool shrink = false;
3932 
3933     /* Remove size from argv manually so that negative numbers are not treated
3934      * as options by getopt. */
3935     if (argc < 3) {
3936         error_exit("Not enough arguments");
3937         return 1;
3938     }
3939 
3940     size = argv[--argc];
3941 
3942     /* Parse getopt arguments */
3943     fmt = NULL;
3944     for(;;) {
3945         static const struct option long_options[] = {
3946             {"help", no_argument, 0, 'h'},
3947             {"object", required_argument, 0, OPTION_OBJECT},
3948             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3949             {"preallocation", required_argument, 0, OPTION_PREALLOCATION},
3950             {"shrink", no_argument, 0, OPTION_SHRINK},
3951             {0, 0, 0, 0}
3952         };
3953         c = getopt_long(argc, argv, ":f:hq",
3954                         long_options, NULL);
3955         if (c == -1) {
3956             break;
3957         }
3958         switch(c) {
3959         case ':':
3960             missing_argument(argv[optind - 1]);
3961             break;
3962         case '?':
3963             unrecognized_option(argv[optind - 1]);
3964             break;
3965         case 'h':
3966             help();
3967             break;
3968         case 'f':
3969             fmt = optarg;
3970             break;
3971         case 'q':
3972             quiet = true;
3973             break;
3974         case OPTION_OBJECT: {
3975             QemuOpts *opts;
3976             opts = qemu_opts_parse_noisily(&qemu_object_opts,
3977                                            optarg, true);
3978             if (!opts) {
3979                 return 1;
3980             }
3981         }   break;
3982         case OPTION_IMAGE_OPTS:
3983             image_opts = true;
3984             break;
3985         case OPTION_PREALLOCATION:
3986             prealloc = qapi_enum_parse(&PreallocMode_lookup, optarg,
3987                                        PREALLOC_MODE__MAX, NULL);
3988             if (prealloc == PREALLOC_MODE__MAX) {
3989                 error_report("Invalid preallocation mode '%s'", optarg);
3990                 return 1;
3991             }
3992             break;
3993         case OPTION_SHRINK:
3994             shrink = true;
3995             break;
3996         }
3997     }
3998     if (optind != argc - 1) {
3999         error_exit("Expecting image file name and size");
4000     }
4001     filename = argv[optind++];
4002 
4003     if (qemu_opts_foreach(&qemu_object_opts,
4004                           user_creatable_add_opts_foreach,
4005                           qemu_img_object_print_help, &error_fatal)) {
4006         return 1;
4007     }
4008 
4009     /* Choose grow, shrink, or absolute resize mode */
4010     switch (size[0]) {
4011     case '+':
4012         relative = 1;
4013         size++;
4014         break;
4015     case '-':
4016         relative = -1;
4017         size++;
4018         break;
4019     default:
4020         relative = 0;
4021         break;
4022     }
4023 
4024     /* Parse size */
4025     param = qemu_opts_create(&resize_options, NULL, 0, &error_abort);
4026     if (!qemu_opt_set(param, BLOCK_OPT_SIZE, size, &err)) {
4027         error_report_err(err);
4028         ret = -1;
4029         qemu_opts_del(param);
4030         goto out;
4031     }
4032     n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0);
4033     qemu_opts_del(param);
4034 
4035     blk = img_open(image_opts, filename, fmt,
4036                    BDRV_O_RDWR | BDRV_O_RESIZE, false, quiet,
4037                    false);
4038     if (!blk) {
4039         ret = -1;
4040         goto out;
4041     }
4042 
4043     current_size = blk_getlength(blk);
4044     if (current_size < 0) {
4045         error_report("Failed to inquire current image length: %s",
4046                      strerror(-current_size));
4047         ret = -1;
4048         goto out;
4049     }
4050 
4051     if (relative) {
4052         total_size = current_size + n * relative;
4053     } else {
4054         total_size = n;
4055     }
4056     if (total_size <= 0) {
4057         error_report("New image size must be positive");
4058         ret = -1;
4059         goto out;
4060     }
4061 
4062     if (total_size <= current_size && prealloc != PREALLOC_MODE_OFF) {
4063         error_report("Preallocation can only be used for growing images");
4064         ret = -1;
4065         goto out;
4066     }
4067 
4068     if (total_size < current_size && !shrink) {
4069         error_report("Use the --shrink option to perform a shrink operation.");
4070         warn_report("Shrinking an image will delete all data beyond the "
4071                     "shrunken image's end. Before performing such an "
4072                     "operation, make sure there is no important data there.");
4073         ret = -1;
4074         goto out;
4075     }
4076 
4077     /*
4078      * The user expects the image to have the desired size after
4079      * resizing, so pass @exact=true.  It is of no use to report
4080      * success when the image has not actually been resized.
4081      */
4082     ret = blk_truncate(blk, total_size, true, prealloc, 0, &err);
4083     if (!ret) {
4084         qprintf(quiet, "Image resized.\n");
4085     } else {
4086         error_report_err(err);
4087     }
4088 out:
4089     blk_unref(blk);
4090     if (ret) {
4091         return 1;
4092     }
4093     return 0;
4094 }
4095 
4096 static void amend_status_cb(BlockDriverState *bs,
4097                             int64_t offset, int64_t total_work_size,
4098                             void *opaque)
4099 {
4100     qemu_progress_print(100.f * offset / total_work_size, 0);
4101 }
4102 
4103 static int print_amend_option_help(const char *format)
4104 {
4105     BlockDriver *drv;
4106 
4107     /* Find driver and parse its options */
4108     drv = bdrv_find_format(format);
4109     if (!drv) {
4110         error_report("Unknown file format '%s'", format);
4111         return 1;
4112     }
4113 
4114     if (!drv->bdrv_amend_options) {
4115         error_report("Format driver '%s' does not support option amendment",
4116                      format);
4117         return 1;
4118     }
4119 
4120     /* Every driver supporting amendment must have amend_opts */
4121     assert(drv->amend_opts);
4122 
4123     printf("Amend options for '%s':\n", format);
4124     qemu_opts_print_help(drv->amend_opts, false);
4125     return 0;
4126 }
4127 
4128 static int img_amend(int argc, char **argv)
4129 {
4130     Error *err = NULL;
4131     int c, ret = 0;
4132     char *options = NULL;
4133     QemuOptsList *amend_opts = NULL;
4134     QemuOpts *opts = NULL;
4135     const char *fmt = NULL, *filename, *cache;
4136     int flags;
4137     bool writethrough;
4138     bool quiet = false, progress = false;
4139     BlockBackend *blk = NULL;
4140     BlockDriverState *bs = NULL;
4141     bool image_opts = false;
4142     bool force = false;
4143 
4144     cache = BDRV_DEFAULT_CACHE;
4145     for (;;) {
4146         static const struct option long_options[] = {
4147             {"help", no_argument, 0, 'h'},
4148             {"object", required_argument, 0, OPTION_OBJECT},
4149             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
4150             {"force", no_argument, 0, OPTION_FORCE},
4151             {0, 0, 0, 0}
4152         };
4153         c = getopt_long(argc, argv, ":ho:f:t:pq",
4154                         long_options, NULL);
4155         if (c == -1) {
4156             break;
4157         }
4158 
4159         switch (c) {
4160         case ':':
4161             missing_argument(argv[optind - 1]);
4162             break;
4163         case '?':
4164             unrecognized_option(argv[optind - 1]);
4165             break;
4166         case 'h':
4167             help();
4168             break;
4169         case 'o':
4170             if (accumulate_options(&options, optarg) < 0) {
4171                 ret = -1;
4172                 goto out_no_progress;
4173             }
4174             break;
4175         case 'f':
4176             fmt = optarg;
4177             break;
4178         case 't':
4179             cache = optarg;
4180             break;
4181         case 'p':
4182             progress = true;
4183             break;
4184         case 'q':
4185             quiet = true;
4186             break;
4187         case OPTION_OBJECT:
4188             opts = qemu_opts_parse_noisily(&qemu_object_opts,
4189                                            optarg, true);
4190             if (!opts) {
4191                 ret = -1;
4192                 goto out_no_progress;
4193             }
4194             break;
4195         case OPTION_IMAGE_OPTS:
4196             image_opts = true;
4197             break;
4198         case OPTION_FORCE:
4199             force = true;
4200             break;
4201         }
4202     }
4203 
4204     if (!options) {
4205         error_exit("Must specify options (-o)");
4206     }
4207 
4208     if (qemu_opts_foreach(&qemu_object_opts,
4209                           user_creatable_add_opts_foreach,
4210                           qemu_img_object_print_help, &error_fatal)) {
4211         ret = -1;
4212         goto out_no_progress;
4213     }
4214 
4215     if (quiet) {
4216         progress = false;
4217     }
4218     qemu_progress_init(progress, 1.0);
4219 
4220     filename = (optind == argc - 1) ? argv[argc - 1] : NULL;
4221     if (fmt && has_help_option(options)) {
4222         /* If a format is explicitly specified (and possibly no filename is
4223          * given), print option help here */
4224         ret = print_amend_option_help(fmt);
4225         goto out;
4226     }
4227 
4228     if (optind != argc - 1) {
4229         error_report("Expecting one image file name");
4230         ret = -1;
4231         goto out;
4232     }
4233 
4234     flags = BDRV_O_RDWR;
4235     ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
4236     if (ret < 0) {
4237         error_report("Invalid cache option: %s", cache);
4238         goto out;
4239     }
4240 
4241     blk = img_open(image_opts, filename, fmt, flags, writethrough, quiet,
4242                    false);
4243     if (!blk) {
4244         ret = -1;
4245         goto out;
4246     }
4247     bs = blk_bs(blk);
4248 
4249     fmt = bs->drv->format_name;
4250 
4251     if (has_help_option(options)) {
4252         /* If the format was auto-detected, print option help here */
4253         ret = print_amend_option_help(fmt);
4254         goto out;
4255     }
4256 
4257     if (!bs->drv->bdrv_amend_options) {
4258         error_report("Format driver '%s' does not support option amendment",
4259                      fmt);
4260         ret = -1;
4261         goto out;
4262     }
4263 
4264     /* Every driver supporting amendment must have amend_opts */
4265     assert(bs->drv->amend_opts);
4266 
4267     amend_opts = qemu_opts_append(amend_opts, bs->drv->amend_opts);
4268     opts = qemu_opts_create(amend_opts, NULL, 0, &error_abort);
4269     if (!qemu_opts_do_parse(opts, options, NULL, &err)) {
4270         /* Try to parse options using the create options */
4271         amend_opts = qemu_opts_append(amend_opts, bs->drv->create_opts);
4272         qemu_opts_del(opts);
4273         opts = qemu_opts_create(amend_opts, NULL, 0, &error_abort);
4274         if (qemu_opts_do_parse(opts, options, NULL, NULL)) {
4275             error_append_hint(&err,
4276                               "This option is only supported for image creation\n");
4277         }
4278 
4279         error_report_err(err);
4280         ret = -1;
4281         goto out;
4282     }
4283 
4284     /* In case the driver does not call amend_status_cb() */
4285     qemu_progress_print(0.f, 0);
4286     ret = bdrv_amend_options(bs, opts, &amend_status_cb, NULL, force, &err);
4287     qemu_progress_print(100.f, 0);
4288     if (ret < 0) {
4289         error_report_err(err);
4290         goto out;
4291     }
4292 
4293 out:
4294     qemu_progress_end();
4295 
4296 out_no_progress:
4297     blk_unref(blk);
4298     qemu_opts_del(opts);
4299     qemu_opts_free(amend_opts);
4300     g_free(options);
4301 
4302     if (ret) {
4303         return 1;
4304     }
4305     return 0;
4306 }
4307 
4308 typedef struct BenchData {
4309     BlockBackend *blk;
4310     uint64_t image_size;
4311     bool write;
4312     int bufsize;
4313     int step;
4314     int nrreq;
4315     int n;
4316     int flush_interval;
4317     bool drain_on_flush;
4318     uint8_t *buf;
4319     QEMUIOVector *qiov;
4320 
4321     int in_flight;
4322     bool in_flush;
4323     uint64_t offset;
4324 } BenchData;
4325 
4326 static void bench_undrained_flush_cb(void *opaque, int ret)
4327 {
4328     if (ret < 0) {
4329         error_report("Failed flush request: %s", strerror(-ret));
4330         exit(EXIT_FAILURE);
4331     }
4332 }
4333 
4334 static void bench_cb(void *opaque, int ret)
4335 {
4336     BenchData *b = opaque;
4337     BlockAIOCB *acb;
4338 
4339     if (ret < 0) {
4340         error_report("Failed request: %s", strerror(-ret));
4341         exit(EXIT_FAILURE);
4342     }
4343 
4344     if (b->in_flush) {
4345         /* Just finished a flush with drained queue: Start next requests */
4346         assert(b->in_flight == 0);
4347         b->in_flush = false;
4348     } else if (b->in_flight > 0) {
4349         int remaining = b->n - b->in_flight;
4350 
4351         b->n--;
4352         b->in_flight--;
4353 
4354         /* Time for flush? Drain queue if requested, then flush */
4355         if (b->flush_interval && remaining % b->flush_interval == 0) {
4356             if (!b->in_flight || !b->drain_on_flush) {
4357                 BlockCompletionFunc *cb;
4358 
4359                 if (b->drain_on_flush) {
4360                     b->in_flush = true;
4361                     cb = bench_cb;
4362                 } else {
4363                     cb = bench_undrained_flush_cb;
4364                 }
4365 
4366                 acb = blk_aio_flush(b->blk, cb, b);
4367                 if (!acb) {
4368                     error_report("Failed to issue flush request");
4369                     exit(EXIT_FAILURE);
4370                 }
4371             }
4372             if (b->drain_on_flush) {
4373                 return;
4374             }
4375         }
4376     }
4377 
4378     while (b->n > b->in_flight && b->in_flight < b->nrreq) {
4379         int64_t offset = b->offset;
4380         /* blk_aio_* might look for completed I/Os and kick bench_cb
4381          * again, so make sure this operation is counted by in_flight
4382          * and b->offset is ready for the next submission.
4383          */
4384         b->in_flight++;
4385         b->offset += b->step;
4386         b->offset %= b->image_size;
4387         if (b->write) {
4388             acb = blk_aio_pwritev(b->blk, offset, b->qiov, 0, bench_cb, b);
4389         } else {
4390             acb = blk_aio_preadv(b->blk, offset, b->qiov, 0, bench_cb, b);
4391         }
4392         if (!acb) {
4393             error_report("Failed to issue request");
4394             exit(EXIT_FAILURE);
4395         }
4396     }
4397 }
4398 
4399 static int img_bench(int argc, char **argv)
4400 {
4401     int c, ret = 0;
4402     const char *fmt = NULL, *filename;
4403     bool quiet = false;
4404     bool image_opts = false;
4405     bool is_write = false;
4406     int count = 75000;
4407     int depth = 64;
4408     int64_t offset = 0;
4409     size_t bufsize = 4096;
4410     int pattern = 0;
4411     size_t step = 0;
4412     int flush_interval = 0;
4413     bool drain_on_flush = true;
4414     int64_t image_size;
4415     BlockBackend *blk = NULL;
4416     BenchData data = {};
4417     int flags = 0;
4418     bool writethrough = false;
4419     struct timeval t1, t2;
4420     int i;
4421     bool force_share = false;
4422     size_t buf_size;
4423 
4424     for (;;) {
4425         static const struct option long_options[] = {
4426             {"help", no_argument, 0, 'h'},
4427             {"flush-interval", required_argument, 0, OPTION_FLUSH_INTERVAL},
4428             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
4429             {"pattern", required_argument, 0, OPTION_PATTERN},
4430             {"no-drain", no_argument, 0, OPTION_NO_DRAIN},
4431             {"force-share", no_argument, 0, 'U'},
4432             {0, 0, 0, 0}
4433         };
4434         c = getopt_long(argc, argv, ":hc:d:f:ni:o:qs:S:t:wU", long_options,
4435                         NULL);
4436         if (c == -1) {
4437             break;
4438         }
4439 
4440         switch (c) {
4441         case ':':
4442             missing_argument(argv[optind - 1]);
4443             break;
4444         case '?':
4445             unrecognized_option(argv[optind - 1]);
4446             break;
4447         case 'h':
4448             help();
4449             break;
4450         case 'c':
4451         {
4452             unsigned long res;
4453 
4454             if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
4455                 error_report("Invalid request count specified");
4456                 return 1;
4457             }
4458             count = res;
4459             break;
4460         }
4461         case 'd':
4462         {
4463             unsigned long res;
4464 
4465             if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
4466                 error_report("Invalid queue depth specified");
4467                 return 1;
4468             }
4469             depth = res;
4470             break;
4471         }
4472         case 'f':
4473             fmt = optarg;
4474             break;
4475         case 'n':
4476             flags |= BDRV_O_NATIVE_AIO;
4477             break;
4478         case 'i':
4479             ret = bdrv_parse_aio(optarg, &flags);
4480             if (ret < 0) {
4481                 error_report("Invalid aio option: %s", optarg);
4482                 ret = -1;
4483                 goto out;
4484             }
4485             break;
4486         case 'o':
4487         {
4488             offset = cvtnum("offset", optarg);
4489             if (offset < 0) {
4490                 return 1;
4491             }
4492             break;
4493         }
4494             break;
4495         case 'q':
4496             quiet = true;
4497             break;
4498         case 's':
4499         {
4500             int64_t sval;
4501 
4502             sval = cvtnum_full("buffer size", optarg, 0, INT_MAX);
4503             if (sval < 0) {
4504                 return 1;
4505             }
4506 
4507             bufsize = sval;
4508             break;
4509         }
4510         case 'S':
4511         {
4512             int64_t sval;
4513 
4514             sval = cvtnum_full("step_size", optarg, 0, INT_MAX);
4515             if (sval < 0) {
4516                 return 1;
4517             }
4518 
4519             step = sval;
4520             break;
4521         }
4522         case 't':
4523             ret = bdrv_parse_cache_mode(optarg, &flags, &writethrough);
4524             if (ret < 0) {
4525                 error_report("Invalid cache mode");
4526                 ret = -1;
4527                 goto out;
4528             }
4529             break;
4530         case 'w':
4531             flags |= BDRV_O_RDWR;
4532             is_write = true;
4533             break;
4534         case 'U':
4535             force_share = true;
4536             break;
4537         case OPTION_PATTERN:
4538         {
4539             unsigned long res;
4540 
4541             if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > 0xff) {
4542                 error_report("Invalid pattern byte specified");
4543                 return 1;
4544             }
4545             pattern = res;
4546             break;
4547         }
4548         case OPTION_FLUSH_INTERVAL:
4549         {
4550             unsigned long res;
4551 
4552             if (qemu_strtoul(optarg, NULL, 0, &res) < 0 || res > INT_MAX) {
4553                 error_report("Invalid flush interval specified");
4554                 return 1;
4555             }
4556             flush_interval = res;
4557             break;
4558         }
4559         case OPTION_NO_DRAIN:
4560             drain_on_flush = false;
4561             break;
4562         case OPTION_IMAGE_OPTS:
4563             image_opts = true;
4564             break;
4565         }
4566     }
4567 
4568     if (optind != argc - 1) {
4569         error_exit("Expecting one image file name");
4570     }
4571     filename = argv[argc - 1];
4572 
4573     if (!is_write && flush_interval) {
4574         error_report("--flush-interval is only available in write tests");
4575         ret = -1;
4576         goto out;
4577     }
4578     if (flush_interval && flush_interval < depth) {
4579         error_report("Flush interval can't be smaller than depth");
4580         ret = -1;
4581         goto out;
4582     }
4583 
4584     blk = img_open(image_opts, filename, fmt, flags, writethrough, quiet,
4585                    force_share);
4586     if (!blk) {
4587         ret = -1;
4588         goto out;
4589     }
4590 
4591     image_size = blk_getlength(blk);
4592     if (image_size < 0) {
4593         ret = image_size;
4594         goto out;
4595     }
4596 
4597     data = (BenchData) {
4598         .blk            = blk,
4599         .image_size     = image_size,
4600         .bufsize        = bufsize,
4601         .step           = step ?: bufsize,
4602         .nrreq          = depth,
4603         .n              = count,
4604         .offset         = offset,
4605         .write          = is_write,
4606         .flush_interval = flush_interval,
4607         .drain_on_flush = drain_on_flush,
4608     };
4609     printf("Sending %d %s requests, %d bytes each, %d in parallel "
4610            "(starting at offset %" PRId64 ", step size %d)\n",
4611            data.n, data.write ? "write" : "read", data.bufsize, data.nrreq,
4612            data.offset, data.step);
4613     if (flush_interval) {
4614         printf("Sending flush every %d requests\n", flush_interval);
4615     }
4616 
4617     buf_size = data.nrreq * data.bufsize;
4618     data.buf = blk_blockalign(blk, buf_size);
4619     memset(data.buf, pattern, data.nrreq * data.bufsize);
4620 
4621     blk_register_buf(blk, data.buf, buf_size);
4622 
4623     data.qiov = g_new(QEMUIOVector, data.nrreq);
4624     for (i = 0; i < data.nrreq; i++) {
4625         qemu_iovec_init(&data.qiov[i], 1);
4626         qemu_iovec_add(&data.qiov[i],
4627                        data.buf + i * data.bufsize, data.bufsize);
4628     }
4629 
4630     gettimeofday(&t1, NULL);
4631     bench_cb(&data, 0);
4632 
4633     while (data.n > 0) {
4634         main_loop_wait(false);
4635     }
4636     gettimeofday(&t2, NULL);
4637 
4638     printf("Run completed in %3.3f seconds.\n",
4639            (t2.tv_sec - t1.tv_sec)
4640            + ((double)(t2.tv_usec - t1.tv_usec) / 1000000));
4641 
4642 out:
4643     if (data.buf) {
4644         blk_unregister_buf(blk, data.buf);
4645     }
4646     qemu_vfree(data.buf);
4647     blk_unref(blk);
4648 
4649     if (ret) {
4650         return 1;
4651     }
4652     return 0;
4653 }
4654 
4655 enum ImgBitmapAct {
4656     BITMAP_ADD,
4657     BITMAP_REMOVE,
4658     BITMAP_CLEAR,
4659     BITMAP_ENABLE,
4660     BITMAP_DISABLE,
4661     BITMAP_MERGE,
4662 };
4663 typedef struct ImgBitmapAction {
4664     enum ImgBitmapAct act;
4665     const char *src; /* only used for merge */
4666     QSIMPLEQ_ENTRY(ImgBitmapAction) next;
4667 } ImgBitmapAction;
4668 
4669 static int img_bitmap(int argc, char **argv)
4670 {
4671     Error *err = NULL;
4672     int c, ret = 1;
4673     QemuOpts *opts = NULL;
4674     const char *fmt = NULL, *src_fmt = NULL, *src_filename = NULL;
4675     const char *filename, *bitmap;
4676     BlockBackend *blk = NULL, *src = NULL;
4677     BlockDriverState *bs = NULL, *src_bs = NULL;
4678     bool image_opts = false;
4679     int64_t granularity = 0;
4680     bool add = false, merge = false;
4681     QSIMPLEQ_HEAD(, ImgBitmapAction) actions;
4682     ImgBitmapAction *act, *act_next;
4683     const char *op;
4684 
4685     QSIMPLEQ_INIT(&actions);
4686 
4687     for (;;) {
4688         static const struct option long_options[] = {
4689             {"help", no_argument, 0, 'h'},
4690             {"object", required_argument, 0, OPTION_OBJECT},
4691             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
4692             {"add", no_argument, 0, OPTION_ADD},
4693             {"remove", no_argument, 0, OPTION_REMOVE},
4694             {"clear", no_argument, 0, OPTION_CLEAR},
4695             {"enable", no_argument, 0, OPTION_ENABLE},
4696             {"disable", no_argument, 0, OPTION_DISABLE},
4697             {"merge", required_argument, 0, OPTION_MERGE},
4698             {"granularity", required_argument, 0, 'g'},
4699             {"source-file", required_argument, 0, 'b'},
4700             {"source-format", required_argument, 0, 'F'},
4701             {0, 0, 0, 0}
4702         };
4703         c = getopt_long(argc, argv, ":b:f:F:g:h", long_options, NULL);
4704         if (c == -1) {
4705             break;
4706         }
4707 
4708         switch (c) {
4709         case ':':
4710             missing_argument(argv[optind - 1]);
4711             break;
4712         case '?':
4713             unrecognized_option(argv[optind - 1]);
4714             break;
4715         case 'h':
4716             help();
4717             break;
4718         case 'b':
4719             src_filename = optarg;
4720             break;
4721         case 'f':
4722             fmt = optarg;
4723             break;
4724         case 'F':
4725             src_fmt = optarg;
4726             break;
4727         case 'g':
4728             granularity = cvtnum("granularity", optarg);
4729             if (granularity < 0) {
4730                 return 1;
4731             }
4732             break;
4733         case OPTION_ADD:
4734             act = g_new0(ImgBitmapAction, 1);
4735             act->act = BITMAP_ADD;
4736             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4737             add = true;
4738             break;
4739         case OPTION_REMOVE:
4740             act = g_new0(ImgBitmapAction, 1);
4741             act->act = BITMAP_REMOVE;
4742             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4743             break;
4744         case OPTION_CLEAR:
4745             act = g_new0(ImgBitmapAction, 1);
4746             act->act = BITMAP_CLEAR;
4747             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4748             break;
4749         case OPTION_ENABLE:
4750             act = g_new0(ImgBitmapAction, 1);
4751             act->act = BITMAP_ENABLE;
4752             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4753             break;
4754         case OPTION_DISABLE:
4755             act = g_new0(ImgBitmapAction, 1);
4756             act->act = BITMAP_DISABLE;
4757             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4758             break;
4759         case OPTION_MERGE:
4760             act = g_new0(ImgBitmapAction, 1);
4761             act->act = BITMAP_MERGE;
4762             act->src = optarg;
4763             QSIMPLEQ_INSERT_TAIL(&actions, act, next);
4764             merge = true;
4765             break;
4766         case OPTION_OBJECT:
4767             opts = qemu_opts_parse_noisily(&qemu_object_opts, optarg, true);
4768             if (!opts) {
4769                 goto out;
4770             }
4771             break;
4772         case OPTION_IMAGE_OPTS:
4773             image_opts = true;
4774             break;
4775         }
4776     }
4777 
4778     if (qemu_opts_foreach(&qemu_object_opts,
4779                           user_creatable_add_opts_foreach,
4780                           qemu_img_object_print_help, &error_fatal)) {
4781         goto out;
4782     }
4783 
4784     if (QSIMPLEQ_EMPTY(&actions)) {
4785         error_report("Need at least one of --add, --remove, --clear, "
4786                      "--enable, --disable, or --merge");
4787         goto out;
4788     }
4789 
4790     if (granularity && !add) {
4791         error_report("granularity only supported with --add");
4792         goto out;
4793     }
4794     if (src_fmt && !src_filename) {
4795         error_report("-F only supported with -b");
4796         goto out;
4797     }
4798     if (src_filename && !merge) {
4799         error_report("Merge bitmap source file only supported with "
4800                      "--merge");
4801         goto out;
4802     }
4803 
4804     if (optind != argc - 2) {
4805         error_report("Expecting filename and bitmap name");
4806         goto out;
4807     }
4808 
4809     filename = argv[optind];
4810     bitmap = argv[optind + 1];
4811 
4812     /*
4813      * No need to open backing chains; we will be manipulating bitmaps
4814      * directly in this image without reference to image contents.
4815      */
4816     blk = img_open(image_opts, filename, fmt, BDRV_O_RDWR | BDRV_O_NO_BACKING,
4817                    false, false, false);
4818     if (!blk) {
4819         goto out;
4820     }
4821     bs = blk_bs(blk);
4822     if (src_filename) {
4823         src = img_open(false, src_filename, src_fmt, BDRV_O_NO_BACKING,
4824                        false, false, false);
4825         if (!src) {
4826             goto out;
4827         }
4828         src_bs = blk_bs(src);
4829     } else {
4830         src_bs = bs;
4831     }
4832 
4833     QSIMPLEQ_FOREACH_SAFE(act, &actions, next, act_next) {
4834         switch (act->act) {
4835         case BITMAP_ADD:
4836             qmp_block_dirty_bitmap_add(bs->node_name, bitmap,
4837                                        !!granularity, granularity, true, true,
4838                                        false, false, &err);
4839             op = "add";
4840             break;
4841         case BITMAP_REMOVE:
4842             qmp_block_dirty_bitmap_remove(bs->node_name, bitmap, &err);
4843             op = "remove";
4844             break;
4845         case BITMAP_CLEAR:
4846             qmp_block_dirty_bitmap_clear(bs->node_name, bitmap, &err);
4847             op = "clear";
4848             break;
4849         case BITMAP_ENABLE:
4850             qmp_block_dirty_bitmap_enable(bs->node_name, bitmap, &err);
4851             op = "enable";
4852             break;
4853         case BITMAP_DISABLE:
4854             qmp_block_dirty_bitmap_disable(bs->node_name, bitmap, &err);
4855             op = "disable";
4856             break;
4857         case BITMAP_MERGE:
4858             do_dirty_bitmap_merge(bs->node_name, bitmap, src_bs->node_name,
4859                                   act->src, &err);
4860             op = "merge";
4861             break;
4862         default:
4863             g_assert_not_reached();
4864         }
4865 
4866         if (err) {
4867             error_reportf_err(err, "Operation %s on bitmap %s failed: ",
4868                               op, bitmap);
4869             goto out;
4870         }
4871         g_free(act);
4872     }
4873 
4874     ret = 0;
4875 
4876  out:
4877     blk_unref(src);
4878     blk_unref(blk);
4879     qemu_opts_del(opts);
4880     return ret;
4881 }
4882 
4883 #define C_BS      01
4884 #define C_COUNT   02
4885 #define C_IF      04
4886 #define C_OF      010
4887 #define C_SKIP    020
4888 
4889 struct DdInfo {
4890     unsigned int flags;
4891     int64_t count;
4892 };
4893 
4894 struct DdIo {
4895     int bsz;    /* Block size */
4896     char *filename;
4897     uint8_t *buf;
4898     int64_t offset;
4899 };
4900 
4901 struct DdOpts {
4902     const char *name;
4903     int (*f)(const char *, struct DdIo *, struct DdIo *, struct DdInfo *);
4904     unsigned int flag;
4905 };
4906 
4907 static int img_dd_bs(const char *arg,
4908                      struct DdIo *in, struct DdIo *out,
4909                      struct DdInfo *dd)
4910 {
4911     int64_t res;
4912 
4913     res = cvtnum_full("bs", arg, 1, INT_MAX);
4914 
4915     if (res < 0) {
4916         return 1;
4917     }
4918     in->bsz = out->bsz = res;
4919 
4920     return 0;
4921 }
4922 
4923 static int img_dd_count(const char *arg,
4924                         struct DdIo *in, struct DdIo *out,
4925                         struct DdInfo *dd)
4926 {
4927     dd->count = cvtnum("count", arg);
4928 
4929     if (dd->count < 0) {
4930         return 1;
4931     }
4932 
4933     return 0;
4934 }
4935 
4936 static int img_dd_if(const char *arg,
4937                      struct DdIo *in, struct DdIo *out,
4938                      struct DdInfo *dd)
4939 {
4940     in->filename = g_strdup(arg);
4941 
4942     return 0;
4943 }
4944 
4945 static int img_dd_of(const char *arg,
4946                      struct DdIo *in, struct DdIo *out,
4947                      struct DdInfo *dd)
4948 {
4949     out->filename = g_strdup(arg);
4950 
4951     return 0;
4952 }
4953 
4954 static int img_dd_skip(const char *arg,
4955                        struct DdIo *in, struct DdIo *out,
4956                        struct DdInfo *dd)
4957 {
4958     in->offset = cvtnum("skip", arg);
4959 
4960     if (in->offset < 0) {
4961         return 1;
4962     }
4963 
4964     return 0;
4965 }
4966 
4967 static int img_dd(int argc, char **argv)
4968 {
4969     int ret = 0;
4970     char *arg = NULL;
4971     char *tmp;
4972     BlockDriver *drv = NULL, *proto_drv = NULL;
4973     BlockBackend *blk1 = NULL, *blk2 = NULL;
4974     QemuOpts *opts = NULL;
4975     QemuOptsList *create_opts = NULL;
4976     Error *local_err = NULL;
4977     bool image_opts = false;
4978     int c, i;
4979     const char *out_fmt = "raw";
4980     const char *fmt = NULL;
4981     int64_t size = 0;
4982     int64_t block_count = 0, out_pos, in_pos;
4983     bool force_share = false;
4984     struct DdInfo dd = {
4985         .flags = 0,
4986         .count = 0,
4987     };
4988     struct DdIo in = {
4989         .bsz = 512, /* Block size is by default 512 bytes */
4990         .filename = NULL,
4991         .buf = NULL,
4992         .offset = 0
4993     };
4994     struct DdIo out = {
4995         .bsz = 512,
4996         .filename = NULL,
4997         .buf = NULL,
4998         .offset = 0
4999     };
5000 
5001     const struct DdOpts options[] = {
5002         { "bs", img_dd_bs, C_BS },
5003         { "count", img_dd_count, C_COUNT },
5004         { "if", img_dd_if, C_IF },
5005         { "of", img_dd_of, C_OF },
5006         { "skip", img_dd_skip, C_SKIP },
5007         { NULL, NULL, 0 }
5008     };
5009     const struct option long_options[] = {
5010         { "help", no_argument, 0, 'h'},
5011         { "object", required_argument, 0, OPTION_OBJECT},
5012         { "image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
5013         { "force-share", no_argument, 0, 'U'},
5014         { 0, 0, 0, 0 }
5015     };
5016 
5017     while ((c = getopt_long(argc, argv, ":hf:O:U", long_options, NULL))) {
5018         if (c == EOF) {
5019             break;
5020         }
5021         switch (c) {
5022         case 'O':
5023             out_fmt = optarg;
5024             break;
5025         case 'f':
5026             fmt = optarg;
5027             break;
5028         case ':':
5029             missing_argument(argv[optind - 1]);
5030             break;
5031         case '?':
5032             unrecognized_option(argv[optind - 1]);
5033             break;
5034         case 'h':
5035             help();
5036             break;
5037         case 'U':
5038             force_share = true;
5039             break;
5040         case OPTION_OBJECT:
5041             if (!qemu_opts_parse_noisily(&qemu_object_opts, optarg, true)) {
5042                 ret = -1;
5043                 goto out;
5044             }
5045             break;
5046         case OPTION_IMAGE_OPTS:
5047             image_opts = true;
5048             break;
5049         }
5050     }
5051 
5052     for (i = optind; i < argc; i++) {
5053         int j;
5054         arg = g_strdup(argv[i]);
5055 
5056         tmp = strchr(arg, '=');
5057         if (tmp == NULL) {
5058             error_report("unrecognized operand %s", arg);
5059             ret = -1;
5060             goto out;
5061         }
5062 
5063         *tmp++ = '\0';
5064 
5065         for (j = 0; options[j].name != NULL; j++) {
5066             if (!strcmp(arg, options[j].name)) {
5067                 break;
5068             }
5069         }
5070         if (options[j].name == NULL) {
5071             error_report("unrecognized operand %s", arg);
5072             ret = -1;
5073             goto out;
5074         }
5075 
5076         if (options[j].f(tmp, &in, &out, &dd) != 0) {
5077             ret = -1;
5078             goto out;
5079         }
5080         dd.flags |= options[j].flag;
5081         g_free(arg);
5082         arg = NULL;
5083     }
5084 
5085     if (!(dd.flags & C_IF && dd.flags & C_OF)) {
5086         error_report("Must specify both input and output files");
5087         ret = -1;
5088         goto out;
5089     }
5090 
5091     if (qemu_opts_foreach(&qemu_object_opts,
5092                           user_creatable_add_opts_foreach,
5093                           qemu_img_object_print_help, &error_fatal)) {
5094         ret = -1;
5095         goto out;
5096     }
5097 
5098     blk1 = img_open(image_opts, in.filename, fmt, 0, false, false,
5099                     force_share);
5100 
5101     if (!blk1) {
5102         ret = -1;
5103         goto out;
5104     }
5105 
5106     drv = bdrv_find_format(out_fmt);
5107     if (!drv) {
5108         error_report("Unknown file format");
5109         ret = -1;
5110         goto out;
5111     }
5112     proto_drv = bdrv_find_protocol(out.filename, true, &local_err);
5113 
5114     if (!proto_drv) {
5115         error_report_err(local_err);
5116         ret = -1;
5117         goto out;
5118     }
5119     if (!drv->create_opts) {
5120         error_report("Format driver '%s' does not support image creation",
5121                      drv->format_name);
5122         ret = -1;
5123         goto out;
5124     }
5125     if (!proto_drv->create_opts) {
5126         error_report("Protocol driver '%s' does not support image creation",
5127                      proto_drv->format_name);
5128         ret = -1;
5129         goto out;
5130     }
5131     create_opts = qemu_opts_append(create_opts, drv->create_opts);
5132     create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
5133 
5134     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
5135 
5136     size = blk_getlength(blk1);
5137     if (size < 0) {
5138         error_report("Failed to get size for '%s'", in.filename);
5139         ret = -1;
5140         goto out;
5141     }
5142 
5143     if (dd.flags & C_COUNT && dd.count <= INT64_MAX / in.bsz &&
5144         dd.count * in.bsz < size) {
5145         size = dd.count * in.bsz;
5146     }
5147 
5148     /* Overflow means the specified offset is beyond input image's size */
5149     if (dd.flags & C_SKIP && (in.offset > INT64_MAX / in.bsz ||
5150                               size < in.bsz * in.offset)) {
5151         qemu_opt_set_number(opts, BLOCK_OPT_SIZE, 0, &error_abort);
5152     } else {
5153         qemu_opt_set_number(opts, BLOCK_OPT_SIZE,
5154                             size - in.bsz * in.offset, &error_abort);
5155     }
5156 
5157     ret = bdrv_create(drv, out.filename, opts, &local_err);
5158     if (ret < 0) {
5159         error_reportf_err(local_err,
5160                           "%s: error while creating output image: ",
5161                           out.filename);
5162         ret = -1;
5163         goto out;
5164     }
5165 
5166     /* TODO, we can't honour --image-opts for the target,
5167      * since it needs to be given in a format compatible
5168      * with the bdrv_create() call above which does not
5169      * support image-opts style.
5170      */
5171     blk2 = img_open_file(out.filename, NULL, out_fmt, BDRV_O_RDWR,
5172                          false, false, false);
5173 
5174     if (!blk2) {
5175         ret = -1;
5176         goto out;
5177     }
5178 
5179     if (dd.flags & C_SKIP && (in.offset > INT64_MAX / in.bsz ||
5180                               size < in.offset * in.bsz)) {
5181         /* We give a warning if the skip option is bigger than the input
5182          * size and create an empty output disk image (i.e. like dd(1)).
5183          */
5184         error_report("%s: cannot skip to specified offset", in.filename);
5185         in_pos = size;
5186     } else {
5187         in_pos = in.offset * in.bsz;
5188     }
5189 
5190     in.buf = g_new(uint8_t, in.bsz);
5191 
5192     for (out_pos = 0; in_pos < size; block_count++) {
5193         int in_ret, out_ret;
5194 
5195         if (in_pos + in.bsz > size) {
5196             in_ret = blk_pread(blk1, in_pos, in.buf, size - in_pos);
5197         } else {
5198             in_ret = blk_pread(blk1, in_pos, in.buf, in.bsz);
5199         }
5200         if (in_ret < 0) {
5201             error_report("error while reading from input image file: %s",
5202                          strerror(-in_ret));
5203             ret = -1;
5204             goto out;
5205         }
5206         in_pos += in_ret;
5207 
5208         out_ret = blk_pwrite(blk2, out_pos, in.buf, in_ret, 0);
5209 
5210         if (out_ret < 0) {
5211             error_report("error while writing to output image file: %s",
5212                          strerror(-out_ret));
5213             ret = -1;
5214             goto out;
5215         }
5216         out_pos += out_ret;
5217     }
5218 
5219 out:
5220     g_free(arg);
5221     qemu_opts_del(opts);
5222     qemu_opts_free(create_opts);
5223     blk_unref(blk1);
5224     blk_unref(blk2);
5225     g_free(in.filename);
5226     g_free(out.filename);
5227     g_free(in.buf);
5228     g_free(out.buf);
5229 
5230     if (ret) {
5231         return 1;
5232     }
5233     return 0;
5234 }
5235 
5236 static void dump_json_block_measure_info(BlockMeasureInfo *info)
5237 {
5238     GString *str;
5239     QObject *obj;
5240     Visitor *v = qobject_output_visitor_new(&obj);
5241 
5242     visit_type_BlockMeasureInfo(v, NULL, &info, &error_abort);
5243     visit_complete(v, &obj);
5244     str = qobject_to_json_pretty(obj, true);
5245     assert(str != NULL);
5246     printf("%s\n", str->str);
5247     qobject_unref(obj);
5248     visit_free(v);
5249     g_string_free(str, true);
5250 }
5251 
5252 static int img_measure(int argc, char **argv)
5253 {
5254     static const struct option long_options[] = {
5255         {"help", no_argument, 0, 'h'},
5256         {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
5257         {"object", required_argument, 0, OPTION_OBJECT},
5258         {"output", required_argument, 0, OPTION_OUTPUT},
5259         {"size", required_argument, 0, OPTION_SIZE},
5260         {"force-share", no_argument, 0, 'U'},
5261         {0, 0, 0, 0}
5262     };
5263     OutputFormat output_format = OFORMAT_HUMAN;
5264     BlockBackend *in_blk = NULL;
5265     BlockDriver *drv;
5266     const char *filename = NULL;
5267     const char *fmt = NULL;
5268     const char *out_fmt = "raw";
5269     char *options = NULL;
5270     char *snapshot_name = NULL;
5271     bool force_share = false;
5272     QemuOpts *opts = NULL;
5273     QemuOpts *object_opts = NULL;
5274     QemuOpts *sn_opts = NULL;
5275     QemuOptsList *create_opts = NULL;
5276     bool image_opts = false;
5277     uint64_t img_size = UINT64_MAX;
5278     BlockMeasureInfo *info = NULL;
5279     Error *local_err = NULL;
5280     int ret = 1;
5281     int c;
5282 
5283     while ((c = getopt_long(argc, argv, "hf:O:o:l:U",
5284                             long_options, NULL)) != -1) {
5285         switch (c) {
5286         case '?':
5287         case 'h':
5288             help();
5289             break;
5290         case 'f':
5291             fmt = optarg;
5292             break;
5293         case 'O':
5294             out_fmt = optarg;
5295             break;
5296         case 'o':
5297             if (accumulate_options(&options, optarg) < 0) {
5298                 goto out;
5299             }
5300             break;
5301         case 'l':
5302             if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
5303                 sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
5304                                                   optarg, false);
5305                 if (!sn_opts) {
5306                     error_report("Failed in parsing snapshot param '%s'",
5307                                  optarg);
5308                     goto out;
5309                 }
5310             } else {
5311                 snapshot_name = optarg;
5312             }
5313             break;
5314         case 'U':
5315             force_share = true;
5316             break;
5317         case OPTION_OBJECT:
5318             object_opts = qemu_opts_parse_noisily(&qemu_object_opts,
5319                                                   optarg, true);
5320             if (!object_opts) {
5321                 goto out;
5322             }
5323             break;
5324         case OPTION_IMAGE_OPTS:
5325             image_opts = true;
5326             break;
5327         case OPTION_OUTPUT:
5328             if (!strcmp(optarg, "json")) {
5329                 output_format = OFORMAT_JSON;
5330             } else if (!strcmp(optarg, "human")) {
5331                 output_format = OFORMAT_HUMAN;
5332             } else {
5333                 error_report("--output must be used with human or json "
5334                              "as argument.");
5335                 goto out;
5336             }
5337             break;
5338         case OPTION_SIZE:
5339         {
5340             int64_t sval;
5341 
5342             sval = cvtnum("image size", optarg);
5343             if (sval < 0) {
5344                 goto out;
5345             }
5346             img_size = (uint64_t)sval;
5347         }
5348         break;
5349         }
5350     }
5351 
5352     if (qemu_opts_foreach(&qemu_object_opts,
5353                           user_creatable_add_opts_foreach,
5354                           qemu_img_object_print_help, &error_fatal)) {
5355         goto out;
5356     }
5357 
5358     if (argc - optind > 1) {
5359         error_report("At most one filename argument is allowed.");
5360         goto out;
5361     } else if (argc - optind == 1) {
5362         filename = argv[optind];
5363     }
5364 
5365     if (!filename && (image_opts || fmt || snapshot_name || sn_opts)) {
5366         error_report("--image-opts, -f, and -l require a filename argument.");
5367         goto out;
5368     }
5369     if (filename && img_size != UINT64_MAX) {
5370         error_report("--size N cannot be used together with a filename.");
5371         goto out;
5372     }
5373     if (!filename && img_size == UINT64_MAX) {
5374         error_report("Either --size N or one filename must be specified.");
5375         goto out;
5376     }
5377 
5378     if (filename) {
5379         in_blk = img_open(image_opts, filename, fmt, 0,
5380                           false, false, force_share);
5381         if (!in_blk) {
5382             goto out;
5383         }
5384 
5385         if (sn_opts) {
5386             bdrv_snapshot_load_tmp(blk_bs(in_blk),
5387                     qemu_opt_get(sn_opts, SNAPSHOT_OPT_ID),
5388                     qemu_opt_get(sn_opts, SNAPSHOT_OPT_NAME),
5389                     &local_err);
5390         } else if (snapshot_name != NULL) {
5391             bdrv_snapshot_load_tmp_by_id_or_name(blk_bs(in_blk),
5392                     snapshot_name, &local_err);
5393         }
5394         if (local_err) {
5395             error_reportf_err(local_err, "Failed to load snapshot: ");
5396             goto out;
5397         }
5398     }
5399 
5400     drv = bdrv_find_format(out_fmt);
5401     if (!drv) {
5402         error_report("Unknown file format '%s'", out_fmt);
5403         goto out;
5404     }
5405     if (!drv->create_opts) {
5406         error_report("Format driver '%s' does not support image creation",
5407                      drv->format_name);
5408         goto out;
5409     }
5410 
5411     create_opts = qemu_opts_append(create_opts, drv->create_opts);
5412     create_opts = qemu_opts_append(create_opts, bdrv_file.create_opts);
5413     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
5414     if (options) {
5415         if (!qemu_opts_do_parse(opts, options, NULL, &local_err)) {
5416             error_report_err(local_err);
5417             error_report("Invalid options for file format '%s'", out_fmt);
5418             goto out;
5419         }
5420     }
5421     if (img_size != UINT64_MAX) {
5422         qemu_opt_set_number(opts, BLOCK_OPT_SIZE, img_size, &error_abort);
5423     }
5424 
5425     info = bdrv_measure(drv, opts, in_blk ? blk_bs(in_blk) : NULL, &local_err);
5426     if (local_err) {
5427         error_report_err(local_err);
5428         goto out;
5429     }
5430 
5431     if (output_format == OFORMAT_HUMAN) {
5432         printf("required size: %" PRIu64 "\n", info->required);
5433         printf("fully allocated size: %" PRIu64 "\n", info->fully_allocated);
5434         if (info->has_bitmaps) {
5435             printf("bitmaps size: %" PRIu64 "\n", info->bitmaps);
5436         }
5437     } else {
5438         dump_json_block_measure_info(info);
5439     }
5440 
5441     ret = 0;
5442 
5443 out:
5444     qapi_free_BlockMeasureInfo(info);
5445     qemu_opts_del(object_opts);
5446     qemu_opts_del(opts);
5447     qemu_opts_del(sn_opts);
5448     qemu_opts_free(create_opts);
5449     g_free(options);
5450     blk_unref(in_blk);
5451     return ret;
5452 }
5453 
5454 static const img_cmd_t img_cmds[] = {
5455 #define DEF(option, callback, arg_string)        \
5456     { option, callback },
5457 #include "qemu-img-cmds.h"
5458 #undef DEF
5459     { NULL, NULL, },
5460 };
5461 
5462 int main(int argc, char **argv)
5463 {
5464     const img_cmd_t *cmd;
5465     const char *cmdname;
5466     Error *local_error = NULL;
5467     int c;
5468     static const struct option long_options[] = {
5469         {"help", no_argument, 0, 'h'},
5470         {"version", no_argument, 0, 'V'},
5471         {"trace", required_argument, NULL, 'T'},
5472         {0, 0, 0, 0}
5473     };
5474 
5475 #ifdef CONFIG_POSIX
5476     signal(SIGPIPE, SIG_IGN);
5477 #endif
5478 
5479     socket_init();
5480     error_init(argv[0]);
5481     module_call_init(MODULE_INIT_TRACE);
5482     qemu_init_exec_dir(argv[0]);
5483 
5484     if (qemu_init_main_loop(&local_error)) {
5485         error_report_err(local_error);
5486         exit(EXIT_FAILURE);
5487     }
5488 
5489     qcrypto_init(&error_fatal);
5490 
5491     module_call_init(MODULE_INIT_QOM);
5492     bdrv_init();
5493     if (argc < 2) {
5494         error_exit("Not enough arguments");
5495     }
5496 
5497     qemu_add_opts(&qemu_object_opts);
5498     qemu_add_opts(&qemu_source_opts);
5499     qemu_add_opts(&qemu_trace_opts);
5500 
5501     while ((c = getopt_long(argc, argv, "+:hVT:", long_options, NULL)) != -1) {
5502         switch (c) {
5503         case ':':
5504             missing_argument(argv[optind - 1]);
5505             return 0;
5506         case '?':
5507             unrecognized_option(argv[optind - 1]);
5508             return 0;
5509         case 'h':
5510             help();
5511             return 0;
5512         case 'V':
5513             printf(QEMU_IMG_VERSION);
5514             return 0;
5515         case 'T':
5516             trace_opt_parse(optarg);
5517             break;
5518         }
5519     }
5520 
5521     cmdname = argv[optind];
5522 
5523     /* reset getopt_long scanning */
5524     argc -= optind;
5525     if (argc < 1) {
5526         return 0;
5527     }
5528     argv += optind;
5529     qemu_reset_optind();
5530 
5531     if (!trace_init_backends()) {
5532         exit(1);
5533     }
5534     trace_init_file();
5535     qemu_set_log(LOG_TRACE);
5536 
5537     /* find the command */
5538     for (cmd = img_cmds; cmd->name != NULL; cmd++) {
5539         if (!strcmp(cmdname, cmd->name)) {
5540             return cmd->handler(argc, argv);
5541         }
5542     }
5543 
5544     /* not found */
5545     error_exit("Command not found: %s", cmdname);
5546 }
5547