xref: /openbmc/qemu/qemu-img.c (revision 58a0067a)
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 #include "qemu/osdep.h"
25 #include "qapi/error.h"
26 #include "qapi-visit.h"
27 #include "qapi/qmp-output-visitor.h"
28 #include "qapi/qmp/qerror.h"
29 #include "qapi/qmp/qjson.h"
30 #include "qemu/cutils.h"
31 #include "qemu/config-file.h"
32 #include "qemu/option.h"
33 #include "qemu/error-report.h"
34 #include "qom/object_interfaces.h"
35 #include "sysemu/sysemu.h"
36 #include "sysemu/block-backend.h"
37 #include "block/block_int.h"
38 #include "block/blockjob.h"
39 #include "block/qapi.h"
40 #include <getopt.h>
41 
42 #define QEMU_IMG_VERSION "qemu-img version " QEMU_VERSION QEMU_PKGVERSION \
43                           ", Copyright (c) 2004-2008 Fabrice Bellard\n"
44 
45 typedef struct img_cmd_t {
46     const char *name;
47     int (*handler)(int argc, char **argv);
48 } img_cmd_t;
49 
50 enum {
51     OPTION_OUTPUT = 256,
52     OPTION_BACKING_CHAIN = 257,
53     OPTION_OBJECT = 258,
54     OPTION_IMAGE_OPTS = 259,
55 };
56 
57 typedef enum OutputFormat {
58     OFORMAT_JSON,
59     OFORMAT_HUMAN,
60 } OutputFormat;
61 
62 /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
63 #define BDRV_O_FLAGS BDRV_O_CACHE_WB
64 #define BDRV_DEFAULT_CACHE "writeback"
65 
66 static void format_print(void *opaque, const char *name)
67 {
68     printf(" %s", name);
69 }
70 
71 static void QEMU_NORETURN GCC_FMT_ATTR(1, 2) error_exit(const char *fmt, ...)
72 {
73     va_list ap;
74 
75     error_printf("qemu-img: ");
76 
77     va_start(ap, fmt);
78     error_vprintf(fmt, ap);
79     va_end(ap);
80 
81     error_printf("\nTry 'qemu-img --help' for more information\n");
82     exit(EXIT_FAILURE);
83 }
84 
85 /* Please keep in synch with qemu-img.texi */
86 static void QEMU_NORETURN help(void)
87 {
88     const char *help_msg =
89            QEMU_IMG_VERSION
90            "usage: qemu-img command [command options]\n"
91            "QEMU disk image utility\n"
92            "\n"
93            "Command syntax:\n"
94 #define DEF(option, callback, arg_string)        \
95            "  " arg_string "\n"
96 #include "qemu-img-cmds.h"
97 #undef DEF
98 #undef GEN_DOCS
99            "\n"
100            "Command parameters:\n"
101            "  'filename' is a disk image filename\n"
102            "  'objectdef' is a QEMU user creatable object definition. See the qemu(1)\n"
103            "    manual page for a description of the object properties. The most common\n"
104            "    object type is a 'secret', which is used to supply passwords and/or\n"
105            "    encryption keys.\n"
106            "  'fmt' is the disk image format. It is guessed automatically in most cases\n"
107            "  'cache' is the cache mode used to write the output disk image, the valid\n"
108            "    options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
109            "    'directsync' and 'unsafe' (default for convert)\n"
110            "  'src_cache' is the cache mode used to read input disk images, the valid\n"
111            "    options are the same as for the 'cache' option\n"
112            "  'size' is the disk image size in bytes. Optional suffixes\n"
113            "    'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),\n"
114            "    'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P)  are\n"
115            "    supported. 'b' is ignored.\n"
116            "  'output_filename' is the destination disk image filename\n"
117            "  'output_fmt' is the destination format\n"
118            "  'options' is a comma separated list of format specific options in a\n"
119            "    name=value format. Use -o ? for an overview of the options supported by the\n"
120            "    used format\n"
121            "  'snapshot_param' is param used for internal snapshot, format\n"
122            "    is 'snapshot.id=[ID],snapshot.name=[NAME]', or\n"
123            "    '[ID_OR_NAME]'\n"
124            "  'snapshot_id_or_name' is deprecated, use 'snapshot_param'\n"
125            "    instead\n"
126            "  '-c' indicates that target image must be compressed (qcow format only)\n"
127            "  '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
128            "       match exactly. The image doesn't need a working backing file before\n"
129            "       rebasing in this case (useful for renaming the backing file)\n"
130            "  '-h' with or without a command shows this help and lists the supported formats\n"
131            "  '-p' show progress of command (only certain commands)\n"
132            "  '-q' use Quiet mode - do not print any output (except errors)\n"
133            "  '-S' indicates the consecutive number of bytes (defaults to 4k) that must\n"
134            "       contain only zeros for qemu-img to create a sparse image during\n"
135            "       conversion. If the number of bytes is 0, the source will not be scanned for\n"
136            "       unallocated or zero sectors, and the destination image will always be\n"
137            "       fully allocated\n"
138            "  '--output' takes the format in which the output must be done (human or json)\n"
139            "  '-n' skips the target volume creation (useful if the volume is created\n"
140            "       prior to running qemu-img)\n"
141            "\n"
142            "Parameters to check subcommand:\n"
143            "  '-r' tries to repair any inconsistencies that are found during the check.\n"
144            "       '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
145            "       kinds of errors, with a higher risk of choosing the wrong fix or\n"
146            "       hiding corruption that has already occurred.\n"
147            "\n"
148            "Parameters to snapshot subcommand:\n"
149            "  'snapshot' is the name of the snapshot to create, apply or delete\n"
150            "  '-a' applies a snapshot (revert disk to saved state)\n"
151            "  '-c' creates a snapshot\n"
152            "  '-d' deletes a snapshot\n"
153            "  '-l' lists all snapshots in the given image\n"
154            "\n"
155            "Parameters to compare subcommand:\n"
156            "  '-f' first image format\n"
157            "  '-F' second image format\n"
158            "  '-s' run in Strict mode - fail on different image size or sector allocation\n";
159 
160     printf("%s\nSupported formats:", help_msg);
161     bdrv_iterate_format(format_print, NULL);
162     printf("\n");
163     exit(EXIT_SUCCESS);
164 }
165 
166 static QemuOptsList qemu_object_opts = {
167     .name = "object",
168     .implied_opt_name = "qom-type",
169     .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
170     .desc = {
171         { }
172     },
173 };
174 
175 static QemuOptsList qemu_source_opts = {
176     .name = "source",
177     .implied_opt_name = "file",
178     .head = QTAILQ_HEAD_INITIALIZER(qemu_source_opts.head),
179     .desc = {
180         { }
181     },
182 };
183 
184 static int GCC_FMT_ATTR(2, 3) qprintf(bool quiet, const char *fmt, ...)
185 {
186     int ret = 0;
187     if (!quiet) {
188         va_list args;
189         va_start(args, fmt);
190         ret = vprintf(fmt, args);
191         va_end(args);
192     }
193     return ret;
194 }
195 
196 
197 static int print_block_option_help(const char *filename, const char *fmt)
198 {
199     BlockDriver *drv, *proto_drv;
200     QemuOptsList *create_opts = NULL;
201     Error *local_err = NULL;
202 
203     /* Find driver and parse its options */
204     drv = bdrv_find_format(fmt);
205     if (!drv) {
206         error_report("Unknown file format '%s'", fmt);
207         return 1;
208     }
209 
210     create_opts = qemu_opts_append(create_opts, drv->create_opts);
211     if (filename) {
212         proto_drv = bdrv_find_protocol(filename, true, &local_err);
213         if (!proto_drv) {
214             error_report_err(local_err);
215             qemu_opts_free(create_opts);
216             return 1;
217         }
218         create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
219     }
220 
221     qemu_opts_print_help(create_opts);
222     qemu_opts_free(create_opts);
223     return 0;
224 }
225 
226 
227 static int img_open_password(BlockBackend *blk, const char *filename,
228                              int flags, bool quiet)
229 {
230     BlockDriverState *bs;
231     char password[256];
232 
233     bs = blk_bs(blk);
234     if (bdrv_is_encrypted(bs) && bdrv_key_required(bs) &&
235         !(flags & BDRV_O_NO_IO)) {
236         qprintf(quiet, "Disk image '%s' is encrypted.\n", filename);
237         if (qemu_read_password(password, sizeof(password)) < 0) {
238             error_report("No password given");
239             return -1;
240         }
241         if (bdrv_set_key(bs, password) < 0) {
242             error_report("invalid password");
243             return -1;
244         }
245     }
246     return 0;
247 }
248 
249 
250 static BlockBackend *img_open_opts(const char *optstr,
251                                    QemuOpts *opts, int flags,
252                                    bool quiet)
253 {
254     QDict *options;
255     Error *local_err = NULL;
256     BlockBackend *blk;
257     options = qemu_opts_to_qdict(opts, NULL);
258     blk = blk_new_open(NULL, NULL, options, flags, &local_err);
259     if (!blk) {
260         error_reportf_err(local_err, "Could not open '%s'", optstr);
261         return NULL;
262     }
263 
264     if (img_open_password(blk, optstr, flags, quiet) < 0) {
265         blk_unref(blk);
266         return NULL;
267     }
268     return blk;
269 }
270 
271 static BlockBackend *img_open_file(const char *filename,
272                                    const char *fmt, int flags,
273                                    bool quiet)
274 {
275     BlockBackend *blk;
276     Error *local_err = NULL;
277     QDict *options = NULL;
278 
279     if (fmt) {
280         options = qdict_new();
281         qdict_put(options, "driver", qstring_from_str(fmt));
282     }
283 
284     blk = blk_new_open(filename, NULL, options, flags, &local_err);
285     if (!blk) {
286         error_reportf_err(local_err, "Could not open '%s': ", filename);
287         return NULL;
288     }
289 
290     if (img_open_password(blk, filename, flags, quiet) < 0) {
291         blk_unref(blk);
292         return NULL;
293     }
294     return blk;
295 }
296 
297 
298 static BlockBackend *img_open(bool image_opts,
299                               const char *filename,
300                               const char *fmt, int flags,
301                               bool quiet)
302 {
303     BlockBackend *blk;
304     if (image_opts) {
305         QemuOpts *opts;
306         if (fmt) {
307             error_report("--image-opts and --format are mutually exclusive");
308             return NULL;
309         }
310         opts = qemu_opts_parse_noisily(qemu_find_opts("source"),
311                                        filename, true);
312         if (!opts) {
313             return NULL;
314         }
315         blk = img_open_opts(filename, opts, flags, quiet);
316     } else {
317         blk = img_open_file(filename, fmt, flags, quiet);
318     }
319     return blk;
320 }
321 
322 
323 static int add_old_style_options(const char *fmt, QemuOpts *opts,
324                                  const char *base_filename,
325                                  const char *base_fmt)
326 {
327     Error *err = NULL;
328 
329     if (base_filename) {
330         qemu_opt_set(opts, BLOCK_OPT_BACKING_FILE, base_filename, &err);
331         if (err) {
332             error_report("Backing file not supported for file format '%s'",
333                          fmt);
334             error_free(err);
335             return -1;
336         }
337     }
338     if (base_fmt) {
339         qemu_opt_set(opts, BLOCK_OPT_BACKING_FMT, base_fmt, &err);
340         if (err) {
341             error_report("Backing file format not supported for file "
342                          "format '%s'", fmt);
343             error_free(err);
344             return -1;
345         }
346     }
347     return 0;
348 }
349 
350 static int img_create(int argc, char **argv)
351 {
352     int c;
353     uint64_t img_size = -1;
354     const char *fmt = "raw";
355     const char *base_fmt = NULL;
356     const char *filename;
357     const char *base_filename = NULL;
358     char *options = NULL;
359     Error *local_err = NULL;
360     bool quiet = false;
361 
362     for(;;) {
363         static const struct option long_options[] = {
364             {"help", no_argument, 0, 'h'},
365             {"object", required_argument, 0, OPTION_OBJECT},
366             {0, 0, 0, 0}
367         };
368         c = getopt_long(argc, argv, "F:b:f:he6o:q",
369                         long_options, NULL);
370         if (c == -1) {
371             break;
372         }
373         switch(c) {
374         case '?':
375         case 'h':
376             help();
377             break;
378         case 'F':
379             base_fmt = optarg;
380             break;
381         case 'b':
382             base_filename = optarg;
383             break;
384         case 'f':
385             fmt = optarg;
386             break;
387         case 'e':
388             error_report("option -e is deprecated, please use \'-o "
389                   "encryption\' instead!");
390             goto fail;
391         case '6':
392             error_report("option -6 is deprecated, please use \'-o "
393                   "compat6\' instead!");
394             goto fail;
395         case 'o':
396             if (!is_valid_option_list(optarg)) {
397                 error_report("Invalid option list: %s", optarg);
398                 goto fail;
399             }
400             if (!options) {
401                 options = g_strdup(optarg);
402             } else {
403                 char *old_options = options;
404                 options = g_strdup_printf("%s,%s", options, optarg);
405                 g_free(old_options);
406             }
407             break;
408         case 'q':
409             quiet = true;
410             break;
411         case OPTION_OBJECT: {
412             QemuOpts *opts;
413             opts = qemu_opts_parse_noisily(&qemu_object_opts,
414                                            optarg, true);
415             if (!opts) {
416                 goto fail;
417             }
418         }   break;
419         }
420     }
421 
422     /* Get the filename */
423     filename = (optind < argc) ? argv[optind] : NULL;
424     if (options && has_help_option(options)) {
425         g_free(options);
426         return print_block_option_help(filename, fmt);
427     }
428 
429     if (optind >= argc) {
430         error_exit("Expecting image file name");
431     }
432     optind++;
433 
434     if (qemu_opts_foreach(&qemu_object_opts,
435                           user_creatable_add_opts_foreach,
436                           NULL, &local_err)) {
437         error_report_err(local_err);
438         goto fail;
439     }
440 
441     /* Get image size, if specified */
442     if (optind < argc) {
443         int64_t sval;
444         char *end;
445         sval = qemu_strtosz_suffix(argv[optind++], &end,
446                                    QEMU_STRTOSZ_DEFSUFFIX_B);
447         if (sval < 0 || *end) {
448             if (sval == -ERANGE) {
449                 error_report("Image size must be less than 8 EiB!");
450             } else {
451                 error_report("Invalid image size specified! You may use k, M, "
452                       "G, T, P or E suffixes for ");
453                 error_report("kilobytes, megabytes, gigabytes, terabytes, "
454                              "petabytes and exabytes.");
455             }
456             goto fail;
457         }
458         img_size = (uint64_t)sval;
459     }
460     if (optind != argc) {
461         error_exit("Unexpected argument: %s", argv[optind]);
462     }
463 
464     bdrv_img_create(filename, fmt, base_filename, base_fmt,
465                     options, img_size, BDRV_O_FLAGS, &local_err, quiet);
466     if (local_err) {
467         error_reportf_err(local_err, "%s: ", filename);
468         goto fail;
469     }
470 
471     g_free(options);
472     return 0;
473 
474 fail:
475     g_free(options);
476     return 1;
477 }
478 
479 static void dump_json_image_check(ImageCheck *check, bool quiet)
480 {
481     Error *local_err = NULL;
482     QString *str;
483     QmpOutputVisitor *ov = qmp_output_visitor_new();
484     QObject *obj;
485     visit_type_ImageCheck(qmp_output_get_visitor(ov), NULL, &check,
486                           &local_err);
487     obj = qmp_output_get_qobject(ov);
488     str = qobject_to_json_pretty(obj);
489     assert(str != NULL);
490     qprintf(quiet, "%s\n", qstring_get_str(str));
491     qobject_decref(obj);
492     qmp_output_visitor_cleanup(ov);
493     QDECREF(str);
494 }
495 
496 static void dump_human_image_check(ImageCheck *check, bool quiet)
497 {
498     if (!(check->corruptions || check->leaks || check->check_errors)) {
499         qprintf(quiet, "No errors were found on the image.\n");
500     } else {
501         if (check->corruptions) {
502             qprintf(quiet, "\n%" PRId64 " errors were found on the image.\n"
503                     "Data may be corrupted, or further writes to the image "
504                     "may corrupt it.\n",
505                     check->corruptions);
506         }
507 
508         if (check->leaks) {
509             qprintf(quiet,
510                     "\n%" PRId64 " leaked clusters were found on the image.\n"
511                     "This means waste of disk space, but no harm to data.\n",
512                     check->leaks);
513         }
514 
515         if (check->check_errors) {
516             qprintf(quiet,
517                     "\n%" PRId64
518                     " internal errors have occurred during the check.\n",
519                     check->check_errors);
520         }
521     }
522 
523     if (check->total_clusters != 0 && check->allocated_clusters != 0) {
524         qprintf(quiet, "%" PRId64 "/%" PRId64 " = %0.2f%% allocated, "
525                 "%0.2f%% fragmented, %0.2f%% compressed clusters\n",
526                 check->allocated_clusters, check->total_clusters,
527                 check->allocated_clusters * 100.0 / check->total_clusters,
528                 check->fragmented_clusters * 100.0 / check->allocated_clusters,
529                 check->compressed_clusters * 100.0 /
530                 check->allocated_clusters);
531     }
532 
533     if (check->image_end_offset) {
534         qprintf(quiet,
535                 "Image end offset: %" PRId64 "\n", check->image_end_offset);
536     }
537 }
538 
539 static int collect_image_check(BlockDriverState *bs,
540                    ImageCheck *check,
541                    const char *filename,
542                    const char *fmt,
543                    int fix)
544 {
545     int ret;
546     BdrvCheckResult result;
547 
548     ret = bdrv_check(bs, &result, fix);
549     if (ret < 0) {
550         return ret;
551     }
552 
553     check->filename                 = g_strdup(filename);
554     check->format                   = g_strdup(bdrv_get_format_name(bs));
555     check->check_errors             = result.check_errors;
556     check->corruptions              = result.corruptions;
557     check->has_corruptions          = result.corruptions != 0;
558     check->leaks                    = result.leaks;
559     check->has_leaks                = result.leaks != 0;
560     check->corruptions_fixed        = result.corruptions_fixed;
561     check->has_corruptions_fixed    = result.corruptions != 0;
562     check->leaks_fixed              = result.leaks_fixed;
563     check->has_leaks_fixed          = result.leaks != 0;
564     check->image_end_offset         = result.image_end_offset;
565     check->has_image_end_offset     = result.image_end_offset != 0;
566     check->total_clusters           = result.bfi.total_clusters;
567     check->has_total_clusters       = result.bfi.total_clusters != 0;
568     check->allocated_clusters       = result.bfi.allocated_clusters;
569     check->has_allocated_clusters   = result.bfi.allocated_clusters != 0;
570     check->fragmented_clusters      = result.bfi.fragmented_clusters;
571     check->has_fragmented_clusters  = result.bfi.fragmented_clusters != 0;
572     check->compressed_clusters      = result.bfi.compressed_clusters;
573     check->has_compressed_clusters  = result.bfi.compressed_clusters != 0;
574 
575     return 0;
576 }
577 
578 /*
579  * Checks an image for consistency. Exit codes:
580  *
581  *  0 - Check completed, image is good
582  *  1 - Check not completed because of internal errors
583  *  2 - Check completed, image is corrupted
584  *  3 - Check completed, image has leaked clusters, but is good otherwise
585  * 63 - Checks are not supported by the image format
586  */
587 static int img_check(int argc, char **argv)
588 {
589     int c, ret;
590     OutputFormat output_format = OFORMAT_HUMAN;
591     const char *filename, *fmt, *output, *cache;
592     BlockBackend *blk;
593     BlockDriverState *bs;
594     int fix = 0;
595     int flags = BDRV_O_FLAGS | BDRV_O_CHECK;
596     ImageCheck *check;
597     bool quiet = false;
598     Error *local_err = NULL;
599     bool image_opts = false;
600 
601     fmt = NULL;
602     output = NULL;
603     cache = BDRV_DEFAULT_CACHE;
604     for(;;) {
605         int option_index = 0;
606         static const struct option long_options[] = {
607             {"help", no_argument, 0, 'h'},
608             {"format", required_argument, 0, 'f'},
609             {"repair", required_argument, 0, 'r'},
610             {"output", required_argument, 0, OPTION_OUTPUT},
611             {"object", required_argument, 0, OPTION_OBJECT},
612             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
613             {0, 0, 0, 0}
614         };
615         c = getopt_long(argc, argv, "hf:r:T:q",
616                         long_options, &option_index);
617         if (c == -1) {
618             break;
619         }
620         switch(c) {
621         case '?':
622         case 'h':
623             help();
624             break;
625         case 'f':
626             fmt = optarg;
627             break;
628         case 'r':
629             flags |= BDRV_O_RDWR;
630 
631             if (!strcmp(optarg, "leaks")) {
632                 fix = BDRV_FIX_LEAKS;
633             } else if (!strcmp(optarg, "all")) {
634                 fix = BDRV_FIX_LEAKS | BDRV_FIX_ERRORS;
635             } else {
636                 error_exit("Unknown option value for -r "
637                            "(expecting 'leaks' or 'all'): %s", optarg);
638             }
639             break;
640         case OPTION_OUTPUT:
641             output = optarg;
642             break;
643         case 'T':
644             cache = optarg;
645             break;
646         case 'q':
647             quiet = true;
648             break;
649         case OPTION_OBJECT: {
650             QemuOpts *opts;
651             opts = qemu_opts_parse_noisily(&qemu_object_opts,
652                                            optarg, true);
653             if (!opts) {
654                 return 1;
655             }
656         }   break;
657         case OPTION_IMAGE_OPTS:
658             image_opts = true;
659             break;
660         }
661     }
662     if (optind != argc - 1) {
663         error_exit("Expecting one image file name");
664     }
665     filename = argv[optind++];
666 
667     if (output && !strcmp(output, "json")) {
668         output_format = OFORMAT_JSON;
669     } else if (output && !strcmp(output, "human")) {
670         output_format = OFORMAT_HUMAN;
671     } else if (output) {
672         error_report("--output must be used with human or json as argument.");
673         return 1;
674     }
675 
676     if (qemu_opts_foreach(&qemu_object_opts,
677                           user_creatable_add_opts_foreach,
678                           NULL, &local_err)) {
679         error_report_err(local_err);
680         return 1;
681     }
682 
683     ret = bdrv_parse_cache_flags(cache, &flags);
684     if (ret < 0) {
685         error_report("Invalid source cache option: %s", cache);
686         return 1;
687     }
688 
689     blk = img_open(image_opts, filename, fmt, flags, quiet);
690     if (!blk) {
691         return 1;
692     }
693     bs = blk_bs(blk);
694 
695     check = g_new0(ImageCheck, 1);
696     ret = collect_image_check(bs, check, filename, fmt, fix);
697 
698     if (ret == -ENOTSUP) {
699         error_report("This image format does not support checks");
700         ret = 63;
701         goto fail;
702     }
703 
704     if (check->corruptions_fixed || check->leaks_fixed) {
705         int corruptions_fixed, leaks_fixed;
706 
707         leaks_fixed         = check->leaks_fixed;
708         corruptions_fixed   = check->corruptions_fixed;
709 
710         if (output_format == OFORMAT_HUMAN) {
711             qprintf(quiet,
712                     "The following inconsistencies were found and repaired:\n\n"
713                     "    %" PRId64 " leaked clusters\n"
714                     "    %" PRId64 " corruptions\n\n"
715                     "Double checking the fixed image now...\n",
716                     check->leaks_fixed,
717                     check->corruptions_fixed);
718         }
719 
720         ret = collect_image_check(bs, check, filename, fmt, 0);
721 
722         check->leaks_fixed          = leaks_fixed;
723         check->corruptions_fixed    = corruptions_fixed;
724     }
725 
726     if (!ret) {
727         switch (output_format) {
728         case OFORMAT_HUMAN:
729             dump_human_image_check(check, quiet);
730             break;
731         case OFORMAT_JSON:
732             dump_json_image_check(check, quiet);
733             break;
734         }
735     }
736 
737     if (ret || check->check_errors) {
738         if (ret) {
739             error_report("Check failed: %s", strerror(-ret));
740         } else {
741             error_report("Check failed");
742         }
743         ret = 1;
744         goto fail;
745     }
746 
747     if (check->corruptions) {
748         ret = 2;
749     } else if (check->leaks) {
750         ret = 3;
751     } else {
752         ret = 0;
753     }
754 
755 fail:
756     qapi_free_ImageCheck(check);
757     blk_unref(blk);
758     return ret;
759 }
760 
761 typedef struct CommonBlockJobCBInfo {
762     BlockDriverState *bs;
763     Error **errp;
764 } CommonBlockJobCBInfo;
765 
766 static void common_block_job_cb(void *opaque, int ret)
767 {
768     CommonBlockJobCBInfo *cbi = opaque;
769 
770     if (ret < 0) {
771         error_setg_errno(cbi->errp, -ret, "Block job failed");
772     }
773 }
774 
775 static void run_block_job(BlockJob *job, Error **errp)
776 {
777     AioContext *aio_context = bdrv_get_aio_context(job->bs);
778 
779     do {
780         aio_poll(aio_context, true);
781         qemu_progress_print(job->len ?
782                             ((float)job->offset / job->len * 100.f) : 0.0f, 0);
783     } while (!job->ready);
784 
785     block_job_complete_sync(job, errp);
786 
787     /* A block job may finish instantaneously without publishing any progress,
788      * so just signal completion here */
789     qemu_progress_print(100.f, 0);
790 }
791 
792 static int img_commit(int argc, char **argv)
793 {
794     int c, ret, flags;
795     const char *filename, *fmt, *cache, *base;
796     BlockBackend *blk;
797     BlockDriverState *bs, *base_bs;
798     bool progress = false, quiet = false, drop = false;
799     Error *local_err = NULL;
800     CommonBlockJobCBInfo cbi;
801     bool image_opts = false;
802 
803     fmt = NULL;
804     cache = BDRV_DEFAULT_CACHE;
805     base = NULL;
806     for(;;) {
807         static const struct option long_options[] = {
808             {"help", no_argument, 0, 'h'},
809             {"object", required_argument, 0, OPTION_OBJECT},
810             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
811             {0, 0, 0, 0}
812         };
813         c = getopt_long(argc, argv, "f:ht:b:dpq",
814                         long_options, NULL);
815         if (c == -1) {
816             break;
817         }
818         switch(c) {
819         case '?':
820         case 'h':
821             help();
822             break;
823         case 'f':
824             fmt = optarg;
825             break;
826         case 't':
827             cache = optarg;
828             break;
829         case 'b':
830             base = optarg;
831             /* -b implies -d */
832             drop = true;
833             break;
834         case 'd':
835             drop = true;
836             break;
837         case 'p':
838             progress = true;
839             break;
840         case 'q':
841             quiet = true;
842             break;
843         case OPTION_OBJECT: {
844             QemuOpts *opts;
845             opts = qemu_opts_parse_noisily(&qemu_object_opts,
846                                            optarg, true);
847             if (!opts) {
848                 return 1;
849             }
850         }   break;
851         case OPTION_IMAGE_OPTS:
852             image_opts = true;
853             break;
854         }
855     }
856 
857     /* Progress is not shown in Quiet mode */
858     if (quiet) {
859         progress = false;
860     }
861 
862     if (optind != argc - 1) {
863         error_exit("Expecting one image file name");
864     }
865     filename = argv[optind++];
866 
867     if (qemu_opts_foreach(&qemu_object_opts,
868                           user_creatable_add_opts_foreach,
869                           NULL, &local_err)) {
870         error_report_err(local_err);
871         return 1;
872     }
873 
874     flags = BDRV_O_RDWR | BDRV_O_UNMAP;
875     ret = bdrv_parse_cache_flags(cache, &flags);
876     if (ret < 0) {
877         error_report("Invalid cache option: %s", cache);
878         return 1;
879     }
880 
881     blk = img_open(image_opts, filename, fmt, flags, quiet);
882     if (!blk) {
883         return 1;
884     }
885     bs = blk_bs(blk);
886 
887     qemu_progress_init(progress, 1.f);
888     qemu_progress_print(0.f, 100);
889 
890     if (base) {
891         base_bs = bdrv_find_backing_image(bs, base);
892         if (!base_bs) {
893             error_setg(&local_err, QERR_BASE_NOT_FOUND, base);
894             goto done;
895         }
896     } else {
897         /* This is different from QMP, which by default uses the deepest file in
898          * the backing chain (i.e., the very base); however, the traditional
899          * behavior of qemu-img commit is using the immediate backing file. */
900         base_bs = backing_bs(bs);
901         if (!base_bs) {
902             error_setg(&local_err, "Image does not have a backing file");
903             goto done;
904         }
905     }
906 
907     cbi = (CommonBlockJobCBInfo){
908         .errp = &local_err,
909         .bs   = bs,
910     };
911 
912     commit_active_start(bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT,
913                         common_block_job_cb, &cbi, &local_err);
914     if (local_err) {
915         goto done;
916     }
917 
918     /* When the block job completes, the BlockBackend reference will point to
919      * the old backing file. In order to avoid that the top image is already
920      * deleted, so we can still empty it afterwards, increment the reference
921      * counter here preemptively. */
922     if (!drop) {
923         bdrv_ref(bs);
924     }
925 
926     run_block_job(bs->job, &local_err);
927     if (local_err) {
928         goto unref_backing;
929     }
930 
931     if (!drop && bs->drv->bdrv_make_empty) {
932         ret = bs->drv->bdrv_make_empty(bs);
933         if (ret) {
934             error_setg_errno(&local_err, -ret, "Could not empty %s",
935                              filename);
936             goto unref_backing;
937         }
938     }
939 
940 unref_backing:
941     if (!drop) {
942         bdrv_unref(bs);
943     }
944 
945 done:
946     qemu_progress_end();
947 
948     blk_unref(blk);
949 
950     if (local_err) {
951         error_report_err(local_err);
952         return 1;
953     }
954 
955     qprintf(quiet, "Image committed.\n");
956     return 0;
957 }
958 
959 /*
960  * Returns true iff the first sector pointed to by 'buf' contains at least
961  * a non-NUL byte.
962  *
963  * 'pnum' is set to the number of sectors (including and immediately following
964  * the first one) that are known to be in the same allocated/unallocated state.
965  */
966 static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
967 {
968     bool is_zero;
969     int i;
970 
971     if (n <= 0) {
972         *pnum = 0;
973         return 0;
974     }
975     is_zero = buffer_is_zero(buf, 512);
976     for(i = 1; i < n; i++) {
977         buf += 512;
978         if (is_zero != buffer_is_zero(buf, 512)) {
979             break;
980         }
981     }
982     *pnum = i;
983     return !is_zero;
984 }
985 
986 /*
987  * Like is_allocated_sectors, but if the buffer starts with a used sector,
988  * up to 'min' consecutive sectors containing zeros are ignored. This avoids
989  * breaking up write requests for only small sparse areas.
990  */
991 static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
992     int min)
993 {
994     int ret;
995     int num_checked, num_used;
996 
997     if (n < min) {
998         min = n;
999     }
1000 
1001     ret = is_allocated_sectors(buf, n, pnum);
1002     if (!ret) {
1003         return ret;
1004     }
1005 
1006     num_used = *pnum;
1007     buf += BDRV_SECTOR_SIZE * *pnum;
1008     n -= *pnum;
1009     num_checked = num_used;
1010 
1011     while (n > 0) {
1012         ret = is_allocated_sectors(buf, n, pnum);
1013 
1014         buf += BDRV_SECTOR_SIZE * *pnum;
1015         n -= *pnum;
1016         num_checked += *pnum;
1017         if (ret) {
1018             num_used = num_checked;
1019         } else if (*pnum >= min) {
1020             break;
1021         }
1022     }
1023 
1024     *pnum = num_used;
1025     return 1;
1026 }
1027 
1028 /*
1029  * Compares two buffers sector by sector. Returns 0 if the first sector of both
1030  * buffers matches, non-zero otherwise.
1031  *
1032  * pnum is set to the number of sectors (including and immediately following
1033  * the first one) that are known to have the same comparison result
1034  */
1035 static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
1036     int *pnum)
1037 {
1038     bool res;
1039     int i;
1040 
1041     if (n <= 0) {
1042         *pnum = 0;
1043         return 0;
1044     }
1045 
1046     res = !!memcmp(buf1, buf2, 512);
1047     for(i = 1; i < n; i++) {
1048         buf1 += 512;
1049         buf2 += 512;
1050 
1051         if (!!memcmp(buf1, buf2, 512) != res) {
1052             break;
1053         }
1054     }
1055 
1056     *pnum = i;
1057     return res;
1058 }
1059 
1060 #define IO_BUF_SIZE (2 * 1024 * 1024)
1061 
1062 static int64_t sectors_to_bytes(int64_t sectors)
1063 {
1064     return sectors << BDRV_SECTOR_BITS;
1065 }
1066 
1067 static int64_t sectors_to_process(int64_t total, int64_t from)
1068 {
1069     return MIN(total - from, IO_BUF_SIZE >> BDRV_SECTOR_BITS);
1070 }
1071 
1072 /*
1073  * Check if passed sectors are empty (not allocated or contain only 0 bytes)
1074  *
1075  * Returns 0 in case sectors are filled with 0, 1 if sectors contain non-zero
1076  * data and negative value on error.
1077  *
1078  * @param blk:  BlockBackend for the image
1079  * @param sect_num: Number of first sector to check
1080  * @param sect_count: Number of sectors to check
1081  * @param filename: Name of disk file we are checking (logging purpose)
1082  * @param buffer: Allocated buffer for storing read data
1083  * @param quiet: Flag for quiet mode
1084  */
1085 static int check_empty_sectors(BlockBackend *blk, int64_t sect_num,
1086                                int sect_count, const char *filename,
1087                                uint8_t *buffer, bool quiet)
1088 {
1089     int pnum, ret = 0;
1090     ret = blk_read(blk, sect_num, buffer, sect_count);
1091     if (ret < 0) {
1092         error_report("Error while reading offset %" PRId64 " of %s: %s",
1093                      sectors_to_bytes(sect_num), filename, strerror(-ret));
1094         return ret;
1095     }
1096     ret = is_allocated_sectors(buffer, sect_count, &pnum);
1097     if (ret || pnum != sect_count) {
1098         qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1099                 sectors_to_bytes(ret ? sect_num : sect_num + pnum));
1100         return 1;
1101     }
1102 
1103     return 0;
1104 }
1105 
1106 /*
1107  * Compares two images. Exit codes:
1108  *
1109  * 0 - Images are identical
1110  * 1 - Images differ
1111  * >1 - Error occurred
1112  */
1113 static int img_compare(int argc, char **argv)
1114 {
1115     const char *fmt1 = NULL, *fmt2 = NULL, *cache, *filename1, *filename2;
1116     BlockBackend *blk1, *blk2;
1117     BlockDriverState *bs1, *bs2;
1118     int64_t total_sectors1, total_sectors2;
1119     uint8_t *buf1 = NULL, *buf2 = NULL;
1120     int pnum1, pnum2;
1121     int allocated1, allocated2;
1122     int ret = 0; /* return value - 0 Ident, 1 Different, >1 Error */
1123     bool progress = false, quiet = false, strict = false;
1124     int flags;
1125     int64_t total_sectors;
1126     int64_t sector_num = 0;
1127     int64_t nb_sectors;
1128     int c, pnum;
1129     uint64_t progress_base;
1130     Error *local_err = NULL;
1131     bool image_opts = false;
1132 
1133     cache = BDRV_DEFAULT_CACHE;
1134     for (;;) {
1135         static const struct option long_options[] = {
1136             {"help", no_argument, 0, 'h'},
1137             {"object", required_argument, 0, OPTION_OBJECT},
1138             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
1139             {0, 0, 0, 0}
1140         };
1141         c = getopt_long(argc, argv, "hf:F:T:pqs",
1142                         long_options, NULL);
1143         if (c == -1) {
1144             break;
1145         }
1146         switch (c) {
1147         case '?':
1148         case 'h':
1149             help();
1150             break;
1151         case 'f':
1152             fmt1 = optarg;
1153             break;
1154         case 'F':
1155             fmt2 = optarg;
1156             break;
1157         case 'T':
1158             cache = optarg;
1159             break;
1160         case 'p':
1161             progress = true;
1162             break;
1163         case 'q':
1164             quiet = true;
1165             break;
1166         case 's':
1167             strict = true;
1168             break;
1169         case OPTION_OBJECT: {
1170             QemuOpts *opts;
1171             opts = qemu_opts_parse_noisily(&qemu_object_opts,
1172                                            optarg, true);
1173             if (!opts) {
1174                 ret = 2;
1175                 goto out4;
1176             }
1177         }   break;
1178         case OPTION_IMAGE_OPTS:
1179             image_opts = true;
1180             break;
1181         }
1182     }
1183 
1184     /* Progress is not shown in Quiet mode */
1185     if (quiet) {
1186         progress = false;
1187     }
1188 
1189 
1190     if (optind != argc - 2) {
1191         error_exit("Expecting two image file names");
1192     }
1193     filename1 = argv[optind++];
1194     filename2 = argv[optind++];
1195 
1196     if (qemu_opts_foreach(&qemu_object_opts,
1197                           user_creatable_add_opts_foreach,
1198                           NULL, &local_err)) {
1199         error_report_err(local_err);
1200         ret = 2;
1201         goto out4;
1202     }
1203 
1204     /* Initialize before goto out */
1205     qemu_progress_init(progress, 2.0);
1206 
1207     flags = BDRV_O_FLAGS;
1208     ret = bdrv_parse_cache_flags(cache, &flags);
1209     if (ret < 0) {
1210         error_report("Invalid source cache option: %s", cache);
1211         ret = 2;
1212         goto out3;
1213     }
1214 
1215     blk1 = img_open(image_opts, filename1, fmt1, flags, quiet);
1216     if (!blk1) {
1217         ret = 2;
1218         goto out3;
1219     }
1220 
1221     blk2 = img_open(image_opts, filename2, fmt2, flags, quiet);
1222     if (!blk2) {
1223         ret = 2;
1224         goto out2;
1225     }
1226     bs1 = blk_bs(blk1);
1227     bs2 = blk_bs(blk2);
1228 
1229     buf1 = blk_blockalign(blk1, IO_BUF_SIZE);
1230     buf2 = blk_blockalign(blk2, IO_BUF_SIZE);
1231     total_sectors1 = blk_nb_sectors(blk1);
1232     if (total_sectors1 < 0) {
1233         error_report("Can't get size of %s: %s",
1234                      filename1, strerror(-total_sectors1));
1235         ret = 4;
1236         goto out;
1237     }
1238     total_sectors2 = blk_nb_sectors(blk2);
1239     if (total_sectors2 < 0) {
1240         error_report("Can't get size of %s: %s",
1241                      filename2, strerror(-total_sectors2));
1242         ret = 4;
1243         goto out;
1244     }
1245     total_sectors = MIN(total_sectors1, total_sectors2);
1246     progress_base = MAX(total_sectors1, total_sectors2);
1247 
1248     qemu_progress_print(0, 100);
1249 
1250     if (strict && total_sectors1 != total_sectors2) {
1251         ret = 1;
1252         qprintf(quiet, "Strict mode: Image size mismatch!\n");
1253         goto out;
1254     }
1255 
1256     for (;;) {
1257         int64_t status1, status2;
1258         BlockDriverState *file;
1259 
1260         nb_sectors = sectors_to_process(total_sectors, sector_num);
1261         if (nb_sectors <= 0) {
1262             break;
1263         }
1264         status1 = bdrv_get_block_status_above(bs1, NULL, sector_num,
1265                                               total_sectors1 - sector_num,
1266                                               &pnum1, &file);
1267         if (status1 < 0) {
1268             ret = 3;
1269             error_report("Sector allocation test failed for %s", filename1);
1270             goto out;
1271         }
1272         allocated1 = status1 & BDRV_BLOCK_ALLOCATED;
1273 
1274         status2 = bdrv_get_block_status_above(bs2, NULL, sector_num,
1275                                               total_sectors2 - sector_num,
1276                                               &pnum2, &file);
1277         if (status2 < 0) {
1278             ret = 3;
1279             error_report("Sector allocation test failed for %s", filename2);
1280             goto out;
1281         }
1282         allocated2 = status2 & BDRV_BLOCK_ALLOCATED;
1283         if (pnum1) {
1284             nb_sectors = MIN(nb_sectors, pnum1);
1285         }
1286         if (pnum2) {
1287             nb_sectors = MIN(nb_sectors, pnum2);
1288         }
1289 
1290         if (strict) {
1291             if ((status1 & ~BDRV_BLOCK_OFFSET_MASK) !=
1292                 (status2 & ~BDRV_BLOCK_OFFSET_MASK)) {
1293                 ret = 1;
1294                 qprintf(quiet, "Strict mode: Offset %" PRId64
1295                         " block status mismatch!\n",
1296                         sectors_to_bytes(sector_num));
1297                 goto out;
1298             }
1299         }
1300         if ((status1 & BDRV_BLOCK_ZERO) && (status2 & BDRV_BLOCK_ZERO)) {
1301             nb_sectors = MIN(pnum1, pnum2);
1302         } else if (allocated1 == allocated2) {
1303             if (allocated1) {
1304                 ret = blk_read(blk1, sector_num, buf1, nb_sectors);
1305                 if (ret < 0) {
1306                     error_report("Error while reading offset %" PRId64 " of %s:"
1307                                  " %s", sectors_to_bytes(sector_num), filename1,
1308                                  strerror(-ret));
1309                     ret = 4;
1310                     goto out;
1311                 }
1312                 ret = blk_read(blk2, sector_num, buf2, nb_sectors);
1313                 if (ret < 0) {
1314                     error_report("Error while reading offset %" PRId64
1315                                  " of %s: %s", sectors_to_bytes(sector_num),
1316                                  filename2, strerror(-ret));
1317                     ret = 4;
1318                     goto out;
1319                 }
1320                 ret = compare_sectors(buf1, buf2, nb_sectors, &pnum);
1321                 if (ret || pnum != nb_sectors) {
1322                     qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n",
1323                             sectors_to_bytes(
1324                                 ret ? sector_num : sector_num + pnum));
1325                     ret = 1;
1326                     goto out;
1327                 }
1328             }
1329         } else {
1330 
1331             if (allocated1) {
1332                 ret = check_empty_sectors(blk1, sector_num, nb_sectors,
1333                                           filename1, buf1, quiet);
1334             } else {
1335                 ret = check_empty_sectors(blk2, sector_num, nb_sectors,
1336                                           filename2, buf1, quiet);
1337             }
1338             if (ret) {
1339                 if (ret < 0) {
1340                     error_report("Error while reading offset %" PRId64 ": %s",
1341                                  sectors_to_bytes(sector_num), strerror(-ret));
1342                     ret = 4;
1343                 }
1344                 goto out;
1345             }
1346         }
1347         sector_num += nb_sectors;
1348         qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1349     }
1350 
1351     if (total_sectors1 != total_sectors2) {
1352         BlockBackend *blk_over;
1353         int64_t total_sectors_over;
1354         const char *filename_over;
1355 
1356         qprintf(quiet, "Warning: Image size mismatch!\n");
1357         if (total_sectors1 > total_sectors2) {
1358             total_sectors_over = total_sectors1;
1359             blk_over = blk1;
1360             filename_over = filename1;
1361         } else {
1362             total_sectors_over = total_sectors2;
1363             blk_over = blk2;
1364             filename_over = filename2;
1365         }
1366 
1367         for (;;) {
1368             nb_sectors = sectors_to_process(total_sectors_over, sector_num);
1369             if (nb_sectors <= 0) {
1370                 break;
1371             }
1372             ret = bdrv_is_allocated_above(blk_bs(blk_over), NULL, sector_num,
1373                                           nb_sectors, &pnum);
1374             if (ret < 0) {
1375                 ret = 3;
1376                 error_report("Sector allocation test failed for %s",
1377                              filename_over);
1378                 goto out;
1379 
1380             }
1381             nb_sectors = pnum;
1382             if (ret) {
1383                 ret = check_empty_sectors(blk_over, sector_num, nb_sectors,
1384                                           filename_over, buf1, quiet);
1385                 if (ret) {
1386                     if (ret < 0) {
1387                         error_report("Error while reading offset %" PRId64
1388                                      " of %s: %s", sectors_to_bytes(sector_num),
1389                                      filename_over, strerror(-ret));
1390                         ret = 4;
1391                     }
1392                     goto out;
1393                 }
1394             }
1395             sector_num += nb_sectors;
1396             qemu_progress_print(((float) nb_sectors / progress_base)*100, 100);
1397         }
1398     }
1399 
1400     qprintf(quiet, "Images are identical.\n");
1401     ret = 0;
1402 
1403 out:
1404     qemu_vfree(buf1);
1405     qemu_vfree(buf2);
1406     blk_unref(blk2);
1407 out2:
1408     blk_unref(blk1);
1409 out3:
1410     qemu_progress_end();
1411 out4:
1412     return ret;
1413 }
1414 
1415 enum ImgConvertBlockStatus {
1416     BLK_DATA,
1417     BLK_ZERO,
1418     BLK_BACKING_FILE,
1419 };
1420 
1421 typedef struct ImgConvertState {
1422     BlockBackend **src;
1423     int64_t *src_sectors;
1424     int src_cur, src_num;
1425     int64_t src_cur_offset;
1426     int64_t total_sectors;
1427     int64_t allocated_sectors;
1428     enum ImgConvertBlockStatus status;
1429     int64_t sector_next_status;
1430     BlockBackend *target;
1431     bool has_zero_init;
1432     bool compressed;
1433     bool target_has_backing;
1434     int min_sparse;
1435     size_t cluster_sectors;
1436     size_t buf_sectors;
1437 } ImgConvertState;
1438 
1439 static void convert_select_part(ImgConvertState *s, int64_t sector_num)
1440 {
1441     assert(sector_num >= s->src_cur_offset);
1442     while (sector_num - s->src_cur_offset >= s->src_sectors[s->src_cur]) {
1443         s->src_cur_offset += s->src_sectors[s->src_cur];
1444         s->src_cur++;
1445         assert(s->src_cur < s->src_num);
1446     }
1447 }
1448 
1449 static int convert_iteration_sectors(ImgConvertState *s, int64_t sector_num)
1450 {
1451     int64_t ret;
1452     int n;
1453 
1454     convert_select_part(s, sector_num);
1455 
1456     assert(s->total_sectors > sector_num);
1457     n = MIN(s->total_sectors - sector_num, BDRV_REQUEST_MAX_SECTORS);
1458 
1459     if (s->sector_next_status <= sector_num) {
1460         BlockDriverState *file;
1461         ret = bdrv_get_block_status(blk_bs(s->src[s->src_cur]),
1462                                     sector_num - s->src_cur_offset,
1463                                     n, &n, &file);
1464         if (ret < 0) {
1465             return ret;
1466         }
1467 
1468         if (ret & BDRV_BLOCK_ZERO) {
1469             s->status = BLK_ZERO;
1470         } else if (ret & BDRV_BLOCK_DATA) {
1471             s->status = BLK_DATA;
1472         } else if (!s->target_has_backing) {
1473             /* Without a target backing file we must copy over the contents of
1474              * the backing file as well. */
1475             /* TODO Check block status of the backing file chain to avoid
1476              * needlessly reading zeroes and limiting the iteration to the
1477              * buffer size */
1478             s->status = BLK_DATA;
1479         } else {
1480             s->status = BLK_BACKING_FILE;
1481         }
1482 
1483         s->sector_next_status = sector_num + n;
1484     }
1485 
1486     n = MIN(n, s->sector_next_status - sector_num);
1487     if (s->status == BLK_DATA) {
1488         n = MIN(n, s->buf_sectors);
1489     }
1490 
1491     /* We need to write complete clusters for compressed images, so if an
1492      * unallocated area is shorter than that, we must consider the whole
1493      * cluster allocated. */
1494     if (s->compressed) {
1495         if (n < s->cluster_sectors) {
1496             n = MIN(s->cluster_sectors, s->total_sectors - sector_num);
1497             s->status = BLK_DATA;
1498         } else {
1499             n = QEMU_ALIGN_DOWN(n, s->cluster_sectors);
1500         }
1501     }
1502 
1503     return n;
1504 }
1505 
1506 static int convert_read(ImgConvertState *s, int64_t sector_num, int nb_sectors,
1507                         uint8_t *buf)
1508 {
1509     int n;
1510     int ret;
1511 
1512     if (s->status == BLK_ZERO || s->status == BLK_BACKING_FILE) {
1513         return 0;
1514     }
1515 
1516     assert(nb_sectors <= s->buf_sectors);
1517     while (nb_sectors > 0) {
1518         BlockBackend *blk;
1519         int64_t bs_sectors;
1520 
1521         /* In the case of compression with multiple source files, we can get a
1522          * nb_sectors that spreads into the next part. So we must be able to
1523          * read across multiple BDSes for one convert_read() call. */
1524         convert_select_part(s, sector_num);
1525         blk = s->src[s->src_cur];
1526         bs_sectors = s->src_sectors[s->src_cur];
1527 
1528         n = MIN(nb_sectors, bs_sectors - (sector_num - s->src_cur_offset));
1529         ret = blk_read(blk, sector_num - s->src_cur_offset, buf, n);
1530         if (ret < 0) {
1531             return ret;
1532         }
1533 
1534         sector_num += n;
1535         nb_sectors -= n;
1536         buf += n * BDRV_SECTOR_SIZE;
1537     }
1538 
1539     return 0;
1540 }
1541 
1542 static int convert_write(ImgConvertState *s, int64_t sector_num, int nb_sectors,
1543                          const uint8_t *buf)
1544 {
1545     int ret;
1546 
1547     while (nb_sectors > 0) {
1548         int n = nb_sectors;
1549 
1550         switch (s->status) {
1551         case BLK_BACKING_FILE:
1552             /* If we have a backing file, leave clusters unallocated that are
1553              * unallocated in the source image, so that the backing file is
1554              * visible at the respective offset. */
1555             assert(s->target_has_backing);
1556             break;
1557 
1558         case BLK_DATA:
1559             /* We must always write compressed clusters as a whole, so don't
1560              * try to find zeroed parts in the buffer. We can only save the
1561              * write if the buffer is completely zeroed and we're allowed to
1562              * keep the target sparse. */
1563             if (s->compressed) {
1564                 if (s->has_zero_init && s->min_sparse &&
1565                     buffer_is_zero(buf, n * BDRV_SECTOR_SIZE))
1566                 {
1567                     assert(!s->target_has_backing);
1568                     break;
1569                 }
1570 
1571                 ret = blk_write_compressed(s->target, sector_num, buf, n);
1572                 if (ret < 0) {
1573                     return ret;
1574                 }
1575                 break;
1576             }
1577 
1578             /* If there is real non-zero data or we're told to keep the target
1579              * fully allocated (-S 0), we must write it. Otherwise we can treat
1580              * it as zero sectors. */
1581             if (!s->min_sparse ||
1582                 is_allocated_sectors_min(buf, n, &n, s->min_sparse))
1583             {
1584                 ret = blk_write(s->target, sector_num, buf, n);
1585                 if (ret < 0) {
1586                     return ret;
1587                 }
1588                 break;
1589             }
1590             /* fall-through */
1591 
1592         case BLK_ZERO:
1593             if (s->has_zero_init) {
1594                 break;
1595             }
1596             ret = blk_write_zeroes(s->target, sector_num, n, 0);
1597             if (ret < 0) {
1598                 return ret;
1599             }
1600             break;
1601         }
1602 
1603         sector_num += n;
1604         nb_sectors -= n;
1605         buf += n * BDRV_SECTOR_SIZE;
1606     }
1607 
1608     return 0;
1609 }
1610 
1611 static int convert_do_copy(ImgConvertState *s)
1612 {
1613     uint8_t *buf = NULL;
1614     int64_t sector_num, allocated_done;
1615     int ret;
1616     int n;
1617 
1618     /* Check whether we have zero initialisation or can get it efficiently */
1619     s->has_zero_init = s->min_sparse && !s->target_has_backing
1620                      ? bdrv_has_zero_init(blk_bs(s->target))
1621                      : false;
1622 
1623     if (!s->has_zero_init && !s->target_has_backing &&
1624         bdrv_can_write_zeroes_with_unmap(blk_bs(s->target)))
1625     {
1626         ret = bdrv_make_zero(blk_bs(s->target), BDRV_REQ_MAY_UNMAP);
1627         if (ret == 0) {
1628             s->has_zero_init = true;
1629         }
1630     }
1631 
1632     /* Allocate buffer for copied data. For compressed images, only one cluster
1633      * can be copied at a time. */
1634     if (s->compressed) {
1635         if (s->cluster_sectors <= 0 || s->cluster_sectors > s->buf_sectors) {
1636             error_report("invalid cluster size");
1637             ret = -EINVAL;
1638             goto fail;
1639         }
1640         s->buf_sectors = s->cluster_sectors;
1641     }
1642     buf = blk_blockalign(s->target, s->buf_sectors * BDRV_SECTOR_SIZE);
1643 
1644     /* Calculate allocated sectors for progress */
1645     s->allocated_sectors = 0;
1646     sector_num = 0;
1647     while (sector_num < s->total_sectors) {
1648         n = convert_iteration_sectors(s, sector_num);
1649         if (n < 0) {
1650             ret = n;
1651             goto fail;
1652         }
1653         if (s->status == BLK_DATA) {
1654             s->allocated_sectors += n;
1655         }
1656         sector_num += n;
1657     }
1658 
1659     /* Do the copy */
1660     s->src_cur = 0;
1661     s->src_cur_offset = 0;
1662     s->sector_next_status = 0;
1663 
1664     sector_num = 0;
1665     allocated_done = 0;
1666 
1667     while (sector_num < s->total_sectors) {
1668         n = convert_iteration_sectors(s, sector_num);
1669         if (n < 0) {
1670             ret = n;
1671             goto fail;
1672         }
1673         if (s->status == BLK_DATA) {
1674             allocated_done += n;
1675             qemu_progress_print(100.0 * allocated_done / s->allocated_sectors,
1676                                 0);
1677         }
1678 
1679         ret = convert_read(s, sector_num, n, buf);
1680         if (ret < 0) {
1681             error_report("error while reading sector %" PRId64
1682                          ": %s", sector_num, strerror(-ret));
1683             goto fail;
1684         }
1685 
1686         ret = convert_write(s, sector_num, n, buf);
1687         if (ret < 0) {
1688             error_report("error while writing sector %" PRId64
1689                          ": %s", sector_num, strerror(-ret));
1690             goto fail;
1691         }
1692 
1693         sector_num += n;
1694     }
1695 
1696     if (s->compressed) {
1697         /* signal EOF to align */
1698         ret = blk_write_compressed(s->target, 0, NULL, 0);
1699         if (ret < 0) {
1700             goto fail;
1701         }
1702     }
1703 
1704     ret = 0;
1705 fail:
1706     qemu_vfree(buf);
1707     return ret;
1708 }
1709 
1710 static int img_convert(int argc, char **argv)
1711 {
1712     int c, bs_n, bs_i, compress, cluster_sectors, skip_create;
1713     int64_t ret = 0;
1714     int progress = 0, flags, src_flags;
1715     const char *fmt, *out_fmt, *cache, *src_cache, *out_baseimg, *out_filename;
1716     BlockDriver *drv, *proto_drv;
1717     BlockBackend **blk = NULL, *out_blk = NULL;
1718     BlockDriverState **bs = NULL, *out_bs = NULL;
1719     int64_t total_sectors;
1720     int64_t *bs_sectors = NULL;
1721     size_t bufsectors = IO_BUF_SIZE / BDRV_SECTOR_SIZE;
1722     BlockDriverInfo bdi;
1723     QemuOpts *opts = NULL;
1724     QemuOptsList *create_opts = NULL;
1725     const char *out_baseimg_param;
1726     char *options = NULL;
1727     const char *snapshot_name = NULL;
1728     int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
1729     bool quiet = false;
1730     Error *local_err = NULL;
1731     QemuOpts *sn_opts = NULL;
1732     ImgConvertState state;
1733     bool image_opts = false;
1734 
1735     fmt = NULL;
1736     out_fmt = "raw";
1737     cache = "unsafe";
1738     src_cache = BDRV_DEFAULT_CACHE;
1739     out_baseimg = NULL;
1740     compress = 0;
1741     skip_create = 0;
1742     for(;;) {
1743         static const struct option long_options[] = {
1744             {"help", no_argument, 0, 'h'},
1745             {"object", required_argument, 0, OPTION_OBJECT},
1746             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
1747             {0, 0, 0, 0}
1748         };
1749         c = getopt_long(argc, argv, "hf:O:B:ce6o:s:l:S:pt:T:qn",
1750                         long_options, NULL);
1751         if (c == -1) {
1752             break;
1753         }
1754         switch(c) {
1755         case '?':
1756         case 'h':
1757             help();
1758             break;
1759         case 'f':
1760             fmt = optarg;
1761             break;
1762         case 'O':
1763             out_fmt = optarg;
1764             break;
1765         case 'B':
1766             out_baseimg = optarg;
1767             break;
1768         case 'c':
1769             compress = 1;
1770             break;
1771         case 'e':
1772             error_report("option -e is deprecated, please use \'-o "
1773                   "encryption\' instead!");
1774             ret = -1;
1775             goto fail_getopt;
1776         case '6':
1777             error_report("option -6 is deprecated, please use \'-o "
1778                   "compat6\' instead!");
1779             ret = -1;
1780             goto fail_getopt;
1781         case 'o':
1782             if (!is_valid_option_list(optarg)) {
1783                 error_report("Invalid option list: %s", optarg);
1784                 ret = -1;
1785                 goto fail_getopt;
1786             }
1787             if (!options) {
1788                 options = g_strdup(optarg);
1789             } else {
1790                 char *old_options = options;
1791                 options = g_strdup_printf("%s,%s", options, optarg);
1792                 g_free(old_options);
1793             }
1794             break;
1795         case 's':
1796             snapshot_name = optarg;
1797             break;
1798         case 'l':
1799             if (strstart(optarg, SNAPSHOT_OPT_BASE, NULL)) {
1800                 sn_opts = qemu_opts_parse_noisily(&internal_snapshot_opts,
1801                                                   optarg, false);
1802                 if (!sn_opts) {
1803                     error_report("Failed in parsing snapshot param '%s'",
1804                                  optarg);
1805                     ret = -1;
1806                     goto fail_getopt;
1807                 }
1808             } else {
1809                 snapshot_name = optarg;
1810             }
1811             break;
1812         case 'S':
1813         {
1814             int64_t sval;
1815             char *end;
1816             sval = qemu_strtosz_suffix(optarg, &end, QEMU_STRTOSZ_DEFSUFFIX_B);
1817             if (sval < 0 || *end) {
1818                 error_report("Invalid minimum zero buffer size for sparse output specified");
1819                 ret = -1;
1820                 goto fail_getopt;
1821             }
1822 
1823             min_sparse = sval / BDRV_SECTOR_SIZE;
1824             break;
1825         }
1826         case 'p':
1827             progress = 1;
1828             break;
1829         case 't':
1830             cache = optarg;
1831             break;
1832         case 'T':
1833             src_cache = optarg;
1834             break;
1835         case 'q':
1836             quiet = true;
1837             break;
1838         case 'n':
1839             skip_create = 1;
1840             break;
1841         case OPTION_OBJECT:
1842             opts = qemu_opts_parse_noisily(&qemu_object_opts,
1843                                            optarg, true);
1844             if (!opts) {
1845                 goto fail_getopt;
1846             }
1847             break;
1848         case OPTION_IMAGE_OPTS:
1849             image_opts = true;
1850             break;
1851         }
1852     }
1853 
1854     if (qemu_opts_foreach(&qemu_object_opts,
1855                           user_creatable_add_opts_foreach,
1856                           NULL, &local_err)) {
1857         error_report_err(local_err);
1858         goto fail_getopt;
1859     }
1860 
1861     /* Initialize before goto out */
1862     if (quiet) {
1863         progress = 0;
1864     }
1865     qemu_progress_init(progress, 1.0);
1866 
1867     bs_n = argc - optind - 1;
1868     out_filename = bs_n >= 1 ? argv[argc - 1] : NULL;
1869 
1870     if (options && has_help_option(options)) {
1871         ret = print_block_option_help(out_filename, out_fmt);
1872         goto out;
1873     }
1874 
1875     if (bs_n < 1) {
1876         error_exit("Must specify image file name");
1877     }
1878 
1879 
1880     if (bs_n > 1 && out_baseimg) {
1881         error_report("-B makes no sense when concatenating multiple input "
1882                      "images");
1883         ret = -1;
1884         goto out;
1885     }
1886 
1887     src_flags = BDRV_O_FLAGS;
1888     ret = bdrv_parse_cache_flags(src_cache, &src_flags);
1889     if (ret < 0) {
1890         error_report("Invalid source cache option: %s", src_cache);
1891         goto out;
1892     }
1893 
1894     qemu_progress_print(0, 100);
1895 
1896     blk = g_new0(BlockBackend *, bs_n);
1897     bs = g_new0(BlockDriverState *, bs_n);
1898     bs_sectors = g_new(int64_t, bs_n);
1899 
1900     total_sectors = 0;
1901     for (bs_i = 0; bs_i < bs_n; bs_i++) {
1902         blk[bs_i] = img_open(image_opts, argv[optind + bs_i],
1903                              fmt, src_flags, quiet);
1904         if (!blk[bs_i]) {
1905             ret = -1;
1906             goto out;
1907         }
1908         bs[bs_i] = blk_bs(blk[bs_i]);
1909         bs_sectors[bs_i] = blk_nb_sectors(blk[bs_i]);
1910         if (bs_sectors[bs_i] < 0) {
1911             error_report("Could not get size of %s: %s",
1912                          argv[optind + bs_i], strerror(-bs_sectors[bs_i]));
1913             ret = -1;
1914             goto out;
1915         }
1916         total_sectors += bs_sectors[bs_i];
1917     }
1918 
1919     if (sn_opts) {
1920         ret = bdrv_snapshot_load_tmp(bs[0],
1921                                      qemu_opt_get(sn_opts, SNAPSHOT_OPT_ID),
1922                                      qemu_opt_get(sn_opts, SNAPSHOT_OPT_NAME),
1923                                      &local_err);
1924     } else if (snapshot_name != NULL) {
1925         if (bs_n > 1) {
1926             error_report("No support for concatenating multiple snapshot");
1927             ret = -1;
1928             goto out;
1929         }
1930 
1931         bdrv_snapshot_load_tmp_by_id_or_name(bs[0], snapshot_name, &local_err);
1932     }
1933     if (local_err) {
1934         error_reportf_err(local_err, "Failed to load snapshot: ");
1935         ret = -1;
1936         goto out;
1937     }
1938 
1939     /* Find driver and parse its options */
1940     drv = bdrv_find_format(out_fmt);
1941     if (!drv) {
1942         error_report("Unknown file format '%s'", out_fmt);
1943         ret = -1;
1944         goto out;
1945     }
1946 
1947     proto_drv = bdrv_find_protocol(out_filename, true, &local_err);
1948     if (!proto_drv) {
1949         error_report_err(local_err);
1950         ret = -1;
1951         goto out;
1952     }
1953 
1954     if (!skip_create) {
1955         if (!drv->create_opts) {
1956             error_report("Format driver '%s' does not support image creation",
1957                          drv->format_name);
1958             ret = -1;
1959             goto out;
1960         }
1961 
1962         if (!proto_drv->create_opts) {
1963             error_report("Protocol driver '%s' does not support image creation",
1964                          proto_drv->format_name);
1965             ret = -1;
1966             goto out;
1967         }
1968 
1969         create_opts = qemu_opts_append(create_opts, drv->create_opts);
1970         create_opts = qemu_opts_append(create_opts, proto_drv->create_opts);
1971 
1972         opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
1973         if (options) {
1974             qemu_opts_do_parse(opts, options, NULL, &local_err);
1975             if (local_err) {
1976                 error_report_err(local_err);
1977                 ret = -1;
1978                 goto out;
1979             }
1980         }
1981 
1982         qemu_opt_set_number(opts, BLOCK_OPT_SIZE, total_sectors * 512,
1983                             &error_abort);
1984         ret = add_old_style_options(out_fmt, opts, out_baseimg, NULL);
1985         if (ret < 0) {
1986             goto out;
1987         }
1988     }
1989 
1990     /* Get backing file name if -o backing_file was used */
1991     out_baseimg_param = qemu_opt_get(opts, BLOCK_OPT_BACKING_FILE);
1992     if (out_baseimg_param) {
1993         out_baseimg = out_baseimg_param;
1994     }
1995 
1996     /* Check if compression is supported */
1997     if (compress) {
1998         bool encryption =
1999             qemu_opt_get_bool(opts, BLOCK_OPT_ENCRYPT, false);
2000         const char *preallocation =
2001             qemu_opt_get(opts, BLOCK_OPT_PREALLOC);
2002 
2003         if (!drv->bdrv_write_compressed) {
2004             error_report("Compression not supported for this file format");
2005             ret = -1;
2006             goto out;
2007         }
2008 
2009         if (encryption) {
2010             error_report("Compression and encryption not supported at "
2011                          "the same time");
2012             ret = -1;
2013             goto out;
2014         }
2015 
2016         if (preallocation
2017             && strcmp(preallocation, "off"))
2018         {
2019             error_report("Compression and preallocation not supported at "
2020                          "the same time");
2021             ret = -1;
2022             goto out;
2023         }
2024     }
2025 
2026     if (!skip_create) {
2027         /* Create the new image */
2028         ret = bdrv_create(drv, out_filename, opts, &local_err);
2029         if (ret < 0) {
2030             error_reportf_err(local_err, "%s: error while converting %s: ",
2031                               out_filename, out_fmt);
2032             goto out;
2033         }
2034     }
2035 
2036     flags = min_sparse ? (BDRV_O_RDWR | BDRV_O_UNMAP) : BDRV_O_RDWR;
2037     ret = bdrv_parse_cache_flags(cache, &flags);
2038     if (ret < 0) {
2039         error_report("Invalid cache option: %s", cache);
2040         goto out;
2041     }
2042 
2043     /* XXX we should allow --image-opts to trigger use of
2044      * img_open() here, but then we have trouble with
2045      * the bdrv_create() call which takes different params.
2046      * Not critical right now, so fix can wait...
2047      */
2048     out_blk = img_open_file(out_filename, out_fmt, flags, quiet);
2049     if (!out_blk) {
2050         ret = -1;
2051         goto out;
2052     }
2053     out_bs = blk_bs(out_blk);
2054 
2055     /* increase bufsectors from the default 4096 (2M) if opt_transfer_length
2056      * or discard_alignment of the out_bs is greater. Limit to 32768 (16MB)
2057      * as maximum. */
2058     bufsectors = MIN(32768,
2059                      MAX(bufsectors, MAX(out_bs->bl.opt_transfer_length,
2060                                          out_bs->bl.discard_alignment))
2061                     );
2062 
2063     if (skip_create) {
2064         int64_t output_sectors = blk_nb_sectors(out_blk);
2065         if (output_sectors < 0) {
2066             error_report("unable to get output image length: %s",
2067                          strerror(-output_sectors));
2068             ret = -1;
2069             goto out;
2070         } else if (output_sectors < total_sectors) {
2071             error_report("output file is smaller than input file");
2072             ret = -1;
2073             goto out;
2074         }
2075     }
2076 
2077     cluster_sectors = 0;
2078     ret = bdrv_get_info(out_bs, &bdi);
2079     if (ret < 0) {
2080         if (compress) {
2081             error_report("could not get block driver info");
2082             goto out;
2083         }
2084     } else {
2085         compress = compress || bdi.needs_compressed_writes;
2086         cluster_sectors = bdi.cluster_size / BDRV_SECTOR_SIZE;
2087     }
2088 
2089     state = (ImgConvertState) {
2090         .src                = blk,
2091         .src_sectors        = bs_sectors,
2092         .src_num            = bs_n,
2093         .total_sectors      = total_sectors,
2094         .target             = out_blk,
2095         .compressed         = compress,
2096         .target_has_backing = (bool) out_baseimg,
2097         .min_sparse         = min_sparse,
2098         .cluster_sectors    = cluster_sectors,
2099         .buf_sectors        = bufsectors,
2100     };
2101     ret = convert_do_copy(&state);
2102 
2103 out:
2104     if (!ret) {
2105         qemu_progress_print(100, 0);
2106     }
2107     qemu_progress_end();
2108     qemu_opts_del(opts);
2109     qemu_opts_free(create_opts);
2110     qemu_opts_del(sn_opts);
2111     blk_unref(out_blk);
2112     g_free(bs);
2113     if (blk) {
2114         for (bs_i = 0; bs_i < bs_n; bs_i++) {
2115             blk_unref(blk[bs_i]);
2116         }
2117         g_free(blk);
2118     }
2119     g_free(bs_sectors);
2120 fail_getopt:
2121     g_free(options);
2122 
2123     if (ret) {
2124         return 1;
2125     }
2126     return 0;
2127 }
2128 
2129 
2130 static void dump_snapshots(BlockDriverState *bs)
2131 {
2132     QEMUSnapshotInfo *sn_tab, *sn;
2133     int nb_sns, i;
2134 
2135     nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2136     if (nb_sns <= 0)
2137         return;
2138     printf("Snapshot list:\n");
2139     bdrv_snapshot_dump(fprintf, stdout, NULL);
2140     printf("\n");
2141     for(i = 0; i < nb_sns; i++) {
2142         sn = &sn_tab[i];
2143         bdrv_snapshot_dump(fprintf, stdout, sn);
2144         printf("\n");
2145     }
2146     g_free(sn_tab);
2147 }
2148 
2149 static void dump_json_image_info_list(ImageInfoList *list)
2150 {
2151     Error *local_err = NULL;
2152     QString *str;
2153     QmpOutputVisitor *ov = qmp_output_visitor_new();
2154     QObject *obj;
2155     visit_type_ImageInfoList(qmp_output_get_visitor(ov), NULL, &list,
2156                              &local_err);
2157     obj = qmp_output_get_qobject(ov);
2158     str = qobject_to_json_pretty(obj);
2159     assert(str != NULL);
2160     printf("%s\n", qstring_get_str(str));
2161     qobject_decref(obj);
2162     qmp_output_visitor_cleanup(ov);
2163     QDECREF(str);
2164 }
2165 
2166 static void dump_json_image_info(ImageInfo *info)
2167 {
2168     Error *local_err = NULL;
2169     QString *str;
2170     QmpOutputVisitor *ov = qmp_output_visitor_new();
2171     QObject *obj;
2172     visit_type_ImageInfo(qmp_output_get_visitor(ov), NULL, &info, &local_err);
2173     obj = qmp_output_get_qobject(ov);
2174     str = qobject_to_json_pretty(obj);
2175     assert(str != NULL);
2176     printf("%s\n", qstring_get_str(str));
2177     qobject_decref(obj);
2178     qmp_output_visitor_cleanup(ov);
2179     QDECREF(str);
2180 }
2181 
2182 static void dump_human_image_info_list(ImageInfoList *list)
2183 {
2184     ImageInfoList *elem;
2185     bool delim = false;
2186 
2187     for (elem = list; elem; elem = elem->next) {
2188         if (delim) {
2189             printf("\n");
2190         }
2191         delim = true;
2192 
2193         bdrv_image_info_dump(fprintf, stdout, elem->value);
2194     }
2195 }
2196 
2197 static gboolean str_equal_func(gconstpointer a, gconstpointer b)
2198 {
2199     return strcmp(a, b) == 0;
2200 }
2201 
2202 /**
2203  * Open an image file chain and return an ImageInfoList
2204  *
2205  * @filename: topmost image filename
2206  * @fmt: topmost image format (may be NULL to autodetect)
2207  * @chain: true  - enumerate entire backing file chain
2208  *         false - only topmost image file
2209  *
2210  * Returns a list of ImageInfo objects or NULL if there was an error opening an
2211  * image file.  If there was an error a message will have been printed to
2212  * stderr.
2213  */
2214 static ImageInfoList *collect_image_info_list(bool image_opts,
2215                                               const char *filename,
2216                                               const char *fmt,
2217                                               bool chain)
2218 {
2219     ImageInfoList *head = NULL;
2220     ImageInfoList **last = &head;
2221     GHashTable *filenames;
2222     Error *err = NULL;
2223 
2224     filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
2225 
2226     while (filename) {
2227         BlockBackend *blk;
2228         BlockDriverState *bs;
2229         ImageInfo *info;
2230         ImageInfoList *elem;
2231 
2232         if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL)) {
2233             error_report("Backing file '%s' creates an infinite loop.",
2234                          filename);
2235             goto err;
2236         }
2237         g_hash_table_insert(filenames, (gpointer)filename, NULL);
2238 
2239         blk = img_open(image_opts, filename, fmt,
2240                        BDRV_O_FLAGS | BDRV_O_NO_BACKING | BDRV_O_NO_IO,
2241                        false);
2242         if (!blk) {
2243             goto err;
2244         }
2245         bs = blk_bs(blk);
2246 
2247         bdrv_query_image_info(bs, &info, &err);
2248         if (err) {
2249             error_report_err(err);
2250             blk_unref(blk);
2251             goto err;
2252         }
2253 
2254         elem = g_new0(ImageInfoList, 1);
2255         elem->value = info;
2256         *last = elem;
2257         last = &elem->next;
2258 
2259         blk_unref(blk);
2260 
2261         filename = fmt = NULL;
2262         if (chain) {
2263             if (info->has_full_backing_filename) {
2264                 filename = info->full_backing_filename;
2265             } else if (info->has_backing_filename) {
2266                 error_report("Could not determine absolute backing filename,"
2267                              " but backing filename '%s' present",
2268                              info->backing_filename);
2269                 goto err;
2270             }
2271             if (info->has_backing_filename_format) {
2272                 fmt = info->backing_filename_format;
2273             }
2274         }
2275     }
2276     g_hash_table_destroy(filenames);
2277     return head;
2278 
2279 err:
2280     qapi_free_ImageInfoList(head);
2281     g_hash_table_destroy(filenames);
2282     return NULL;
2283 }
2284 
2285 static int img_info(int argc, char **argv)
2286 {
2287     int c;
2288     OutputFormat output_format = OFORMAT_HUMAN;
2289     bool chain = false;
2290     const char *filename, *fmt, *output;
2291     ImageInfoList *list;
2292     Error *local_err = NULL;
2293     bool image_opts = false;
2294 
2295     fmt = NULL;
2296     output = NULL;
2297     for(;;) {
2298         int option_index = 0;
2299         static const struct option long_options[] = {
2300             {"help", no_argument, 0, 'h'},
2301             {"format", required_argument, 0, 'f'},
2302             {"output", required_argument, 0, OPTION_OUTPUT},
2303             {"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
2304             {"object", required_argument, 0, OPTION_OBJECT},
2305             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2306             {0, 0, 0, 0}
2307         };
2308         c = getopt_long(argc, argv, "f:h",
2309                         long_options, &option_index);
2310         if (c == -1) {
2311             break;
2312         }
2313         switch(c) {
2314         case '?':
2315         case 'h':
2316             help();
2317             break;
2318         case 'f':
2319             fmt = optarg;
2320             break;
2321         case OPTION_OUTPUT:
2322             output = optarg;
2323             break;
2324         case OPTION_BACKING_CHAIN:
2325             chain = true;
2326             break;
2327         case OPTION_OBJECT: {
2328             QemuOpts *opts;
2329             opts = qemu_opts_parse_noisily(&qemu_object_opts,
2330                                            optarg, true);
2331             if (!opts) {
2332                 return 1;
2333             }
2334         }   break;
2335         case OPTION_IMAGE_OPTS:
2336             image_opts = true;
2337             break;
2338         }
2339     }
2340     if (optind != argc - 1) {
2341         error_exit("Expecting one image file name");
2342     }
2343     filename = argv[optind++];
2344 
2345     if (output && !strcmp(output, "json")) {
2346         output_format = OFORMAT_JSON;
2347     } else if (output && !strcmp(output, "human")) {
2348         output_format = OFORMAT_HUMAN;
2349     } else if (output) {
2350         error_report("--output must be used with human or json as argument.");
2351         return 1;
2352     }
2353 
2354     if (qemu_opts_foreach(&qemu_object_opts,
2355                           user_creatable_add_opts_foreach,
2356                           NULL, &local_err)) {
2357         error_report_err(local_err);
2358         return 1;
2359     }
2360 
2361     list = collect_image_info_list(image_opts, filename, fmt, chain);
2362     if (!list) {
2363         return 1;
2364     }
2365 
2366     switch (output_format) {
2367     case OFORMAT_HUMAN:
2368         dump_human_image_info_list(list);
2369         break;
2370     case OFORMAT_JSON:
2371         if (chain) {
2372             dump_json_image_info_list(list);
2373         } else {
2374             dump_json_image_info(list->value);
2375         }
2376         break;
2377     }
2378 
2379     qapi_free_ImageInfoList(list);
2380     return 0;
2381 }
2382 
2383 static void dump_map_entry(OutputFormat output_format, MapEntry *e,
2384                            MapEntry *next)
2385 {
2386     switch (output_format) {
2387     case OFORMAT_HUMAN:
2388         if (e->data && !e->has_offset) {
2389             error_report("File contains external, encrypted or compressed clusters.");
2390             exit(1);
2391         }
2392         if (e->data && !e->zero) {
2393             printf("%#-16"PRIx64"%#-16"PRIx64"%#-16"PRIx64"%s\n",
2394                    e->start, e->length,
2395                    e->has_offset ? e->offset : 0,
2396                    e->has_filename ? e->filename : "");
2397         }
2398         /* This format ignores the distinction between 0, ZERO and ZERO|DATA.
2399          * Modify the flags here to allow more coalescing.
2400          */
2401         if (next && (!next->data || next->zero)) {
2402             next->data = false;
2403             next->zero = true;
2404         }
2405         break;
2406     case OFORMAT_JSON:
2407         printf("%s{ \"start\": %"PRId64", \"length\": %"PRId64","
2408                " \"depth\": %"PRId64", \"zero\": %s, \"data\": %s",
2409                (e->start == 0 ? "[" : ",\n"),
2410                e->start, e->length, e->depth,
2411                e->zero ? "true" : "false",
2412                e->data ? "true" : "false");
2413         if (e->has_offset) {
2414             printf(", \"offset\": %"PRId64"", e->offset);
2415         }
2416         putchar('}');
2417 
2418         if (!next) {
2419             printf("]\n");
2420         }
2421         break;
2422     }
2423 }
2424 
2425 static int get_block_status(BlockDriverState *bs, int64_t sector_num,
2426                             int nb_sectors, MapEntry *e)
2427 {
2428     int64_t ret;
2429     int depth;
2430     BlockDriverState *file;
2431     bool has_offset;
2432 
2433     /* As an optimization, we could cache the current range of unallocated
2434      * clusters in each file of the chain, and avoid querying the same
2435      * range repeatedly.
2436      */
2437 
2438     depth = 0;
2439     for (;;) {
2440         ret = bdrv_get_block_status(bs, sector_num, nb_sectors, &nb_sectors,
2441                                     &file);
2442         if (ret < 0) {
2443             return ret;
2444         }
2445         assert(nb_sectors);
2446         if (ret & (BDRV_BLOCK_ZERO|BDRV_BLOCK_DATA)) {
2447             break;
2448         }
2449         bs = backing_bs(bs);
2450         if (bs == NULL) {
2451             ret = 0;
2452             break;
2453         }
2454 
2455         depth++;
2456     }
2457 
2458     has_offset = !!(ret & BDRV_BLOCK_OFFSET_VALID);
2459 
2460     *e = (MapEntry) {
2461         .start = sector_num * BDRV_SECTOR_SIZE,
2462         .length = nb_sectors * BDRV_SECTOR_SIZE,
2463         .data = !!(ret & BDRV_BLOCK_DATA),
2464         .zero = !!(ret & BDRV_BLOCK_ZERO),
2465         .offset = ret & BDRV_BLOCK_OFFSET_MASK,
2466         .has_offset = has_offset,
2467         .depth = depth,
2468         .has_filename = file && has_offset,
2469         .filename = file && has_offset ? file->filename : NULL,
2470     };
2471 
2472     return 0;
2473 }
2474 
2475 static inline bool entry_mergeable(const MapEntry *curr, const MapEntry *next)
2476 {
2477     if (curr->length == 0) {
2478         return false;
2479     }
2480     if (curr->zero != next->zero ||
2481         curr->data != next->data ||
2482         curr->depth != next->depth ||
2483         curr->has_filename != next->has_filename ||
2484         curr->has_offset != next->has_offset) {
2485         return false;
2486     }
2487     if (curr->has_filename && strcmp(curr->filename, next->filename)) {
2488         return false;
2489     }
2490     if (curr->has_offset && curr->offset + curr->length != next->offset) {
2491         return false;
2492     }
2493     return true;
2494 }
2495 
2496 static int img_map(int argc, char **argv)
2497 {
2498     int c;
2499     OutputFormat output_format = OFORMAT_HUMAN;
2500     BlockBackend *blk;
2501     BlockDriverState *bs;
2502     const char *filename, *fmt, *output;
2503     int64_t length;
2504     MapEntry curr = { .length = 0 }, next;
2505     int ret = 0;
2506     Error *local_err = NULL;
2507     bool image_opts = false;
2508 
2509     fmt = NULL;
2510     output = NULL;
2511     for (;;) {
2512         int option_index = 0;
2513         static const struct option long_options[] = {
2514             {"help", no_argument, 0, 'h'},
2515             {"format", required_argument, 0, 'f'},
2516             {"output", required_argument, 0, OPTION_OUTPUT},
2517             {"object", required_argument, 0, OPTION_OBJECT},
2518             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2519             {0, 0, 0, 0}
2520         };
2521         c = getopt_long(argc, argv, "f:h",
2522                         long_options, &option_index);
2523         if (c == -1) {
2524             break;
2525         }
2526         switch (c) {
2527         case '?':
2528         case 'h':
2529             help();
2530             break;
2531         case 'f':
2532             fmt = optarg;
2533             break;
2534         case OPTION_OUTPUT:
2535             output = optarg;
2536             break;
2537         case OPTION_OBJECT: {
2538             QemuOpts *opts;
2539             opts = qemu_opts_parse_noisily(&qemu_object_opts,
2540                                            optarg, true);
2541             if (!opts) {
2542                 return 1;
2543             }
2544         }   break;
2545         case OPTION_IMAGE_OPTS:
2546             image_opts = true;
2547             break;
2548         }
2549     }
2550     if (optind != argc - 1) {
2551         error_exit("Expecting one image file name");
2552     }
2553     filename = argv[optind];
2554 
2555     if (output && !strcmp(output, "json")) {
2556         output_format = OFORMAT_JSON;
2557     } else if (output && !strcmp(output, "human")) {
2558         output_format = OFORMAT_HUMAN;
2559     } else if (output) {
2560         error_report("--output must be used with human or json as argument.");
2561         return 1;
2562     }
2563 
2564     if (qemu_opts_foreach(&qemu_object_opts,
2565                           user_creatable_add_opts_foreach,
2566                           NULL, &local_err)) {
2567         error_report_err(local_err);
2568         return 1;
2569     }
2570 
2571     blk = img_open(image_opts, filename, fmt, BDRV_O_FLAGS, false);
2572     if (!blk) {
2573         return 1;
2574     }
2575     bs = blk_bs(blk);
2576 
2577     if (output_format == OFORMAT_HUMAN) {
2578         printf("%-16s%-16s%-16s%s\n", "Offset", "Length", "Mapped to", "File");
2579     }
2580 
2581     length = blk_getlength(blk);
2582     while (curr.start + curr.length < length) {
2583         int64_t nsectors_left;
2584         int64_t sector_num;
2585         int n;
2586 
2587         sector_num = (curr.start + curr.length) >> BDRV_SECTOR_BITS;
2588 
2589         /* Probe up to 1 GiB at a time.  */
2590         nsectors_left = DIV_ROUND_UP(length, BDRV_SECTOR_SIZE) - sector_num;
2591         n = MIN(1 << (30 - BDRV_SECTOR_BITS), nsectors_left);
2592         ret = get_block_status(bs, sector_num, n, &next);
2593 
2594         if (ret < 0) {
2595             error_report("Could not read file metadata: %s", strerror(-ret));
2596             goto out;
2597         }
2598 
2599         if (entry_mergeable(&curr, &next)) {
2600             curr.length += next.length;
2601             continue;
2602         }
2603 
2604         if (curr.length > 0) {
2605             dump_map_entry(output_format, &curr, &next);
2606         }
2607         curr = next;
2608     }
2609 
2610     dump_map_entry(output_format, &curr, NULL);
2611 
2612 out:
2613     blk_unref(blk);
2614     return ret < 0;
2615 }
2616 
2617 #define SNAPSHOT_LIST   1
2618 #define SNAPSHOT_CREATE 2
2619 #define SNAPSHOT_APPLY  3
2620 #define SNAPSHOT_DELETE 4
2621 
2622 static int img_snapshot(int argc, char **argv)
2623 {
2624     BlockBackend *blk;
2625     BlockDriverState *bs;
2626     QEMUSnapshotInfo sn;
2627     char *filename, *snapshot_name = NULL;
2628     int c, ret = 0, bdrv_oflags;
2629     int action = 0;
2630     qemu_timeval tv;
2631     bool quiet = false;
2632     Error *err = NULL;
2633     bool image_opts = false;
2634 
2635     bdrv_oflags = BDRV_O_FLAGS | BDRV_O_RDWR;
2636     /* Parse commandline parameters */
2637     for(;;) {
2638         static const struct option long_options[] = {
2639             {"help", no_argument, 0, 'h'},
2640             {"object", required_argument, 0, OPTION_OBJECT},
2641             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2642             {0, 0, 0, 0}
2643         };
2644         c = getopt_long(argc, argv, "la:c:d:hq",
2645                         long_options, NULL);
2646         if (c == -1) {
2647             break;
2648         }
2649         switch(c) {
2650         case '?':
2651         case 'h':
2652             help();
2653             return 0;
2654         case 'l':
2655             if (action) {
2656                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
2657                 return 0;
2658             }
2659             action = SNAPSHOT_LIST;
2660             bdrv_oflags &= ~BDRV_O_RDWR; /* no need for RW */
2661             break;
2662         case 'a':
2663             if (action) {
2664                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
2665                 return 0;
2666             }
2667             action = SNAPSHOT_APPLY;
2668             snapshot_name = optarg;
2669             break;
2670         case 'c':
2671             if (action) {
2672                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
2673                 return 0;
2674             }
2675             action = SNAPSHOT_CREATE;
2676             snapshot_name = optarg;
2677             break;
2678         case 'd':
2679             if (action) {
2680                 error_exit("Cannot mix '-l', '-a', '-c', '-d'");
2681                 return 0;
2682             }
2683             action = SNAPSHOT_DELETE;
2684             snapshot_name = optarg;
2685             break;
2686         case 'q':
2687             quiet = true;
2688             break;
2689         case OPTION_OBJECT: {
2690             QemuOpts *opts;
2691             opts = qemu_opts_parse_noisily(&qemu_object_opts,
2692                                            optarg, true);
2693             if (!opts) {
2694                 return 1;
2695             }
2696         }   break;
2697         case OPTION_IMAGE_OPTS:
2698             image_opts = true;
2699             break;
2700         }
2701     }
2702 
2703     if (optind != argc - 1) {
2704         error_exit("Expecting one image file name");
2705     }
2706     filename = argv[optind++];
2707 
2708     if (qemu_opts_foreach(&qemu_object_opts,
2709                           user_creatable_add_opts_foreach,
2710                           NULL, &err)) {
2711         error_report_err(err);
2712         return 1;
2713     }
2714 
2715     /* Open the image */
2716     blk = img_open(image_opts, filename, NULL, bdrv_oflags, quiet);
2717     if (!blk) {
2718         return 1;
2719     }
2720     bs = blk_bs(blk);
2721 
2722     /* Perform the requested action */
2723     switch(action) {
2724     case SNAPSHOT_LIST:
2725         dump_snapshots(bs);
2726         break;
2727 
2728     case SNAPSHOT_CREATE:
2729         memset(&sn, 0, sizeof(sn));
2730         pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
2731 
2732         qemu_gettimeofday(&tv);
2733         sn.date_sec = tv.tv_sec;
2734         sn.date_nsec = tv.tv_usec * 1000;
2735 
2736         ret = bdrv_snapshot_create(bs, &sn);
2737         if (ret) {
2738             error_report("Could not create snapshot '%s': %d (%s)",
2739                 snapshot_name, ret, strerror(-ret));
2740         }
2741         break;
2742 
2743     case SNAPSHOT_APPLY:
2744         ret = bdrv_snapshot_goto(bs, snapshot_name);
2745         if (ret) {
2746             error_report("Could not apply snapshot '%s': %d (%s)",
2747                 snapshot_name, ret, strerror(-ret));
2748         }
2749         break;
2750 
2751     case SNAPSHOT_DELETE:
2752         bdrv_snapshot_delete_by_id_or_name(bs, snapshot_name, &err);
2753         if (err) {
2754             error_reportf_err(err, "Could not delete snapshot '%s': ",
2755                               snapshot_name);
2756             ret = 1;
2757         }
2758         break;
2759     }
2760 
2761     /* Cleanup */
2762     blk_unref(blk);
2763     if (ret) {
2764         return 1;
2765     }
2766     return 0;
2767 }
2768 
2769 static int img_rebase(int argc, char **argv)
2770 {
2771     BlockBackend *blk = NULL, *blk_old_backing = NULL, *blk_new_backing = NULL;
2772     uint8_t *buf_old = NULL;
2773     uint8_t *buf_new = NULL;
2774     BlockDriverState *bs = NULL;
2775     char *filename;
2776     const char *fmt, *cache, *src_cache, *out_basefmt, *out_baseimg;
2777     int c, flags, src_flags, ret;
2778     int unsafe = 0;
2779     int progress = 0;
2780     bool quiet = false;
2781     Error *local_err = NULL;
2782     bool image_opts = false;
2783 
2784     /* Parse commandline parameters */
2785     fmt = NULL;
2786     cache = BDRV_DEFAULT_CACHE;
2787     src_cache = BDRV_DEFAULT_CACHE;
2788     out_baseimg = NULL;
2789     out_basefmt = NULL;
2790     for(;;) {
2791         static const struct option long_options[] = {
2792             {"help", no_argument, 0, 'h'},
2793             {"object", required_argument, 0, OPTION_OBJECT},
2794             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
2795             {0, 0, 0, 0}
2796         };
2797         c = getopt_long(argc, argv, "hf:F:b:upt:T:q",
2798                         long_options, NULL);
2799         if (c == -1) {
2800             break;
2801         }
2802         switch(c) {
2803         case '?':
2804         case 'h':
2805             help();
2806             return 0;
2807         case 'f':
2808             fmt = optarg;
2809             break;
2810         case 'F':
2811             out_basefmt = optarg;
2812             break;
2813         case 'b':
2814             out_baseimg = optarg;
2815             break;
2816         case 'u':
2817             unsafe = 1;
2818             break;
2819         case 'p':
2820             progress = 1;
2821             break;
2822         case 't':
2823             cache = optarg;
2824             break;
2825         case 'T':
2826             src_cache = optarg;
2827             break;
2828         case 'q':
2829             quiet = true;
2830             break;
2831         case OPTION_OBJECT: {
2832             QemuOpts *opts;
2833             opts = qemu_opts_parse_noisily(&qemu_object_opts,
2834                                            optarg, true);
2835             if (!opts) {
2836                 return 1;
2837             }
2838         }   break;
2839         case OPTION_IMAGE_OPTS:
2840             image_opts = true;
2841             break;
2842         }
2843     }
2844 
2845     if (quiet) {
2846         progress = 0;
2847     }
2848 
2849     if (optind != argc - 1) {
2850         error_exit("Expecting one image file name");
2851     }
2852     if (!unsafe && !out_baseimg) {
2853         error_exit("Must specify backing file (-b) or use unsafe mode (-u)");
2854     }
2855     filename = argv[optind++];
2856 
2857     if (qemu_opts_foreach(&qemu_object_opts,
2858                           user_creatable_add_opts_foreach,
2859                           NULL, &local_err)) {
2860         error_report_err(local_err);
2861         return 1;
2862     }
2863 
2864     qemu_progress_init(progress, 2.0);
2865     qemu_progress_print(0, 100);
2866 
2867     flags = BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0);
2868     ret = bdrv_parse_cache_flags(cache, &flags);
2869     if (ret < 0) {
2870         error_report("Invalid cache option: %s", cache);
2871         goto out;
2872     }
2873 
2874     src_flags = BDRV_O_FLAGS;
2875     ret = bdrv_parse_cache_flags(src_cache, &src_flags);
2876     if (ret < 0) {
2877         error_report("Invalid source cache option: %s", src_cache);
2878         goto out;
2879     }
2880 
2881     /*
2882      * Open the images.
2883      *
2884      * Ignore the old backing file for unsafe rebase in case we want to correct
2885      * the reference to a renamed or moved backing file.
2886      */
2887     blk = img_open(image_opts, filename, fmt, flags, quiet);
2888     if (!blk) {
2889         ret = -1;
2890         goto out;
2891     }
2892     bs = blk_bs(blk);
2893 
2894     if (out_basefmt != NULL) {
2895         if (bdrv_find_format(out_basefmt) == NULL) {
2896             error_report("Invalid format name: '%s'", out_basefmt);
2897             ret = -1;
2898             goto out;
2899         }
2900     }
2901 
2902     /* For safe rebasing we need to compare old and new backing file */
2903     if (!unsafe) {
2904         char backing_name[PATH_MAX];
2905         QDict *options = NULL;
2906 
2907         if (bs->backing_format[0] != '\0') {
2908             options = qdict_new();
2909             qdict_put(options, "driver", qstring_from_str(bs->backing_format));
2910         }
2911 
2912         bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
2913         blk_old_backing = blk_new_open(backing_name, NULL,
2914                                        options, src_flags, &local_err);
2915         if (!blk_old_backing) {
2916             error_reportf_err(local_err,
2917                               "Could not open old backing file '%s': ",
2918                               backing_name);
2919             goto out;
2920         }
2921 
2922         if (out_baseimg[0]) {
2923             if (out_basefmt) {
2924                 options = qdict_new();
2925                 qdict_put(options, "driver", qstring_from_str(out_basefmt));
2926             } else {
2927                 options = NULL;
2928             }
2929 
2930             blk_new_backing = blk_new_open(out_baseimg, NULL,
2931                                            options, src_flags, &local_err);
2932             if (!blk_new_backing) {
2933                 error_reportf_err(local_err,
2934                                   "Could not open new backing file '%s': ",
2935                                   out_baseimg);
2936                 goto out;
2937             }
2938         }
2939     }
2940 
2941     /*
2942      * Check each unallocated cluster in the COW file. If it is unallocated,
2943      * accesses go to the backing file. We must therefore compare this cluster
2944      * in the old and new backing file, and if they differ we need to copy it
2945      * from the old backing file into the COW file.
2946      *
2947      * If qemu-img crashes during this step, no harm is done. The content of
2948      * the image is the same as the original one at any time.
2949      */
2950     if (!unsafe) {
2951         int64_t num_sectors;
2952         int64_t old_backing_num_sectors;
2953         int64_t new_backing_num_sectors = 0;
2954         uint64_t sector;
2955         int n;
2956         float local_progress = 0;
2957 
2958         buf_old = blk_blockalign(blk, IO_BUF_SIZE);
2959         buf_new = blk_blockalign(blk, IO_BUF_SIZE);
2960 
2961         num_sectors = blk_nb_sectors(blk);
2962         if (num_sectors < 0) {
2963             error_report("Could not get size of '%s': %s",
2964                          filename, strerror(-num_sectors));
2965             ret = -1;
2966             goto out;
2967         }
2968         old_backing_num_sectors = blk_nb_sectors(blk_old_backing);
2969         if (old_backing_num_sectors < 0) {
2970             char backing_name[PATH_MAX];
2971 
2972             bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
2973             error_report("Could not get size of '%s': %s",
2974                          backing_name, strerror(-old_backing_num_sectors));
2975             ret = -1;
2976             goto out;
2977         }
2978         if (blk_new_backing) {
2979             new_backing_num_sectors = blk_nb_sectors(blk_new_backing);
2980             if (new_backing_num_sectors < 0) {
2981                 error_report("Could not get size of '%s': %s",
2982                              out_baseimg, strerror(-new_backing_num_sectors));
2983                 ret = -1;
2984                 goto out;
2985             }
2986         }
2987 
2988         if (num_sectors != 0) {
2989             local_progress = (float)100 /
2990                 (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
2991         }
2992 
2993         for (sector = 0; sector < num_sectors; sector += n) {
2994 
2995             /* How many sectors can we handle with the next read? */
2996             if (sector + (IO_BUF_SIZE / 512) <= num_sectors) {
2997                 n = (IO_BUF_SIZE / 512);
2998             } else {
2999                 n = num_sectors - sector;
3000             }
3001 
3002             /* If the cluster is allocated, we don't need to take action */
3003             ret = bdrv_is_allocated(bs, sector, n, &n);
3004             if (ret < 0) {
3005                 error_report("error while reading image metadata: %s",
3006                              strerror(-ret));
3007                 goto out;
3008             }
3009             if (ret) {
3010                 continue;
3011             }
3012 
3013             /*
3014              * Read old and new backing file and take into consideration that
3015              * backing files may be smaller than the COW image.
3016              */
3017             if (sector >= old_backing_num_sectors) {
3018                 memset(buf_old, 0, n * BDRV_SECTOR_SIZE);
3019             } else {
3020                 if (sector + n > old_backing_num_sectors) {
3021                     n = old_backing_num_sectors - sector;
3022                 }
3023 
3024                 ret = blk_read(blk_old_backing, sector, buf_old, n);
3025                 if (ret < 0) {
3026                     error_report("error while reading from old backing file");
3027                     goto out;
3028                 }
3029             }
3030 
3031             if (sector >= new_backing_num_sectors || !blk_new_backing) {
3032                 memset(buf_new, 0, n * BDRV_SECTOR_SIZE);
3033             } else {
3034                 if (sector + n > new_backing_num_sectors) {
3035                     n = new_backing_num_sectors - sector;
3036                 }
3037 
3038                 ret = blk_read(blk_new_backing, sector, buf_new, n);
3039                 if (ret < 0) {
3040                     error_report("error while reading from new backing file");
3041                     goto out;
3042                 }
3043             }
3044 
3045             /* If they differ, we need to write to the COW file */
3046             uint64_t written = 0;
3047 
3048             while (written < n) {
3049                 int pnum;
3050 
3051                 if (compare_sectors(buf_old + written * 512,
3052                     buf_new + written * 512, n - written, &pnum))
3053                 {
3054                     ret = blk_write(blk, sector + written,
3055                                     buf_old + written * 512, pnum);
3056                     if (ret < 0) {
3057                         error_report("Error while writing to COW image: %s",
3058                             strerror(-ret));
3059                         goto out;
3060                     }
3061                 }
3062 
3063                 written += pnum;
3064             }
3065             qemu_progress_print(local_progress, 100);
3066         }
3067     }
3068 
3069     /*
3070      * Change the backing file. All clusters that are different from the old
3071      * backing file are overwritten in the COW file now, so the visible content
3072      * doesn't change when we switch the backing file.
3073      */
3074     if (out_baseimg && *out_baseimg) {
3075         ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
3076     } else {
3077         ret = bdrv_change_backing_file(bs, NULL, NULL);
3078     }
3079 
3080     if (ret == -ENOSPC) {
3081         error_report("Could not change the backing file to '%s': No "
3082                      "space left in the file header", out_baseimg);
3083     } else if (ret < 0) {
3084         error_report("Could not change the backing file to '%s': %s",
3085             out_baseimg, strerror(-ret));
3086     }
3087 
3088     qemu_progress_print(100, 0);
3089     /*
3090      * TODO At this point it is possible to check if any clusters that are
3091      * allocated in the COW file are the same in the backing file. If so, they
3092      * could be dropped from the COW file. Don't do this before switching the
3093      * backing file, in case of a crash this would lead to corruption.
3094      */
3095 out:
3096     qemu_progress_end();
3097     /* Cleanup */
3098     if (!unsafe) {
3099         blk_unref(blk_old_backing);
3100         blk_unref(blk_new_backing);
3101     }
3102     qemu_vfree(buf_old);
3103     qemu_vfree(buf_new);
3104 
3105     blk_unref(blk);
3106     if (ret) {
3107         return 1;
3108     }
3109     return 0;
3110 }
3111 
3112 static int img_resize(int argc, char **argv)
3113 {
3114     Error *err = NULL;
3115     int c, ret, relative;
3116     const char *filename, *fmt, *size;
3117     int64_t n, total_size;
3118     bool quiet = false;
3119     BlockBackend *blk = NULL;
3120     QemuOpts *param;
3121     Error *local_err = NULL;
3122 
3123     static QemuOptsList resize_options = {
3124         .name = "resize_options",
3125         .head = QTAILQ_HEAD_INITIALIZER(resize_options.head),
3126         .desc = {
3127             {
3128                 .name = BLOCK_OPT_SIZE,
3129                 .type = QEMU_OPT_SIZE,
3130                 .help = "Virtual disk size"
3131             }, {
3132                 /* end of list */
3133             }
3134         },
3135     };
3136     bool image_opts = false;
3137 
3138     /* Remove size from argv manually so that negative numbers are not treated
3139      * as options by getopt. */
3140     if (argc < 3) {
3141         error_exit("Not enough arguments");
3142         return 1;
3143     }
3144 
3145     size = argv[--argc];
3146 
3147     /* Parse getopt arguments */
3148     fmt = NULL;
3149     for(;;) {
3150         static const struct option long_options[] = {
3151             {"help", no_argument, 0, 'h'},
3152             {"object", required_argument, 0, OPTION_OBJECT},
3153             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3154             {0, 0, 0, 0}
3155         };
3156         c = getopt_long(argc, argv, "f:hq",
3157                         long_options, NULL);
3158         if (c == -1) {
3159             break;
3160         }
3161         switch(c) {
3162         case '?':
3163         case 'h':
3164             help();
3165             break;
3166         case 'f':
3167             fmt = optarg;
3168             break;
3169         case 'q':
3170             quiet = true;
3171             break;
3172         case OPTION_OBJECT: {
3173             QemuOpts *opts;
3174             opts = qemu_opts_parse_noisily(&qemu_object_opts,
3175                                            optarg, true);
3176             if (!opts) {
3177                 return 1;
3178             }
3179         }   break;
3180         case OPTION_IMAGE_OPTS:
3181             image_opts = true;
3182             break;
3183         }
3184     }
3185     if (optind != argc - 1) {
3186         error_exit("Expecting one image file name");
3187     }
3188     filename = argv[optind++];
3189 
3190     if (qemu_opts_foreach(&qemu_object_opts,
3191                           user_creatable_add_opts_foreach,
3192                           NULL, &local_err)) {
3193         error_report_err(local_err);
3194         return 1;
3195     }
3196 
3197     /* Choose grow, shrink, or absolute resize mode */
3198     switch (size[0]) {
3199     case '+':
3200         relative = 1;
3201         size++;
3202         break;
3203     case '-':
3204         relative = -1;
3205         size++;
3206         break;
3207     default:
3208         relative = 0;
3209         break;
3210     }
3211 
3212     /* Parse size */
3213     param = qemu_opts_create(&resize_options, NULL, 0, &error_abort);
3214     qemu_opt_set(param, BLOCK_OPT_SIZE, size, &err);
3215     if (err) {
3216         error_report_err(err);
3217         ret = -1;
3218         qemu_opts_del(param);
3219         goto out;
3220     }
3221     n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0);
3222     qemu_opts_del(param);
3223 
3224     blk = img_open(image_opts, filename, fmt,
3225                    BDRV_O_FLAGS | BDRV_O_RDWR, quiet);
3226     if (!blk) {
3227         ret = -1;
3228         goto out;
3229     }
3230 
3231     if (relative) {
3232         total_size = blk_getlength(blk) + n * relative;
3233     } else {
3234         total_size = n;
3235     }
3236     if (total_size <= 0) {
3237         error_report("New image size must be positive");
3238         ret = -1;
3239         goto out;
3240     }
3241 
3242     ret = blk_truncate(blk, total_size);
3243     switch (ret) {
3244     case 0:
3245         qprintf(quiet, "Image resized.\n");
3246         break;
3247     case -ENOTSUP:
3248         error_report("This image does not support resize");
3249         break;
3250     case -EACCES:
3251         error_report("Image is read-only");
3252         break;
3253     default:
3254         error_report("Error resizing image (%d)", -ret);
3255         break;
3256     }
3257 out:
3258     blk_unref(blk);
3259     if (ret) {
3260         return 1;
3261     }
3262     return 0;
3263 }
3264 
3265 static void amend_status_cb(BlockDriverState *bs,
3266                             int64_t offset, int64_t total_work_size,
3267                             void *opaque)
3268 {
3269     qemu_progress_print(100.f * offset / total_work_size, 0);
3270 }
3271 
3272 static int img_amend(int argc, char **argv)
3273 {
3274     Error *err = NULL;
3275     int c, ret = 0;
3276     char *options = NULL;
3277     QemuOptsList *create_opts = NULL;
3278     QemuOpts *opts = NULL;
3279     const char *fmt = NULL, *filename, *cache;
3280     int flags;
3281     bool quiet = false, progress = false;
3282     BlockBackend *blk = NULL;
3283     BlockDriverState *bs = NULL;
3284     Error *local_err = NULL;
3285     bool image_opts = false;
3286 
3287     cache = BDRV_DEFAULT_CACHE;
3288     for (;;) {
3289         static const struct option long_options[] = {
3290             {"help", no_argument, 0, 'h'},
3291             {"object", required_argument, 0, OPTION_OBJECT},
3292             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
3293             {0, 0, 0, 0}
3294         };
3295         c = getopt_long(argc, argv, "ho:f:t:pq",
3296                         long_options, NULL);
3297         if (c == -1) {
3298             break;
3299         }
3300 
3301         switch (c) {
3302             case 'h':
3303             case '?':
3304                 help();
3305                 break;
3306             case 'o':
3307                 if (!is_valid_option_list(optarg)) {
3308                     error_report("Invalid option list: %s", optarg);
3309                     ret = -1;
3310                     goto out_no_progress;
3311                 }
3312                 if (!options) {
3313                     options = g_strdup(optarg);
3314                 } else {
3315                     char *old_options = options;
3316                     options = g_strdup_printf("%s,%s", options, optarg);
3317                     g_free(old_options);
3318                 }
3319                 break;
3320             case 'f':
3321                 fmt = optarg;
3322                 break;
3323             case 't':
3324                 cache = optarg;
3325                 break;
3326             case 'p':
3327                 progress = true;
3328                 break;
3329             case 'q':
3330                 quiet = true;
3331                 break;
3332             case OPTION_OBJECT:
3333                 opts = qemu_opts_parse_noisily(&qemu_object_opts,
3334                                                optarg, true);
3335                 if (!opts) {
3336                     ret = -1;
3337                     goto out_no_progress;
3338                 }
3339                 break;
3340             case OPTION_IMAGE_OPTS:
3341                 image_opts = true;
3342                 break;
3343         }
3344     }
3345 
3346     if (!options) {
3347         error_exit("Must specify options (-o)");
3348     }
3349 
3350     if (qemu_opts_foreach(&qemu_object_opts,
3351                           user_creatable_add_opts_foreach,
3352                           NULL, &local_err)) {
3353         error_report_err(local_err);
3354         ret = -1;
3355         goto out_no_progress;
3356     }
3357 
3358     if (quiet) {
3359         progress = false;
3360     }
3361     qemu_progress_init(progress, 1.0);
3362 
3363     filename = (optind == argc - 1) ? argv[argc - 1] : NULL;
3364     if (fmt && has_help_option(options)) {
3365         /* If a format is explicitly specified (and possibly no filename is
3366          * given), print option help here */
3367         ret = print_block_option_help(filename, fmt);
3368         goto out;
3369     }
3370 
3371     if (optind != argc - 1) {
3372         error_report("Expecting one image file name");
3373         ret = -1;
3374         goto out;
3375     }
3376 
3377     flags = BDRV_O_FLAGS | BDRV_O_RDWR;
3378     ret = bdrv_parse_cache_flags(cache, &flags);
3379     if (ret < 0) {
3380         error_report("Invalid cache option: %s", cache);
3381         goto out;
3382     }
3383 
3384     blk = img_open(image_opts, filename, fmt, flags, quiet);
3385     if (!blk) {
3386         ret = -1;
3387         goto out;
3388     }
3389     bs = blk_bs(blk);
3390 
3391     fmt = bs->drv->format_name;
3392 
3393     if (has_help_option(options)) {
3394         /* If the format was auto-detected, print option help here */
3395         ret = print_block_option_help(filename, fmt);
3396         goto out;
3397     }
3398 
3399     if (!bs->drv->create_opts) {
3400         error_report("Format driver '%s' does not support any options to amend",
3401                      fmt);
3402         ret = -1;
3403         goto out;
3404     }
3405 
3406     create_opts = qemu_opts_append(create_opts, bs->drv->create_opts);
3407     opts = qemu_opts_create(create_opts, NULL, 0, &error_abort);
3408     if (options) {
3409         qemu_opts_do_parse(opts, options, NULL, &err);
3410         if (err) {
3411             error_report_err(err);
3412             ret = -1;
3413             goto out;
3414         }
3415     }
3416 
3417     /* In case the driver does not call amend_status_cb() */
3418     qemu_progress_print(0.f, 0);
3419     ret = bdrv_amend_options(bs, opts, &amend_status_cb, NULL);
3420     qemu_progress_print(100.f, 0);
3421     if (ret < 0) {
3422         error_report("Error while amending options: %s", strerror(-ret));
3423         goto out;
3424     }
3425 
3426 out:
3427     qemu_progress_end();
3428 
3429 out_no_progress:
3430     blk_unref(blk);
3431     qemu_opts_del(opts);
3432     qemu_opts_free(create_opts);
3433     g_free(options);
3434 
3435     if (ret) {
3436         return 1;
3437     }
3438     return 0;
3439 }
3440 
3441 static const img_cmd_t img_cmds[] = {
3442 #define DEF(option, callback, arg_string)        \
3443     { option, callback },
3444 #include "qemu-img-cmds.h"
3445 #undef DEF
3446 #undef GEN_DOCS
3447     { NULL, NULL, },
3448 };
3449 
3450 int main(int argc, char **argv)
3451 {
3452     const img_cmd_t *cmd;
3453     const char *cmdname;
3454     Error *local_error = NULL;
3455     int c;
3456     static const struct option long_options[] = {
3457         {"help", no_argument, 0, 'h'},
3458         {"version", no_argument, 0, 'v'},
3459         {0, 0, 0, 0}
3460     };
3461 
3462 #ifdef CONFIG_POSIX
3463     signal(SIGPIPE, SIG_IGN);
3464 #endif
3465 
3466     error_set_progname(argv[0]);
3467     qemu_init_exec_dir(argv[0]);
3468 
3469     if (qemu_init_main_loop(&local_error)) {
3470         error_report_err(local_error);
3471         exit(EXIT_FAILURE);
3472     }
3473 
3474     module_call_init(MODULE_INIT_QOM);
3475     bdrv_init();
3476     if (argc < 2) {
3477         error_exit("Not enough arguments");
3478     }
3479     cmdname = argv[1];
3480 
3481     qemu_add_opts(&qemu_object_opts);
3482     qemu_add_opts(&qemu_source_opts);
3483 
3484     /* find the command */
3485     for (cmd = img_cmds; cmd->name != NULL; cmd++) {
3486         if (!strcmp(cmdname, cmd->name)) {
3487             return cmd->handler(argc - 1, argv + 1);
3488         }
3489     }
3490 
3491     c = getopt_long(argc, argv, "h", long_options, NULL);
3492 
3493     if (c == 'h') {
3494         help();
3495     }
3496     if (c == 'v') {
3497         printf(QEMU_IMG_VERSION);
3498         return 0;
3499     }
3500 
3501     /* not found */
3502     error_exit("Command not found: %s", cmdname);
3503 }
3504