qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

blockdev.c (119119B)


      1 /*
      2  * QEMU host block devices
      3  *
      4  * Copyright (c) 2003-2008 Fabrice Bellard
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or
      7  * later.  See the COPYING file in the top-level directory.
      8  *
      9  * This file incorporates work covered by the following copyright and
     10  * permission notice:
     11  *
     12  * Copyright (c) 2003-2008 Fabrice Bellard
     13  *
     14  * Permission is hereby granted, free of charge, to any person obtaining a copy
     15  * of this software and associated documentation files (the "Software"), to deal
     16  * in the Software without restriction, including without limitation the rights
     17  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     18  * copies of the Software, and to permit persons to whom the Software is
     19  * furnished to do so, subject to the following conditions:
     20  *
     21  * The above copyright notice and this permission notice shall be included in
     22  * all copies or substantial portions of the Software.
     23  *
     24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     25  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     26  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     27  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     28  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     29  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     30  * THE SOFTWARE.
     31  */
     32 
     33 #include "qemu/osdep.h"
     34 #include "sysemu/block-backend.h"
     35 #include "sysemu/blockdev.h"
     36 #include "hw/block/block.h"
     37 #include "block/blockjob.h"
     38 #include "block/qdict.h"
     39 #include "block/throttle-groups.h"
     40 #include "monitor/monitor.h"
     41 #include "qemu/error-report.h"
     42 #include "qemu/option.h"
     43 #include "qemu/qemu-print.h"
     44 #include "qemu/config-file.h"
     45 #include "qapi/qapi-commands-block.h"
     46 #include "qapi/qapi-commands-transaction.h"
     47 #include "qapi/qapi-visit-block-core.h"
     48 #include "qapi/qmp/qdict.h"
     49 #include "qapi/qmp/qnum.h"
     50 #include "qapi/qmp/qstring.h"
     51 #include "qapi/error.h"
     52 #include "qapi/qmp/qerror.h"
     53 #include "qapi/qmp/qlist.h"
     54 #include "qapi/qobject-output-visitor.h"
     55 #include "sysemu/sysemu.h"
     56 #include "sysemu/iothread.h"
     57 #include "block/block_int.h"
     58 #include "block/trace.h"
     59 #include "sysemu/runstate.h"
     60 #include "sysemu/replay.h"
     61 #include "qemu/cutils.h"
     62 #include "qemu/help_option.h"
     63 #include "qemu/main-loop.h"
     64 #include "qemu/throttle-options.h"
     65 
     66 /* Protected by BQL */
     67 QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states =
     68     QTAILQ_HEAD_INITIALIZER(monitor_bdrv_states);
     69 
     70 void bdrv_set_monitor_owned(BlockDriverState *bs)
     71 {
     72     GLOBAL_STATE_CODE();
     73     QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list);
     74 }
     75 
     76 static const char *const if_name[IF_COUNT] = {
     77     [IF_NONE] = "none",
     78     [IF_IDE] = "ide",
     79     [IF_SCSI] = "scsi",
     80     [IF_FLOPPY] = "floppy",
     81     [IF_PFLASH] = "pflash",
     82     [IF_MTD] = "mtd",
     83     [IF_SD] = "sd",
     84     [IF_VIRTIO] = "virtio",
     85     [IF_XEN] = "xen",
     86 };
     87 
     88 static int if_max_devs[IF_COUNT] = {
     89     /*
     90      * Do not change these numbers!  They govern how drive option
     91      * index maps to unit and bus.  That mapping is ABI.
     92      *
     93      * All controllers used to implement if=T drives need to support
     94      * if_max_devs[T] units, for any T with if_max_devs[T] != 0.
     95      * Otherwise, some index values map to "impossible" bus, unit
     96      * values.
     97      *
     98      * For instance, if you change [IF_SCSI] to 255, -drive
     99      * if=scsi,index=12 no longer means bus=1,unit=5, but
    100      * bus=0,unit=12.  With an lsi53c895a controller (7 units max),
    101      * the drive can't be set up.  Regression.
    102      */
    103     [IF_IDE] = 2,
    104     [IF_SCSI] = 7,
    105 };
    106 
    107 /**
    108  * Boards may call this to offer board-by-board overrides
    109  * of the default, global values.
    110  */
    111 void override_max_devs(BlockInterfaceType type, int max_devs)
    112 {
    113     BlockBackend *blk;
    114     DriveInfo *dinfo;
    115 
    116     GLOBAL_STATE_CODE();
    117 
    118     if (max_devs <= 0) {
    119         return;
    120     }
    121 
    122     for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
    123         dinfo = blk_legacy_dinfo(blk);
    124         if (dinfo->type == type) {
    125             fprintf(stderr, "Cannot override units-per-bus property of"
    126                     " the %s interface, because a drive of that type has"
    127                     " already been added.\n", if_name[type]);
    128             g_assert_not_reached();
    129         }
    130     }
    131 
    132     if_max_devs[type] = max_devs;
    133 }
    134 
    135 /*
    136  * We automatically delete the drive when a device using it gets
    137  * unplugged.  Questionable feature, but we can't just drop it.
    138  * Device models call blockdev_mark_auto_del() to schedule the
    139  * automatic deletion, and generic qdev code calls blockdev_auto_del()
    140  * when deletion is actually safe.
    141  */
    142 void blockdev_mark_auto_del(BlockBackend *blk)
    143 {
    144     DriveInfo *dinfo = blk_legacy_dinfo(blk);
    145     BlockJob *job;
    146 
    147     GLOBAL_STATE_CODE();
    148 
    149     if (!dinfo) {
    150         return;
    151     }
    152 
    153     JOB_LOCK_GUARD();
    154 
    155     for (job = block_job_next_locked(NULL); job;
    156          job = block_job_next_locked(job)) {
    157         if (block_job_has_bdrv(job, blk_bs(blk))) {
    158             job_cancel_locked(&job->job, false);
    159         }
    160     }
    161 
    162     dinfo->auto_del = 1;
    163 }
    164 
    165 void blockdev_auto_del(BlockBackend *blk)
    166 {
    167     DriveInfo *dinfo = blk_legacy_dinfo(blk);
    168     GLOBAL_STATE_CODE();
    169 
    170     if (dinfo && dinfo->auto_del) {
    171         monitor_remove_blk(blk);
    172         blk_unref(blk);
    173     }
    174 }
    175 
    176 static int drive_index_to_bus_id(BlockInterfaceType type, int index)
    177 {
    178     int max_devs = if_max_devs[type];
    179     return max_devs ? index / max_devs : 0;
    180 }
    181 
    182 static int drive_index_to_unit_id(BlockInterfaceType type, int index)
    183 {
    184     int max_devs = if_max_devs[type];
    185     return max_devs ? index % max_devs : index;
    186 }
    187 
    188 QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
    189                     const char *optstr)
    190 {
    191     QemuOpts *opts;
    192 
    193     GLOBAL_STATE_CODE();
    194 
    195     opts = qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false);
    196     if (!opts) {
    197         return NULL;
    198     }
    199     if (type != IF_DEFAULT) {
    200         qemu_opt_set(opts, "if", if_name[type], &error_abort);
    201     }
    202     if (index >= 0) {
    203         qemu_opt_set_number(opts, "index", index, &error_abort);
    204     }
    205     if (file)
    206         qemu_opt_set(opts, "file", file, &error_abort);
    207     return opts;
    208 }
    209 
    210 DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
    211 {
    212     BlockBackend *blk;
    213     DriveInfo *dinfo;
    214 
    215     GLOBAL_STATE_CODE();
    216 
    217     for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
    218         dinfo = blk_legacy_dinfo(blk);
    219         if (dinfo && dinfo->type == type
    220             && dinfo->bus == bus && dinfo->unit == unit) {
    221             return dinfo;
    222         }
    223     }
    224 
    225     return NULL;
    226 }
    227 
    228 /*
    229  * Check board claimed all -drive that are meant to be claimed.
    230  * Fatal error if any remain unclaimed.
    231  */
    232 void drive_check_orphaned(void)
    233 {
    234     BlockBackend *blk;
    235     DriveInfo *dinfo;
    236     Location loc;
    237     bool orphans = false;
    238 
    239     GLOBAL_STATE_CODE();
    240 
    241     for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
    242         dinfo = blk_legacy_dinfo(blk);
    243         /*
    244          * Ignore default drives, because we create certain default
    245          * drives unconditionally, then leave them unclaimed.  Not the
    246          * users fault.
    247          * Ignore IF_VIRTIO, because it gets desugared into -device,
    248          * so we can leave failing to -device.
    249          * Ignore IF_NONE, because leaving unclaimed IF_NONE remains
    250          * available for device_add is a feature.
    251          */
    252         if (dinfo->is_default || dinfo->type == IF_VIRTIO
    253             || dinfo->type == IF_NONE) {
    254             continue;
    255         }
    256         if (!blk_get_attached_dev(blk)) {
    257             loc_push_none(&loc);
    258             qemu_opts_loc_restore(dinfo->opts);
    259             error_report("machine type does not support"
    260                          " if=%s,bus=%d,unit=%d",
    261                          if_name[dinfo->type], dinfo->bus, dinfo->unit);
    262             loc_pop(&loc);
    263             orphans = true;
    264         }
    265     }
    266 
    267     if (orphans) {
    268         exit(1);
    269     }
    270 }
    271 
    272 DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
    273 {
    274     GLOBAL_STATE_CODE();
    275     return drive_get(type,
    276                      drive_index_to_bus_id(type, index),
    277                      drive_index_to_unit_id(type, index));
    278 }
    279 
    280 int drive_get_max_bus(BlockInterfaceType type)
    281 {
    282     int max_bus;
    283     BlockBackend *blk;
    284     DriveInfo *dinfo;
    285 
    286     GLOBAL_STATE_CODE();
    287 
    288     max_bus = -1;
    289     for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
    290         dinfo = blk_legacy_dinfo(blk);
    291         if (dinfo && dinfo->type == type && dinfo->bus > max_bus) {
    292             max_bus = dinfo->bus;
    293         }
    294     }
    295     return max_bus;
    296 }
    297 
    298 static void bdrv_format_print(void *opaque, const char *name)
    299 {
    300     qemu_printf(" %s", name);
    301 }
    302 
    303 typedef struct {
    304     QEMUBH *bh;
    305     BlockDriverState *bs;
    306 } BDRVPutRefBH;
    307 
    308 static int parse_block_error_action(const char *buf, bool is_read, Error **errp)
    309 {
    310     if (!strcmp(buf, "ignore")) {
    311         return BLOCKDEV_ON_ERROR_IGNORE;
    312     } else if (!is_read && !strcmp(buf, "enospc")) {
    313         return BLOCKDEV_ON_ERROR_ENOSPC;
    314     } else if (!strcmp(buf, "stop")) {
    315         return BLOCKDEV_ON_ERROR_STOP;
    316     } else if (!strcmp(buf, "report")) {
    317         return BLOCKDEV_ON_ERROR_REPORT;
    318     } else {
    319         error_setg(errp, "'%s' invalid %s error action",
    320                    buf, is_read ? "read" : "write");
    321         return -1;
    322     }
    323 }
    324 
    325 static bool parse_stats_intervals(BlockAcctStats *stats, QList *intervals,
    326                                   Error **errp)
    327 {
    328     const QListEntry *entry;
    329     for (entry = qlist_first(intervals); entry; entry = qlist_next(entry)) {
    330         switch (qobject_type(entry->value)) {
    331 
    332         case QTYPE_QSTRING: {
    333             unsigned long long length;
    334             const char *str = qstring_get_str(qobject_to(QString,
    335                                                          entry->value));
    336             if (parse_uint_full(str, &length, 10) == 0 &&
    337                 length > 0 && length <= UINT_MAX) {
    338                 block_acct_add_interval(stats, (unsigned) length);
    339             } else {
    340                 error_setg(errp, "Invalid interval length: %s", str);
    341                 return false;
    342             }
    343             break;
    344         }
    345 
    346         case QTYPE_QNUM: {
    347             int64_t length = qnum_get_int(qobject_to(QNum, entry->value));
    348 
    349             if (length > 0 && length <= UINT_MAX) {
    350                 block_acct_add_interval(stats, (unsigned) length);
    351             } else {
    352                 error_setg(errp, "Invalid interval length: %" PRId64, length);
    353                 return false;
    354             }
    355             break;
    356         }
    357 
    358         default:
    359             error_setg(errp, "The specification of stats-intervals is invalid");
    360             return false;
    361         }
    362     }
    363     return true;
    364 }
    365 
    366 typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType;
    367 
    368 /* All parameters but @opts are optional and may be set to NULL. */
    369 static void extract_common_blockdev_options(QemuOpts *opts, int *bdrv_flags,
    370     const char **throttling_group, ThrottleConfig *throttle_cfg,
    371     BlockdevDetectZeroesOptions *detect_zeroes, Error **errp)
    372 {
    373     Error *local_error = NULL;
    374     const char *aio;
    375 
    376     if (bdrv_flags) {
    377         if (qemu_opt_get_bool(opts, "copy-on-read", false)) {
    378             *bdrv_flags |= BDRV_O_COPY_ON_READ;
    379         }
    380 
    381         if ((aio = qemu_opt_get(opts, "aio")) != NULL) {
    382             if (bdrv_parse_aio(aio, bdrv_flags) < 0) {
    383                 error_setg(errp, "invalid aio option");
    384                 return;
    385             }
    386         }
    387     }
    388 
    389     /* disk I/O throttling */
    390     if (throttling_group) {
    391         *throttling_group = qemu_opt_get(opts, "throttling.group");
    392     }
    393 
    394     if (throttle_cfg) {
    395         throttle_config_init(throttle_cfg);
    396         throttle_cfg->buckets[THROTTLE_BPS_TOTAL].avg =
    397             qemu_opt_get_number(opts, "throttling.bps-total", 0);
    398         throttle_cfg->buckets[THROTTLE_BPS_READ].avg  =
    399             qemu_opt_get_number(opts, "throttling.bps-read", 0);
    400         throttle_cfg->buckets[THROTTLE_BPS_WRITE].avg =
    401             qemu_opt_get_number(opts, "throttling.bps-write", 0);
    402         throttle_cfg->buckets[THROTTLE_OPS_TOTAL].avg =
    403             qemu_opt_get_number(opts, "throttling.iops-total", 0);
    404         throttle_cfg->buckets[THROTTLE_OPS_READ].avg =
    405             qemu_opt_get_number(opts, "throttling.iops-read", 0);
    406         throttle_cfg->buckets[THROTTLE_OPS_WRITE].avg =
    407             qemu_opt_get_number(opts, "throttling.iops-write", 0);
    408 
    409         throttle_cfg->buckets[THROTTLE_BPS_TOTAL].max =
    410             qemu_opt_get_number(opts, "throttling.bps-total-max", 0);
    411         throttle_cfg->buckets[THROTTLE_BPS_READ].max  =
    412             qemu_opt_get_number(opts, "throttling.bps-read-max", 0);
    413         throttle_cfg->buckets[THROTTLE_BPS_WRITE].max =
    414             qemu_opt_get_number(opts, "throttling.bps-write-max", 0);
    415         throttle_cfg->buckets[THROTTLE_OPS_TOTAL].max =
    416             qemu_opt_get_number(opts, "throttling.iops-total-max", 0);
    417         throttle_cfg->buckets[THROTTLE_OPS_READ].max =
    418             qemu_opt_get_number(opts, "throttling.iops-read-max", 0);
    419         throttle_cfg->buckets[THROTTLE_OPS_WRITE].max =
    420             qemu_opt_get_number(opts, "throttling.iops-write-max", 0);
    421 
    422         throttle_cfg->buckets[THROTTLE_BPS_TOTAL].burst_length =
    423             qemu_opt_get_number(opts, "throttling.bps-total-max-length", 1);
    424         throttle_cfg->buckets[THROTTLE_BPS_READ].burst_length  =
    425             qemu_opt_get_number(opts, "throttling.bps-read-max-length", 1);
    426         throttle_cfg->buckets[THROTTLE_BPS_WRITE].burst_length =
    427             qemu_opt_get_number(opts, "throttling.bps-write-max-length", 1);
    428         throttle_cfg->buckets[THROTTLE_OPS_TOTAL].burst_length =
    429             qemu_opt_get_number(opts, "throttling.iops-total-max-length", 1);
    430         throttle_cfg->buckets[THROTTLE_OPS_READ].burst_length =
    431             qemu_opt_get_number(opts, "throttling.iops-read-max-length", 1);
    432         throttle_cfg->buckets[THROTTLE_OPS_WRITE].burst_length =
    433             qemu_opt_get_number(opts, "throttling.iops-write-max-length", 1);
    434 
    435         throttle_cfg->op_size =
    436             qemu_opt_get_number(opts, "throttling.iops-size", 0);
    437 
    438         if (!throttle_is_valid(throttle_cfg, errp)) {
    439             return;
    440         }
    441     }
    442 
    443     if (detect_zeroes) {
    444         *detect_zeroes =
    445             qapi_enum_parse(&BlockdevDetectZeroesOptions_lookup,
    446                             qemu_opt_get(opts, "detect-zeroes"),
    447                             BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
    448                             &local_error);
    449         if (local_error) {
    450             error_propagate(errp, local_error);
    451             return;
    452         }
    453     }
    454 }
    455 
    456 static OnOffAuto account_get_opt(QemuOpts *opts, const char *name)
    457 {
    458     if (!qemu_opt_find(opts, name)) {
    459         return ON_OFF_AUTO_AUTO;
    460     }
    461     if (qemu_opt_get_bool(opts, name, true)) {
    462         return ON_OFF_AUTO_ON;
    463     }
    464     return ON_OFF_AUTO_OFF;
    465 }
    466 
    467 /* Takes the ownership of bs_opts */
    468 static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
    469                                    Error **errp)
    470 {
    471     const char *buf;
    472     int bdrv_flags = 0;
    473     int on_read_error, on_write_error;
    474     OnOffAuto account_invalid, account_failed;
    475     bool writethrough, read_only;
    476     BlockBackend *blk;
    477     BlockDriverState *bs;
    478     ThrottleConfig cfg;
    479     int snapshot = 0;
    480     Error *error = NULL;
    481     QemuOpts *opts;
    482     QDict *interval_dict = NULL;
    483     QList *interval_list = NULL;
    484     const char *id;
    485     BlockdevDetectZeroesOptions detect_zeroes =
    486         BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF;
    487     const char *throttling_group = NULL;
    488 
    489     /* Check common options by copying from bs_opts to opts, all other options
    490      * stay in bs_opts for processing by bdrv_open(). */
    491     id = qdict_get_try_str(bs_opts, "id");
    492     opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, errp);
    493     if (!opts) {
    494         goto err_no_opts;
    495     }
    496 
    497     if (!qemu_opts_absorb_qdict(opts, bs_opts, errp)) {
    498         goto early_err;
    499     }
    500 
    501     if (id) {
    502         qdict_del(bs_opts, "id");
    503     }
    504 
    505     /* extract parameters */
    506     snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
    507 
    508     account_invalid = account_get_opt(opts, "stats-account-invalid");
    509     account_failed = account_get_opt(opts, "stats-account-failed");
    510 
    511     writethrough = !qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, true);
    512 
    513     id = qemu_opts_id(opts);
    514 
    515     qdict_extract_subqdict(bs_opts, &interval_dict, "stats-intervals.");
    516     qdict_array_split(interval_dict, &interval_list);
    517 
    518     if (qdict_size(interval_dict) != 0) {
    519         error_setg(errp, "Invalid option stats-intervals.%s",
    520                    qdict_first(interval_dict)->key);
    521         goto early_err;
    522     }
    523 
    524     extract_common_blockdev_options(opts, &bdrv_flags, &throttling_group, &cfg,
    525                                     &detect_zeroes, &error);
    526     if (error) {
    527         error_propagate(errp, error);
    528         goto early_err;
    529     }
    530 
    531     if ((buf = qemu_opt_get(opts, "format")) != NULL) {
    532         if (is_help_option(buf)) {
    533             qemu_printf("Supported formats:");
    534             bdrv_iterate_format(bdrv_format_print, NULL, false);
    535             qemu_printf("\nSupported formats (read-only):");
    536             bdrv_iterate_format(bdrv_format_print, NULL, true);
    537             qemu_printf("\n");
    538             goto early_err;
    539         }
    540 
    541         if (qdict_haskey(bs_opts, "driver")) {
    542             error_setg(errp, "Cannot specify both 'driver' and 'format'");
    543             goto early_err;
    544         }
    545         qdict_put_str(bs_opts, "driver", buf);
    546     }
    547 
    548     on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
    549     if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
    550         on_write_error = parse_block_error_action(buf, 0, &error);
    551         if (error) {
    552             error_propagate(errp, error);
    553             goto early_err;
    554         }
    555     }
    556 
    557     on_read_error = BLOCKDEV_ON_ERROR_REPORT;
    558     if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
    559         on_read_error = parse_block_error_action(buf, 1, &error);
    560         if (error) {
    561             error_propagate(errp, error);
    562             goto early_err;
    563         }
    564     }
    565 
    566     if (snapshot) {
    567         bdrv_flags |= BDRV_O_SNAPSHOT;
    568     }
    569 
    570     read_only = qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false);
    571 
    572     /* init */
    573     if ((!file || !*file) && !qdict_size(bs_opts)) {
    574         BlockBackendRootState *blk_rs;
    575 
    576         blk = blk_new(qemu_get_aio_context(), 0, BLK_PERM_ALL);
    577         blk_rs = blk_get_root_state(blk);
    578         blk_rs->open_flags    = bdrv_flags | (read_only ? 0 : BDRV_O_RDWR);
    579         blk_rs->detect_zeroes = detect_zeroes;
    580 
    581         qobject_unref(bs_opts);
    582     } else {
    583         if (file && !*file) {
    584             file = NULL;
    585         }
    586 
    587         /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
    588          * with other callers) rather than what we want as the real defaults.
    589          * Apply the defaults here instead. */
    590         qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_DIRECT, "off");
    591         qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_NO_FLUSH, "off");
    592         qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY,
    593                               read_only ? "on" : "off");
    594         qdict_set_default_str(bs_opts, BDRV_OPT_AUTO_READ_ONLY, "on");
    595         assert((bdrv_flags & BDRV_O_CACHE_MASK) == 0);
    596 
    597         if (runstate_check(RUN_STATE_INMIGRATE)) {
    598             bdrv_flags |= BDRV_O_INACTIVE;
    599         }
    600 
    601         blk = blk_new_open(file, NULL, bs_opts, bdrv_flags, errp);
    602         if (!blk) {
    603             goto err_no_bs_opts;
    604         }
    605         bs = blk_bs(blk);
    606 
    607         bs->detect_zeroes = detect_zeroes;
    608 
    609         block_acct_setup(blk_get_stats(blk), account_invalid, account_failed);
    610 
    611         if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp)) {
    612             blk_unref(blk);
    613             blk = NULL;
    614             goto err_no_bs_opts;
    615         }
    616     }
    617 
    618     /* disk I/O throttling */
    619     if (throttle_enabled(&cfg)) {
    620         if (!throttling_group) {
    621             throttling_group = id;
    622         }
    623         blk_io_limits_enable(blk, throttling_group);
    624         blk_set_io_limits(blk, &cfg);
    625     }
    626 
    627     blk_set_enable_write_cache(blk, !writethrough);
    628     blk_set_on_error(blk, on_read_error, on_write_error);
    629 
    630     if (!monitor_add_blk(blk, id, errp)) {
    631         blk_unref(blk);
    632         blk = NULL;
    633         goto err_no_bs_opts;
    634     }
    635 
    636 err_no_bs_opts:
    637     qemu_opts_del(opts);
    638     qobject_unref(interval_dict);
    639     qobject_unref(interval_list);
    640     return blk;
    641 
    642 early_err:
    643     qemu_opts_del(opts);
    644     qobject_unref(interval_dict);
    645     qobject_unref(interval_list);
    646 err_no_opts:
    647     qobject_unref(bs_opts);
    648     return NULL;
    649 }
    650 
    651 /* Takes the ownership of bs_opts */
    652 BlockDriverState *bds_tree_init(QDict *bs_opts, Error **errp)
    653 {
    654     int bdrv_flags = 0;
    655 
    656     GLOBAL_STATE_CODE();
    657     /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
    658      * with other callers) rather than what we want as the real defaults.
    659      * Apply the defaults here instead. */
    660     qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_DIRECT, "off");
    661     qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_NO_FLUSH, "off");
    662     qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY, "off");
    663 
    664     if (runstate_check(RUN_STATE_INMIGRATE)) {
    665         bdrv_flags |= BDRV_O_INACTIVE;
    666     }
    667 
    668     return bdrv_open(NULL, NULL, bs_opts, bdrv_flags, errp);
    669 }
    670 
    671 void blockdev_close_all_bdrv_states(void)
    672 {
    673     BlockDriverState *bs, *next_bs;
    674 
    675     GLOBAL_STATE_CODE();
    676     QTAILQ_FOREACH_SAFE(bs, &monitor_bdrv_states, monitor_list, next_bs) {
    677         AioContext *ctx = bdrv_get_aio_context(bs);
    678 
    679         aio_context_acquire(ctx);
    680         bdrv_unref(bs);
    681         aio_context_release(ctx);
    682     }
    683 }
    684 
    685 /* Iterates over the list of monitor-owned BlockDriverStates */
    686 BlockDriverState *bdrv_next_monitor_owned(BlockDriverState *bs)
    687 {
    688     GLOBAL_STATE_CODE();
    689     return bs ? QTAILQ_NEXT(bs, monitor_list)
    690               : QTAILQ_FIRST(&monitor_bdrv_states);
    691 }
    692 
    693 static bool qemu_opt_rename(QemuOpts *opts, const char *from, const char *to,
    694                             Error **errp)
    695 {
    696     const char *value;
    697 
    698     value = qemu_opt_get(opts, from);
    699     if (value) {
    700         if (qemu_opt_find(opts, to)) {
    701             error_setg(errp, "'%s' and its alias '%s' can't be used at the "
    702                        "same time", to, from);
    703             return false;
    704         }
    705     }
    706 
    707     /* rename all items in opts */
    708     while ((value = qemu_opt_get(opts, from))) {
    709         qemu_opt_set(opts, to, value, &error_abort);
    710         qemu_opt_unset(opts, from);
    711     }
    712     return true;
    713 }
    714 
    715 QemuOptsList qemu_legacy_drive_opts = {
    716     .name = "drive",
    717     .head = QTAILQ_HEAD_INITIALIZER(qemu_legacy_drive_opts.head),
    718     .desc = {
    719         {
    720             .name = "bus",
    721             .type = QEMU_OPT_NUMBER,
    722             .help = "bus number",
    723         },{
    724             .name = "unit",
    725             .type = QEMU_OPT_NUMBER,
    726             .help = "unit number (i.e. lun for scsi)",
    727         },{
    728             .name = "index",
    729             .type = QEMU_OPT_NUMBER,
    730             .help = "index number",
    731         },{
    732             .name = "media",
    733             .type = QEMU_OPT_STRING,
    734             .help = "media type (disk, cdrom)",
    735         },{
    736             .name = "if",
    737             .type = QEMU_OPT_STRING,
    738             .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
    739         },{
    740             .name = "file",
    741             .type = QEMU_OPT_STRING,
    742             .help = "file name",
    743         },
    744 
    745         /* Options that are passed on, but have special semantics with -drive */
    746         {
    747             .name = BDRV_OPT_READ_ONLY,
    748             .type = QEMU_OPT_BOOL,
    749             .help = "open drive file as read-only",
    750         },{
    751             .name = "rerror",
    752             .type = QEMU_OPT_STRING,
    753             .help = "read error action",
    754         },{
    755             .name = "werror",
    756             .type = QEMU_OPT_STRING,
    757             .help = "write error action",
    758         },{
    759             .name = "copy-on-read",
    760             .type = QEMU_OPT_BOOL,
    761             .help = "copy read data from backing file into image file",
    762         },
    763 
    764         { /* end of list */ }
    765     },
    766 };
    767 
    768 DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type,
    769                      Error **errp)
    770 {
    771     const char *value;
    772     BlockBackend *blk;
    773     DriveInfo *dinfo = NULL;
    774     QDict *bs_opts;
    775     QemuOpts *legacy_opts;
    776     DriveMediaType media = MEDIA_DISK;
    777     BlockInterfaceType type;
    778     int max_devs, bus_id, unit_id, index;
    779     const char *werror, *rerror;
    780     bool read_only = false;
    781     bool copy_on_read;
    782     const char *filename;
    783     int i;
    784 
    785     GLOBAL_STATE_CODE();
    786 
    787     /* Change legacy command line options into QMP ones */
    788     static const struct {
    789         const char *from;
    790         const char *to;
    791     } opt_renames[] = {
    792         { "iops",           "throttling.iops-total" },
    793         { "iops_rd",        "throttling.iops-read" },
    794         { "iops_wr",        "throttling.iops-write" },
    795 
    796         { "bps",            "throttling.bps-total" },
    797         { "bps_rd",         "throttling.bps-read" },
    798         { "bps_wr",         "throttling.bps-write" },
    799 
    800         { "iops_max",       "throttling.iops-total-max" },
    801         { "iops_rd_max",    "throttling.iops-read-max" },
    802         { "iops_wr_max",    "throttling.iops-write-max" },
    803 
    804         { "bps_max",        "throttling.bps-total-max" },
    805         { "bps_rd_max",     "throttling.bps-read-max" },
    806         { "bps_wr_max",     "throttling.bps-write-max" },
    807 
    808         { "iops_size",      "throttling.iops-size" },
    809 
    810         { "group",          "throttling.group" },
    811 
    812         { "readonly",       BDRV_OPT_READ_ONLY },
    813     };
    814 
    815     for (i = 0; i < ARRAY_SIZE(opt_renames); i++) {
    816         if (!qemu_opt_rename(all_opts, opt_renames[i].from,
    817                              opt_renames[i].to, errp)) {
    818             return NULL;
    819         }
    820     }
    821 
    822     value = qemu_opt_get(all_opts, "cache");
    823     if (value) {
    824         int flags = 0;
    825         bool writethrough;
    826 
    827         if (bdrv_parse_cache_mode(value, &flags, &writethrough) != 0) {
    828             error_setg(errp, "invalid cache option");
    829             return NULL;
    830         }
    831 
    832         /* Specific options take precedence */
    833         if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_WB)) {
    834             qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_WB,
    835                               !writethrough, &error_abort);
    836         }
    837         if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_DIRECT)) {
    838             qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_DIRECT,
    839                               !!(flags & BDRV_O_NOCACHE), &error_abort);
    840         }
    841         if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_NO_FLUSH)) {
    842             qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_NO_FLUSH,
    843                               !!(flags & BDRV_O_NO_FLUSH), &error_abort);
    844         }
    845         qemu_opt_unset(all_opts, "cache");
    846     }
    847 
    848     /* Get a QDict for processing the options */
    849     bs_opts = qdict_new();
    850     qemu_opts_to_qdict(all_opts, bs_opts);
    851 
    852     legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 0,
    853                                    &error_abort);
    854     if (!qemu_opts_absorb_qdict(legacy_opts, bs_opts, errp)) {
    855         goto fail;
    856     }
    857 
    858     /* Media type */
    859     value = qemu_opt_get(legacy_opts, "media");
    860     if (value) {
    861         if (!strcmp(value, "disk")) {
    862             media = MEDIA_DISK;
    863         } else if (!strcmp(value, "cdrom")) {
    864             media = MEDIA_CDROM;
    865             read_only = true;
    866         } else {
    867             error_setg(errp, "'%s' invalid media", value);
    868             goto fail;
    869         }
    870     }
    871 
    872     /* copy-on-read is disabled with a warning for read-only devices */
    873     read_only |= qemu_opt_get_bool(legacy_opts, BDRV_OPT_READ_ONLY, false);
    874     copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false);
    875 
    876     if (read_only && copy_on_read) {
    877         warn_report("disabling copy-on-read on read-only drive");
    878         copy_on_read = false;
    879     }
    880 
    881     qdict_put_str(bs_opts, BDRV_OPT_READ_ONLY, read_only ? "on" : "off");
    882     qdict_put_str(bs_opts, "copy-on-read", copy_on_read ? "on" : "off");
    883 
    884     /* Controller type */
    885     value = qemu_opt_get(legacy_opts, "if");
    886     if (value) {
    887         for (type = 0;
    888              type < IF_COUNT && strcmp(value, if_name[type]);
    889              type++) {
    890         }
    891         if (type == IF_COUNT) {
    892             error_setg(errp, "unsupported bus type '%s'", value);
    893             goto fail;
    894         }
    895     } else {
    896         type = block_default_type;
    897     }
    898 
    899     /* Device address specified by bus/unit or index.
    900      * If none was specified, try to find the first free one. */
    901     bus_id  = qemu_opt_get_number(legacy_opts, "bus", 0);
    902     unit_id = qemu_opt_get_number(legacy_opts, "unit", -1);
    903     index   = qemu_opt_get_number(legacy_opts, "index", -1);
    904 
    905     max_devs = if_max_devs[type];
    906 
    907     if (index != -1) {
    908         if (bus_id != 0 || unit_id != -1) {
    909             error_setg(errp, "index cannot be used with bus and unit");
    910             goto fail;
    911         }
    912         bus_id = drive_index_to_bus_id(type, index);
    913         unit_id = drive_index_to_unit_id(type, index);
    914     }
    915 
    916     if (unit_id == -1) {
    917        unit_id = 0;
    918        while (drive_get(type, bus_id, unit_id) != NULL) {
    919            unit_id++;
    920            if (max_devs && unit_id >= max_devs) {
    921                unit_id -= max_devs;
    922                bus_id++;
    923            }
    924        }
    925     }
    926 
    927     if (max_devs && unit_id >= max_devs) {
    928         error_setg(errp, "unit %d too big (max is %d)", unit_id, max_devs - 1);
    929         goto fail;
    930     }
    931 
    932     if (drive_get(type, bus_id, unit_id) != NULL) {
    933         error_setg(errp, "drive with bus=%d, unit=%d (index=%d) exists",
    934                    bus_id, unit_id, index);
    935         goto fail;
    936     }
    937 
    938     /* no id supplied -> create one */
    939     if (qemu_opts_id(all_opts) == NULL) {
    940         char *new_id;
    941         const char *mediastr = "";
    942         if (type == IF_IDE || type == IF_SCSI) {
    943             mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
    944         }
    945         if (max_devs) {
    946             new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id,
    947                                      mediastr, unit_id);
    948         } else {
    949             new_id = g_strdup_printf("%s%s%i", if_name[type],
    950                                      mediastr, unit_id);
    951         }
    952         qdict_put_str(bs_opts, "id", new_id);
    953         g_free(new_id);
    954     }
    955 
    956     /* Add virtio block device */
    957     if (type == IF_VIRTIO) {
    958         QemuOpts *devopts;
    959         devopts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
    960                                    &error_abort);
    961         qemu_opt_set(devopts, "driver", "virtio-blk", &error_abort);
    962         qemu_opt_set(devopts, "drive", qdict_get_str(bs_opts, "id"),
    963                      &error_abort);
    964     }
    965 
    966     filename = qemu_opt_get(legacy_opts, "file");
    967 
    968     /* Check werror/rerror compatibility with if=... */
    969     werror = qemu_opt_get(legacy_opts, "werror");
    970     if (werror != NULL) {
    971         if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO &&
    972             type != IF_NONE) {
    973             error_setg(errp, "werror is not supported by this bus type");
    974             goto fail;
    975         }
    976         qdict_put_str(bs_opts, "werror", werror);
    977     }
    978 
    979     rerror = qemu_opt_get(legacy_opts, "rerror");
    980     if (rerror != NULL) {
    981         if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI &&
    982             type != IF_NONE) {
    983             error_setg(errp, "rerror is not supported by this bus type");
    984             goto fail;
    985         }
    986         qdict_put_str(bs_opts, "rerror", rerror);
    987     }
    988 
    989     /* Actual block device init: Functionality shared with blockdev-add */
    990     blk = blockdev_init(filename, bs_opts, errp);
    991     bs_opts = NULL;
    992     if (!blk) {
    993         goto fail;
    994     }
    995 
    996     /* Create legacy DriveInfo */
    997     dinfo = g_malloc0(sizeof(*dinfo));
    998     dinfo->opts = all_opts;
    999 
   1000     dinfo->type = type;
   1001     dinfo->bus = bus_id;
   1002     dinfo->unit = unit_id;
   1003 
   1004     blk_set_legacy_dinfo(blk, dinfo);
   1005 
   1006     switch(type) {
   1007     case IF_IDE:
   1008     case IF_SCSI:
   1009     case IF_XEN:
   1010     case IF_NONE:
   1011         dinfo->media_cd = media == MEDIA_CDROM;
   1012         break;
   1013     default:
   1014         break;
   1015     }
   1016 
   1017 fail:
   1018     qemu_opts_del(legacy_opts);
   1019     qobject_unref(bs_opts);
   1020     return dinfo;
   1021 }
   1022 
   1023 static BlockDriverState *qmp_get_root_bs(const char *name, Error **errp)
   1024 {
   1025     BlockDriverState *bs;
   1026 
   1027     bs = bdrv_lookup_bs(name, name, errp);
   1028     if (bs == NULL) {
   1029         return NULL;
   1030     }
   1031 
   1032     if (!bdrv_is_root_node(bs)) {
   1033         error_setg(errp, "Need a root block node");
   1034         return NULL;
   1035     }
   1036 
   1037     if (!bdrv_is_inserted(bs)) {
   1038         error_setg(errp, "Device has no medium");
   1039         return NULL;
   1040     }
   1041 
   1042     return bs;
   1043 }
   1044 
   1045 static void blockdev_do_action(TransactionAction *action, Error **errp)
   1046 {
   1047     TransactionActionList list;
   1048 
   1049     list.value = action;
   1050     list.next = NULL;
   1051     qmp_transaction(&list, false, NULL, errp);
   1052 }
   1053 
   1054 void qmp_blockdev_snapshot_sync(bool has_device, const char *device,
   1055                                 bool has_node_name, const char *node_name,
   1056                                 const char *snapshot_file,
   1057                                 bool has_snapshot_node_name,
   1058                                 const char *snapshot_node_name,
   1059                                 bool has_format, const char *format,
   1060                                 bool has_mode, NewImageMode mode, Error **errp)
   1061 {
   1062     BlockdevSnapshotSync snapshot = {
   1063         .has_device = has_device,
   1064         .device = (char *) device,
   1065         .has_node_name = has_node_name,
   1066         .node_name = (char *) node_name,
   1067         .snapshot_file = (char *) snapshot_file,
   1068         .has_snapshot_node_name = has_snapshot_node_name,
   1069         .snapshot_node_name = (char *) snapshot_node_name,
   1070         .has_format = has_format,
   1071         .format = (char *) format,
   1072         .has_mode = has_mode,
   1073         .mode = mode,
   1074     };
   1075     TransactionAction action = {
   1076         .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
   1077         .u.blockdev_snapshot_sync.data = &snapshot,
   1078     };
   1079     blockdev_do_action(&action, errp);
   1080 }
   1081 
   1082 void qmp_blockdev_snapshot(const char *node, const char *overlay,
   1083                            Error **errp)
   1084 {
   1085     BlockdevSnapshot snapshot_data = {
   1086         .node = (char *) node,
   1087         .overlay = (char *) overlay
   1088     };
   1089     TransactionAction action = {
   1090         .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT,
   1091         .u.blockdev_snapshot.data = &snapshot_data,
   1092     };
   1093     blockdev_do_action(&action, errp);
   1094 }
   1095 
   1096 void qmp_blockdev_snapshot_internal_sync(const char *device,
   1097                                          const char *name,
   1098                                          Error **errp)
   1099 {
   1100     BlockdevSnapshotInternal snapshot = {
   1101         .device = (char *) device,
   1102         .name = (char *) name
   1103     };
   1104     TransactionAction action = {
   1105         .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC,
   1106         .u.blockdev_snapshot_internal_sync.data = &snapshot,
   1107     };
   1108     blockdev_do_action(&action, errp);
   1109 }
   1110 
   1111 SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
   1112                                                          bool has_id,
   1113                                                          const char *id,
   1114                                                          bool has_name,
   1115                                                          const char *name,
   1116                                                          Error **errp)
   1117 {
   1118     BlockDriverState *bs;
   1119     AioContext *aio_context;
   1120     QEMUSnapshotInfo sn;
   1121     Error *local_err = NULL;
   1122     SnapshotInfo *info = NULL;
   1123     int ret;
   1124 
   1125     bs = qmp_get_root_bs(device, errp);
   1126     if (!bs) {
   1127         return NULL;
   1128     }
   1129     aio_context = bdrv_get_aio_context(bs);
   1130     aio_context_acquire(aio_context);
   1131 
   1132     if (!has_id) {
   1133         id = NULL;
   1134     }
   1135 
   1136     if (!has_name) {
   1137         name = NULL;
   1138     }
   1139 
   1140     if (!id && !name) {
   1141         error_setg(errp, "Name or id must be provided");
   1142         goto out_aio_context;
   1143     }
   1144 
   1145     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE, errp)) {
   1146         goto out_aio_context;
   1147     }
   1148 
   1149     ret = bdrv_snapshot_find_by_id_and_name(bs, id, name, &sn, &local_err);
   1150     if (local_err) {
   1151         error_propagate(errp, local_err);
   1152         goto out_aio_context;
   1153     }
   1154     if (!ret) {
   1155         error_setg(errp,
   1156                    "Snapshot with id '%s' and name '%s' does not exist on "
   1157                    "device '%s'",
   1158                    STR_OR_NULL(id), STR_OR_NULL(name), device);
   1159         goto out_aio_context;
   1160     }
   1161 
   1162     bdrv_snapshot_delete(bs, id, name, &local_err);
   1163     if (local_err) {
   1164         error_propagate(errp, local_err);
   1165         goto out_aio_context;
   1166     }
   1167 
   1168     aio_context_release(aio_context);
   1169 
   1170     info = g_new0(SnapshotInfo, 1);
   1171     info->id = g_strdup(sn.id_str);
   1172     info->name = g_strdup(sn.name);
   1173     info->date_nsec = sn.date_nsec;
   1174     info->date_sec = sn.date_sec;
   1175     info->vm_state_size = sn.vm_state_size;
   1176     info->vm_clock_nsec = sn.vm_clock_nsec % 1000000000;
   1177     info->vm_clock_sec = sn.vm_clock_nsec / 1000000000;
   1178     if (sn.icount != -1ULL) {
   1179         info->icount = sn.icount;
   1180         info->has_icount = true;
   1181     }
   1182 
   1183     return info;
   1184 
   1185 out_aio_context:
   1186     aio_context_release(aio_context);
   1187     return NULL;
   1188 }
   1189 
   1190 /* New and old BlockDriverState structs for atomic group operations */
   1191 
   1192 typedef struct BlkActionState BlkActionState;
   1193 
   1194 /**
   1195  * BlkActionOps:
   1196  * Table of operations that define an Action.
   1197  *
   1198  * @instance_size: Size of state struct, in bytes.
   1199  * @prepare: Prepare the work, must NOT be NULL.
   1200  * @commit: Commit the changes, can be NULL.
   1201  * @abort: Abort the changes on fail, can be NULL.
   1202  * @clean: Clean up resources after all transaction actions have called
   1203  *         commit() or abort(). Can be NULL.
   1204  *
   1205  * Only prepare() may fail. In a single transaction, only one of commit() or
   1206  * abort() will be called. clean() will always be called if it is present.
   1207  *
   1208  * Always run under BQL.
   1209  */
   1210 typedef struct BlkActionOps {
   1211     size_t instance_size;
   1212     void (*prepare)(BlkActionState *common, Error **errp);
   1213     void (*commit)(BlkActionState *common);
   1214     void (*abort)(BlkActionState *common);
   1215     void (*clean)(BlkActionState *common);
   1216 } BlkActionOps;
   1217 
   1218 /**
   1219  * BlkActionState:
   1220  * Describes one Action's state within a Transaction.
   1221  *
   1222  * @action: QAPI-defined enum identifying which Action to perform.
   1223  * @ops: Table of ActionOps this Action can perform.
   1224  * @block_job_txn: Transaction which this action belongs to.
   1225  * @entry: List membership for all Actions in this Transaction.
   1226  *
   1227  * This structure must be arranged as first member in a subclassed type,
   1228  * assuming that the compiler will also arrange it to the same offsets as the
   1229  * base class.
   1230  */
   1231 struct BlkActionState {
   1232     TransactionAction *action;
   1233     const BlkActionOps *ops;
   1234     JobTxn *block_job_txn;
   1235     TransactionProperties *txn_props;
   1236     QTAILQ_ENTRY(BlkActionState) entry;
   1237 };
   1238 
   1239 /* internal snapshot private data */
   1240 typedef struct InternalSnapshotState {
   1241     BlkActionState common;
   1242     BlockDriverState *bs;
   1243     QEMUSnapshotInfo sn;
   1244     bool created;
   1245 } InternalSnapshotState;
   1246 
   1247 
   1248 static int action_check_completion_mode(BlkActionState *s, Error **errp)
   1249 {
   1250     if (s->txn_props->completion_mode != ACTION_COMPLETION_MODE_INDIVIDUAL) {
   1251         error_setg(errp,
   1252                    "Action '%s' does not support Transaction property "
   1253                    "completion-mode = %s",
   1254                    TransactionActionKind_str(s->action->type),
   1255                    ActionCompletionMode_str(s->txn_props->completion_mode));
   1256         return -1;
   1257     }
   1258     return 0;
   1259 }
   1260 
   1261 static void internal_snapshot_prepare(BlkActionState *common,
   1262                                       Error **errp)
   1263 {
   1264     Error *local_err = NULL;
   1265     const char *device;
   1266     const char *name;
   1267     BlockDriverState *bs;
   1268     QEMUSnapshotInfo old_sn, *sn;
   1269     bool ret;
   1270     int64_t rt;
   1271     BlockdevSnapshotInternal *internal;
   1272     InternalSnapshotState *state;
   1273     AioContext *aio_context;
   1274     int ret1;
   1275 
   1276     g_assert(common->action->type ==
   1277              TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC);
   1278     internal = common->action->u.blockdev_snapshot_internal_sync.data;
   1279     state = DO_UPCAST(InternalSnapshotState, common, common);
   1280 
   1281     /* 1. parse input */
   1282     device = internal->device;
   1283     name = internal->name;
   1284 
   1285     /* 2. check for validation */
   1286     if (action_check_completion_mode(common, errp) < 0) {
   1287         return;
   1288     }
   1289 
   1290     bs = qmp_get_root_bs(device, errp);
   1291     if (!bs) {
   1292         return;
   1293     }
   1294 
   1295     aio_context = bdrv_get_aio_context(bs);
   1296     aio_context_acquire(aio_context);
   1297 
   1298     state->bs = bs;
   1299 
   1300     /* Paired with .clean() */
   1301     bdrv_drained_begin(bs);
   1302 
   1303     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, errp)) {
   1304         goto out;
   1305     }
   1306 
   1307     if (bdrv_is_read_only(bs)) {
   1308         error_setg(errp, "Device '%s' is read only", device);
   1309         goto out;
   1310     }
   1311 
   1312     if (!bdrv_can_snapshot(bs)) {
   1313         error_setg(errp, "Block format '%s' used by device '%s' "
   1314                    "does not support internal snapshots",
   1315                    bs->drv->format_name, device);
   1316         goto out;
   1317     }
   1318 
   1319     if (!strlen(name)) {
   1320         error_setg(errp, "Name is empty");
   1321         goto out;
   1322     }
   1323 
   1324     /* check whether a snapshot with name exist */
   1325     ret = bdrv_snapshot_find_by_id_and_name(bs, NULL, name, &old_sn,
   1326                                             &local_err);
   1327     if (local_err) {
   1328         error_propagate(errp, local_err);
   1329         goto out;
   1330     } else if (ret) {
   1331         error_setg(errp,
   1332                    "Snapshot with name '%s' already exists on device '%s'",
   1333                    name, device);
   1334         goto out;
   1335     }
   1336 
   1337     /* 3. take the snapshot */
   1338     sn = &state->sn;
   1339     pstrcpy(sn->name, sizeof(sn->name), name);
   1340     rt = g_get_real_time();
   1341     sn->date_sec = rt / G_USEC_PER_SEC;
   1342     sn->date_nsec = (rt % G_USEC_PER_SEC) * 1000;
   1343     sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
   1344     if (replay_mode != REPLAY_MODE_NONE) {
   1345         sn->icount = replay_get_current_icount();
   1346     } else {
   1347         sn->icount = -1ULL;
   1348     }
   1349 
   1350     ret1 = bdrv_snapshot_create(bs, sn);
   1351     if (ret1 < 0) {
   1352         error_setg_errno(errp, -ret1,
   1353                          "Failed to create snapshot '%s' on device '%s'",
   1354                          name, device);
   1355         goto out;
   1356     }
   1357 
   1358     /* 4. succeed, mark a snapshot is created */
   1359     state->created = true;
   1360 
   1361 out:
   1362     aio_context_release(aio_context);
   1363 }
   1364 
   1365 static void internal_snapshot_abort(BlkActionState *common)
   1366 {
   1367     InternalSnapshotState *state =
   1368                              DO_UPCAST(InternalSnapshotState, common, common);
   1369     BlockDriverState *bs = state->bs;
   1370     QEMUSnapshotInfo *sn = &state->sn;
   1371     AioContext *aio_context;
   1372     Error *local_error = NULL;
   1373 
   1374     if (!state->created) {
   1375         return;
   1376     }
   1377 
   1378     aio_context = bdrv_get_aio_context(state->bs);
   1379     aio_context_acquire(aio_context);
   1380 
   1381     if (bdrv_snapshot_delete(bs, sn->id_str, sn->name, &local_error) < 0) {
   1382         error_reportf_err(local_error,
   1383                           "Failed to delete snapshot with id '%s' and "
   1384                           "name '%s' on device '%s' in abort: ",
   1385                           sn->id_str, sn->name,
   1386                           bdrv_get_device_name(bs));
   1387     }
   1388 
   1389     aio_context_release(aio_context);
   1390 }
   1391 
   1392 static void internal_snapshot_clean(BlkActionState *common)
   1393 {
   1394     InternalSnapshotState *state = DO_UPCAST(InternalSnapshotState,
   1395                                              common, common);
   1396     AioContext *aio_context;
   1397 
   1398     if (!state->bs) {
   1399         return;
   1400     }
   1401 
   1402     aio_context = bdrv_get_aio_context(state->bs);
   1403     aio_context_acquire(aio_context);
   1404 
   1405     bdrv_drained_end(state->bs);
   1406 
   1407     aio_context_release(aio_context);
   1408 }
   1409 
   1410 /* external snapshot private data */
   1411 typedef struct ExternalSnapshotState {
   1412     BlkActionState common;
   1413     BlockDriverState *old_bs;
   1414     BlockDriverState *new_bs;
   1415     bool overlay_appended;
   1416 } ExternalSnapshotState;
   1417 
   1418 static void external_snapshot_prepare(BlkActionState *common,
   1419                                       Error **errp)
   1420 {
   1421     int ret;
   1422     int flags = 0;
   1423     QDict *options = NULL;
   1424     Error *local_err = NULL;
   1425     /* Device and node name of the image to generate the snapshot from */
   1426     const char *device;
   1427     const char *node_name;
   1428     /* Reference to the new image (for 'blockdev-snapshot') */
   1429     const char *snapshot_ref;
   1430     /* File name of the new image (for 'blockdev-snapshot-sync') */
   1431     const char *new_image_file;
   1432     ExternalSnapshotState *state =
   1433                              DO_UPCAST(ExternalSnapshotState, common, common);
   1434     TransactionAction *action = common->action;
   1435     AioContext *aio_context;
   1436     uint64_t perm, shared;
   1437 
   1438     /* 'blockdev-snapshot' and 'blockdev-snapshot-sync' have similar
   1439      * purpose but a different set of parameters */
   1440     switch (action->type) {
   1441     case TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT:
   1442         {
   1443             BlockdevSnapshot *s = action->u.blockdev_snapshot.data;
   1444             device = s->node;
   1445             node_name = s->node;
   1446             new_image_file = NULL;
   1447             snapshot_ref = s->overlay;
   1448         }
   1449         break;
   1450     case TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC:
   1451         {
   1452             BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
   1453             device = s->has_device ? s->device : NULL;
   1454             node_name = s->has_node_name ? s->node_name : NULL;
   1455             new_image_file = s->snapshot_file;
   1456             snapshot_ref = NULL;
   1457         }
   1458         break;
   1459     default:
   1460         g_assert_not_reached();
   1461     }
   1462 
   1463     /* start processing */
   1464     if (action_check_completion_mode(common, errp) < 0) {
   1465         return;
   1466     }
   1467 
   1468     state->old_bs = bdrv_lookup_bs(device, node_name, errp);
   1469     if (!state->old_bs) {
   1470         return;
   1471     }
   1472 
   1473     aio_context = bdrv_get_aio_context(state->old_bs);
   1474     aio_context_acquire(aio_context);
   1475 
   1476     /* Paired with .clean() */
   1477     bdrv_drained_begin(state->old_bs);
   1478 
   1479     if (!bdrv_is_inserted(state->old_bs)) {
   1480         error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
   1481         goto out;
   1482     }
   1483 
   1484     if (bdrv_op_is_blocked(state->old_bs,
   1485                            BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT, errp)) {
   1486         goto out;
   1487     }
   1488 
   1489     if (!bdrv_is_read_only(state->old_bs)) {
   1490         if (bdrv_flush(state->old_bs)) {
   1491             error_setg(errp, QERR_IO_ERROR);
   1492             goto out;
   1493         }
   1494     }
   1495 
   1496     if (action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC) {
   1497         BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
   1498         const char *format = s->has_format ? s->format : "qcow2";
   1499         enum NewImageMode mode;
   1500         const char *snapshot_node_name =
   1501             s->has_snapshot_node_name ? s->snapshot_node_name : NULL;
   1502 
   1503         if (node_name && !snapshot_node_name) {
   1504             error_setg(errp, "New overlay node-name missing");
   1505             goto out;
   1506         }
   1507 
   1508         if (snapshot_node_name &&
   1509             bdrv_lookup_bs(snapshot_node_name, snapshot_node_name, NULL)) {
   1510             error_setg(errp, "New overlay node-name already in use");
   1511             goto out;
   1512         }
   1513 
   1514         flags = state->old_bs->open_flags;
   1515         flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_COPY_ON_READ);
   1516         flags |= BDRV_O_NO_BACKING;
   1517 
   1518         /* create new image w/backing file */
   1519         mode = s->has_mode ? s->mode : NEW_IMAGE_MODE_ABSOLUTE_PATHS;
   1520         if (mode != NEW_IMAGE_MODE_EXISTING) {
   1521             int64_t size = bdrv_getlength(state->old_bs);
   1522             if (size < 0) {
   1523                 error_setg_errno(errp, -size, "bdrv_getlength failed");
   1524                 goto out;
   1525             }
   1526             bdrv_refresh_filename(state->old_bs);
   1527             bdrv_img_create(new_image_file, format,
   1528                             state->old_bs->filename,
   1529                             state->old_bs->drv->format_name,
   1530                             NULL, size, flags, false, &local_err);
   1531             if (local_err) {
   1532                 error_propagate(errp, local_err);
   1533                 goto out;
   1534             }
   1535         }
   1536 
   1537         options = qdict_new();
   1538         if (snapshot_node_name) {
   1539             qdict_put_str(options, "node-name", snapshot_node_name);
   1540         }
   1541         qdict_put_str(options, "driver", format);
   1542     }
   1543 
   1544     state->new_bs = bdrv_open(new_image_file, snapshot_ref, options, flags,
   1545                               errp);
   1546     /* We will manually add the backing_hd field to the bs later */
   1547     if (!state->new_bs) {
   1548         goto out;
   1549     }
   1550 
   1551     /*
   1552      * Allow attaching a backing file to an overlay that's already in use only
   1553      * if the parents don't assume that they are already seeing a valid image.
   1554      * (Specifically, allow it as a mirror target, which is write-only access.)
   1555      */
   1556     bdrv_get_cumulative_perm(state->new_bs, &perm, &shared);
   1557     if (perm & BLK_PERM_CONSISTENT_READ) {
   1558         error_setg(errp, "The overlay is already in use");
   1559         goto out;
   1560     }
   1561 
   1562     if (state->new_bs->drv->is_filter) {
   1563         error_setg(errp, "Filters cannot be used as overlays");
   1564         goto out;
   1565     }
   1566 
   1567     if (bdrv_cow_child(state->new_bs)) {
   1568         error_setg(errp, "The overlay already has a backing image");
   1569         goto out;
   1570     }
   1571 
   1572     if (!state->new_bs->drv->supports_backing) {
   1573         error_setg(errp, "The overlay does not support backing images");
   1574         goto out;
   1575     }
   1576 
   1577     ret = bdrv_append(state->new_bs, state->old_bs, errp);
   1578     if (ret < 0) {
   1579         goto out;
   1580     }
   1581     state->overlay_appended = true;
   1582 
   1583 out:
   1584     aio_context_release(aio_context);
   1585 }
   1586 
   1587 static void external_snapshot_commit(BlkActionState *common)
   1588 {
   1589     ExternalSnapshotState *state =
   1590                              DO_UPCAST(ExternalSnapshotState, common, common);
   1591     AioContext *aio_context;
   1592 
   1593     aio_context = bdrv_get_aio_context(state->old_bs);
   1594     aio_context_acquire(aio_context);
   1595 
   1596     /* We don't need (or want) to use the transactional
   1597      * bdrv_reopen_multiple() across all the entries at once, because we
   1598      * don't want to abort all of them if one of them fails the reopen */
   1599     if (!qatomic_read(&state->old_bs->copy_on_read)) {
   1600         bdrv_reopen_set_read_only(state->old_bs, true, NULL);
   1601     }
   1602 
   1603     aio_context_release(aio_context);
   1604 }
   1605 
   1606 static void external_snapshot_abort(BlkActionState *common)
   1607 {
   1608     ExternalSnapshotState *state =
   1609                              DO_UPCAST(ExternalSnapshotState, common, common);
   1610     if (state->new_bs) {
   1611         if (state->overlay_appended) {
   1612             AioContext *aio_context;
   1613             AioContext *tmp_context;
   1614             int ret;
   1615 
   1616             aio_context = bdrv_get_aio_context(state->old_bs);
   1617             aio_context_acquire(aio_context);
   1618 
   1619             bdrv_ref(state->old_bs);   /* we can't let bdrv_set_backind_hd()
   1620                                           close state->old_bs; we need it */
   1621             bdrv_set_backing_hd(state->new_bs, NULL, &error_abort);
   1622 
   1623             /*
   1624              * The call to bdrv_set_backing_hd() above returns state->old_bs to
   1625              * the main AioContext. As we're still going to be using it, return
   1626              * it to the AioContext it was before.
   1627              */
   1628             tmp_context = bdrv_get_aio_context(state->old_bs);
   1629             if (aio_context != tmp_context) {
   1630                 aio_context_release(aio_context);
   1631                 aio_context_acquire(tmp_context);
   1632 
   1633                 ret = bdrv_try_change_aio_context(state->old_bs,
   1634                                                   aio_context, NULL, NULL);
   1635                 assert(ret == 0);
   1636 
   1637                 aio_context_release(tmp_context);
   1638                 aio_context_acquire(aio_context);
   1639             }
   1640 
   1641             bdrv_replace_node(state->new_bs, state->old_bs, &error_abort);
   1642             bdrv_unref(state->old_bs); /* bdrv_replace_node() ref'ed old_bs */
   1643 
   1644             aio_context_release(aio_context);
   1645         }
   1646     }
   1647 }
   1648 
   1649 static void external_snapshot_clean(BlkActionState *common)
   1650 {
   1651     ExternalSnapshotState *state =
   1652                              DO_UPCAST(ExternalSnapshotState, common, common);
   1653     AioContext *aio_context;
   1654 
   1655     if (!state->old_bs) {
   1656         return;
   1657     }
   1658 
   1659     aio_context = bdrv_get_aio_context(state->old_bs);
   1660     aio_context_acquire(aio_context);
   1661 
   1662     bdrv_drained_end(state->old_bs);
   1663     bdrv_unref(state->new_bs);
   1664 
   1665     aio_context_release(aio_context);
   1666 }
   1667 
   1668 typedef struct DriveBackupState {
   1669     BlkActionState common;
   1670     BlockDriverState *bs;
   1671     BlockJob *job;
   1672 } DriveBackupState;
   1673 
   1674 static BlockJob *do_backup_common(BackupCommon *backup,
   1675                                   BlockDriverState *bs,
   1676                                   BlockDriverState *target_bs,
   1677                                   AioContext *aio_context,
   1678                                   JobTxn *txn, Error **errp);
   1679 
   1680 static void drive_backup_prepare(BlkActionState *common, Error **errp)
   1681 {
   1682     DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
   1683     DriveBackup *backup;
   1684     BlockDriverState *bs;
   1685     BlockDriverState *target_bs;
   1686     BlockDriverState *source = NULL;
   1687     AioContext *aio_context;
   1688     AioContext *old_context;
   1689     QDict *options;
   1690     Error *local_err = NULL;
   1691     int flags;
   1692     int64_t size;
   1693     bool set_backing_hd = false;
   1694     int ret;
   1695 
   1696     assert(common->action->type == TRANSACTION_ACTION_KIND_DRIVE_BACKUP);
   1697     backup = common->action->u.drive_backup.data;
   1698 
   1699     if (!backup->has_mode) {
   1700         backup->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
   1701     }
   1702 
   1703     bs = bdrv_lookup_bs(backup->device, backup->device, errp);
   1704     if (!bs) {
   1705         return;
   1706     }
   1707 
   1708     if (!bs->drv) {
   1709         error_setg(errp, "Device has no medium");
   1710         return;
   1711     }
   1712 
   1713     aio_context = bdrv_get_aio_context(bs);
   1714     aio_context_acquire(aio_context);
   1715 
   1716     state->bs = bs;
   1717     /* Paired with .clean() */
   1718     bdrv_drained_begin(bs);
   1719 
   1720     if (!backup->has_format) {
   1721         backup->format = backup->mode == NEW_IMAGE_MODE_EXISTING ?
   1722                          NULL : (char *) bs->drv->format_name;
   1723     }
   1724 
   1725     /* Early check to avoid creating target */
   1726     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_BACKUP_SOURCE, errp)) {
   1727         goto out;
   1728     }
   1729 
   1730     flags = bs->open_flags | BDRV_O_RDWR;
   1731 
   1732     /*
   1733      * See if we have a backing HD we can use to create our new image
   1734      * on top of.
   1735      */
   1736     if (backup->sync == MIRROR_SYNC_MODE_TOP) {
   1737         /*
   1738          * Backup will not replace the source by the target, so none
   1739          * of the filters skipped here will be removed (in contrast to
   1740          * mirror).  Therefore, we can skip all of them when looking
   1741          * for the first COW relationship.
   1742          */
   1743         source = bdrv_cow_bs(bdrv_skip_filters(bs));
   1744         if (!source) {
   1745             backup->sync = MIRROR_SYNC_MODE_FULL;
   1746         }
   1747     }
   1748     if (backup->sync == MIRROR_SYNC_MODE_NONE) {
   1749         source = bs;
   1750         flags |= BDRV_O_NO_BACKING;
   1751         set_backing_hd = true;
   1752     }
   1753 
   1754     size = bdrv_getlength(bs);
   1755     if (size < 0) {
   1756         error_setg_errno(errp, -size, "bdrv_getlength failed");
   1757         goto out;
   1758     }
   1759 
   1760     if (backup->mode != NEW_IMAGE_MODE_EXISTING) {
   1761         assert(backup->format);
   1762         if (source) {
   1763             /* Implicit filters should not appear in the filename */
   1764             BlockDriverState *explicit_backing =
   1765                 bdrv_skip_implicit_filters(source);
   1766 
   1767             bdrv_refresh_filename(explicit_backing);
   1768             bdrv_img_create(backup->target, backup->format,
   1769                             explicit_backing->filename,
   1770                             explicit_backing->drv->format_name, NULL,
   1771                             size, flags, false, &local_err);
   1772         } else {
   1773             bdrv_img_create(backup->target, backup->format, NULL, NULL, NULL,
   1774                             size, flags, false, &local_err);
   1775         }
   1776     }
   1777 
   1778     if (local_err) {
   1779         error_propagate(errp, local_err);
   1780         goto out;
   1781     }
   1782 
   1783     options = qdict_new();
   1784     qdict_put_str(options, "discard", "unmap");
   1785     qdict_put_str(options, "detect-zeroes", "unmap");
   1786     if (backup->format) {
   1787         qdict_put_str(options, "driver", backup->format);
   1788     }
   1789 
   1790     target_bs = bdrv_open(backup->target, NULL, options, flags, errp);
   1791     if (!target_bs) {
   1792         goto out;
   1793     }
   1794 
   1795     /* Honor bdrv_try_change_aio_context() context acquisition requirements. */
   1796     old_context = bdrv_get_aio_context(target_bs);
   1797     aio_context_release(aio_context);
   1798     aio_context_acquire(old_context);
   1799 
   1800     ret = bdrv_try_change_aio_context(target_bs, aio_context, NULL, errp);
   1801     if (ret < 0) {
   1802         bdrv_unref(target_bs);
   1803         aio_context_release(old_context);
   1804         return;
   1805     }
   1806 
   1807     aio_context_release(old_context);
   1808     aio_context_acquire(aio_context);
   1809 
   1810     if (set_backing_hd) {
   1811         if (bdrv_set_backing_hd(target_bs, source, errp) < 0) {
   1812             goto unref;
   1813         }
   1814     }
   1815 
   1816     state->job = do_backup_common(qapi_DriveBackup_base(backup),
   1817                                   bs, target_bs, aio_context,
   1818                                   common->block_job_txn, errp);
   1819 
   1820 unref:
   1821     bdrv_unref(target_bs);
   1822 out:
   1823     aio_context_release(aio_context);
   1824 }
   1825 
   1826 static void drive_backup_commit(BlkActionState *common)
   1827 {
   1828     DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
   1829     AioContext *aio_context;
   1830 
   1831     aio_context = bdrv_get_aio_context(state->bs);
   1832     aio_context_acquire(aio_context);
   1833 
   1834     assert(state->job);
   1835     job_start(&state->job->job);
   1836 
   1837     aio_context_release(aio_context);
   1838 }
   1839 
   1840 static void drive_backup_abort(BlkActionState *common)
   1841 {
   1842     DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
   1843 
   1844     if (state->job) {
   1845         job_cancel_sync(&state->job->job, true);
   1846     }
   1847 }
   1848 
   1849 static void drive_backup_clean(BlkActionState *common)
   1850 {
   1851     DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
   1852     AioContext *aio_context;
   1853 
   1854     if (!state->bs) {
   1855         return;
   1856     }
   1857 
   1858     aio_context = bdrv_get_aio_context(state->bs);
   1859     aio_context_acquire(aio_context);
   1860 
   1861     bdrv_drained_end(state->bs);
   1862 
   1863     aio_context_release(aio_context);
   1864 }
   1865 
   1866 typedef struct BlockdevBackupState {
   1867     BlkActionState common;
   1868     BlockDriverState *bs;
   1869     BlockJob *job;
   1870 } BlockdevBackupState;
   1871 
   1872 static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
   1873 {
   1874     BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
   1875     BlockdevBackup *backup;
   1876     BlockDriverState *bs;
   1877     BlockDriverState *target_bs;
   1878     AioContext *aio_context;
   1879     AioContext *old_context;
   1880     int ret;
   1881 
   1882     assert(common->action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP);
   1883     backup = common->action->u.blockdev_backup.data;
   1884 
   1885     bs = bdrv_lookup_bs(backup->device, backup->device, errp);
   1886     if (!bs) {
   1887         return;
   1888     }
   1889 
   1890     target_bs = bdrv_lookup_bs(backup->target, backup->target, errp);
   1891     if (!target_bs) {
   1892         return;
   1893     }
   1894 
   1895     /* Honor bdrv_try_change_aio_context() context acquisition requirements. */
   1896     aio_context = bdrv_get_aio_context(bs);
   1897     old_context = bdrv_get_aio_context(target_bs);
   1898     aio_context_acquire(old_context);
   1899 
   1900     ret = bdrv_try_change_aio_context(target_bs, aio_context, NULL, errp);
   1901     if (ret < 0) {
   1902         aio_context_release(old_context);
   1903         return;
   1904     }
   1905 
   1906     aio_context_release(old_context);
   1907     aio_context_acquire(aio_context);
   1908     state->bs = bs;
   1909 
   1910     /* Paired with .clean() */
   1911     bdrv_drained_begin(state->bs);
   1912 
   1913     state->job = do_backup_common(qapi_BlockdevBackup_base(backup),
   1914                                   bs, target_bs, aio_context,
   1915                                   common->block_job_txn, errp);
   1916 
   1917     aio_context_release(aio_context);
   1918 }
   1919 
   1920 static void blockdev_backup_commit(BlkActionState *common)
   1921 {
   1922     BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
   1923     AioContext *aio_context;
   1924 
   1925     aio_context = bdrv_get_aio_context(state->bs);
   1926     aio_context_acquire(aio_context);
   1927 
   1928     assert(state->job);
   1929     job_start(&state->job->job);
   1930 
   1931     aio_context_release(aio_context);
   1932 }
   1933 
   1934 static void blockdev_backup_abort(BlkActionState *common)
   1935 {
   1936     BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
   1937 
   1938     if (state->job) {
   1939         job_cancel_sync(&state->job->job, true);
   1940     }
   1941 }
   1942 
   1943 static void blockdev_backup_clean(BlkActionState *common)
   1944 {
   1945     BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
   1946     AioContext *aio_context;
   1947 
   1948     if (!state->bs) {
   1949         return;
   1950     }
   1951 
   1952     aio_context = bdrv_get_aio_context(state->bs);
   1953     aio_context_acquire(aio_context);
   1954 
   1955     bdrv_drained_end(state->bs);
   1956 
   1957     aio_context_release(aio_context);
   1958 }
   1959 
   1960 typedef struct BlockDirtyBitmapState {
   1961     BlkActionState common;
   1962     BdrvDirtyBitmap *bitmap;
   1963     BlockDriverState *bs;
   1964     HBitmap *backup;
   1965     bool prepared;
   1966     bool was_enabled;
   1967 } BlockDirtyBitmapState;
   1968 
   1969 static void block_dirty_bitmap_add_prepare(BlkActionState *common,
   1970                                            Error **errp)
   1971 {
   1972     Error *local_err = NULL;
   1973     BlockDirtyBitmapAdd *action;
   1974     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   1975                                              common, common);
   1976 
   1977     if (action_check_completion_mode(common, errp) < 0) {
   1978         return;
   1979     }
   1980 
   1981     action = common->action->u.block_dirty_bitmap_add.data;
   1982     /* AIO context taken and released within qmp_block_dirty_bitmap_add */
   1983     qmp_block_dirty_bitmap_add(action->node, action->name,
   1984                                action->has_granularity, action->granularity,
   1985                                action->has_persistent, action->persistent,
   1986                                action->has_disabled, action->disabled,
   1987                                &local_err);
   1988 
   1989     if (!local_err) {
   1990         state->prepared = true;
   1991     } else {
   1992         error_propagate(errp, local_err);
   1993     }
   1994 }
   1995 
   1996 static void block_dirty_bitmap_add_abort(BlkActionState *common)
   1997 {
   1998     BlockDirtyBitmapAdd *action;
   1999     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2000                                              common, common);
   2001 
   2002     action = common->action->u.block_dirty_bitmap_add.data;
   2003     /* Should not be able to fail: IF the bitmap was added via .prepare(),
   2004      * then the node reference and bitmap name must have been valid.
   2005      */
   2006     if (state->prepared) {
   2007         qmp_block_dirty_bitmap_remove(action->node, action->name, &error_abort);
   2008     }
   2009 }
   2010 
   2011 static void block_dirty_bitmap_clear_prepare(BlkActionState *common,
   2012                                              Error **errp)
   2013 {
   2014     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2015                                              common, common);
   2016     BlockDirtyBitmap *action;
   2017 
   2018     if (action_check_completion_mode(common, errp) < 0) {
   2019         return;
   2020     }
   2021 
   2022     action = common->action->u.block_dirty_bitmap_clear.data;
   2023     state->bitmap = block_dirty_bitmap_lookup(action->node,
   2024                                               action->name,
   2025                                               &state->bs,
   2026                                               errp);
   2027     if (!state->bitmap) {
   2028         return;
   2029     }
   2030 
   2031     if (bdrv_dirty_bitmap_check(state->bitmap, BDRV_BITMAP_DEFAULT, errp)) {
   2032         return;
   2033     }
   2034 
   2035     bdrv_clear_dirty_bitmap(state->bitmap, &state->backup);
   2036 }
   2037 
   2038 static void block_dirty_bitmap_restore(BlkActionState *common)
   2039 {
   2040     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2041                                              common, common);
   2042 
   2043     if (state->backup) {
   2044         bdrv_restore_dirty_bitmap(state->bitmap, state->backup);
   2045     }
   2046 }
   2047 
   2048 static void block_dirty_bitmap_free_backup(BlkActionState *common)
   2049 {
   2050     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2051                                              common, common);
   2052 
   2053     hbitmap_free(state->backup);
   2054 }
   2055 
   2056 static void block_dirty_bitmap_enable_prepare(BlkActionState *common,
   2057                                               Error **errp)
   2058 {
   2059     BlockDirtyBitmap *action;
   2060     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2061                                              common, common);
   2062 
   2063     if (action_check_completion_mode(common, errp) < 0) {
   2064         return;
   2065     }
   2066 
   2067     action = common->action->u.block_dirty_bitmap_enable.data;
   2068     state->bitmap = block_dirty_bitmap_lookup(action->node,
   2069                                               action->name,
   2070                                               NULL,
   2071                                               errp);
   2072     if (!state->bitmap) {
   2073         return;
   2074     }
   2075 
   2076     if (bdrv_dirty_bitmap_check(state->bitmap, BDRV_BITMAP_ALLOW_RO, errp)) {
   2077         return;
   2078     }
   2079 
   2080     state->was_enabled = bdrv_dirty_bitmap_enabled(state->bitmap);
   2081     bdrv_enable_dirty_bitmap(state->bitmap);
   2082 }
   2083 
   2084 static void block_dirty_bitmap_enable_abort(BlkActionState *common)
   2085 {
   2086     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2087                                              common, common);
   2088 
   2089     if (!state->was_enabled) {
   2090         bdrv_disable_dirty_bitmap(state->bitmap);
   2091     }
   2092 }
   2093 
   2094 static void block_dirty_bitmap_disable_prepare(BlkActionState *common,
   2095                                                Error **errp)
   2096 {
   2097     BlockDirtyBitmap *action;
   2098     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2099                                              common, common);
   2100 
   2101     if (action_check_completion_mode(common, errp) < 0) {
   2102         return;
   2103     }
   2104 
   2105     action = common->action->u.block_dirty_bitmap_disable.data;
   2106     state->bitmap = block_dirty_bitmap_lookup(action->node,
   2107                                               action->name,
   2108                                               NULL,
   2109                                               errp);
   2110     if (!state->bitmap) {
   2111         return;
   2112     }
   2113 
   2114     if (bdrv_dirty_bitmap_check(state->bitmap, BDRV_BITMAP_ALLOW_RO, errp)) {
   2115         return;
   2116     }
   2117 
   2118     state->was_enabled = bdrv_dirty_bitmap_enabled(state->bitmap);
   2119     bdrv_disable_dirty_bitmap(state->bitmap);
   2120 }
   2121 
   2122 static void block_dirty_bitmap_disable_abort(BlkActionState *common)
   2123 {
   2124     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2125                                              common, common);
   2126 
   2127     if (state->was_enabled) {
   2128         bdrv_enable_dirty_bitmap(state->bitmap);
   2129     }
   2130 }
   2131 
   2132 static void block_dirty_bitmap_merge_prepare(BlkActionState *common,
   2133                                              Error **errp)
   2134 {
   2135     BlockDirtyBitmapMerge *action;
   2136     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2137                                              common, common);
   2138 
   2139     if (action_check_completion_mode(common, errp) < 0) {
   2140         return;
   2141     }
   2142 
   2143     action = common->action->u.block_dirty_bitmap_merge.data;
   2144 
   2145     state->bitmap = block_dirty_bitmap_merge(action->node, action->target,
   2146                                              action->bitmaps, &state->backup,
   2147                                              errp);
   2148 }
   2149 
   2150 static void block_dirty_bitmap_remove_prepare(BlkActionState *common,
   2151                                               Error **errp)
   2152 {
   2153     BlockDirtyBitmap *action;
   2154     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2155                                              common, common);
   2156 
   2157     if (action_check_completion_mode(common, errp) < 0) {
   2158         return;
   2159     }
   2160 
   2161     action = common->action->u.block_dirty_bitmap_remove.data;
   2162 
   2163     state->bitmap = block_dirty_bitmap_remove(action->node, action->name,
   2164                                               false, &state->bs, errp);
   2165     if (state->bitmap) {
   2166         bdrv_dirty_bitmap_skip_store(state->bitmap, true);
   2167         bdrv_dirty_bitmap_set_busy(state->bitmap, true);
   2168     }
   2169 }
   2170 
   2171 static void block_dirty_bitmap_remove_abort(BlkActionState *common)
   2172 {
   2173     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2174                                              common, common);
   2175 
   2176     if (state->bitmap) {
   2177         bdrv_dirty_bitmap_skip_store(state->bitmap, false);
   2178         bdrv_dirty_bitmap_set_busy(state->bitmap, false);
   2179     }
   2180 }
   2181 
   2182 static void block_dirty_bitmap_remove_commit(BlkActionState *common)
   2183 {
   2184     BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
   2185                                              common, common);
   2186 
   2187     bdrv_dirty_bitmap_set_busy(state->bitmap, false);
   2188     bdrv_release_dirty_bitmap(state->bitmap);
   2189 }
   2190 
   2191 static void abort_prepare(BlkActionState *common, Error **errp)
   2192 {
   2193     error_setg(errp, "Transaction aborted using Abort action");
   2194 }
   2195 
   2196 static void abort_commit(BlkActionState *common)
   2197 {
   2198     g_assert_not_reached(); /* this action never succeeds */
   2199 }
   2200 
   2201 static const BlkActionOps actions[] = {
   2202     [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT] = {
   2203         .instance_size = sizeof(ExternalSnapshotState),
   2204         .prepare  = external_snapshot_prepare,
   2205         .commit   = external_snapshot_commit,
   2206         .abort = external_snapshot_abort,
   2207         .clean = external_snapshot_clean,
   2208     },
   2209     [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = {
   2210         .instance_size = sizeof(ExternalSnapshotState),
   2211         .prepare  = external_snapshot_prepare,
   2212         .commit   = external_snapshot_commit,
   2213         .abort = external_snapshot_abort,
   2214         .clean = external_snapshot_clean,
   2215     },
   2216     [TRANSACTION_ACTION_KIND_DRIVE_BACKUP] = {
   2217         .instance_size = sizeof(DriveBackupState),
   2218         .prepare = drive_backup_prepare,
   2219         .commit = drive_backup_commit,
   2220         .abort = drive_backup_abort,
   2221         .clean = drive_backup_clean,
   2222     },
   2223     [TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP] = {
   2224         .instance_size = sizeof(BlockdevBackupState),
   2225         .prepare = blockdev_backup_prepare,
   2226         .commit = blockdev_backup_commit,
   2227         .abort = blockdev_backup_abort,
   2228         .clean = blockdev_backup_clean,
   2229     },
   2230     [TRANSACTION_ACTION_KIND_ABORT] = {
   2231         .instance_size = sizeof(BlkActionState),
   2232         .prepare = abort_prepare,
   2233         .commit = abort_commit,
   2234     },
   2235     [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC] = {
   2236         .instance_size = sizeof(InternalSnapshotState),
   2237         .prepare  = internal_snapshot_prepare,
   2238         .abort = internal_snapshot_abort,
   2239         .clean = internal_snapshot_clean,
   2240     },
   2241     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_ADD] = {
   2242         .instance_size = sizeof(BlockDirtyBitmapState),
   2243         .prepare = block_dirty_bitmap_add_prepare,
   2244         .abort = block_dirty_bitmap_add_abort,
   2245     },
   2246     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_CLEAR] = {
   2247         .instance_size = sizeof(BlockDirtyBitmapState),
   2248         .prepare = block_dirty_bitmap_clear_prepare,
   2249         .commit = block_dirty_bitmap_free_backup,
   2250         .abort = block_dirty_bitmap_restore,
   2251     },
   2252     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_ENABLE] = {
   2253         .instance_size = sizeof(BlockDirtyBitmapState),
   2254         .prepare = block_dirty_bitmap_enable_prepare,
   2255         .abort = block_dirty_bitmap_enable_abort,
   2256     },
   2257     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_DISABLE] = {
   2258         .instance_size = sizeof(BlockDirtyBitmapState),
   2259         .prepare = block_dirty_bitmap_disable_prepare,
   2260         .abort = block_dirty_bitmap_disable_abort,
   2261     },
   2262     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_MERGE] = {
   2263         .instance_size = sizeof(BlockDirtyBitmapState),
   2264         .prepare = block_dirty_bitmap_merge_prepare,
   2265         .commit = block_dirty_bitmap_free_backup,
   2266         .abort = block_dirty_bitmap_restore,
   2267     },
   2268     [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_REMOVE] = {
   2269         .instance_size = sizeof(BlockDirtyBitmapState),
   2270         .prepare = block_dirty_bitmap_remove_prepare,
   2271         .commit = block_dirty_bitmap_remove_commit,
   2272         .abort = block_dirty_bitmap_remove_abort,
   2273     },
   2274     /* Where are transactions for MIRROR, COMMIT and STREAM?
   2275      * Although these blockjobs use transaction callbacks like the backup job,
   2276      * these jobs do not necessarily adhere to transaction semantics.
   2277      * These jobs may not fully undo all of their actions on abort, nor do they
   2278      * necessarily work in transactions with more than one job in them.
   2279      */
   2280 };
   2281 
   2282 /**
   2283  * Allocate a TransactionProperties structure if necessary, and fill
   2284  * that structure with desired defaults if they are unset.
   2285  */
   2286 static TransactionProperties *get_transaction_properties(
   2287     TransactionProperties *props)
   2288 {
   2289     if (!props) {
   2290         props = g_new0(TransactionProperties, 1);
   2291     }
   2292 
   2293     if (!props->has_completion_mode) {
   2294         props->has_completion_mode = true;
   2295         props->completion_mode = ACTION_COMPLETION_MODE_INDIVIDUAL;
   2296     }
   2297 
   2298     return props;
   2299 }
   2300 
   2301 /*
   2302  * 'Atomic' group operations.  The operations are performed as a set, and if
   2303  * any fail then we roll back all operations in the group.
   2304  *
   2305  * Always run under BQL.
   2306  */
   2307 void qmp_transaction(TransactionActionList *dev_list,
   2308                      bool has_props,
   2309                      struct TransactionProperties *props,
   2310                      Error **errp)
   2311 {
   2312     TransactionActionList *dev_entry = dev_list;
   2313     JobTxn *block_job_txn = NULL;
   2314     BlkActionState *state, *next;
   2315     Error *local_err = NULL;
   2316 
   2317     GLOBAL_STATE_CODE();
   2318 
   2319     QTAILQ_HEAD(, BlkActionState) snap_bdrv_states;
   2320     QTAILQ_INIT(&snap_bdrv_states);
   2321 
   2322     /* Does this transaction get canceled as a group on failure?
   2323      * If not, we don't really need to make a JobTxn.
   2324      */
   2325     props = get_transaction_properties(props);
   2326     if (props->completion_mode != ACTION_COMPLETION_MODE_INDIVIDUAL) {
   2327         block_job_txn = job_txn_new();
   2328     }
   2329 
   2330     /* drain all i/o before any operations */
   2331     bdrv_drain_all();
   2332 
   2333     /* We don't do anything in this loop that commits us to the operations */
   2334     while (NULL != dev_entry) {
   2335         TransactionAction *dev_info = NULL;
   2336         const BlkActionOps *ops;
   2337 
   2338         dev_info = dev_entry->value;
   2339         dev_entry = dev_entry->next;
   2340 
   2341         assert(dev_info->type < ARRAY_SIZE(actions));
   2342 
   2343         ops = &actions[dev_info->type];
   2344         assert(ops->instance_size > 0);
   2345 
   2346         state = g_malloc0(ops->instance_size);
   2347         state->ops = ops;
   2348         state->action = dev_info;
   2349         state->block_job_txn = block_job_txn;
   2350         state->txn_props = props;
   2351         QTAILQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
   2352 
   2353         state->ops->prepare(state, &local_err);
   2354         if (local_err) {
   2355             error_propagate(errp, local_err);
   2356             goto delete_and_fail;
   2357         }
   2358     }
   2359 
   2360     QTAILQ_FOREACH(state, &snap_bdrv_states, entry) {
   2361         if (state->ops->commit) {
   2362             state->ops->commit(state);
   2363         }
   2364     }
   2365 
   2366     /* success */
   2367     goto exit;
   2368 
   2369 delete_and_fail:
   2370     /* failure, and it is all-or-none; roll back all operations */
   2371     QTAILQ_FOREACH_REVERSE(state, &snap_bdrv_states, entry) {
   2372         if (state->ops->abort) {
   2373             state->ops->abort(state);
   2374         }
   2375     }
   2376 exit:
   2377     QTAILQ_FOREACH_SAFE(state, &snap_bdrv_states, entry, next) {
   2378         if (state->ops->clean) {
   2379             state->ops->clean(state);
   2380         }
   2381         g_free(state);
   2382     }
   2383     if (!has_props) {
   2384         qapi_free_TransactionProperties(props);
   2385     }
   2386     job_txn_unref(block_job_txn);
   2387 }
   2388 
   2389 BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *node,
   2390                                                               const char *name,
   2391                                                               Error **errp)
   2392 {
   2393     BdrvDirtyBitmap *bitmap;
   2394     BlockDriverState *bs;
   2395     BlockDirtyBitmapSha256 *ret = NULL;
   2396     char *sha256;
   2397 
   2398     bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
   2399     if (!bitmap || !bs) {
   2400         return NULL;
   2401     }
   2402 
   2403     sha256 = bdrv_dirty_bitmap_sha256(bitmap, errp);
   2404     if (sha256 == NULL) {
   2405         return NULL;
   2406     }
   2407 
   2408     ret = g_new(BlockDirtyBitmapSha256, 1);
   2409     ret->sha256 = sha256;
   2410 
   2411     return ret;
   2412 }
   2413 
   2414 void coroutine_fn qmp_block_resize(bool has_device, const char *device,
   2415                                    bool has_node_name, const char *node_name,
   2416                                    int64_t size, Error **errp)
   2417 {
   2418     Error *local_err = NULL;
   2419     BlockBackend *blk;
   2420     BlockDriverState *bs;
   2421     AioContext *old_ctx;
   2422 
   2423     bs = bdrv_lookup_bs(has_device ? device : NULL,
   2424                         has_node_name ? node_name : NULL,
   2425                         &local_err);
   2426     if (local_err) {
   2427         error_propagate(errp, local_err);
   2428         return;
   2429     }
   2430 
   2431     if (size < 0) {
   2432         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "size", "a >0 size");
   2433         return;
   2434     }
   2435 
   2436     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) {
   2437         error_setg(errp, QERR_DEVICE_IN_USE, device);
   2438         return;
   2439     }
   2440 
   2441     blk = blk_new_with_bs(bs, BLK_PERM_RESIZE, BLK_PERM_ALL, errp);
   2442     if (!blk) {
   2443         return;
   2444     }
   2445 
   2446     bdrv_co_lock(bs);
   2447     bdrv_drained_begin(bs);
   2448     bdrv_co_unlock(bs);
   2449 
   2450     old_ctx = bdrv_co_enter(bs);
   2451     blk_co_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp);
   2452     bdrv_co_leave(bs, old_ctx);
   2453 
   2454     bdrv_co_lock(bs);
   2455     bdrv_drained_end(bs);
   2456     blk_unref(blk);
   2457     bdrv_co_unlock(bs);
   2458 }
   2459 
   2460 void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
   2461                       bool has_base, const char *base,
   2462                       bool has_base_node, const char *base_node,
   2463                       bool has_backing_file, const char *backing_file,
   2464                       bool has_bottom, const char *bottom,
   2465                       bool has_speed, int64_t speed,
   2466                       bool has_on_error, BlockdevOnError on_error,
   2467                       bool has_filter_node_name, const char *filter_node_name,
   2468                       bool has_auto_finalize, bool auto_finalize,
   2469                       bool has_auto_dismiss, bool auto_dismiss,
   2470                       Error **errp)
   2471 {
   2472     BlockDriverState *bs, *iter, *iter_end;
   2473     BlockDriverState *base_bs = NULL;
   2474     BlockDriverState *bottom_bs = NULL;
   2475     AioContext *aio_context;
   2476     Error *local_err = NULL;
   2477     int job_flags = JOB_DEFAULT;
   2478 
   2479     if (has_base && has_base_node) {
   2480         error_setg(errp, "'base' and 'base-node' cannot be specified "
   2481                    "at the same time");
   2482         return;
   2483     }
   2484 
   2485     if (has_base && has_bottom) {
   2486         error_setg(errp, "'base' and 'bottom' cannot be specified "
   2487                    "at the same time");
   2488         return;
   2489     }
   2490 
   2491     if (has_bottom && has_base_node) {
   2492         error_setg(errp, "'bottom' and 'base-node' cannot be specified "
   2493                    "at the same time");
   2494         return;
   2495     }
   2496 
   2497     if (!has_on_error) {
   2498         on_error = BLOCKDEV_ON_ERROR_REPORT;
   2499     }
   2500 
   2501     bs = bdrv_lookup_bs(device, device, errp);
   2502     if (!bs) {
   2503         return;
   2504     }
   2505 
   2506     aio_context = bdrv_get_aio_context(bs);
   2507     aio_context_acquire(aio_context);
   2508 
   2509     if (has_base) {
   2510         base_bs = bdrv_find_backing_image(bs, base);
   2511         if (base_bs == NULL) {
   2512             error_setg(errp, "Can't find '%s' in the backing chain", base);
   2513             goto out;
   2514         }
   2515         assert(bdrv_get_aio_context(base_bs) == aio_context);
   2516     }
   2517 
   2518     if (has_base_node) {
   2519         base_bs = bdrv_lookup_bs(NULL, base_node, errp);
   2520         if (!base_bs) {
   2521             goto out;
   2522         }
   2523         if (bs == base_bs || !bdrv_chain_contains(bs, base_bs)) {
   2524             error_setg(errp, "Node '%s' is not a backing image of '%s'",
   2525                        base_node, device);
   2526             goto out;
   2527         }
   2528         assert(bdrv_get_aio_context(base_bs) == aio_context);
   2529         bdrv_refresh_filename(base_bs);
   2530     }
   2531 
   2532     if (has_bottom) {
   2533         bottom_bs = bdrv_lookup_bs(NULL, bottom, errp);
   2534         if (!bottom_bs) {
   2535             goto out;
   2536         }
   2537         if (!bottom_bs->drv) {
   2538             error_setg(errp, "Node '%s' is not open", bottom);
   2539             goto out;
   2540         }
   2541         if (bottom_bs->drv->is_filter) {
   2542             error_setg(errp, "Node '%s' is a filter, use a non-filter node "
   2543                        "as 'bottom'", bottom);
   2544             goto out;
   2545         }
   2546         if (!bdrv_chain_contains(bs, bottom_bs)) {
   2547             error_setg(errp, "Node '%s' is not in a chain starting from '%s'",
   2548                        bottom, device);
   2549             goto out;
   2550         }
   2551         assert(bdrv_get_aio_context(bottom_bs) == aio_context);
   2552     }
   2553 
   2554     /*
   2555      * Check for op blockers in the whole chain between bs and base (or bottom)
   2556      */
   2557     iter_end = has_bottom ? bdrv_filter_or_cow_bs(bottom_bs) : base_bs;
   2558     for (iter = bs; iter && iter != iter_end;
   2559          iter = bdrv_filter_or_cow_bs(iter))
   2560     {
   2561         if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_STREAM, errp)) {
   2562             goto out;
   2563         }
   2564     }
   2565 
   2566     /* if we are streaming the entire chain, the result will have no backing
   2567      * file, and specifying one is therefore an error */
   2568     if (base_bs == NULL && has_backing_file) {
   2569         error_setg(errp, "backing file specified, but streaming the "
   2570                          "entire chain");
   2571         goto out;
   2572     }
   2573 
   2574     if (has_auto_finalize && !auto_finalize) {
   2575         job_flags |= JOB_MANUAL_FINALIZE;
   2576     }
   2577     if (has_auto_dismiss && !auto_dismiss) {
   2578         job_flags |= JOB_MANUAL_DISMISS;
   2579     }
   2580 
   2581     stream_start(has_job_id ? job_id : NULL, bs, base_bs, backing_file,
   2582                  bottom_bs, job_flags, has_speed ? speed : 0, on_error,
   2583                  filter_node_name, &local_err);
   2584     if (local_err) {
   2585         error_propagate(errp, local_err);
   2586         goto out;
   2587     }
   2588 
   2589     trace_qmp_block_stream(bs);
   2590 
   2591 out:
   2592     aio_context_release(aio_context);
   2593 }
   2594 
   2595 void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
   2596                       bool has_base_node, const char *base_node,
   2597                       bool has_base, const char *base,
   2598                       bool has_top_node, const char *top_node,
   2599                       bool has_top, const char *top,
   2600                       bool has_backing_file, const char *backing_file,
   2601                       bool has_speed, int64_t speed,
   2602                       bool has_on_error, BlockdevOnError on_error,
   2603                       bool has_filter_node_name, const char *filter_node_name,
   2604                       bool has_auto_finalize, bool auto_finalize,
   2605                       bool has_auto_dismiss, bool auto_dismiss,
   2606                       Error **errp)
   2607 {
   2608     BlockDriverState *bs;
   2609     BlockDriverState *iter;
   2610     BlockDriverState *base_bs, *top_bs;
   2611     AioContext *aio_context;
   2612     Error *local_err = NULL;
   2613     int job_flags = JOB_DEFAULT;
   2614     uint64_t top_perm, top_shared;
   2615 
   2616     if (!has_speed) {
   2617         speed = 0;
   2618     }
   2619     if (!has_on_error) {
   2620         on_error = BLOCKDEV_ON_ERROR_REPORT;
   2621     }
   2622     if (!has_filter_node_name) {
   2623         filter_node_name = NULL;
   2624     }
   2625     if (has_auto_finalize && !auto_finalize) {
   2626         job_flags |= JOB_MANUAL_FINALIZE;
   2627     }
   2628     if (has_auto_dismiss && !auto_dismiss) {
   2629         job_flags |= JOB_MANUAL_DISMISS;
   2630     }
   2631 
   2632     /* Important Note:
   2633      *  libvirt relies on the DeviceNotFound error class in order to probe for
   2634      *  live commit feature versions; for this to work, we must make sure to
   2635      *  perform the device lookup before any generic errors that may occur in a
   2636      *  scenario in which all optional arguments are omitted. */
   2637     bs = qmp_get_root_bs(device, &local_err);
   2638     if (!bs) {
   2639         bs = bdrv_lookup_bs(device, device, NULL);
   2640         if (!bs) {
   2641             error_free(local_err);
   2642             error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
   2643                       "Device '%s' not found", device);
   2644         } else {
   2645             error_propagate(errp, local_err);
   2646         }
   2647         return;
   2648     }
   2649 
   2650     aio_context = bdrv_get_aio_context(bs);
   2651     aio_context_acquire(aio_context);
   2652 
   2653     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, errp)) {
   2654         goto out;
   2655     }
   2656 
   2657     /* default top_bs is the active layer */
   2658     top_bs = bs;
   2659 
   2660     if (has_top_node && has_top) {
   2661         error_setg(errp, "'top-node' and 'top' are mutually exclusive");
   2662         goto out;
   2663     } else if (has_top_node) {
   2664         top_bs = bdrv_lookup_bs(NULL, top_node, errp);
   2665         if (top_bs == NULL) {
   2666             goto out;
   2667         }
   2668         if (!bdrv_chain_contains(bs, top_bs)) {
   2669             error_setg(errp, "'%s' is not in this backing file chain",
   2670                        top_node);
   2671             goto out;
   2672         }
   2673     } else if (has_top && top) {
   2674         /* This strcmp() is just a shortcut, there is no need to
   2675          * refresh @bs's filename.  If it mismatches,
   2676          * bdrv_find_backing_image() will do the refresh and may still
   2677          * return @bs. */
   2678         if (strcmp(bs->filename, top) != 0) {
   2679             top_bs = bdrv_find_backing_image(bs, top);
   2680         }
   2681     }
   2682 
   2683     if (top_bs == NULL) {
   2684         error_setg(errp, "Top image file %s not found", top ? top : "NULL");
   2685         goto out;
   2686     }
   2687 
   2688     assert(bdrv_get_aio_context(top_bs) == aio_context);
   2689 
   2690     if (has_base_node && has_base) {
   2691         error_setg(errp, "'base-node' and 'base' are mutually exclusive");
   2692         goto out;
   2693     } else if (has_base_node) {
   2694         base_bs = bdrv_lookup_bs(NULL, base_node, errp);
   2695         if (base_bs == NULL) {
   2696             goto out;
   2697         }
   2698         if (!bdrv_chain_contains(top_bs, base_bs)) {
   2699             error_setg(errp, "'%s' is not in this backing file chain",
   2700                        base_node);
   2701             goto out;
   2702         }
   2703     } else if (has_base && base) {
   2704         base_bs = bdrv_find_backing_image(top_bs, base);
   2705         if (base_bs == NULL) {
   2706             error_setg(errp, "Can't find '%s' in the backing chain", base);
   2707             goto out;
   2708         }
   2709     } else {
   2710         base_bs = bdrv_find_base(top_bs);
   2711         if (base_bs == NULL) {
   2712             error_setg(errp, "There is no backimg image");
   2713             goto out;
   2714         }
   2715     }
   2716 
   2717     assert(bdrv_get_aio_context(base_bs) == aio_context);
   2718 
   2719     for (iter = top_bs; iter != bdrv_filter_or_cow_bs(base_bs);
   2720          iter = bdrv_filter_or_cow_bs(iter))
   2721     {
   2722         if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
   2723             goto out;
   2724         }
   2725     }
   2726 
   2727     /* Do not allow attempts to commit an image into itself */
   2728     if (top_bs == base_bs) {
   2729         error_setg(errp, "cannot commit an image into itself");
   2730         goto out;
   2731     }
   2732 
   2733     /*
   2734      * Active commit is required if and only if someone has taken a
   2735      * WRITE permission on the top node.  Historically, we have always
   2736      * used active commit for top nodes, so continue that practice
   2737      * lest we possibly break clients that rely on this behavior, e.g.
   2738      * to later attach this node to a writing parent.
   2739      * (Active commit is never really wrong.)
   2740      */
   2741     bdrv_get_cumulative_perm(top_bs, &top_perm, &top_shared);
   2742     if (top_perm & BLK_PERM_WRITE ||
   2743         bdrv_skip_filters(top_bs) == bdrv_skip_filters(bs))
   2744     {
   2745         if (has_backing_file) {
   2746             if (bdrv_skip_filters(top_bs) == bdrv_skip_filters(bs)) {
   2747                 error_setg(errp, "'backing-file' specified,"
   2748                                  " but 'top' is the active layer");
   2749             } else {
   2750                 error_setg(errp, "'backing-file' specified, but 'top' has a "
   2751                                  "writer on it");
   2752             }
   2753             goto out;
   2754         }
   2755         if (!has_job_id) {
   2756             /*
   2757              * Emulate here what block_job_create() does, because it
   2758              * is possible that @bs != @top_bs (the block job should
   2759              * be named after @bs, even if @top_bs is the actual
   2760              * source)
   2761              */
   2762             job_id = bdrv_get_device_name(bs);
   2763         }
   2764         commit_active_start(job_id, top_bs, base_bs, job_flags, speed, on_error,
   2765                             filter_node_name, NULL, NULL, false, &local_err);
   2766     } else {
   2767         BlockDriverState *overlay_bs = bdrv_find_overlay(bs, top_bs);
   2768         if (bdrv_op_is_blocked(overlay_bs, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
   2769             goto out;
   2770         }
   2771         commit_start(has_job_id ? job_id : NULL, bs, base_bs, top_bs, job_flags,
   2772                      speed, on_error, has_backing_file ? backing_file : NULL,
   2773                      filter_node_name, &local_err);
   2774     }
   2775     if (local_err != NULL) {
   2776         error_propagate(errp, local_err);
   2777         goto out;
   2778     }
   2779 
   2780 out:
   2781     aio_context_release(aio_context);
   2782 }
   2783 
   2784 /* Common QMP interface for drive-backup and blockdev-backup */
   2785 static BlockJob *do_backup_common(BackupCommon *backup,
   2786                                   BlockDriverState *bs,
   2787                                   BlockDriverState *target_bs,
   2788                                   AioContext *aio_context,
   2789                                   JobTxn *txn, Error **errp)
   2790 {
   2791     BlockJob *job = NULL;
   2792     BdrvDirtyBitmap *bmap = NULL;
   2793     BackupPerf perf = { .max_workers = 64 };
   2794     int job_flags = JOB_DEFAULT;
   2795 
   2796     if (!backup->has_speed) {
   2797         backup->speed = 0;
   2798     }
   2799     if (!backup->has_on_source_error) {
   2800         backup->on_source_error = BLOCKDEV_ON_ERROR_REPORT;
   2801     }
   2802     if (!backup->has_on_target_error) {
   2803         backup->on_target_error = BLOCKDEV_ON_ERROR_REPORT;
   2804     }
   2805     if (!backup->has_job_id) {
   2806         backup->job_id = NULL;
   2807     }
   2808     if (!backup->has_auto_finalize) {
   2809         backup->auto_finalize = true;
   2810     }
   2811     if (!backup->has_auto_dismiss) {
   2812         backup->auto_dismiss = true;
   2813     }
   2814     if (!backup->has_compress) {
   2815         backup->compress = false;
   2816     }
   2817 
   2818     if (backup->x_perf) {
   2819         if (backup->x_perf->has_use_copy_range) {
   2820             perf.use_copy_range = backup->x_perf->use_copy_range;
   2821         }
   2822         if (backup->x_perf->has_max_workers) {
   2823             perf.max_workers = backup->x_perf->max_workers;
   2824         }
   2825         if (backup->x_perf->has_max_chunk) {
   2826             perf.max_chunk = backup->x_perf->max_chunk;
   2827         }
   2828     }
   2829 
   2830     if ((backup->sync == MIRROR_SYNC_MODE_BITMAP) ||
   2831         (backup->sync == MIRROR_SYNC_MODE_INCREMENTAL)) {
   2832         /* done before desugaring 'incremental' to print the right message */
   2833         if (!backup->has_bitmap) {
   2834             error_setg(errp, "must provide a valid bitmap name for "
   2835                        "'%s' sync mode", MirrorSyncMode_str(backup->sync));
   2836             return NULL;
   2837         }
   2838     }
   2839 
   2840     if (backup->sync == MIRROR_SYNC_MODE_INCREMENTAL) {
   2841         if (backup->has_bitmap_mode &&
   2842             backup->bitmap_mode != BITMAP_SYNC_MODE_ON_SUCCESS) {
   2843             error_setg(errp, "Bitmap sync mode must be '%s' "
   2844                        "when using sync mode '%s'",
   2845                        BitmapSyncMode_str(BITMAP_SYNC_MODE_ON_SUCCESS),
   2846                        MirrorSyncMode_str(backup->sync));
   2847             return NULL;
   2848         }
   2849         backup->has_bitmap_mode = true;
   2850         backup->sync = MIRROR_SYNC_MODE_BITMAP;
   2851         backup->bitmap_mode = BITMAP_SYNC_MODE_ON_SUCCESS;
   2852     }
   2853 
   2854     if (backup->has_bitmap) {
   2855         bmap = bdrv_find_dirty_bitmap(bs, backup->bitmap);
   2856         if (!bmap) {
   2857             error_setg(errp, "Bitmap '%s' could not be found", backup->bitmap);
   2858             return NULL;
   2859         }
   2860         if (!backup->has_bitmap_mode) {
   2861             error_setg(errp, "Bitmap sync mode must be given "
   2862                        "when providing a bitmap");
   2863             return NULL;
   2864         }
   2865         if (bdrv_dirty_bitmap_check(bmap, BDRV_BITMAP_ALLOW_RO, errp)) {
   2866             return NULL;
   2867         }
   2868 
   2869         /* This does not produce a useful bitmap artifact: */
   2870         if (backup->sync == MIRROR_SYNC_MODE_NONE) {
   2871             error_setg(errp, "sync mode '%s' does not produce meaningful bitmap"
   2872                        " outputs", MirrorSyncMode_str(backup->sync));
   2873             return NULL;
   2874         }
   2875 
   2876         /* If the bitmap isn't used for input or output, this is useless: */
   2877         if (backup->bitmap_mode == BITMAP_SYNC_MODE_NEVER &&
   2878             backup->sync != MIRROR_SYNC_MODE_BITMAP) {
   2879             error_setg(errp, "Bitmap sync mode '%s' has no meaningful effect"
   2880                        " when combined with sync mode '%s'",
   2881                        BitmapSyncMode_str(backup->bitmap_mode),
   2882                        MirrorSyncMode_str(backup->sync));
   2883             return NULL;
   2884         }
   2885     }
   2886 
   2887     if (!backup->has_bitmap && backup->has_bitmap_mode) {
   2888         error_setg(errp, "Cannot specify bitmap sync mode without a bitmap");
   2889         return NULL;
   2890     }
   2891 
   2892     if (!backup->auto_finalize) {
   2893         job_flags |= JOB_MANUAL_FINALIZE;
   2894     }
   2895     if (!backup->auto_dismiss) {
   2896         job_flags |= JOB_MANUAL_DISMISS;
   2897     }
   2898 
   2899     job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
   2900                             backup->sync, bmap, backup->bitmap_mode,
   2901                             backup->compress,
   2902                             backup->filter_node_name,
   2903                             &perf,
   2904                             backup->on_source_error,
   2905                             backup->on_target_error,
   2906                             job_flags, NULL, NULL, txn, errp);
   2907     return job;
   2908 }
   2909 
   2910 void qmp_drive_backup(DriveBackup *backup, Error **errp)
   2911 {
   2912     TransactionAction action = {
   2913         .type = TRANSACTION_ACTION_KIND_DRIVE_BACKUP,
   2914         .u.drive_backup.data = backup,
   2915     };
   2916     blockdev_do_action(&action, errp);
   2917 }
   2918 
   2919 BlockDeviceInfoList *qmp_query_named_block_nodes(bool has_flat,
   2920                                                  bool flat,
   2921                                                  Error **errp)
   2922 {
   2923     bool return_flat = has_flat && flat;
   2924 
   2925     return bdrv_named_nodes_list(return_flat, errp);
   2926 }
   2927 
   2928 XDbgBlockGraph *qmp_x_debug_query_block_graph(Error **errp)
   2929 {
   2930     return bdrv_get_xdbg_block_graph(errp);
   2931 }
   2932 
   2933 void qmp_blockdev_backup(BlockdevBackup *backup, Error **errp)
   2934 {
   2935     TransactionAction action = {
   2936         .type = TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP,
   2937         .u.blockdev_backup.data = backup,
   2938     };
   2939     blockdev_do_action(&action, errp);
   2940 }
   2941 
   2942 /* Parameter check and block job starting for drive mirroring.
   2943  * Caller should hold @device and @target's aio context (must be the same).
   2944  **/
   2945 static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
   2946                                    BlockDriverState *target,
   2947                                    bool has_replaces, const char *replaces,
   2948                                    enum MirrorSyncMode sync,
   2949                                    BlockMirrorBackingMode backing_mode,
   2950                                    bool zero_target,
   2951                                    bool has_speed, int64_t speed,
   2952                                    bool has_granularity, uint32_t granularity,
   2953                                    bool has_buf_size, int64_t buf_size,
   2954                                    bool has_on_source_error,
   2955                                    BlockdevOnError on_source_error,
   2956                                    bool has_on_target_error,
   2957                                    BlockdevOnError on_target_error,
   2958                                    bool has_unmap, bool unmap,
   2959                                    bool has_filter_node_name,
   2960                                    const char *filter_node_name,
   2961                                    bool has_copy_mode, MirrorCopyMode copy_mode,
   2962                                    bool has_auto_finalize, bool auto_finalize,
   2963                                    bool has_auto_dismiss, bool auto_dismiss,
   2964                                    Error **errp)
   2965 {
   2966     BlockDriverState *unfiltered_bs;
   2967     int job_flags = JOB_DEFAULT;
   2968 
   2969     if (!has_speed) {
   2970         speed = 0;
   2971     }
   2972     if (!has_on_source_error) {
   2973         on_source_error = BLOCKDEV_ON_ERROR_REPORT;
   2974     }
   2975     if (!has_on_target_error) {
   2976         on_target_error = BLOCKDEV_ON_ERROR_REPORT;
   2977     }
   2978     if (!has_granularity) {
   2979         granularity = 0;
   2980     }
   2981     if (!has_buf_size) {
   2982         buf_size = 0;
   2983     }
   2984     if (!has_unmap) {
   2985         unmap = true;
   2986     }
   2987     if (!has_filter_node_name) {
   2988         filter_node_name = NULL;
   2989     }
   2990     if (!has_copy_mode) {
   2991         copy_mode = MIRROR_COPY_MODE_BACKGROUND;
   2992     }
   2993     if (has_auto_finalize && !auto_finalize) {
   2994         job_flags |= JOB_MANUAL_FINALIZE;
   2995     }
   2996     if (has_auto_dismiss && !auto_dismiss) {
   2997         job_flags |= JOB_MANUAL_DISMISS;
   2998     }
   2999 
   3000     if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) {
   3001         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
   3002                    "a value in range [512B, 64MB]");
   3003         return;
   3004     }
   3005     if (granularity & (granularity - 1)) {
   3006         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
   3007                    "a power of 2");
   3008         return;
   3009     }
   3010 
   3011     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR_SOURCE, errp)) {
   3012         return;
   3013     }
   3014     if (bdrv_op_is_blocked(target, BLOCK_OP_TYPE_MIRROR_TARGET, errp)) {
   3015         return;
   3016     }
   3017 
   3018     if (!bdrv_backing_chain_next(bs) && sync == MIRROR_SYNC_MODE_TOP) {
   3019         sync = MIRROR_SYNC_MODE_FULL;
   3020     }
   3021 
   3022     if (!has_replaces) {
   3023         /* We want to mirror from @bs, but keep implicit filters on top */
   3024         unfiltered_bs = bdrv_skip_implicit_filters(bs);
   3025         if (unfiltered_bs != bs) {
   3026             replaces = unfiltered_bs->node_name;
   3027             has_replaces = true;
   3028         }
   3029     }
   3030 
   3031     if (has_replaces) {
   3032         BlockDriverState *to_replace_bs;
   3033         AioContext *replace_aio_context;
   3034         int64_t bs_size, replace_size;
   3035 
   3036         bs_size = bdrv_getlength(bs);
   3037         if (bs_size < 0) {
   3038             error_setg_errno(errp, -bs_size, "Failed to query device's size");
   3039             return;
   3040         }
   3041 
   3042         to_replace_bs = check_to_replace_node(bs, replaces, errp);
   3043         if (!to_replace_bs) {
   3044             return;
   3045         }
   3046 
   3047         replace_aio_context = bdrv_get_aio_context(to_replace_bs);
   3048         aio_context_acquire(replace_aio_context);
   3049         replace_size = bdrv_getlength(to_replace_bs);
   3050         aio_context_release(replace_aio_context);
   3051 
   3052         if (replace_size < 0) {
   3053             error_setg_errno(errp, -replace_size,
   3054                              "Failed to query the replacement node's size");
   3055             return;
   3056         }
   3057         if (bs_size != replace_size) {
   3058             error_setg(errp, "cannot replace image with a mirror image of "
   3059                              "different size");
   3060             return;
   3061         }
   3062     }
   3063 
   3064     /* pass the node name to replace to mirror start since it's loose coupling
   3065      * and will allow to check whether the node still exist at mirror completion
   3066      */
   3067     mirror_start(job_id, bs, target,
   3068                  has_replaces ? replaces : NULL, job_flags,
   3069                  speed, granularity, buf_size, sync, backing_mode, zero_target,
   3070                  on_source_error, on_target_error, unmap, filter_node_name,
   3071                  copy_mode, errp);
   3072 }
   3073 
   3074 void qmp_drive_mirror(DriveMirror *arg, Error **errp)
   3075 {
   3076     BlockDriverState *bs;
   3077     BlockDriverState *target_backing_bs, *target_bs;
   3078     AioContext *aio_context;
   3079     AioContext *old_context;
   3080     BlockMirrorBackingMode backing_mode;
   3081     Error *local_err = NULL;
   3082     QDict *options = NULL;
   3083     int flags;
   3084     int64_t size;
   3085     const char *format = arg->format;
   3086     bool zero_target;
   3087     int ret;
   3088 
   3089     bs = qmp_get_root_bs(arg->device, errp);
   3090     if (!bs) {
   3091         return;
   3092     }
   3093 
   3094     /* Early check to avoid creating target */
   3095     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR_SOURCE, errp)) {
   3096         return;
   3097     }
   3098 
   3099     aio_context = bdrv_get_aio_context(bs);
   3100     aio_context_acquire(aio_context);
   3101 
   3102     if (!arg->has_mode) {
   3103         arg->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
   3104     }
   3105 
   3106     if (!arg->has_format) {
   3107         format = (arg->mode == NEW_IMAGE_MODE_EXISTING
   3108                   ? NULL : bs->drv->format_name);
   3109     }
   3110 
   3111     flags = bs->open_flags | BDRV_O_RDWR;
   3112     target_backing_bs = bdrv_cow_bs(bdrv_skip_filters(bs));
   3113     if (!target_backing_bs && arg->sync == MIRROR_SYNC_MODE_TOP) {
   3114         arg->sync = MIRROR_SYNC_MODE_FULL;
   3115     }
   3116     if (arg->sync == MIRROR_SYNC_MODE_NONE) {
   3117         target_backing_bs = bs;
   3118     }
   3119 
   3120     size = bdrv_getlength(bs);
   3121     if (size < 0) {
   3122         error_setg_errno(errp, -size, "bdrv_getlength failed");
   3123         goto out;
   3124     }
   3125 
   3126     if (arg->has_replaces) {
   3127         if (!arg->has_node_name) {
   3128             error_setg(errp, "a node-name must be provided when replacing a"
   3129                              " named node of the graph");
   3130             goto out;
   3131         }
   3132     }
   3133 
   3134     if (arg->mode == NEW_IMAGE_MODE_ABSOLUTE_PATHS) {
   3135         backing_mode = MIRROR_SOURCE_BACKING_CHAIN;
   3136     } else {
   3137         backing_mode = MIRROR_OPEN_BACKING_CHAIN;
   3138     }
   3139 
   3140     /* Don't open backing image in create() */
   3141     flags |= BDRV_O_NO_BACKING;
   3142 
   3143     if ((arg->sync == MIRROR_SYNC_MODE_FULL || !target_backing_bs)
   3144         && arg->mode != NEW_IMAGE_MODE_EXISTING)
   3145     {
   3146         /* create new image w/o backing file */
   3147         assert(format);
   3148         bdrv_img_create(arg->target, format,
   3149                         NULL, NULL, NULL, size, flags, false, &local_err);
   3150     } else {
   3151         /* Implicit filters should not appear in the filename */
   3152         BlockDriverState *explicit_backing =
   3153             bdrv_skip_implicit_filters(target_backing_bs);
   3154 
   3155         switch (arg->mode) {
   3156         case NEW_IMAGE_MODE_EXISTING:
   3157             break;
   3158         case NEW_IMAGE_MODE_ABSOLUTE_PATHS:
   3159             /* create new image with backing file */
   3160             bdrv_refresh_filename(explicit_backing);
   3161             bdrv_img_create(arg->target, format,
   3162                             explicit_backing->filename,
   3163                             explicit_backing->drv->format_name,
   3164                             NULL, size, flags, false, &local_err);
   3165             break;
   3166         default:
   3167             abort();
   3168         }
   3169     }
   3170 
   3171     if (local_err) {
   3172         error_propagate(errp, local_err);
   3173         goto out;
   3174     }
   3175 
   3176     options = qdict_new();
   3177     if (arg->has_node_name) {
   3178         qdict_put_str(options, "node-name", arg->node_name);
   3179     }
   3180     if (format) {
   3181         qdict_put_str(options, "driver", format);
   3182     }
   3183 
   3184     /* Mirroring takes care of copy-on-write using the source's backing
   3185      * file.
   3186      */
   3187     target_bs = bdrv_open(arg->target, NULL, options, flags, errp);
   3188     if (!target_bs) {
   3189         goto out;
   3190     }
   3191 
   3192     zero_target = (arg->sync == MIRROR_SYNC_MODE_FULL &&
   3193                    (arg->mode == NEW_IMAGE_MODE_EXISTING ||
   3194                     !bdrv_has_zero_init(target_bs)));
   3195 
   3196 
   3197     /* Honor bdrv_try_change_aio_context() context acquisition requirements. */
   3198     old_context = bdrv_get_aio_context(target_bs);
   3199     aio_context_release(aio_context);
   3200     aio_context_acquire(old_context);
   3201 
   3202     ret = bdrv_try_change_aio_context(target_bs, aio_context, NULL, errp);
   3203     if (ret < 0) {
   3204         bdrv_unref(target_bs);
   3205         aio_context_release(old_context);
   3206         return;
   3207     }
   3208 
   3209     aio_context_release(old_context);
   3210     aio_context_acquire(aio_context);
   3211 
   3212     blockdev_mirror_common(arg->has_job_id ? arg->job_id : NULL, bs, target_bs,
   3213                            arg->has_replaces, arg->replaces, arg->sync,
   3214                            backing_mode, zero_target,
   3215                            arg->has_speed, arg->speed,
   3216                            arg->has_granularity, arg->granularity,
   3217                            arg->has_buf_size, arg->buf_size,
   3218                            arg->has_on_source_error, arg->on_source_error,
   3219                            arg->has_on_target_error, arg->on_target_error,
   3220                            arg->has_unmap, arg->unmap,
   3221                            false, NULL,
   3222                            arg->has_copy_mode, arg->copy_mode,
   3223                            arg->has_auto_finalize, arg->auto_finalize,
   3224                            arg->has_auto_dismiss, arg->auto_dismiss,
   3225                            errp);
   3226     bdrv_unref(target_bs);
   3227 out:
   3228     aio_context_release(aio_context);
   3229 }
   3230 
   3231 void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
   3232                          const char *device, const char *target,
   3233                          bool has_replaces, const char *replaces,
   3234                          MirrorSyncMode sync,
   3235                          bool has_speed, int64_t speed,
   3236                          bool has_granularity, uint32_t granularity,
   3237                          bool has_buf_size, int64_t buf_size,
   3238                          bool has_on_source_error,
   3239                          BlockdevOnError on_source_error,
   3240                          bool has_on_target_error,
   3241                          BlockdevOnError on_target_error,
   3242                          bool has_filter_node_name,
   3243                          const char *filter_node_name,
   3244                          bool has_copy_mode, MirrorCopyMode copy_mode,
   3245                          bool has_auto_finalize, bool auto_finalize,
   3246                          bool has_auto_dismiss, bool auto_dismiss,
   3247                          Error **errp)
   3248 {
   3249     BlockDriverState *bs;
   3250     BlockDriverState *target_bs;
   3251     AioContext *aio_context;
   3252     AioContext *old_context;
   3253     BlockMirrorBackingMode backing_mode = MIRROR_LEAVE_BACKING_CHAIN;
   3254     bool zero_target;
   3255     int ret;
   3256 
   3257     bs = qmp_get_root_bs(device, errp);
   3258     if (!bs) {
   3259         return;
   3260     }
   3261 
   3262     target_bs = bdrv_lookup_bs(target, target, errp);
   3263     if (!target_bs) {
   3264         return;
   3265     }
   3266 
   3267     zero_target = (sync == MIRROR_SYNC_MODE_FULL);
   3268 
   3269     /* Honor bdrv_try_change_aio_context() context acquisition requirements. */
   3270     old_context = bdrv_get_aio_context(target_bs);
   3271     aio_context = bdrv_get_aio_context(bs);
   3272     aio_context_acquire(old_context);
   3273 
   3274     ret = bdrv_try_change_aio_context(target_bs, aio_context, NULL, errp);
   3275 
   3276     aio_context_release(old_context);
   3277     aio_context_acquire(aio_context);
   3278 
   3279     if (ret < 0) {
   3280         goto out;
   3281     }
   3282 
   3283     blockdev_mirror_common(has_job_id ? job_id : NULL, bs, target_bs,
   3284                            has_replaces, replaces, sync, backing_mode,
   3285                            zero_target, has_speed, speed,
   3286                            has_granularity, granularity,
   3287                            has_buf_size, buf_size,
   3288                            has_on_source_error, on_source_error,
   3289                            has_on_target_error, on_target_error,
   3290                            true, true,
   3291                            has_filter_node_name, filter_node_name,
   3292                            has_copy_mode, copy_mode,
   3293                            has_auto_finalize, auto_finalize,
   3294                            has_auto_dismiss, auto_dismiss,
   3295                            errp);
   3296 out:
   3297     aio_context_release(aio_context);
   3298 }
   3299 
   3300 /*
   3301  * Get a block job using its ID. Called with job_mutex held.
   3302  */
   3303 static BlockJob *find_block_job_locked(const char *id, Error **errp)
   3304 {
   3305     BlockJob *job;
   3306 
   3307     assert(id != NULL);
   3308 
   3309     job = block_job_get_locked(id);
   3310 
   3311     if (!job) {
   3312         error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE,
   3313                   "Block job '%s' not found", id);
   3314         return NULL;
   3315     }
   3316 
   3317     return job;
   3318 }
   3319 
   3320 void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp)
   3321 {
   3322     BlockJob *job;
   3323 
   3324     JOB_LOCK_GUARD();
   3325     job = find_block_job_locked(device, errp);
   3326 
   3327     if (!job) {
   3328         return;
   3329     }
   3330 
   3331     block_job_set_speed_locked(job, speed, errp);
   3332 }
   3333 
   3334 void qmp_block_job_cancel(const char *device,
   3335                           bool has_force, bool force, Error **errp)
   3336 {
   3337     BlockJob *job;
   3338 
   3339     JOB_LOCK_GUARD();
   3340     job = find_block_job_locked(device, errp);
   3341 
   3342     if (!job) {
   3343         return;
   3344     }
   3345 
   3346     if (!has_force) {
   3347         force = false;
   3348     }
   3349 
   3350     if (job_user_paused_locked(&job->job) && !force) {
   3351         error_setg(errp, "The block job for device '%s' is currently paused",
   3352                    device);
   3353         return;
   3354     }
   3355 
   3356     trace_qmp_block_job_cancel(job);
   3357     job_user_cancel_locked(&job->job, force, errp);
   3358 }
   3359 
   3360 void qmp_block_job_pause(const char *device, Error **errp)
   3361 {
   3362     BlockJob *job;
   3363 
   3364     JOB_LOCK_GUARD();
   3365     job = find_block_job_locked(device, errp);
   3366 
   3367     if (!job) {
   3368         return;
   3369     }
   3370 
   3371     trace_qmp_block_job_pause(job);
   3372     job_user_pause_locked(&job->job, errp);
   3373 }
   3374 
   3375 void qmp_block_job_resume(const char *device, Error **errp)
   3376 {
   3377     BlockJob *job;
   3378 
   3379     JOB_LOCK_GUARD();
   3380     job = find_block_job_locked(device, errp);
   3381 
   3382     if (!job) {
   3383         return;
   3384     }
   3385 
   3386     trace_qmp_block_job_resume(job);
   3387     job_user_resume_locked(&job->job, errp);
   3388 }
   3389 
   3390 void qmp_block_job_complete(const char *device, Error **errp)
   3391 {
   3392     BlockJob *job;
   3393 
   3394     JOB_LOCK_GUARD();
   3395     job = find_block_job_locked(device, errp);
   3396 
   3397     if (!job) {
   3398         return;
   3399     }
   3400 
   3401     trace_qmp_block_job_complete(job);
   3402     job_complete_locked(&job->job, errp);
   3403 }
   3404 
   3405 void qmp_block_job_finalize(const char *id, Error **errp)
   3406 {
   3407     BlockJob *job;
   3408 
   3409     JOB_LOCK_GUARD();
   3410     job = find_block_job_locked(id, errp);
   3411 
   3412     if (!job) {
   3413         return;
   3414     }
   3415 
   3416     trace_qmp_block_job_finalize(job);
   3417     job_ref_locked(&job->job);
   3418     job_finalize_locked(&job->job, errp);
   3419 
   3420     job_unref_locked(&job->job);
   3421 }
   3422 
   3423 void qmp_block_job_dismiss(const char *id, Error **errp)
   3424 {
   3425     BlockJob *bjob;
   3426     Job *job;
   3427 
   3428     JOB_LOCK_GUARD();
   3429     bjob = find_block_job_locked(id, errp);
   3430 
   3431     if (!bjob) {
   3432         return;
   3433     }
   3434 
   3435     trace_qmp_block_job_dismiss(bjob);
   3436     job = &bjob->job;
   3437     job_dismiss_locked(&job, errp);
   3438 }
   3439 
   3440 void qmp_change_backing_file(const char *device,
   3441                              const char *image_node_name,
   3442                              const char *backing_file,
   3443                              Error **errp)
   3444 {
   3445     BlockDriverState *bs = NULL;
   3446     AioContext *aio_context;
   3447     BlockDriverState *image_bs = NULL;
   3448     Error *local_err = NULL;
   3449     bool ro;
   3450     int ret;
   3451 
   3452     bs = qmp_get_root_bs(device, errp);
   3453     if (!bs) {
   3454         return;
   3455     }
   3456 
   3457     aio_context = bdrv_get_aio_context(bs);
   3458     aio_context_acquire(aio_context);
   3459 
   3460     image_bs = bdrv_lookup_bs(NULL, image_node_name, &local_err);
   3461     if (local_err) {
   3462         error_propagate(errp, local_err);
   3463         goto out;
   3464     }
   3465 
   3466     if (!image_bs) {
   3467         error_setg(errp, "image file not found");
   3468         goto out;
   3469     }
   3470 
   3471     if (bdrv_find_base(image_bs) == image_bs) {
   3472         error_setg(errp, "not allowing backing file change on an image "
   3473                          "without a backing file");
   3474         goto out;
   3475     }
   3476 
   3477     /* even though we are not necessarily operating on bs, we need it to
   3478      * determine if block ops are currently prohibited on the chain */
   3479     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_CHANGE, errp)) {
   3480         goto out;
   3481     }
   3482 
   3483     /* final sanity check */
   3484     if (!bdrv_chain_contains(bs, image_bs)) {
   3485         error_setg(errp, "'%s' and image file are not in the same chain",
   3486                    device);
   3487         goto out;
   3488     }
   3489 
   3490     /* if not r/w, reopen to make r/w */
   3491     ro = bdrv_is_read_only(image_bs);
   3492 
   3493     if (ro) {
   3494         if (bdrv_reopen_set_read_only(image_bs, false, errp) != 0) {
   3495             goto out;
   3496         }
   3497     }
   3498 
   3499     ret = bdrv_change_backing_file(image_bs, backing_file,
   3500                                    image_bs->drv ? image_bs->drv->format_name : "",
   3501                                    false);
   3502 
   3503     if (ret < 0) {
   3504         error_setg_errno(errp, -ret, "Could not change backing file to '%s'",
   3505                          backing_file);
   3506         /* don't exit here, so we can try to restore open flags if
   3507          * appropriate */
   3508     }
   3509 
   3510     if (ro) {
   3511         bdrv_reopen_set_read_only(image_bs, true, errp);
   3512     }
   3513 
   3514 out:
   3515     aio_context_release(aio_context);
   3516 }
   3517 
   3518 void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
   3519 {
   3520     BlockDriverState *bs;
   3521     QObject *obj;
   3522     Visitor *v = qobject_output_visitor_new(&obj);
   3523     QDict *qdict;
   3524 
   3525     visit_type_BlockdevOptions(v, NULL, &options, &error_abort);
   3526     visit_complete(v, &obj);
   3527     qdict = qobject_to(QDict, obj);
   3528 
   3529     qdict_flatten(qdict);
   3530 
   3531     if (!qdict_get_try_str(qdict, "node-name")) {
   3532         error_setg(errp, "'node-name' must be specified for the root node");
   3533         goto fail;
   3534     }
   3535 
   3536     bs = bds_tree_init(qdict, errp);
   3537     if (!bs) {
   3538         goto fail;
   3539     }
   3540 
   3541     bdrv_set_monitor_owned(bs);
   3542 
   3543 fail:
   3544     visit_free(v);
   3545 }
   3546 
   3547 void qmp_blockdev_reopen(BlockdevOptionsList *reopen_list, Error **errp)
   3548 {
   3549     BlockReopenQueue *queue = NULL;
   3550     GSList *drained = NULL;
   3551     GSList *p;
   3552 
   3553     /* Add each one of the BDS that we want to reopen to the queue */
   3554     for (; reopen_list != NULL; reopen_list = reopen_list->next) {
   3555         BlockdevOptions *options = reopen_list->value;
   3556         BlockDriverState *bs;
   3557         AioContext *ctx;
   3558         QObject *obj;
   3559         Visitor *v;
   3560         QDict *qdict;
   3561 
   3562         /* Check for the selected node name */
   3563         if (!options->has_node_name) {
   3564             error_setg(errp, "node-name not specified");
   3565             goto fail;
   3566         }
   3567 
   3568         bs = bdrv_find_node(options->node_name);
   3569         if (!bs) {
   3570             error_setg(errp, "Failed to find node with node-name='%s'",
   3571                        options->node_name);
   3572             goto fail;
   3573         }
   3574 
   3575         /* Put all options in a QDict and flatten it */
   3576         v = qobject_output_visitor_new(&obj);
   3577         visit_type_BlockdevOptions(v, NULL, &options, &error_abort);
   3578         visit_complete(v, &obj);
   3579         visit_free(v);
   3580 
   3581         qdict = qobject_to(QDict, obj);
   3582 
   3583         qdict_flatten(qdict);
   3584 
   3585         ctx = bdrv_get_aio_context(bs);
   3586         aio_context_acquire(ctx);
   3587 
   3588         bdrv_subtree_drained_begin(bs);
   3589         queue = bdrv_reopen_queue(queue, bs, qdict, false);
   3590         drained = g_slist_prepend(drained, bs);
   3591 
   3592         aio_context_release(ctx);
   3593     }
   3594 
   3595     /* Perform the reopen operation */
   3596     bdrv_reopen_multiple(queue, errp);
   3597     queue = NULL;
   3598 
   3599 fail:
   3600     bdrv_reopen_queue_free(queue);
   3601     for (p = drained; p; p = p->next) {
   3602         BlockDriverState *bs = p->data;
   3603         AioContext *ctx = bdrv_get_aio_context(bs);
   3604 
   3605         aio_context_acquire(ctx);
   3606         bdrv_subtree_drained_end(bs);
   3607         aio_context_release(ctx);
   3608     }
   3609     g_slist_free(drained);
   3610 }
   3611 
   3612 void qmp_blockdev_del(const char *node_name, Error **errp)
   3613 {
   3614     AioContext *aio_context;
   3615     BlockDriverState *bs;
   3616 
   3617     GLOBAL_STATE_CODE();
   3618 
   3619     bs = bdrv_find_node(node_name);
   3620     if (!bs) {
   3621         error_setg(errp, "Failed to find node with node-name='%s'", node_name);
   3622         return;
   3623     }
   3624     if (bdrv_has_blk(bs)) {
   3625         error_setg(errp, "Node %s is in use", node_name);
   3626         return;
   3627     }
   3628     aio_context = bdrv_get_aio_context(bs);
   3629     aio_context_acquire(aio_context);
   3630 
   3631     if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, errp)) {
   3632         goto out;
   3633     }
   3634 
   3635     if (!QTAILQ_IN_USE(bs, monitor_list)) {
   3636         error_setg(errp, "Node %s is not owned by the monitor",
   3637                    bs->node_name);
   3638         goto out;
   3639     }
   3640 
   3641     if (bs->refcnt > 1) {
   3642         error_setg(errp, "Block device %s is in use",
   3643                    bdrv_get_device_or_node_name(bs));
   3644         goto out;
   3645     }
   3646 
   3647     QTAILQ_REMOVE(&monitor_bdrv_states, bs, monitor_list);
   3648     bdrv_unref(bs);
   3649 
   3650 out:
   3651     aio_context_release(aio_context);
   3652 }
   3653 
   3654 static BdrvChild *bdrv_find_child(BlockDriverState *parent_bs,
   3655                                   const char *child_name)
   3656 {
   3657     BdrvChild *child;
   3658 
   3659     QLIST_FOREACH(child, &parent_bs->children, next) {
   3660         if (strcmp(child->name, child_name) == 0) {
   3661             return child;
   3662         }
   3663     }
   3664 
   3665     return NULL;
   3666 }
   3667 
   3668 void qmp_x_blockdev_change(const char *parent, bool has_child,
   3669                            const char *child, bool has_node,
   3670                            const char *node, Error **errp)
   3671 {
   3672     BlockDriverState *parent_bs, *new_bs = NULL;
   3673     BdrvChild *p_child;
   3674 
   3675     parent_bs = bdrv_lookup_bs(parent, parent, errp);
   3676     if (!parent_bs) {
   3677         return;
   3678     }
   3679 
   3680     if (has_child == has_node) {
   3681         if (has_child) {
   3682             error_setg(errp, "The parameters child and node are in conflict");
   3683         } else {
   3684             error_setg(errp, "Either child or node must be specified");
   3685         }
   3686         return;
   3687     }
   3688 
   3689     if (has_child) {
   3690         p_child = bdrv_find_child(parent_bs, child);
   3691         if (!p_child) {
   3692             error_setg(errp, "Node '%s' does not have child '%s'",
   3693                        parent, child);
   3694             return;
   3695         }
   3696         bdrv_del_child(parent_bs, p_child, errp);
   3697     }
   3698 
   3699     if (has_node) {
   3700         new_bs = bdrv_find_node(node);
   3701         if (!new_bs) {
   3702             error_setg(errp, "Node '%s' not found", node);
   3703             return;
   3704         }
   3705         bdrv_add_child(parent_bs, new_bs, errp);
   3706     }
   3707 }
   3708 
   3709 BlockJobInfoList *qmp_query_block_jobs(Error **errp)
   3710 {
   3711     BlockJobInfoList *head = NULL, **tail = &head;
   3712     BlockJob *job;
   3713 
   3714     JOB_LOCK_GUARD();
   3715 
   3716     for (job = block_job_next_locked(NULL); job;
   3717          job = block_job_next_locked(job)) {
   3718         BlockJobInfo *value;
   3719 
   3720         if (block_job_is_internal(job)) {
   3721             continue;
   3722         }
   3723         value = block_job_query_locked(job, errp);
   3724         if (!value) {
   3725             qapi_free_BlockJobInfoList(head);
   3726             return NULL;
   3727         }
   3728         QAPI_LIST_APPEND(tail, value);
   3729     }
   3730 
   3731     return head;
   3732 }
   3733 
   3734 void qmp_x_blockdev_set_iothread(const char *node_name, StrOrNull *iothread,
   3735                                  bool has_force, bool force, Error **errp)
   3736 {
   3737     AioContext *old_context;
   3738     AioContext *new_context;
   3739     BlockDriverState *bs;
   3740 
   3741     bs = bdrv_find_node(node_name);
   3742     if (!bs) {
   3743         error_setg(errp, "Failed to find node with node-name='%s'", node_name);
   3744         return;
   3745     }
   3746 
   3747     /* Protects against accidents. */
   3748     if (!(has_force && force) && bdrv_has_blk(bs)) {
   3749         error_setg(errp, "Node %s is associated with a BlockBackend and could "
   3750                          "be in use (use force=true to override this check)",
   3751                          node_name);
   3752         return;
   3753     }
   3754 
   3755     if (iothread->type == QTYPE_QSTRING) {
   3756         IOThread *obj = iothread_by_id(iothread->u.s);
   3757         if (!obj) {
   3758             error_setg(errp, "Cannot find iothread %s", iothread->u.s);
   3759             return;
   3760         }
   3761 
   3762         new_context = iothread_get_aio_context(obj);
   3763     } else {
   3764         new_context = qemu_get_aio_context();
   3765     }
   3766 
   3767     old_context = bdrv_get_aio_context(bs);
   3768     aio_context_acquire(old_context);
   3769 
   3770     bdrv_try_change_aio_context(bs, new_context, NULL, errp);
   3771 
   3772     aio_context_release(old_context);
   3773 }
   3774 
   3775 QemuOptsList qemu_common_drive_opts = {
   3776     .name = "drive",
   3777     .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head),
   3778     .desc = {
   3779         {
   3780             .name = "snapshot",
   3781             .type = QEMU_OPT_BOOL,
   3782             .help = "enable/disable snapshot mode",
   3783         },{
   3784             .name = "aio",
   3785             .type = QEMU_OPT_STRING,
   3786             .help = "host AIO implementation (threads, native, io_uring)",
   3787         },{
   3788             .name = BDRV_OPT_CACHE_WB,
   3789             .type = QEMU_OPT_BOOL,
   3790             .help = "Enable writeback mode",
   3791         },{
   3792             .name = "format",
   3793             .type = QEMU_OPT_STRING,
   3794             .help = "disk format (raw, qcow2, ...)",
   3795         },{
   3796             .name = "rerror",
   3797             .type = QEMU_OPT_STRING,
   3798             .help = "read error action",
   3799         },{
   3800             .name = "werror",
   3801             .type = QEMU_OPT_STRING,
   3802             .help = "write error action",
   3803         },{
   3804             .name = BDRV_OPT_READ_ONLY,
   3805             .type = QEMU_OPT_BOOL,
   3806             .help = "open drive file as read-only",
   3807         },
   3808 
   3809         THROTTLE_OPTS,
   3810 
   3811         {
   3812             .name = "throttling.group",
   3813             .type = QEMU_OPT_STRING,
   3814             .help = "name of the block throttling group",
   3815         },{
   3816             .name = "copy-on-read",
   3817             .type = QEMU_OPT_BOOL,
   3818             .help = "copy read data from backing file into image file",
   3819         },{
   3820             .name = "detect-zeroes",
   3821             .type = QEMU_OPT_STRING,
   3822             .help = "try to optimize zero writes (off, on, unmap)",
   3823         },{
   3824             .name = "stats-account-invalid",
   3825             .type = QEMU_OPT_BOOL,
   3826             .help = "whether to account for invalid I/O operations "
   3827                     "in the statistics",
   3828         },{
   3829             .name = "stats-account-failed",
   3830             .type = QEMU_OPT_BOOL,
   3831             .help = "whether to account for failed I/O operations "
   3832                     "in the statistics",
   3833         },
   3834         { /* end of list */ }
   3835     },
   3836 };
   3837 
   3838 QemuOptsList qemu_drive_opts = {
   3839     .name = "drive",
   3840     .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
   3841     .desc = {
   3842         /*
   3843          * no elements => accept any params
   3844          * validation will happen later
   3845          */
   3846         { /* end of list */ }
   3847     },
   3848 };