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