qemu/blockdev.c
<<
>>
Prefs
   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 "sysemu/block-backend.h"
  34#include "sysemu/blockdev.h"
  35#include "hw/block/block.h"
  36#include "block/blockjob.h"
  37#include "block/throttle-groups.h"
  38#include "monitor/monitor.h"
  39#include "qemu/error-report.h"
  40#include "qemu/option.h"
  41#include "qemu/config-file.h"
  42#include "qapi/qmp/types.h"
  43#include "qapi-visit.h"
  44#include "qapi/qmp/qerror.h"
  45#include "qapi/qmp-output-visitor.h"
  46#include "qapi/util.h"
  47#include "sysemu/sysemu.h"
  48#include "block/block_int.h"
  49#include "qmp-commands.h"
  50#include "trace.h"
  51#include "sysemu/arch_init.h"
  52
  53static const char *const if_name[IF_COUNT] = {
  54    [IF_NONE] = "none",
  55    [IF_IDE] = "ide",
  56    [IF_SCSI] = "scsi",
  57    [IF_FLOPPY] = "floppy",
  58    [IF_PFLASH] = "pflash",
  59    [IF_MTD] = "mtd",
  60    [IF_SD] = "sd",
  61    [IF_VIRTIO] = "virtio",
  62    [IF_XEN] = "xen",
  63};
  64
  65static int if_max_devs[IF_COUNT] = {
  66    /*
  67     * Do not change these numbers!  They govern how drive option
  68     * index maps to unit and bus.  That mapping is ABI.
  69     *
  70     * All controllers used to imlement if=T drives need to support
  71     * if_max_devs[T] units, for any T with if_max_devs[T] != 0.
  72     * Otherwise, some index values map to "impossible" bus, unit
  73     * values.
  74     *
  75     * For instance, if you change [IF_SCSI] to 255, -drive
  76     * if=scsi,index=12 no longer means bus=1,unit=5, but
  77     * bus=0,unit=12.  With an lsi53c895a controller (7 units max),
  78     * the drive can't be set up.  Regression.
  79     */
  80    [IF_IDE] = 2,
  81    [IF_SCSI] = 7,
  82};
  83
  84/**
  85 * Boards may call this to offer board-by-board overrides
  86 * of the default, global values.
  87 */
  88void override_max_devs(BlockInterfaceType type, int max_devs)
  89{
  90    BlockBackend *blk;
  91    DriveInfo *dinfo;
  92
  93    if (max_devs <= 0) {
  94        return;
  95    }
  96
  97    for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
  98        dinfo = blk_legacy_dinfo(blk);
  99        if (dinfo->type == type) {
 100            fprintf(stderr, "Cannot override units-per-bus property of"
 101                    " the %s interface, because a drive of that type has"
 102                    " already been added.\n", if_name[type]);
 103            g_assert_not_reached();
 104        }
 105    }
 106
 107    if_max_devs[type] = max_devs;
 108}
 109
 110/*
 111 * We automatically delete the drive when a device using it gets
 112 * unplugged.  Questionable feature, but we can't just drop it.
 113 * Device models call blockdev_mark_auto_del() to schedule the
 114 * automatic deletion, and generic qdev code calls blockdev_auto_del()
 115 * when deletion is actually safe.
 116 */
 117void blockdev_mark_auto_del(BlockBackend *blk)
 118{
 119    DriveInfo *dinfo = blk_legacy_dinfo(blk);
 120    BlockDriverState *bs = blk_bs(blk);
 121    AioContext *aio_context;
 122
 123    if (!dinfo) {
 124        return;
 125    }
 126
 127    aio_context = bdrv_get_aio_context(bs);
 128    aio_context_acquire(aio_context);
 129
 130    if (bs->job) {
 131        block_job_cancel(bs->job);
 132    }
 133
 134    aio_context_release(aio_context);
 135
 136    dinfo->auto_del = 1;
 137}
 138
 139void blockdev_auto_del(BlockBackend *blk)
 140{
 141    DriveInfo *dinfo = blk_legacy_dinfo(blk);
 142
 143    if (dinfo && dinfo->auto_del) {
 144        blk_unref(blk);
 145    }
 146}
 147
 148/**
 149 * Returns the current mapping of how many units per bus
 150 * a particular interface can support.
 151 *
 152 *  A positive integer indicates n units per bus.
 153 *  0 implies the mapping has not been established.
 154 * -1 indicates an invalid BlockInterfaceType was given.
 155 */
 156int drive_get_max_devs(BlockInterfaceType type)
 157{
 158    if (type >= IF_IDE && type < IF_COUNT) {
 159        return if_max_devs[type];
 160    }
 161
 162    return -1;
 163}
 164
 165static int drive_index_to_bus_id(BlockInterfaceType type, int index)
 166{
 167    int max_devs = if_max_devs[type];
 168    return max_devs ? index / max_devs : 0;
 169}
 170
 171static int drive_index_to_unit_id(BlockInterfaceType type, int index)
 172{
 173    int max_devs = if_max_devs[type];
 174    return max_devs ? index % max_devs : index;
 175}
 176
 177QemuOpts *drive_def(const char *optstr)
 178{
 179    return qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false);
 180}
 181
 182QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
 183                    const char *optstr)
 184{
 185    QemuOpts *opts;
 186
 187    opts = drive_def(optstr);
 188    if (!opts) {
 189        return NULL;
 190    }
 191    if (type != IF_DEFAULT) {
 192        qemu_opt_set(opts, "if", if_name[type], &error_abort);
 193    }
 194    if (index >= 0) {
 195        qemu_opt_set_number(opts, "index", index, &error_abort);
 196    }
 197    if (file)
 198        qemu_opt_set(opts, "file", file, &error_abort);
 199    return opts;
 200}
 201
 202DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
 203{
 204    BlockBackend *blk;
 205    DriveInfo *dinfo;
 206
 207    for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
 208        dinfo = blk_legacy_dinfo(blk);
 209        if (dinfo && dinfo->type == type
 210            && dinfo->bus == bus && dinfo->unit == unit) {
 211            return dinfo;
 212        }
 213    }
 214
 215    return NULL;
 216}
 217
 218bool drive_check_orphaned(void)
 219{
 220    BlockBackend *blk;
 221    DriveInfo *dinfo;
 222    bool rs = false;
 223
 224    for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
 225        dinfo = blk_legacy_dinfo(blk);
 226        /* If dinfo->bdrv->dev is NULL, it has no device attached. */
 227        /* Unless this is a default drive, this may be an oversight. */
 228        if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
 229            dinfo->type != IF_NONE) {
 230            fprintf(stderr, "Warning: Orphaned drive without device: "
 231                    "id=%s,file=%s,if=%s,bus=%d,unit=%d\n",
 232                    blk_name(blk), blk_bs(blk)->filename, if_name[dinfo->type],
 233                    dinfo->bus, dinfo->unit);
 234            rs = true;
 235        }
 236    }
 237
 238    return rs;
 239}
 240
 241DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
 242{
 243    return drive_get(type,
 244                     drive_index_to_bus_id(type, index),
 245                     drive_index_to_unit_id(type, index));
 246}
 247
 248int drive_get_max_bus(BlockInterfaceType type)
 249{
 250    int max_bus;
 251    BlockBackend *blk;
 252    DriveInfo *dinfo;
 253
 254    max_bus = -1;
 255    for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
 256        dinfo = blk_legacy_dinfo(blk);
 257        if (dinfo && dinfo->type == type && dinfo->bus > max_bus) {
 258            max_bus = dinfo->bus;
 259        }
 260    }
 261    return max_bus;
 262}
 263
 264/* Get a block device.  This should only be used for single-drive devices
 265   (e.g. SD/Floppy/MTD).  Multi-disk devices (scsi/ide) should use the
 266   appropriate bus.  */
 267DriveInfo *drive_get_next(BlockInterfaceType type)
 268{
 269    static int next_block_unit[IF_COUNT];
 270
 271    return drive_get(type, 0, next_block_unit[type]++);
 272}
 273
 274static void bdrv_format_print(void *opaque, const char *name)
 275{
 276    error_printf(" %s", name);
 277}
 278
 279typedef struct {
 280    QEMUBH *bh;
 281    BlockDriverState *bs;
 282} BDRVPutRefBH;
 283
 284static void bdrv_put_ref_bh(void *opaque)
 285{
 286    BDRVPutRefBH *s = opaque;
 287
 288    bdrv_unref(s->bs);
 289    qemu_bh_delete(s->bh);
 290    g_free(s);
 291}
 292
 293/*
 294 * Release a BDS reference in a BH
 295 *
 296 * It is not safe to use bdrv_unref() from a callback function when the callers
 297 * still need the BlockDriverState.  In such cases we schedule a BH to release
 298 * the reference.
 299 */
 300static void bdrv_put_ref_bh_schedule(BlockDriverState *bs)
 301{
 302    BDRVPutRefBH *s;
 303
 304    s = g_new(BDRVPutRefBH, 1);
 305    s->bh = qemu_bh_new(bdrv_put_ref_bh, s);
 306    s->bs = bs;
 307    qemu_bh_schedule(s->bh);
 308}
 309
 310static int parse_block_error_action(const char *buf, bool is_read, Error **errp)
 311{
 312    if (!strcmp(buf, "ignore")) {
 313        return BLOCKDEV_ON_ERROR_IGNORE;
 314    } else if (!is_read && !strcmp(buf, "enospc")) {
 315        return BLOCKDEV_ON_ERROR_ENOSPC;
 316    } else if (!strcmp(buf, "stop")) {
 317        return BLOCKDEV_ON_ERROR_STOP;
 318    } else if (!strcmp(buf, "report")) {
 319        return BLOCKDEV_ON_ERROR_REPORT;
 320    } else {
 321        error_setg(errp, "'%s' invalid %s error action",
 322                   buf, is_read ? "read" : "write");
 323        return -1;
 324    }
 325}
 326
 327static bool check_throttle_config(ThrottleConfig *cfg, Error **errp)
 328{
 329    if (throttle_conflicting(cfg)) {
 330        error_setg(errp, "bps/iops/max total values and read/write values"
 331                         " cannot be used at the same time");
 332        return false;
 333    }
 334
 335    if (!throttle_is_valid(cfg)) {
 336        error_setg(errp, "bps/iops/maxs values must be 0 or greater");
 337        return false;
 338    }
 339
 340    return true;
 341}
 342
 343typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType;
 344
 345/* Takes the ownership of bs_opts */
 346static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
 347                                   Error **errp)
 348{
 349    const char *buf;
 350    int ro = 0;
 351    int bdrv_flags = 0;
 352    int on_read_error, on_write_error;
 353    BlockBackend *blk;
 354    BlockDriverState *bs;
 355    ThrottleConfig cfg;
 356    int snapshot = 0;
 357    bool copy_on_read;
 358    Error *error = NULL;
 359    QemuOpts *opts;
 360    const char *id;
 361    bool has_driver_specific_opts;
 362    BlockdevDetectZeroesOptions detect_zeroes;
 363    const char *throttling_group;
 364
 365    /* Check common options by copying from bs_opts to opts, all other options
 366     * stay in bs_opts for processing by bdrv_open(). */
 367    id = qdict_get_try_str(bs_opts, "id");
 368    opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
 369    if (error) {
 370        error_propagate(errp, error);
 371        goto err_no_opts;
 372    }
 373
 374    qemu_opts_absorb_qdict(opts, bs_opts, &error);
 375    if (error) {
 376        error_propagate(errp, error);
 377        goto early_err;
 378    }
 379
 380    if (id) {
 381        qdict_del(bs_opts, "id");
 382    }
 383
 384    has_driver_specific_opts = !!qdict_size(bs_opts);
 385
 386    /* extract parameters */
 387    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
 388    ro = qemu_opt_get_bool(opts, "read-only", 0);
 389    copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false);
 390
 391    if ((buf = qemu_opt_get(opts, "discard")) != NULL) {
 392        if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) {
 393            error_setg(errp, "invalid discard option");
 394            goto early_err;
 395        }
 396    }
 397
 398    if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, true)) {
 399        bdrv_flags |= BDRV_O_CACHE_WB;
 400    }
 401    if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_DIRECT, false)) {
 402        bdrv_flags |= BDRV_O_NOCACHE;
 403    }
 404    if (qemu_opt_get_bool(opts, BDRV_OPT_CACHE_NO_FLUSH, false)) {
 405        bdrv_flags |= BDRV_O_NO_FLUSH;
 406    }
 407
 408#ifdef CONFIG_LINUX_AIO
 409    if ((buf = qemu_opt_get(opts, "aio")) != NULL) {
 410        if (!strcmp(buf, "native")) {
 411            bdrv_flags |= BDRV_O_NATIVE_AIO;
 412        } else if (!strcmp(buf, "threads")) {
 413            /* this is the default */
 414        } else {
 415           error_setg(errp, "invalid aio option");
 416           goto early_err;
 417        }
 418    }
 419#endif
 420
 421    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
 422        if (is_help_option(buf)) {
 423            error_printf("Supported formats:");
 424            bdrv_iterate_format(bdrv_format_print, NULL);
 425            error_printf("\n");
 426            goto early_err;
 427        }
 428
 429        if (qdict_haskey(bs_opts, "driver")) {
 430            error_setg(errp, "Cannot specify both 'driver' and 'format'");
 431            goto early_err;
 432        }
 433        qdict_put(bs_opts, "driver", qstring_from_str(buf));
 434    }
 435
 436    /* disk I/O throttling */
 437    memset(&cfg, 0, sizeof(cfg));
 438    cfg.buckets[THROTTLE_BPS_TOTAL].avg =
 439        qemu_opt_get_number(opts, "throttling.bps-total", 0);
 440    cfg.buckets[THROTTLE_BPS_READ].avg  =
 441        qemu_opt_get_number(opts, "throttling.bps-read", 0);
 442    cfg.buckets[THROTTLE_BPS_WRITE].avg =
 443        qemu_opt_get_number(opts, "throttling.bps-write", 0);
 444    cfg.buckets[THROTTLE_OPS_TOTAL].avg =
 445        qemu_opt_get_number(opts, "throttling.iops-total", 0);
 446    cfg.buckets[THROTTLE_OPS_READ].avg =
 447        qemu_opt_get_number(opts, "throttling.iops-read", 0);
 448    cfg.buckets[THROTTLE_OPS_WRITE].avg =
 449        qemu_opt_get_number(opts, "throttling.iops-write", 0);
 450
 451    cfg.buckets[THROTTLE_BPS_TOTAL].max =
 452        qemu_opt_get_number(opts, "throttling.bps-total-max", 0);
 453    cfg.buckets[THROTTLE_BPS_READ].max  =
 454        qemu_opt_get_number(opts, "throttling.bps-read-max", 0);
 455    cfg.buckets[THROTTLE_BPS_WRITE].max =
 456        qemu_opt_get_number(opts, "throttling.bps-write-max", 0);
 457    cfg.buckets[THROTTLE_OPS_TOTAL].max =
 458        qemu_opt_get_number(opts, "throttling.iops-total-max", 0);
 459    cfg.buckets[THROTTLE_OPS_READ].max =
 460        qemu_opt_get_number(opts, "throttling.iops-read-max", 0);
 461    cfg.buckets[THROTTLE_OPS_WRITE].max =
 462        qemu_opt_get_number(opts, "throttling.iops-write-max", 0);
 463
 464    cfg.op_size = qemu_opt_get_number(opts, "throttling.iops-size", 0);
 465
 466    throttling_group = qemu_opt_get(opts, "throttling.group");
 467
 468    if (!check_throttle_config(&cfg, &error)) {
 469        error_propagate(errp, error);
 470        goto early_err;
 471    }
 472
 473    on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
 474    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
 475        on_write_error = parse_block_error_action(buf, 0, &error);
 476        if (error) {
 477            error_propagate(errp, error);
 478            goto early_err;
 479        }
 480    }
 481
 482    on_read_error = BLOCKDEV_ON_ERROR_REPORT;
 483    if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
 484        on_read_error = parse_block_error_action(buf, 1, &error);
 485        if (error) {
 486            error_propagate(errp, error);
 487            goto early_err;
 488        }
 489    }
 490
 491    detect_zeroes =
 492        qapi_enum_parse(BlockdevDetectZeroesOptions_lookup,
 493                        qemu_opt_get(opts, "detect-zeroes"),
 494                        BLOCKDEV_DETECT_ZEROES_OPTIONS_MAX,
 495                        BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
 496                        &error);
 497    if (error) {
 498        error_propagate(errp, error);
 499        goto early_err;
 500    }
 501
 502    if (detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP &&
 503        !(bdrv_flags & BDRV_O_UNMAP)) {
 504        error_setg(errp, "setting detect-zeroes to unmap is not allowed "
 505                         "without setting discard operation to unmap");
 506        goto early_err;
 507    }
 508
 509    /* init */
 510    if ((!file || !*file) && !has_driver_specific_opts) {
 511        blk = blk_new_with_bs(qemu_opts_id(opts), errp);
 512        if (!blk) {
 513            goto early_err;
 514        }
 515
 516        bs = blk_bs(blk);
 517        bs->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0;
 518        bs->read_only = ro;
 519
 520        QDECREF(bs_opts);
 521    } else {
 522        if (file && !*file) {
 523            file = NULL;
 524        }
 525
 526        if (snapshot) {
 527            /* always use cache=unsafe with snapshot */
 528            bdrv_flags &= ~BDRV_O_CACHE_MASK;
 529            bdrv_flags |= (BDRV_O_SNAPSHOT|BDRV_O_CACHE_WB|BDRV_O_NO_FLUSH);
 530        }
 531
 532        if (copy_on_read) {
 533            bdrv_flags |= BDRV_O_COPY_ON_READ;
 534        }
 535
 536        if (runstate_check(RUN_STATE_INMIGRATE)) {
 537            bdrv_flags |= BDRV_O_INCOMING;
 538        }
 539
 540        bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
 541
 542        blk = blk_new_open(qemu_opts_id(opts), file, NULL, bs_opts, bdrv_flags,
 543                           errp);
 544        if (!blk) {
 545            goto err_no_bs_opts;
 546        }
 547        bs = blk_bs(blk);
 548    }
 549
 550    bs->detect_zeroes = detect_zeroes;
 551
 552    bdrv_set_on_error(bs, on_read_error, on_write_error);
 553
 554    /* disk I/O throttling */
 555    if (throttle_enabled(&cfg)) {
 556        if (!throttling_group) {
 557            throttling_group = blk_name(blk);
 558        }
 559        bdrv_io_limits_enable(bs, throttling_group);
 560        bdrv_set_io_limits(bs, &cfg);
 561    }
 562
 563    if (bdrv_key_required(bs)) {
 564        autostart = 0;
 565    }
 566
 567err_no_bs_opts:
 568    qemu_opts_del(opts);
 569    return blk;
 570
 571early_err:
 572    qemu_opts_del(opts);
 573err_no_opts:
 574    QDECREF(bs_opts);
 575    return NULL;
 576}
 577
 578static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to,
 579                            Error **errp)
 580{
 581    const char *value;
 582
 583    value = qemu_opt_get(opts, from);
 584    if (value) {
 585        if (qemu_opt_find(opts, to)) {
 586            error_setg(errp, "'%s' and its alias '%s' can't be used at the "
 587                       "same time", to, from);
 588            return;
 589        }
 590    }
 591
 592    /* rename all items in opts */
 593    while ((value = qemu_opt_get(opts, from))) {
 594        qemu_opt_set(opts, to, value, &error_abort);
 595        qemu_opt_unset(opts, from);
 596    }
 597}
 598
 599QemuOptsList qemu_legacy_drive_opts = {
 600    .name = "drive",
 601    .head = QTAILQ_HEAD_INITIALIZER(qemu_legacy_drive_opts.head),
 602    .desc = {
 603        {
 604            .name = "bus",
 605            .type = QEMU_OPT_NUMBER,
 606            .help = "bus number",
 607        },{
 608            .name = "unit",
 609            .type = QEMU_OPT_NUMBER,
 610            .help = "unit number (i.e. lun for scsi)",
 611        },{
 612            .name = "index",
 613            .type = QEMU_OPT_NUMBER,
 614            .help = "index number",
 615        },{
 616            .name = "media",
 617            .type = QEMU_OPT_STRING,
 618            .help = "media type (disk, cdrom)",
 619        },{
 620            .name = "if",
 621            .type = QEMU_OPT_STRING,
 622            .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
 623        },{
 624            .name = "cyls",
 625            .type = QEMU_OPT_NUMBER,
 626            .help = "number of cylinders (ide disk geometry)",
 627        },{
 628            .name = "heads",
 629            .type = QEMU_OPT_NUMBER,
 630            .help = "number of heads (ide disk geometry)",
 631        },{
 632            .name = "secs",
 633            .type = QEMU_OPT_NUMBER,
 634            .help = "number of sectors (ide disk geometry)",
 635        },{
 636            .name = "trans",
 637            .type = QEMU_OPT_STRING,
 638            .help = "chs translation (auto, lba, none)",
 639        },{
 640            .name = "boot",
 641            .type = QEMU_OPT_BOOL,
 642            .help = "(deprecated, ignored)",
 643        },{
 644            .name = "addr",
 645            .type = QEMU_OPT_STRING,
 646            .help = "pci address (virtio only)",
 647        },{
 648            .name = "serial",
 649            .type = QEMU_OPT_STRING,
 650            .help = "disk serial number",
 651        },{
 652            .name = "file",
 653            .type = QEMU_OPT_STRING,
 654            .help = "file name",
 655        },
 656
 657        /* Options that are passed on, but have special semantics with -drive */
 658        {
 659            .name = "read-only",
 660            .type = QEMU_OPT_BOOL,
 661            .help = "open drive file as read-only",
 662        },{
 663            .name = "rerror",
 664            .type = QEMU_OPT_STRING,
 665            .help = "read error action",
 666        },{
 667            .name = "werror",
 668            .type = QEMU_OPT_STRING,
 669            .help = "write error action",
 670        },{
 671            .name = "copy-on-read",
 672            .type = QEMU_OPT_BOOL,
 673            .help = "copy read data from backing file into image file",
 674        },
 675
 676        { /* end of list */ }
 677    },
 678};
 679
 680DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
 681{
 682    const char *value;
 683    BlockBackend *blk;
 684    DriveInfo *dinfo = NULL;
 685    QDict *bs_opts;
 686    QemuOpts *legacy_opts;
 687    DriveMediaType media = MEDIA_DISK;
 688    BlockInterfaceType type;
 689    int cyls, heads, secs, translation;
 690    int max_devs, bus_id, unit_id, index;
 691    const char *devaddr;
 692    const char *werror, *rerror;
 693    bool read_only = false;
 694    bool copy_on_read;
 695    const char *serial;
 696    const char *filename;
 697    Error *local_err = NULL;
 698    int i;
 699
 700    /* Change legacy command line options into QMP ones */
 701    static const struct {
 702        const char *from;
 703        const char *to;
 704    } opt_renames[] = {
 705        { "iops",           "throttling.iops-total" },
 706        { "iops_rd",        "throttling.iops-read" },
 707        { "iops_wr",        "throttling.iops-write" },
 708
 709        { "bps",            "throttling.bps-total" },
 710        { "bps_rd",         "throttling.bps-read" },
 711        { "bps_wr",         "throttling.bps-write" },
 712
 713        { "iops_max",       "throttling.iops-total-max" },
 714        { "iops_rd_max",    "throttling.iops-read-max" },
 715        { "iops_wr_max",    "throttling.iops-write-max" },
 716
 717        { "bps_max",        "throttling.bps-total-max" },
 718        { "bps_rd_max",     "throttling.bps-read-max" },
 719        { "bps_wr_max",     "throttling.bps-write-max" },
 720
 721        { "iops_size",      "throttling.iops-size" },
 722
 723        { "group",          "throttling.group" },
 724
 725        { "readonly",       "read-only" },
 726    };
 727
 728    for (i = 0; i < ARRAY_SIZE(opt_renames); i++) {
 729        qemu_opt_rename(all_opts, opt_renames[i].from, opt_renames[i].to,
 730                        &local_err);
 731        if (local_err) {
 732            error_report_err(local_err);
 733            return NULL;
 734        }
 735    }
 736
 737    value = qemu_opt_get(all_opts, "cache");
 738    if (value) {
 739        int flags = 0;
 740
 741        if (bdrv_parse_cache_flags(value, &flags) != 0) {
 742            error_report("invalid cache option");
 743            return NULL;
 744        }
 745
 746        /* Specific options take precedence */
 747        if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_WB)) {
 748            qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_WB,
 749                              !!(flags & BDRV_O_CACHE_WB), &error_abort);
 750        }
 751        if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_DIRECT)) {
 752            qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_DIRECT,
 753                              !!(flags & BDRV_O_NOCACHE), &error_abort);
 754        }
 755        if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_NO_FLUSH)) {
 756            qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_NO_FLUSH,
 757                              !!(flags & BDRV_O_NO_FLUSH), &error_abort);
 758        }
 759        qemu_opt_unset(all_opts, "cache");
 760    }
 761
 762    /* Get a QDict for processing the options */
 763    bs_opts = qdict_new();
 764    qemu_opts_to_qdict(all_opts, bs_opts);
 765
 766    legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 0,
 767                                   &error_abort);
 768    qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
 769    if (local_err) {
 770        error_report_err(local_err);
 771        goto fail;
 772    }
 773
 774    /* Deprecated option boot=[on|off] */
 775    if (qemu_opt_get(legacy_opts, "boot") != NULL) {
 776        fprintf(stderr, "qemu-kvm: boot=on|off is deprecated and will be "
 777                "ignored. Future versions will reject this parameter. Please "
 778                "update your scripts.\n");
 779    }
 780
 781    /* Media type */
 782    value = qemu_opt_get(legacy_opts, "media");
 783    if (value) {
 784        if (!strcmp(value, "disk")) {
 785            media = MEDIA_DISK;
 786        } else if (!strcmp(value, "cdrom")) {
 787            media = MEDIA_CDROM;
 788            read_only = true;
 789        } else {
 790            error_report("'%s' invalid media", value);
 791            goto fail;
 792        }
 793    }
 794
 795    /* copy-on-read is disabled with a warning for read-only devices */
 796    read_only |= qemu_opt_get_bool(legacy_opts, "read-only", false);
 797    copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false);
 798
 799    if (read_only && copy_on_read) {
 800        error_report("warning: disabling copy-on-read on read-only drive");
 801        copy_on_read = false;
 802    }
 803
 804    qdict_put(bs_opts, "read-only",
 805              qstring_from_str(read_only ? "on" : "off"));
 806    qdict_put(bs_opts, "copy-on-read",
 807              qstring_from_str(copy_on_read ? "on" :"off"));
 808
 809    /* Controller type */
 810    value = qemu_opt_get(legacy_opts, "if");
 811    if (value) {
 812        for (type = 0;
 813             type < IF_COUNT && strcmp(value, if_name[type]);
 814             type++) {
 815        }
 816        if (type == IF_COUNT) {
 817            error_report("unsupported bus type '%s'", value);
 818            goto fail;
 819        }
 820    } else {
 821        type = block_default_type;
 822    }
 823
 824    /* Geometry */
 825    cyls  = qemu_opt_get_number(legacy_opts, "cyls", 0);
 826    heads = qemu_opt_get_number(legacy_opts, "heads", 0);
 827    secs  = qemu_opt_get_number(legacy_opts, "secs", 0);
 828
 829    if (cyls || heads || secs) {
 830        if (cyls < 1) {
 831            error_report("invalid physical cyls number");
 832            goto fail;
 833        }
 834        if (heads < 1) {
 835            error_report("invalid physical heads number");
 836            goto fail;
 837        }
 838        if (secs < 1) {
 839            error_report("invalid physical secs number");
 840            goto fail;
 841        }
 842    }
 843
 844    translation = BIOS_ATA_TRANSLATION_AUTO;
 845    value = qemu_opt_get(legacy_opts, "trans");
 846    if (value != NULL) {
 847        if (!cyls) {
 848            error_report("'%s' trans must be used with cyls, heads and secs",
 849                         value);
 850            goto fail;
 851        }
 852        if (!strcmp(value, "none")) {
 853            translation = BIOS_ATA_TRANSLATION_NONE;
 854        } else if (!strcmp(value, "lba")) {
 855            translation = BIOS_ATA_TRANSLATION_LBA;
 856        } else if (!strcmp(value, "large")) {
 857            translation = BIOS_ATA_TRANSLATION_LARGE;
 858        } else if (!strcmp(value, "rechs")) {
 859            translation = BIOS_ATA_TRANSLATION_RECHS;
 860        } else if (!strcmp(value, "auto")) {
 861            translation = BIOS_ATA_TRANSLATION_AUTO;
 862        } else {
 863            error_report("'%s' invalid translation type", value);
 864            goto fail;
 865        }
 866    }
 867
 868    if (media == MEDIA_CDROM) {
 869        if (cyls || secs || heads) {
 870            error_report("CHS can't be set with media=cdrom");
 871            goto fail;
 872        }
 873    }
 874
 875    /* Device address specified by bus/unit or index.
 876     * If none was specified, try to find the first free one. */
 877    bus_id  = qemu_opt_get_number(legacy_opts, "bus", 0);
 878    unit_id = qemu_opt_get_number(legacy_opts, "unit", -1);
 879    index   = qemu_opt_get_number(legacy_opts, "index", -1);
 880
 881    max_devs = if_max_devs[type];
 882
 883    if (index != -1) {
 884        if (bus_id != 0 || unit_id != -1) {
 885            error_report("index cannot be used with bus and unit");
 886            goto fail;
 887        }
 888        bus_id = drive_index_to_bus_id(type, index);
 889        unit_id = drive_index_to_unit_id(type, index);
 890    }
 891
 892    if (unit_id == -1) {
 893       unit_id = 0;
 894       while (drive_get(type, bus_id, unit_id) != NULL) {
 895           unit_id++;
 896           if (max_devs && unit_id >= max_devs) {
 897               unit_id -= max_devs;
 898               bus_id++;
 899           }
 900       }
 901    }
 902
 903    if (max_devs && unit_id >= max_devs) {
 904        error_report("unit %d too big (max is %d)", unit_id, max_devs - 1);
 905        goto fail;
 906    }
 907
 908    if (drive_get(type, bus_id, unit_id) != NULL) {
 909        error_report("drive with bus=%d, unit=%d (index=%d) exists",
 910                     bus_id, unit_id, index);
 911        goto fail;
 912    }
 913
 914    /* Serial number */
 915    serial = qemu_opt_get(legacy_opts, "serial");
 916
 917    /* no id supplied -> create one */
 918    if (qemu_opts_id(all_opts) == NULL) {
 919        char *new_id;
 920        const char *mediastr = "";
 921        if (type == IF_IDE || type == IF_SCSI) {
 922            mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
 923        }
 924        if (max_devs) {
 925            new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id,
 926                                     mediastr, unit_id);
 927        } else {
 928            new_id = g_strdup_printf("%s%s%i", if_name[type],
 929                                     mediastr, unit_id);
 930        }
 931        qdict_put(bs_opts, "id", qstring_from_str(new_id));
 932        g_free(new_id);
 933    }
 934
 935    /* Add virtio block device */
 936    devaddr = qemu_opt_get(legacy_opts, "addr");
 937    if (devaddr && type != IF_VIRTIO) {
 938        error_report("addr is not supported by this bus type");
 939        goto fail;
 940    }
 941
 942    if (type == IF_VIRTIO) {
 943        QemuOpts *devopts;
 944        devopts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
 945                                   &error_abort);
 946        if (arch_type == QEMU_ARCH_S390X) {
 947            qemu_opt_set(devopts, "driver", "virtio-blk-ccw", &error_abort);
 948        } else {
 949            qemu_opt_set(devopts, "driver", "virtio-blk-pci", &error_abort);
 950        }
 951        qemu_opt_set(devopts, "drive", qdict_get_str(bs_opts, "id"),
 952                     &error_abort);
 953        if (devaddr) {
 954            qemu_opt_set(devopts, "addr", devaddr, &error_abort);
 955        }
 956    }
 957
 958    filename = qemu_opt_get(legacy_opts, "file");
 959
 960    /* Check werror/rerror compatibility with if=... */
 961    werror = qemu_opt_get(legacy_opts, "werror");
 962    if (werror != NULL) {
 963        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO &&
 964            type != IF_NONE) {
 965            error_report("werror is not supported by this bus type");
 966            goto fail;
 967        }
 968        qdict_put(bs_opts, "werror", qstring_from_str(werror));
 969    }
 970
 971    rerror = qemu_opt_get(legacy_opts, "rerror");
 972    if (rerror != NULL) {
 973        if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI &&
 974            type != IF_NONE) {
 975            error_report("rerror is not supported by this bus type");
 976            goto fail;
 977        }
 978        qdict_put(bs_opts, "rerror", qstring_from_str(rerror));
 979    }
 980
 981    /* Actual block device init: Functionality shared with blockdev-add */
 982    blk = blockdev_init(filename, bs_opts, &local_err);
 983    bs_opts = NULL;
 984    if (!blk) {
 985        if (local_err) {
 986            error_report_err(local_err);
 987        }
 988        goto fail;
 989    } else {
 990        assert(!local_err);
 991    }
 992
 993    /* Create legacy DriveInfo */
 994    dinfo = g_malloc0(sizeof(*dinfo));
 995    dinfo->opts = all_opts;
 996
 997    dinfo->cyls = cyls;
 998    dinfo->heads = heads;
 999    dinfo->secs = secs;
1000    dinfo->trans = translation;
1001
1002    dinfo->type = type;
1003    dinfo->bus = bus_id;
1004    dinfo->unit = unit_id;
1005    dinfo->devaddr = devaddr;
1006    dinfo->serial = g_strdup(serial);
1007
1008    blk_set_legacy_dinfo(blk, dinfo);
1009
1010    switch(type) {
1011    case IF_IDE:
1012    case IF_SCSI:
1013    case IF_XEN:
1014    case IF_NONE:
1015        dinfo->media_cd = media == MEDIA_CDROM;
1016        break;
1017    default:
1018        break;
1019    }
1020
1021fail:
1022    qemu_opts_del(legacy_opts);
1023    QDECREF(bs_opts);
1024    return dinfo;
1025}
1026
1027void hmp_commit(Monitor *mon, const QDict *qdict)
1028{
1029    const char *device = qdict_get_str(qdict, "device");
1030    BlockBackend *blk;
1031    int ret;
1032
1033    if (!strcmp(device, "all")) {
1034        ret = bdrv_commit_all();
1035    } else {
1036        blk = blk_by_name(device);
1037        if (!blk) {
1038            monitor_printf(mon, "Device '%s' not found\n", device);
1039            return;
1040        }
1041        ret = bdrv_commit(blk_bs(blk));
1042    }
1043    if (ret < 0) {
1044        monitor_printf(mon, "'commit' error for '%s': %s\n", device,
1045                       strerror(-ret));
1046    }
1047}
1048
1049static void blockdev_do_action(int kind, void *data, Error **errp)
1050{
1051    TransactionAction action;
1052    TransactionActionList list;
1053
1054    action.kind = kind;
1055    action.data = data;
1056    list.value = &action;
1057    list.next = NULL;
1058    qmp_transaction(&list, errp);
1059}
1060
1061void qmp_blockdev_snapshot_sync(bool has_device, const char *device,
1062                                bool has_node_name, const char *node_name,
1063                                const char *snapshot_file,
1064                                bool has_snapshot_node_name,
1065                                const char *snapshot_node_name,
1066                                bool has_format, const char *format,
1067                                bool has_mode, NewImageMode mode, Error **errp)
1068{
1069    BlockdevSnapshot snapshot = {
1070        .has_device = has_device,
1071        .device = (char *) device,
1072        .has_node_name = has_node_name,
1073        .node_name = (char *) node_name,
1074        .snapshot_file = (char *) snapshot_file,
1075        .has_snapshot_node_name = has_snapshot_node_name,
1076        .snapshot_node_name = (char *) snapshot_node_name,
1077        .has_format = has_format,
1078        .format = (char *) format,
1079        .has_mode = has_mode,
1080        .mode = mode,
1081    };
1082    blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
1083                       &snapshot, errp);
1084}
1085
1086void qmp_blockdev_snapshot_internal_sync(const char *device,
1087                                         const char *name,
1088                                         Error **errp)
1089{
1090    BlockdevSnapshotInternal snapshot = {
1091        .device = (char *) device,
1092        .name = (char *) name
1093    };
1094
1095    blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC,
1096                       &snapshot, errp);
1097}
1098
1099SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
1100                                                         bool has_id,
1101                                                         const char *id,
1102                                                         bool has_name,
1103                                                         const char *name,
1104                                                         Error **errp)
1105{
1106    BlockDriverState *bs;
1107    BlockBackend *blk;
1108    AioContext *aio_context;
1109    QEMUSnapshotInfo sn;
1110    Error *local_err = NULL;
1111    SnapshotInfo *info = NULL;
1112    int ret;
1113
1114    blk = blk_by_name(device);
1115    if (!blk) {
1116        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1117                  "Device '%s' not found", device);
1118        return NULL;
1119    }
1120    bs = blk_bs(blk);
1121
1122    if (!has_id) {
1123        id = NULL;
1124    }
1125
1126    if (!has_name) {
1127        name = NULL;
1128    }
1129
1130    if (!id && !name) {
1131        error_setg(errp, "Name or id must be provided");
1132        return NULL;
1133    }
1134
1135    aio_context = bdrv_get_aio_context(bs);
1136    aio_context_acquire(aio_context);
1137
1138    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE, errp)) {
1139        goto out_aio_context;
1140    }
1141
1142    ret = bdrv_snapshot_find_by_id_and_name(bs, id, name, &sn, &local_err);
1143    if (local_err) {
1144        error_propagate(errp, local_err);
1145        goto out_aio_context;
1146    }
1147    if (!ret) {
1148        error_setg(errp,
1149                   "Snapshot with id '%s' and name '%s' does not exist on "
1150                   "device '%s'",
1151                   STR_OR_NULL(id), STR_OR_NULL(name), device);
1152        goto out_aio_context;
1153    }
1154
1155    bdrv_snapshot_delete(bs, id, name, &local_err);
1156    if (local_err) {
1157        error_propagate(errp, local_err);
1158        goto out_aio_context;
1159    }
1160
1161    aio_context_release(aio_context);
1162
1163    info = g_new0(SnapshotInfo, 1);
1164    info->id = g_strdup(sn.id_str);
1165    info->name = g_strdup(sn.name);
1166    info->date_nsec = sn.date_nsec;
1167    info->date_sec = sn.date_sec;
1168    info->vm_state_size = sn.vm_state_size;
1169    info->vm_clock_nsec = sn.vm_clock_nsec % 1000000000;
1170    info->vm_clock_sec = sn.vm_clock_nsec / 1000000000;
1171
1172    return info;
1173
1174out_aio_context:
1175    aio_context_release(aio_context);
1176    return NULL;
1177}
1178
1179/**
1180 * block_dirty_bitmap_lookup:
1181 * Return a dirty bitmap (if present), after validating
1182 * the node reference and bitmap names.
1183 *
1184 * @node: The name of the BDS node to search for bitmaps
1185 * @name: The name of the bitmap to search for
1186 * @pbs: Output pointer for BDS lookup, if desired. Can be NULL.
1187 * @paio: Output pointer for aio_context acquisition, if desired. Can be NULL.
1188 * @errp: Output pointer for error information. Can be NULL.
1189 *
1190 * @return: A bitmap object on success, or NULL on failure.
1191 */
1192static BdrvDirtyBitmap *block_dirty_bitmap_lookup(const char *node,
1193                                                  const char *name,
1194                                                  BlockDriverState **pbs,
1195                                                  AioContext **paio,
1196                                                  Error **errp)
1197{
1198    BlockDriverState *bs;
1199    BdrvDirtyBitmap *bitmap;
1200    AioContext *aio_context;
1201
1202    if (!node) {
1203        error_setg(errp, "Node cannot be NULL");
1204        return NULL;
1205    }
1206    if (!name) {
1207        error_setg(errp, "Bitmap name cannot be NULL");
1208        return NULL;
1209    }
1210    bs = bdrv_lookup_bs(node, node, NULL);
1211    if (!bs) {
1212        error_setg(errp, "Node '%s' not found", node);
1213        return NULL;
1214    }
1215
1216    aio_context = bdrv_get_aio_context(bs);
1217    aio_context_acquire(aio_context);
1218
1219    bitmap = bdrv_find_dirty_bitmap(bs, name);
1220    if (!bitmap) {
1221        error_setg(errp, "Dirty bitmap '%s' not found", name);
1222        goto fail;
1223    }
1224
1225    if (pbs) {
1226        *pbs = bs;
1227    }
1228    if (paio) {
1229        *paio = aio_context;
1230    } else {
1231        aio_context_release(aio_context);
1232    }
1233
1234    return bitmap;
1235
1236 fail:
1237    aio_context_release(aio_context);
1238    return NULL;
1239}
1240
1241/* New and old BlockDriverState structs for atomic group operations */
1242
1243typedef struct BlkTransactionState BlkTransactionState;
1244
1245/* Only prepare() may fail. In a single transaction, only one of commit() or
1246   abort() will be called, clean() will always be called if it present. */
1247typedef struct BdrvActionOps {
1248    /* Size of state struct, in bytes. */
1249    size_t instance_size;
1250    /* Prepare the work, must NOT be NULL. */
1251    void (*prepare)(BlkTransactionState *common, Error **errp);
1252    /* Commit the changes, can be NULL. */
1253    void (*commit)(BlkTransactionState *common);
1254    /* Abort the changes on fail, can be NULL. */
1255    void (*abort)(BlkTransactionState *common);
1256    /* Clean up resource in the end, can be NULL. */
1257    void (*clean)(BlkTransactionState *common);
1258} BdrvActionOps;
1259
1260/*
1261 * This structure must be arranged as first member in child type, assuming
1262 * that compiler will also arrange it to the same address with parent instance.
1263 * Later it will be used in free().
1264 */
1265struct BlkTransactionState {
1266    TransactionAction *action;
1267    const BdrvActionOps *ops;
1268    QSIMPLEQ_ENTRY(BlkTransactionState) entry;
1269};
1270
1271/* internal snapshot private data */
1272typedef struct InternalSnapshotState {
1273    BlkTransactionState common;
1274    BlockDriverState *bs;
1275    AioContext *aio_context;
1276    QEMUSnapshotInfo sn;
1277} InternalSnapshotState;
1278
1279static void internal_snapshot_prepare(BlkTransactionState *common,
1280                                      Error **errp)
1281{
1282    Error *local_err = NULL;
1283    const char *device;
1284    const char *name;
1285    BlockBackend *blk;
1286    BlockDriverState *bs;
1287    QEMUSnapshotInfo old_sn, *sn;
1288    bool ret;
1289    qemu_timeval tv;
1290    BlockdevSnapshotInternal *internal;
1291    InternalSnapshotState *state;
1292    int ret1;
1293
1294    g_assert(common->action->kind ==
1295             TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC);
1296    internal = common->action->blockdev_snapshot_internal_sync;
1297    state = DO_UPCAST(InternalSnapshotState, common, common);
1298
1299    /* 1. parse input */
1300    device = internal->device;
1301    name = internal->name;
1302
1303    /* 2. check for validation */
1304    blk = blk_by_name(device);
1305    if (!blk) {
1306        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1307                  "Device '%s' not found", device);
1308        return;
1309    }
1310    bs = blk_bs(blk);
1311
1312    /* AioContext is released in .clean() */
1313    state->aio_context = bdrv_get_aio_context(bs);
1314    aio_context_acquire(state->aio_context);
1315
1316    if (!bdrv_is_inserted(bs)) {
1317        error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
1318        return;
1319    }
1320
1321    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, errp)) {
1322        return;
1323    }
1324
1325    if (bdrv_is_read_only(bs)) {
1326        error_setg(errp, "Device '%s' is read only", device);
1327        return;
1328    }
1329
1330    if (!bdrv_can_snapshot(bs)) {
1331        error_setg(errp, "Block format '%s' used by device '%s' "
1332                   "does not support internal snapshots",
1333                   bs->drv->format_name, device);
1334        return;
1335    }
1336
1337    if (!strlen(name)) {
1338        error_setg(errp, "Name is empty");
1339        return;
1340    }
1341
1342    /* check whether a snapshot with name exist */
1343    ret = bdrv_snapshot_find_by_id_and_name(bs, NULL, name, &old_sn,
1344                                            &local_err);
1345    if (local_err) {
1346        error_propagate(errp, local_err);
1347        return;
1348    } else if (ret) {
1349        error_setg(errp,
1350                   "Snapshot with name '%s' already exists on device '%s'",
1351                   name, device);
1352        return;
1353    }
1354
1355    /* 3. take the snapshot */
1356    sn = &state->sn;
1357    pstrcpy(sn->name, sizeof(sn->name), name);
1358    qemu_gettimeofday(&tv);
1359    sn->date_sec = tv.tv_sec;
1360    sn->date_nsec = tv.tv_usec * 1000;
1361    sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
1362
1363    ret1 = bdrv_snapshot_create(bs, sn);
1364    if (ret1 < 0) {
1365        error_setg_errno(errp, -ret1,
1366                         "Failed to create snapshot '%s' on device '%s'",
1367                         name, device);
1368        return;
1369    }
1370
1371    /* 4. succeed, mark a snapshot is created */
1372    state->bs = bs;
1373}
1374
1375static void internal_snapshot_abort(BlkTransactionState *common)
1376{
1377    InternalSnapshotState *state =
1378                             DO_UPCAST(InternalSnapshotState, common, common);
1379    BlockDriverState *bs = state->bs;
1380    QEMUSnapshotInfo *sn = &state->sn;
1381    Error *local_error = NULL;
1382
1383    if (!bs) {
1384        return;
1385    }
1386
1387    if (bdrv_snapshot_delete(bs, sn->id_str, sn->name, &local_error) < 0) {
1388        error_report("Failed to delete snapshot with id '%s' and name '%s' on "
1389                     "device '%s' in abort: %s",
1390                     sn->id_str,
1391                     sn->name,
1392                     bdrv_get_device_name(bs),
1393                     error_get_pretty(local_error));
1394        error_free(local_error);
1395    }
1396}
1397
1398static void internal_snapshot_clean(BlkTransactionState *common)
1399{
1400    InternalSnapshotState *state = DO_UPCAST(InternalSnapshotState,
1401                                             common, common);
1402
1403    if (state->aio_context) {
1404        aio_context_release(state->aio_context);
1405    }
1406}
1407
1408/* external snapshot private data */
1409typedef struct ExternalSnapshotState {
1410    BlkTransactionState common;
1411    BlockDriverState *old_bs;
1412    BlockDriverState *new_bs;
1413    AioContext *aio_context;
1414} ExternalSnapshotState;
1415
1416static void external_snapshot_prepare(BlkTransactionState *common,
1417                                      Error **errp)
1418{
1419    BlockDriver *drv;
1420    int flags, ret;
1421    QDict *options = NULL;
1422    Error *local_err = NULL;
1423    bool has_device = false;
1424    const char *device;
1425    bool has_node_name = false;
1426    const char *node_name;
1427    bool has_snapshot_node_name = false;
1428    const char *snapshot_node_name;
1429    const char *new_image_file;
1430    const char *format = "qcow2";
1431    enum NewImageMode mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
1432    ExternalSnapshotState *state =
1433                             DO_UPCAST(ExternalSnapshotState, common, common);
1434    TransactionAction *action = common->action;
1435
1436    /* get parameters */
1437    g_assert(action->kind == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC);
1438
1439    has_device = action->blockdev_snapshot_sync->has_device;
1440    device = action->blockdev_snapshot_sync->device;
1441    has_node_name = action->blockdev_snapshot_sync->has_node_name;
1442    node_name = action->blockdev_snapshot_sync->node_name;
1443    has_snapshot_node_name =
1444        action->blockdev_snapshot_sync->has_snapshot_node_name;
1445    snapshot_node_name = action->blockdev_snapshot_sync->snapshot_node_name;
1446
1447    new_image_file = action->blockdev_snapshot_sync->snapshot_file;
1448    if (action->blockdev_snapshot_sync->has_format) {
1449        format = action->blockdev_snapshot_sync->format;
1450    }
1451    if (action->blockdev_snapshot_sync->has_mode) {
1452        mode = action->blockdev_snapshot_sync->mode;
1453    }
1454
1455    /* start processing */
1456    drv = bdrv_find_format(format);
1457    if (!drv) {
1458        error_setg(errp, QERR_INVALID_BLOCK_FORMAT, format);
1459        return;
1460    }
1461
1462    state->old_bs = bdrv_lookup_bs(has_device ? device : NULL,
1463                                   has_node_name ? node_name : NULL,
1464                                   &local_err);
1465    if (local_err) {
1466        error_propagate(errp, local_err);
1467        return;
1468    }
1469
1470    if (has_node_name && !has_snapshot_node_name) {
1471        error_setg(errp, "New snapshot node name missing");
1472        return;
1473    }
1474
1475    if (has_snapshot_node_name && bdrv_find_node(snapshot_node_name)) {
1476        error_setg(errp, "New snapshot node name already existing");
1477        return;
1478    }
1479
1480    /* Acquire AioContext now so any threads operating on old_bs stop */
1481    state->aio_context = bdrv_get_aio_context(state->old_bs);
1482    aio_context_acquire(state->aio_context);
1483
1484    if (!bdrv_is_inserted(state->old_bs)) {
1485        error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
1486        return;
1487    }
1488
1489    if (bdrv_op_is_blocked(state->old_bs,
1490                           BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT, errp)) {
1491        return;
1492    }
1493
1494    if (!bdrv_is_read_only(state->old_bs)) {
1495        if (bdrv_flush(state->old_bs)) {
1496            error_setg(errp, QERR_IO_ERROR);
1497            return;
1498        }
1499    }
1500
1501    if (!bdrv_is_first_non_filter(state->old_bs)) {
1502        error_setg(errp, QERR_FEATURE_DISABLED, "snapshot");
1503        return;
1504    }
1505
1506    flags = state->old_bs->open_flags;
1507
1508    /* create new image w/backing file */
1509    if (mode != NEW_IMAGE_MODE_EXISTING) {
1510        bdrv_img_create(new_image_file, format,
1511                        state->old_bs->filename,
1512                        state->old_bs->drv->format_name,
1513                        NULL, -1, flags, &local_err, false);
1514        if (local_err) {
1515            error_propagate(errp, local_err);
1516            return;
1517        }
1518    }
1519
1520    if (has_snapshot_node_name) {
1521        options = qdict_new();
1522        qdict_put(options, "node-name",
1523                  qstring_from_str(snapshot_node_name));
1524    }
1525
1526    /* TODO Inherit bs->options or only take explicit options with an
1527     * extended QMP command? */
1528    assert(state->new_bs == NULL);
1529    ret = bdrv_open(&state->new_bs, new_image_file, NULL, options,
1530                    flags | BDRV_O_NO_BACKING, drv, &local_err);
1531    /* We will manually add the backing_hd field to the bs later */
1532    if (ret != 0) {
1533        error_propagate(errp, local_err);
1534    }
1535}
1536
1537static void external_snapshot_commit(BlkTransactionState *common)
1538{
1539    ExternalSnapshotState *state =
1540                             DO_UPCAST(ExternalSnapshotState, common, common);
1541
1542    bdrv_set_aio_context(state->new_bs, state->aio_context);
1543
1544    /* This removes our old bs and adds the new bs */
1545    bdrv_append(state->new_bs, state->old_bs);
1546    /* We don't need (or want) to use the transactional
1547     * bdrv_reopen_multiple() across all the entries at once, because we
1548     * don't want to abort all of them if one of them fails the reopen */
1549    bdrv_reopen(state->new_bs, state->new_bs->open_flags & ~BDRV_O_RDWR,
1550                NULL);
1551
1552    aio_context_release(state->aio_context);
1553}
1554
1555static void external_snapshot_abort(BlkTransactionState *common)
1556{
1557    ExternalSnapshotState *state =
1558                             DO_UPCAST(ExternalSnapshotState, common, common);
1559    if (state->new_bs) {
1560        bdrv_unref(state->new_bs);
1561    }
1562    if (state->aio_context) {
1563        aio_context_release(state->aio_context);
1564    }
1565}
1566
1567typedef struct DriveBackupState {
1568    BlkTransactionState common;
1569    BlockDriverState *bs;
1570    AioContext *aio_context;
1571    BlockJob *job;
1572} DriveBackupState;
1573
1574static void drive_backup_prepare(BlkTransactionState *common, Error **errp)
1575{
1576    DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
1577    BlockDriverState *bs;
1578    BlockBackend *blk;
1579    DriveBackup *backup;
1580    Error *local_err = NULL;
1581
1582    assert(common->action->kind == TRANSACTION_ACTION_KIND_DRIVE_BACKUP);
1583    backup = common->action->drive_backup;
1584
1585    blk = blk_by_name(backup->device);
1586    if (!blk) {
1587        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1588                  "Device '%s' not found", backup->device);
1589        return;
1590    }
1591    bs = blk_bs(blk);
1592
1593    /* AioContext is released in .clean() */
1594    state->aio_context = bdrv_get_aio_context(bs);
1595    aio_context_acquire(state->aio_context);
1596
1597    qmp_drive_backup(backup->device, backup->target,
1598                     backup->has_format, backup->format,
1599                     backup->sync,
1600                     backup->has_mode, backup->mode,
1601                     backup->has_speed, backup->speed,
1602                     backup->has_bitmap, backup->bitmap,
1603                     backup->has_on_source_error, backup->on_source_error,
1604                     backup->has_on_target_error, backup->on_target_error,
1605                     &local_err);
1606    if (local_err) {
1607        error_propagate(errp, local_err);
1608        return;
1609    }
1610
1611    state->bs = bs;
1612    state->job = state->bs->job;
1613}
1614
1615static void drive_backup_abort(BlkTransactionState *common)
1616{
1617    DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
1618    BlockDriverState *bs = state->bs;
1619
1620    /* Only cancel if it's the job we started */
1621    if (bs && bs->job && bs->job == state->job) {
1622        block_job_cancel_sync(bs->job);
1623    }
1624}
1625
1626static void drive_backup_clean(BlkTransactionState *common)
1627{
1628    DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
1629
1630    if (state->aio_context) {
1631        aio_context_release(state->aio_context);
1632    }
1633}
1634
1635typedef struct BlockdevBackupState {
1636    BlkTransactionState common;
1637    BlockDriverState *bs;
1638    BlockJob *job;
1639    AioContext *aio_context;
1640} BlockdevBackupState;
1641
1642static void blockdev_backup_prepare(BlkTransactionState *common, Error **errp)
1643{
1644    BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
1645    BlockdevBackup *backup;
1646    BlockDriverState *bs, *target;
1647    BlockBackend *blk;
1648    Error *local_err = NULL;
1649
1650    assert(common->action->kind == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP);
1651    backup = common->action->blockdev_backup;
1652
1653    blk = blk_by_name(backup->device);
1654    if (!blk) {
1655        error_setg(errp, "Device '%s' not found", backup->device);
1656        return;
1657    }
1658    bs = blk_bs(blk);
1659
1660    blk = blk_by_name(backup->target);
1661    if (!blk) {
1662        error_setg(errp, "Device '%s' not found", backup->target);
1663        return;
1664    }
1665    target = blk_bs(blk);
1666
1667    /* AioContext is released in .clean() */
1668    state->aio_context = bdrv_get_aio_context(bs);
1669    if (state->aio_context != bdrv_get_aio_context(target)) {
1670        state->aio_context = NULL;
1671        error_setg(errp, "Backup between two IO threads is not implemented");
1672        return;
1673    }
1674    aio_context_acquire(state->aio_context);
1675
1676    qmp_blockdev_backup(backup->device, backup->target,
1677                        backup->sync,
1678                        backup->has_speed, backup->speed,
1679                        backup->has_on_source_error, backup->on_source_error,
1680                        backup->has_on_target_error, backup->on_target_error,
1681                        &local_err);
1682    if (local_err) {
1683        error_propagate(errp, local_err);
1684        return;
1685    }
1686
1687    state->bs = bs;
1688    state->job = state->bs->job;
1689}
1690
1691static void blockdev_backup_abort(BlkTransactionState *common)
1692{
1693    BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
1694    BlockDriverState *bs = state->bs;
1695
1696    /* Only cancel if it's the job we started */
1697    if (bs && bs->job && bs->job == state->job) {
1698        block_job_cancel_sync(bs->job);
1699    }
1700}
1701
1702static void blockdev_backup_clean(BlkTransactionState *common)
1703{
1704    BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
1705
1706    if (state->aio_context) {
1707        aio_context_release(state->aio_context);
1708    }
1709}
1710
1711static void abort_prepare(BlkTransactionState *common, Error **errp)
1712{
1713    error_setg(errp, "Transaction aborted using Abort action");
1714}
1715
1716static void abort_commit(BlkTransactionState *common)
1717{
1718    g_assert_not_reached(); /* this action never succeeds */
1719}
1720
1721static const BdrvActionOps actions[] = {
1722    [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = {
1723        .instance_size = sizeof(ExternalSnapshotState),
1724        .prepare  = external_snapshot_prepare,
1725        .commit   = external_snapshot_commit,
1726        .abort = external_snapshot_abort,
1727    },
1728    [TRANSACTION_ACTION_KIND_DRIVE_BACKUP] = {
1729        .instance_size = sizeof(DriveBackupState),
1730        .prepare = drive_backup_prepare,
1731        .abort = drive_backup_abort,
1732        .clean = drive_backup_clean,
1733    },
1734    [TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP] = {
1735        .instance_size = sizeof(BlockdevBackupState),
1736        .prepare = blockdev_backup_prepare,
1737        .abort = blockdev_backup_abort,
1738        .clean = blockdev_backup_clean,
1739    },
1740    [TRANSACTION_ACTION_KIND_ABORT] = {
1741        .instance_size = sizeof(BlkTransactionState),
1742        .prepare = abort_prepare,
1743        .commit = abort_commit,
1744    },
1745    [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC] = {
1746        .instance_size = sizeof(InternalSnapshotState),
1747        .prepare  = internal_snapshot_prepare,
1748        .abort = internal_snapshot_abort,
1749        .clean = internal_snapshot_clean,
1750    },
1751};
1752
1753/*
1754 * 'Atomic' group operations.  The operations are performed as a set, and if
1755 * any fail then we roll back all operations in the group.
1756 */
1757void qmp_transaction(TransactionActionList *dev_list, Error **errp)
1758{
1759    TransactionActionList *dev_entry = dev_list;
1760    BlkTransactionState *state, *next;
1761    Error *local_err = NULL;
1762
1763    QSIMPLEQ_HEAD(snap_bdrv_states, BlkTransactionState) snap_bdrv_states;
1764    QSIMPLEQ_INIT(&snap_bdrv_states);
1765
1766    /* drain all i/o before any operations */
1767    bdrv_drain_all();
1768
1769    /* We don't do anything in this loop that commits us to the operations */
1770    while (NULL != dev_entry) {
1771        TransactionAction *dev_info = NULL;
1772        const BdrvActionOps *ops;
1773
1774        dev_info = dev_entry->value;
1775        dev_entry = dev_entry->next;
1776
1777        assert(dev_info->kind < ARRAY_SIZE(actions));
1778
1779        ops = &actions[dev_info->kind];
1780        assert(ops->instance_size > 0);
1781
1782        state = g_malloc0(ops->instance_size);
1783        state->ops = ops;
1784        state->action = dev_info;
1785        QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
1786
1787        state->ops->prepare(state, &local_err);
1788        if (local_err) {
1789            error_propagate(errp, local_err);
1790            goto delete_and_fail;
1791        }
1792    }
1793
1794    QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
1795        if (state->ops->commit) {
1796            state->ops->commit(state);
1797        }
1798    }
1799
1800    /* success */
1801    goto exit;
1802
1803delete_and_fail:
1804    /* failure, and it is all-or-none; roll back all operations */
1805    QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
1806        if (state->ops->abort) {
1807            state->ops->abort(state);
1808        }
1809    }
1810exit:
1811    QSIMPLEQ_FOREACH_SAFE(state, &snap_bdrv_states, entry, next) {
1812        if (state->ops->clean) {
1813            state->ops->clean(state);
1814        }
1815        g_free(state);
1816    }
1817}
1818
1819
1820static void eject_device(BlockBackend *blk, int force, Error **errp)
1821{
1822    BlockDriverState *bs = blk_bs(blk);
1823    AioContext *aio_context;
1824
1825    aio_context = bdrv_get_aio_context(bs);
1826    aio_context_acquire(aio_context);
1827
1828    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_EJECT, errp)) {
1829        goto out;
1830    }
1831    if (!blk_dev_has_removable_media(blk)) {
1832        error_setg(errp, "Device '%s' is not removable",
1833                   bdrv_get_device_name(bs));
1834        goto out;
1835    }
1836
1837    if (blk_dev_is_medium_locked(blk) && !blk_dev_is_tray_open(blk)) {
1838        blk_dev_eject_request(blk, force);
1839        if (!force) {
1840            error_setg(errp, "Device '%s' is locked",
1841                       bdrv_get_device_name(bs));
1842            goto out;
1843        }
1844    }
1845
1846    bdrv_close(bs);
1847
1848out:
1849    aio_context_release(aio_context);
1850}
1851
1852void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
1853{
1854    BlockBackend *blk;
1855
1856    blk = blk_by_name(device);
1857    if (!blk) {
1858        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1859                  "Device '%s' not found", device);
1860        return;
1861    }
1862
1863    eject_device(blk, force, errp);
1864}
1865
1866void qmp_block_passwd(bool has_device, const char *device,
1867                      bool has_node_name, const char *node_name,
1868                      const char *password, Error **errp)
1869{
1870    Error *local_err = NULL;
1871    BlockDriverState *bs;
1872    AioContext *aio_context;
1873
1874    bs = bdrv_lookup_bs(has_device ? device : NULL,
1875                        has_node_name ? node_name : NULL,
1876                        &local_err);
1877    if (local_err) {
1878        error_propagate(errp, local_err);
1879        return;
1880    }
1881
1882    aio_context = bdrv_get_aio_context(bs);
1883    aio_context_acquire(aio_context);
1884
1885    bdrv_add_key(bs, password, errp);
1886
1887    aio_context_release(aio_context);
1888}
1889
1890/* Assumes AioContext is held */
1891static void qmp_bdrv_open_encrypted(BlockDriverState *bs, const char *filename,
1892                                    int bdrv_flags, BlockDriver *drv,
1893                                    const char *password, Error **errp)
1894{
1895    Error *local_err = NULL;
1896    int ret;
1897
1898    ret = bdrv_open(&bs, filename, NULL, NULL, bdrv_flags, drv, &local_err);
1899    if (ret < 0) {
1900        error_propagate(errp, local_err);
1901        return;
1902    }
1903
1904    bdrv_add_key(bs, password, errp);
1905}
1906
1907void qmp_change_blockdev(const char *device, const char *filename,
1908                         const char *format, Error **errp)
1909{
1910    BlockBackend *blk;
1911    BlockDriverState *bs;
1912    AioContext *aio_context;
1913    BlockDriver *drv = NULL;
1914    int bdrv_flags;
1915    Error *err = NULL;
1916
1917    blk = blk_by_name(device);
1918    if (!blk) {
1919        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1920                  "Device '%s' not found", device);
1921        return;
1922    }
1923    bs = blk_bs(blk);
1924
1925    aio_context = bdrv_get_aio_context(bs);
1926    aio_context_acquire(aio_context);
1927
1928    if (format) {
1929        drv = bdrv_find_whitelisted_format(format, bs->read_only);
1930        if (!drv) {
1931            error_setg(errp, QERR_INVALID_BLOCK_FORMAT, format);
1932            goto out;
1933        }
1934    }
1935
1936    eject_device(blk, 0, &err);
1937    if (err) {
1938        error_propagate(errp, err);
1939        goto out;
1940    }
1941
1942    bdrv_flags = bdrv_is_read_only(bs) ? 0 : BDRV_O_RDWR;
1943    bdrv_flags |= bdrv_is_snapshot(bs) ? BDRV_O_SNAPSHOT : 0;
1944
1945    qmp_bdrv_open_encrypted(bs, filename, bdrv_flags, drv, NULL, errp);
1946
1947out:
1948    aio_context_release(aio_context);
1949}
1950
1951/* throttling disk I/O limits */
1952void qmp_block_set_io_throttle(const char *device, int64_t bps, int64_t bps_rd,
1953                               int64_t bps_wr,
1954                               int64_t iops,
1955                               int64_t iops_rd,
1956                               int64_t iops_wr,
1957                               bool has_bps_max,
1958                               int64_t bps_max,
1959                               bool has_bps_rd_max,
1960                               int64_t bps_rd_max,
1961                               bool has_bps_wr_max,
1962                               int64_t bps_wr_max,
1963                               bool has_iops_max,
1964                               int64_t iops_max,
1965                               bool has_iops_rd_max,
1966                               int64_t iops_rd_max,
1967                               bool has_iops_wr_max,
1968                               int64_t iops_wr_max,
1969                               bool has_iops_size,
1970                               int64_t iops_size,
1971                               bool has_group,
1972                               const char *group, Error **errp)
1973{
1974    ThrottleConfig cfg;
1975    BlockDriverState *bs;
1976    BlockBackend *blk;
1977    AioContext *aio_context;
1978
1979    blk = blk_by_name(device);
1980    if (!blk) {
1981        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
1982                  "Device '%s' not found", device);
1983        return;
1984    }
1985    bs = blk_bs(blk);
1986
1987    memset(&cfg, 0, sizeof(cfg));
1988    cfg.buckets[THROTTLE_BPS_TOTAL].avg = bps;
1989    cfg.buckets[THROTTLE_BPS_READ].avg  = bps_rd;
1990    cfg.buckets[THROTTLE_BPS_WRITE].avg = bps_wr;
1991
1992    cfg.buckets[THROTTLE_OPS_TOTAL].avg = iops;
1993    cfg.buckets[THROTTLE_OPS_READ].avg  = iops_rd;
1994    cfg.buckets[THROTTLE_OPS_WRITE].avg = iops_wr;
1995
1996    if (has_bps_max) {
1997        cfg.buckets[THROTTLE_BPS_TOTAL].max = bps_max;
1998    }
1999    if (has_bps_rd_max) {
2000        cfg.buckets[THROTTLE_BPS_READ].max = bps_rd_max;
2001    }
2002    if (has_bps_wr_max) {
2003        cfg.buckets[THROTTLE_BPS_WRITE].max = bps_wr_max;
2004    }
2005    if (has_iops_max) {
2006        cfg.buckets[THROTTLE_OPS_TOTAL].max = iops_max;
2007    }
2008    if (has_iops_rd_max) {
2009        cfg.buckets[THROTTLE_OPS_READ].max = iops_rd_max;
2010    }
2011    if (has_iops_wr_max) {
2012        cfg.buckets[THROTTLE_OPS_WRITE].max = iops_wr_max;
2013    }
2014
2015    if (has_iops_size) {
2016        cfg.op_size = iops_size;
2017    }
2018
2019    if (!check_throttle_config(&cfg, errp)) {
2020        return;
2021    }
2022
2023    aio_context = bdrv_get_aio_context(bs);
2024    aio_context_acquire(aio_context);
2025
2026    if (throttle_enabled(&cfg)) {
2027        /* Enable I/O limits if they're not enabled yet, otherwise
2028         * just update the throttling group. */
2029        if (!bs->io_limits_enabled) {
2030            bdrv_io_limits_enable(bs, has_group ? group : device);
2031        } else if (has_group) {
2032            bdrv_io_limits_update_group(bs, group);
2033        }
2034        /* Set the new throttling configuration */
2035        bdrv_set_io_limits(bs, &cfg);
2036    } else if (bs->io_limits_enabled) {
2037        /* If all throttling settings are set to 0, disable I/O limits */
2038        bdrv_io_limits_disable(bs);
2039    }
2040
2041    aio_context_release(aio_context);
2042}
2043
2044void qmp_block_dirty_bitmap_add(const char *node, const char *name,
2045                                bool has_granularity, uint32_t granularity,
2046                                Error **errp)
2047{
2048    AioContext *aio_context;
2049    BlockDriverState *bs;
2050
2051    if (!name || name[0] == '\0') {
2052        error_setg(errp, "Bitmap name cannot be empty");
2053        return;
2054    }
2055
2056    bs = bdrv_lookup_bs(node, node, errp);
2057    if (!bs) {
2058        return;
2059    }
2060
2061    aio_context = bdrv_get_aio_context(bs);
2062    aio_context_acquire(aio_context);
2063
2064    if (has_granularity) {
2065        if (granularity < 512 || !is_power_of_2(granularity)) {
2066            error_setg(errp, "Granularity must be power of 2 "
2067                             "and at least 512");
2068            goto out;
2069        }
2070    } else {
2071        /* Default to cluster size, if available: */
2072        granularity = bdrv_get_default_bitmap_granularity(bs);
2073    }
2074
2075    bdrv_create_dirty_bitmap(bs, granularity, name, errp);
2076
2077 out:
2078    aio_context_release(aio_context);
2079}
2080
2081void qmp_block_dirty_bitmap_remove(const char *node, const char *name,
2082                                   Error **errp)
2083{
2084    AioContext *aio_context;
2085    BlockDriverState *bs;
2086    BdrvDirtyBitmap *bitmap;
2087
2088    bitmap = block_dirty_bitmap_lookup(node, name, &bs, &aio_context, errp);
2089    if (!bitmap || !bs) {
2090        return;
2091    }
2092
2093    if (bdrv_dirty_bitmap_frozen(bitmap)) {
2094        error_setg(errp,
2095                   "Bitmap '%s' is currently frozen and cannot be removed",
2096                   name);
2097        goto out;
2098    }
2099    bdrv_dirty_bitmap_make_anon(bitmap);
2100    bdrv_release_dirty_bitmap(bs, bitmap);
2101
2102 out:
2103    aio_context_release(aio_context);
2104}
2105
2106/**
2107 * Completely clear a bitmap, for the purposes of synchronizing a bitmap
2108 * immediately after a full backup operation.
2109 */
2110void qmp_block_dirty_bitmap_clear(const char *node, const char *name,
2111                                  Error **errp)
2112{
2113    AioContext *aio_context;
2114    BdrvDirtyBitmap *bitmap;
2115    BlockDriverState *bs;
2116
2117    bitmap = block_dirty_bitmap_lookup(node, name, &bs, &aio_context, errp);
2118    if (!bitmap || !bs) {
2119        return;
2120    }
2121
2122    if (bdrv_dirty_bitmap_frozen(bitmap)) {
2123        error_setg(errp,
2124                   "Bitmap '%s' is currently frozen and cannot be modified",
2125                   name);
2126        goto out;
2127    } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
2128        error_setg(errp,
2129                   "Bitmap '%s' is currently disabled and cannot be cleared",
2130                   name);
2131        goto out;
2132    }
2133
2134    bdrv_clear_dirty_bitmap(bitmap);
2135
2136 out:
2137    aio_context_release(aio_context);
2138}
2139
2140void hmp_drive_del(Monitor *mon, const QDict *qdict)
2141{
2142    const char *id = qdict_get_str(qdict, "id");
2143    BlockBackend *blk;
2144    BlockDriverState *bs;
2145    AioContext *aio_context;
2146    Error *local_err = NULL;
2147
2148    blk = blk_by_name(id);
2149    if (!blk) {
2150        error_report("Device '%s' not found", id);
2151        return;
2152    }
2153    bs = blk_bs(blk);
2154
2155    if (!blk_legacy_dinfo(blk)) {
2156        error_report("Deleting device added with blockdev-add"
2157                     " is not supported");
2158        return;
2159    }
2160
2161    aio_context = bdrv_get_aio_context(bs);
2162    aio_context_acquire(aio_context);
2163
2164    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, &local_err)) {
2165        error_report_err(local_err);
2166        aio_context_release(aio_context);
2167        return;
2168    }
2169
2170    bdrv_close(bs);
2171
2172    /* if we have a device attached to this BlockDriverState
2173     * then we need to make the drive anonymous until the device
2174     * can be removed.  If this is a drive with no device backing
2175     * then we can just get rid of the block driver state right here.
2176     */
2177    if (blk_get_attached_dev(blk)) {
2178        blk_hide_on_behalf_of_hmp_drive_del(blk);
2179        /* Further I/O must not pause the guest */
2180        bdrv_set_on_error(bs, BLOCKDEV_ON_ERROR_REPORT,
2181                          BLOCKDEV_ON_ERROR_REPORT);
2182    } else {
2183        blk_unref(blk);
2184    }
2185
2186    aio_context_release(aio_context);
2187}
2188
2189void qmp_block_resize(bool has_device, const char *device,
2190                      bool has_node_name, const char *node_name,
2191                      int64_t size, Error **errp)
2192{
2193    Error *local_err = NULL;
2194    BlockDriverState *bs;
2195    AioContext *aio_context;
2196    int ret;
2197
2198    bs = bdrv_lookup_bs(has_device ? device : NULL,
2199                        has_node_name ? node_name : NULL,
2200                        &local_err);
2201    if (local_err) {
2202        error_propagate(errp, local_err);
2203        return;
2204    }
2205
2206    aio_context = bdrv_get_aio_context(bs);
2207    aio_context_acquire(aio_context);
2208
2209    if (!bdrv_is_first_non_filter(bs)) {
2210        error_setg(errp, QERR_FEATURE_DISABLED, "resize");
2211        goto out;
2212    }
2213
2214    if (size < 0) {
2215        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "size", "a >0 size");
2216        goto out;
2217    }
2218
2219    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) {
2220        error_setg(errp, QERR_DEVICE_IN_USE, device);
2221        goto out;
2222    }
2223
2224    /* complete all in-flight operations before resizing the device */
2225    bdrv_drain_all();
2226
2227    ret = bdrv_truncate(bs, size);
2228    switch (ret) {
2229    case 0:
2230        break;
2231    case -ENOMEDIUM:
2232        error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
2233        break;
2234    case -ENOTSUP:
2235        error_setg(errp, QERR_UNSUPPORTED);
2236        break;
2237    case -EACCES:
2238        error_setg(errp, "Device '%s' is read only", device);
2239        break;
2240    case -EBUSY:
2241        error_setg(errp, QERR_DEVICE_IN_USE, device);
2242        break;
2243    default:
2244        error_setg_errno(errp, -ret, "Could not resize");
2245        break;
2246    }
2247
2248out:
2249    aio_context_release(aio_context);
2250}
2251
2252static void block_job_cb(void *opaque, int ret)
2253{
2254    /* Note that this function may be executed from another AioContext besides
2255     * the QEMU main loop.  If you need to access anything that assumes the
2256     * QEMU global mutex, use a BH or introduce a mutex.
2257     */
2258
2259    BlockDriverState *bs = opaque;
2260    const char *msg = NULL;
2261
2262    trace_block_job_cb(bs, bs->job, ret);
2263
2264    assert(bs->job);
2265
2266    if (ret < 0) {
2267        msg = strerror(-ret);
2268    }
2269
2270    if (block_job_is_cancelled(bs->job)) {
2271        block_job_event_cancelled(bs->job);
2272    } else {
2273        block_job_event_completed(bs->job, msg);
2274    }
2275
2276    bdrv_put_ref_bh_schedule(bs);
2277}
2278
2279void qmp_block_stream(const char *device,
2280                      bool has_base, const char *base,
2281                      bool has_backing_file, const char *backing_file,
2282                      bool has_speed, int64_t speed,
2283                      bool has_on_error, BlockdevOnError on_error,
2284                      Error **errp)
2285{
2286    BlockBackend *blk;
2287    BlockDriverState *bs;
2288    BlockDriverState *base_bs = NULL;
2289    AioContext *aio_context;
2290    Error *local_err = NULL;
2291    const char *base_name = NULL;
2292
2293    if (!has_on_error) {
2294        on_error = BLOCKDEV_ON_ERROR_REPORT;
2295    }
2296
2297    blk = blk_by_name(device);
2298    if (!blk) {
2299        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
2300                  "Device '%s' not found", device);
2301        return;
2302    }
2303    bs = blk_bs(blk);
2304
2305    aio_context = bdrv_get_aio_context(bs);
2306    aio_context_acquire(aio_context);
2307
2308    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_STREAM, errp)) {
2309        goto out;
2310    }
2311
2312    if (has_base) {
2313        base_bs = bdrv_find_backing_image(bs, base);
2314        if (base_bs == NULL) {
2315            error_setg(errp, QERR_BASE_NOT_FOUND, base);
2316            goto out;
2317        }
2318        assert(bdrv_get_aio_context(base_bs) == aio_context);
2319        base_name = base;
2320    }
2321
2322    /* if we are streaming the entire chain, the result will have no backing
2323     * file, and specifying one is therefore an error */
2324    if (base_bs == NULL && has_backing_file) {
2325        error_setg(errp, "backing file specified, but streaming the "
2326                         "entire chain");
2327        goto out;
2328    }
2329
2330    /* backing_file string overrides base bs filename */
2331    base_name = has_backing_file ? backing_file : base_name;
2332
2333    stream_start(bs, base_bs, base_name, has_speed ? speed : 0,
2334                 on_error, block_job_cb, bs, &local_err);
2335    if (local_err) {
2336        error_propagate(errp, local_err);
2337        goto out;
2338    }
2339
2340    trace_qmp_block_stream(bs, bs->job);
2341
2342out:
2343    aio_context_release(aio_context);
2344}
2345
2346void qmp_block_commit(const char *device,
2347                      bool has_base, const char *base,
2348                      bool has_top, const char *top,
2349                      bool has_backing_file, const char *backing_file,
2350                      bool has_speed, int64_t speed,
2351                      Error **errp)
2352{
2353    BlockBackend *blk;
2354    BlockDriverState *bs;
2355    BlockDriverState *base_bs, *top_bs;
2356    AioContext *aio_context;
2357    Error *local_err = NULL;
2358    /* This will be part of the QMP command, if/when the
2359     * BlockdevOnError change for blkmirror makes it in
2360     */
2361    BlockdevOnError on_error = BLOCKDEV_ON_ERROR_REPORT;
2362
2363    if (!has_speed) {
2364        speed = 0;
2365    }
2366
2367    /* Important Note:
2368     *  libvirt relies on the DeviceNotFound error class in order to probe for
2369     *  live commit feature versions; for this to work, we must make sure to
2370     *  perform the device lookup before any generic errors that may occur in a
2371     *  scenario in which all optional arguments are omitted. */
2372    blk = blk_by_name(device);
2373    if (!blk) {
2374        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
2375                  "Device '%s' not found", device);
2376        return;
2377    }
2378    bs = blk_bs(blk);
2379
2380    aio_context = bdrv_get_aio_context(bs);
2381    aio_context_acquire(aio_context);
2382
2383    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, errp)) {
2384        goto out;
2385    }
2386
2387    /* default top_bs is the active layer */
2388    top_bs = bs;
2389
2390    if (has_top && top) {
2391        if (strcmp(bs->filename, top) != 0) {
2392            top_bs = bdrv_find_backing_image(bs, top);
2393        }
2394    }
2395
2396    if (top_bs == NULL) {
2397        error_setg(errp, "Top image file %s not found", top ? top : "NULL");
2398        goto out;
2399    }
2400
2401    assert(bdrv_get_aio_context(top_bs) == aio_context);
2402
2403    if (has_base && base) {
2404        base_bs = bdrv_find_backing_image(top_bs, base);
2405    } else {
2406        base_bs = bdrv_find_base(top_bs);
2407    }
2408
2409    if (base_bs == NULL) {
2410        error_setg(errp, QERR_BASE_NOT_FOUND, base ? base : "NULL");
2411        goto out;
2412    }
2413
2414    assert(bdrv_get_aio_context(base_bs) == aio_context);
2415
2416    if (bdrv_op_is_blocked(base_bs, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
2417        goto out;
2418    }
2419
2420    /* Do not allow attempts to commit an image into itself */
2421    if (top_bs == base_bs) {
2422        error_setg(errp, "cannot commit an image into itself");
2423        goto out;
2424    }
2425
2426    if (top_bs == bs) {
2427        if (has_backing_file) {
2428            error_setg(errp, "'backing-file' specified,"
2429                             " but 'top' is the active layer");
2430            goto out;
2431        }
2432        commit_active_start(bs, base_bs, speed, on_error, block_job_cb,
2433                            bs, &local_err);
2434    } else {
2435        commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs,
2436                     has_backing_file ? backing_file : NULL, &local_err);
2437    }
2438    if (local_err != NULL) {
2439        error_propagate(errp, local_err);
2440        goto out;
2441    }
2442
2443out:
2444    aio_context_release(aio_context);
2445}
2446
2447void qmp_drive_backup(const char *device, const char *target,
2448                      bool has_format, const char *format,
2449                      enum MirrorSyncMode sync,
2450                      bool has_mode, enum NewImageMode mode,
2451                      bool has_speed, int64_t speed,
2452                      bool has_bitmap, const char *bitmap,
2453                      bool has_on_source_error, BlockdevOnError on_source_error,
2454                      bool has_on_target_error, BlockdevOnError on_target_error,
2455                      Error **errp)
2456{
2457    BlockBackend *blk;
2458    BlockDriverState *bs;
2459    BlockDriverState *target_bs;
2460    BlockDriverState *source = NULL;
2461    BdrvDirtyBitmap *bmap = NULL;
2462    AioContext *aio_context;
2463    BlockDriver *drv = NULL;
2464    Error *local_err = NULL;
2465    int flags;
2466    int64_t size;
2467    int ret;
2468
2469    if (!has_speed) {
2470        speed = 0;
2471    }
2472    if (!has_on_source_error) {
2473        on_source_error = BLOCKDEV_ON_ERROR_REPORT;
2474    }
2475    if (!has_on_target_error) {
2476        on_target_error = BLOCKDEV_ON_ERROR_REPORT;
2477    }
2478    if (!has_mode) {
2479        mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
2480    }
2481
2482    blk = blk_by_name(device);
2483    if (!blk) {
2484        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
2485                  "Device '%s' not found", device);
2486        return;
2487    }
2488    bs = blk_bs(blk);
2489
2490    aio_context = bdrv_get_aio_context(bs);
2491    aio_context_acquire(aio_context);
2492
2493    /* Although backup_run has this check too, we need to use bs->drv below, so
2494     * do an early check redundantly. */
2495    if (!bdrv_is_inserted(bs)) {
2496        error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
2497        goto out;
2498    }
2499
2500    if (!has_format) {
2501        format = mode == NEW_IMAGE_MODE_EXISTING ? NULL : bs->drv->format_name;
2502    }
2503    if (format) {
2504        drv = bdrv_find_format(format);
2505        if (!drv) {
2506            error_setg(errp, QERR_INVALID_BLOCK_FORMAT, format);
2507            goto out;
2508        }
2509    }
2510
2511    /* Early check to avoid creating target */
2512    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_BACKUP_SOURCE, errp)) {
2513        goto out;
2514    }
2515
2516    flags = bs->open_flags | BDRV_O_RDWR;
2517
2518    /* See if we have a backing HD we can use to create our new image
2519     * on top of. */
2520    if (sync == MIRROR_SYNC_MODE_TOP) {
2521        source = bs->backing_hd;
2522        if (!source) {
2523            sync = MIRROR_SYNC_MODE_FULL;
2524        }
2525    }
2526    if (sync == MIRROR_SYNC_MODE_NONE) {
2527        source = bs;
2528    }
2529
2530    size = bdrv_getlength(bs);
2531    if (size < 0) {
2532        error_setg_errno(errp, -size, "bdrv_getlength failed");
2533        goto out;
2534    }
2535
2536    if (mode != NEW_IMAGE_MODE_EXISTING) {
2537        assert(format && drv);
2538        if (source) {
2539            bdrv_img_create(target, format, source->filename,
2540                            source->drv->format_name, NULL,
2541                            size, flags, &local_err, false);
2542        } else {
2543            bdrv_img_create(target, format, NULL, NULL, NULL,
2544                            size, flags, &local_err, false);
2545        }
2546    }
2547
2548    if (local_err) {
2549        error_propagate(errp, local_err);
2550        goto out;
2551    }
2552
2553    target_bs = NULL;
2554    ret = bdrv_open(&target_bs, target, NULL, NULL, flags, drv, &local_err);
2555    if (ret < 0) {
2556        error_propagate(errp, local_err);
2557        goto out;
2558    }
2559
2560    bdrv_set_aio_context(target_bs, aio_context);
2561
2562    if (has_bitmap) {
2563        bmap = bdrv_find_dirty_bitmap(bs, bitmap);
2564        if (!bmap) {
2565            error_setg(errp, "Bitmap '%s' could not be found", bitmap);
2566            goto out;
2567        }
2568    }
2569
2570    backup_start(bs, target_bs, speed, sync, bmap,
2571                 on_source_error, on_target_error,
2572                 block_job_cb, bs, &local_err);
2573    if (local_err != NULL) {
2574        bdrv_unref(target_bs);
2575        error_propagate(errp, local_err);
2576        goto out;
2577    }
2578
2579out:
2580    aio_context_release(aio_context);
2581}
2582
2583BlockDeviceInfoList *qmp_query_named_block_nodes(Error **errp)
2584{
2585    return bdrv_named_nodes_list(errp);
2586}
2587
2588void qmp_blockdev_backup(const char *device, const char *target,
2589                         enum MirrorSyncMode sync,
2590                         bool has_speed, int64_t speed,
2591                         bool has_on_source_error,
2592                         BlockdevOnError on_source_error,
2593                         bool has_on_target_error,
2594                         BlockdevOnError on_target_error,
2595                         Error **errp)
2596{
2597    BlockBackend *blk;
2598    BlockDriverState *bs;
2599    BlockDriverState *target_bs;
2600    Error *local_err = NULL;
2601    AioContext *aio_context;
2602
2603    if (!has_speed) {
2604        speed = 0;
2605    }
2606    if (!has_on_source_error) {
2607        on_source_error = BLOCKDEV_ON_ERROR_REPORT;
2608    }
2609    if (!has_on_target_error) {
2610        on_target_error = BLOCKDEV_ON_ERROR_REPORT;
2611    }
2612
2613    blk = blk_by_name(device);
2614    if (!blk) {
2615        error_setg(errp, "Device '%s' not found", device);
2616        return;
2617    }
2618    bs = blk_bs(blk);
2619
2620    aio_context = bdrv_get_aio_context(bs);
2621    aio_context_acquire(aio_context);
2622
2623    blk = blk_by_name(target);
2624    if (!blk) {
2625        error_setg(errp, "Device '%s' not found", target);
2626        goto out;
2627    }
2628    target_bs = blk_bs(blk);
2629
2630    bdrv_ref(target_bs);
2631    bdrv_set_aio_context(target_bs, aio_context);
2632    backup_start(bs, target_bs, speed, sync, NULL, on_source_error,
2633                 on_target_error, block_job_cb, bs, &local_err);
2634    if (local_err != NULL) {
2635        bdrv_unref(target_bs);
2636        error_propagate(errp, local_err);
2637    }
2638out:
2639    aio_context_release(aio_context);
2640}
2641
2642void qmp_drive_mirror(const char *device, const char *target,
2643                      bool has_format, const char *format,
2644                      bool has_node_name, const char *node_name,
2645                      bool has_replaces, const char *replaces,
2646                      enum MirrorSyncMode sync,
2647                      bool has_mode, enum NewImageMode mode,
2648                      bool has_speed, int64_t speed,
2649                      bool has_granularity, uint32_t granularity,
2650                      bool has_buf_size, int64_t buf_size,
2651                      bool has_on_source_error, BlockdevOnError on_source_error,
2652                      bool has_on_target_error, BlockdevOnError on_target_error,
2653                      bool has_unmap, bool unmap,
2654                      Error **errp)
2655{
2656    BlockBackend *blk;
2657    BlockDriverState *bs;
2658    BlockDriverState *source, *target_bs;
2659    AioContext *aio_context;
2660    BlockDriver *drv = NULL;
2661    Error *local_err = NULL;
2662    QDict *options = NULL;
2663    int flags;
2664    int64_t size;
2665    int ret;
2666
2667    if (!has_speed) {
2668        speed = 0;
2669    }
2670    if (!has_on_source_error) {
2671        on_source_error = BLOCKDEV_ON_ERROR_REPORT;
2672    }
2673    if (!has_on_target_error) {
2674        on_target_error = BLOCKDEV_ON_ERROR_REPORT;
2675    }
2676    if (!has_mode) {
2677        mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
2678    }
2679    if (!has_granularity) {
2680        granularity = 0;
2681    }
2682    if (!has_buf_size) {
2683        buf_size = 0;
2684    }
2685    if (!has_unmap) {
2686        unmap = true;
2687    }
2688
2689    if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) {
2690        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
2691                   "a value in range [512B, 64MB]");
2692        return;
2693    }
2694    if (granularity & (granularity - 1)) {
2695        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
2696                   "power of 2");
2697        return;
2698    }
2699
2700    blk = blk_by_name(device);
2701    if (!blk) {
2702        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
2703                  "Device '%s' not found", device);
2704        return;
2705    }
2706    bs = blk_bs(blk);
2707
2708    aio_context = bdrv_get_aio_context(bs);
2709    aio_context_acquire(aio_context);
2710
2711    if (!bdrv_is_inserted(bs)) {
2712        error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
2713        goto out;
2714    }
2715
2716    if (!has_format) {
2717        format = mode == NEW_IMAGE_MODE_EXISTING ? NULL : bs->drv->format_name;
2718    }
2719    if (format) {
2720        drv = bdrv_find_format(format);
2721        if (!drv) {
2722            error_setg(errp, QERR_INVALID_BLOCK_FORMAT, format);
2723            goto out;
2724        }
2725    }
2726
2727    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR, errp)) {
2728        goto out;
2729    }
2730
2731    flags = bs->open_flags | BDRV_O_RDWR;
2732    source = bs->backing_hd;
2733    if (!source && sync == MIRROR_SYNC_MODE_TOP) {
2734        sync = MIRROR_SYNC_MODE_FULL;
2735    }
2736    if (sync == MIRROR_SYNC_MODE_NONE) {
2737        source = bs;
2738    }
2739
2740    size = bdrv_getlength(bs);
2741    if (size < 0) {
2742        error_setg_errno(errp, -size, "bdrv_getlength failed");
2743        goto out;
2744    }
2745
2746    if (has_replaces) {
2747        BlockDriverState *to_replace_bs;
2748        AioContext *replace_aio_context;
2749        int64_t replace_size;
2750
2751        if (!has_node_name) {
2752            error_setg(errp, "a node-name must be provided when replacing a"
2753                             " named node of the graph");
2754            goto out;
2755        }
2756
2757        to_replace_bs = check_to_replace_node(replaces, &local_err);
2758
2759        if (!to_replace_bs) {
2760            error_propagate(errp, local_err);
2761            goto out;
2762        }
2763
2764        replace_aio_context = bdrv_get_aio_context(to_replace_bs);
2765        aio_context_acquire(replace_aio_context);
2766        replace_size = bdrv_getlength(to_replace_bs);
2767        aio_context_release(replace_aio_context);
2768
2769        if (size != replace_size) {
2770            error_setg(errp, "cannot replace image with a mirror image of "
2771                             "different size");
2772            goto out;
2773        }
2774    }
2775
2776    if ((sync == MIRROR_SYNC_MODE_FULL || !source)
2777        && mode != NEW_IMAGE_MODE_EXISTING)
2778    {
2779        /* create new image w/o backing file */
2780        assert(format && drv);
2781        bdrv_img_create(target, format,
2782                        NULL, NULL, NULL, size, flags, &local_err, false);
2783    } else {
2784        switch (mode) {
2785        case NEW_IMAGE_MODE_EXISTING:
2786            break;
2787        case NEW_IMAGE_MODE_ABSOLUTE_PATHS:
2788            /* create new image with backing file */
2789            bdrv_img_create(target, format,
2790                            source->filename,
2791                            source->drv->format_name,
2792                            NULL, size, flags, &local_err, false);
2793            break;
2794        default:
2795            abort();
2796        }
2797    }
2798
2799    if (local_err) {
2800        error_propagate(errp, local_err);
2801        goto out;
2802    }
2803
2804    if (has_node_name) {
2805        options = qdict_new();
2806        qdict_put(options, "node-name", qstring_from_str(node_name));
2807    }
2808
2809    /* Mirroring takes care of copy-on-write using the source's backing
2810     * file.
2811     */
2812    target_bs = NULL;
2813    ret = bdrv_open(&target_bs, target, NULL, options,
2814                    flags | BDRV_O_NO_BACKING, drv, &local_err);
2815    if (ret < 0) {
2816        error_propagate(errp, local_err);
2817        goto out;
2818    }
2819
2820    bdrv_set_aio_context(target_bs, aio_context);
2821
2822    /* pass the node name to replace to mirror start since it's loose coupling
2823     * and will allow to check whether the node still exist at mirror completion
2824     */
2825    mirror_start(bs, target_bs,
2826                 has_replaces ? replaces : NULL,
2827                 speed, granularity, buf_size, sync,
2828                 on_source_error, on_target_error,
2829                 unmap,
2830                 block_job_cb, bs, &local_err);
2831    if (local_err != NULL) {
2832        bdrv_unref(target_bs);
2833        error_propagate(errp, local_err);
2834        goto out;
2835    }
2836
2837out:
2838    aio_context_release(aio_context);
2839}
2840
2841/* Get the block job for a given device name and acquire its AioContext */
2842static BlockJob *find_block_job(const char *device, AioContext **aio_context,
2843                                Error **errp)
2844{
2845    BlockBackend *blk;
2846    BlockDriverState *bs;
2847
2848    blk = blk_by_name(device);
2849    if (!blk) {
2850        goto notfound;
2851    }
2852    bs = blk_bs(blk);
2853
2854    *aio_context = bdrv_get_aio_context(bs);
2855    aio_context_acquire(*aio_context);
2856
2857    if (!bs->job) {
2858        aio_context_release(*aio_context);
2859        goto notfound;
2860    }
2861
2862    return bs->job;
2863
2864notfound:
2865    error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE,
2866              "No active block job on device '%s'", device);
2867    *aio_context = NULL;
2868    return NULL;
2869}
2870
2871void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp)
2872{
2873    AioContext *aio_context;
2874    BlockJob *job = find_block_job(device, &aio_context, errp);
2875
2876    if (!job) {
2877        return;
2878    }
2879
2880    block_job_set_speed(job, speed, errp);
2881    aio_context_release(aio_context);
2882}
2883
2884void qmp_block_job_cancel(const char *device,
2885                          bool has_force, bool force, Error **errp)
2886{
2887    AioContext *aio_context;
2888    BlockJob *job = find_block_job(device, &aio_context, errp);
2889
2890    if (!job) {
2891        return;
2892    }
2893
2894    if (!has_force) {
2895        force = false;
2896    }
2897
2898    if (job->user_paused && !force) {
2899        error_setg(errp, "The block job for device '%s' is currently paused",
2900                   device);
2901        goto out;
2902    }
2903
2904    trace_qmp_block_job_cancel(job);
2905    block_job_cancel(job);
2906out:
2907    aio_context_release(aio_context);
2908}
2909
2910void qmp_block_job_pause(const char *device, Error **errp)
2911{
2912    AioContext *aio_context;
2913    BlockJob *job = find_block_job(device, &aio_context, errp);
2914
2915    if (!job || job->user_paused) {
2916        return;
2917    }
2918
2919    job->user_paused = true;
2920    trace_qmp_block_job_pause(job);
2921    block_job_pause(job);
2922    aio_context_release(aio_context);
2923}
2924
2925void qmp_block_job_resume(const char *device, Error **errp)
2926{
2927    AioContext *aio_context;
2928    BlockJob *job = find_block_job(device, &aio_context, errp);
2929
2930    if (!job || !job->user_paused) {
2931        return;
2932    }
2933
2934    job->user_paused = false;
2935    trace_qmp_block_job_resume(job);
2936    block_job_resume(job);
2937    aio_context_release(aio_context);
2938}
2939
2940void qmp_block_job_complete(const char *device, Error **errp)
2941{
2942    AioContext *aio_context;
2943    BlockJob *job = find_block_job(device, &aio_context, errp);
2944
2945    if (!job) {
2946        return;
2947    }
2948
2949    trace_qmp_block_job_complete(job);
2950    block_job_complete(job, errp);
2951    aio_context_release(aio_context);
2952}
2953
2954void qmp_change_backing_file(const char *device,
2955                             const char *image_node_name,
2956                             const char *backing_file,
2957                             Error **errp)
2958{
2959    BlockBackend *blk;
2960    BlockDriverState *bs = NULL;
2961    AioContext *aio_context;
2962    BlockDriverState *image_bs = NULL;
2963    Error *local_err = NULL;
2964    bool ro;
2965    int open_flags;
2966    int ret;
2967
2968    blk = blk_by_name(device);
2969    if (!blk) {
2970        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
2971                  "Device '%s' not found", device);
2972        return;
2973    }
2974    bs = blk_bs(blk);
2975
2976    aio_context = bdrv_get_aio_context(bs);
2977    aio_context_acquire(aio_context);
2978
2979    image_bs = bdrv_lookup_bs(NULL, image_node_name, &local_err);
2980    if (local_err) {
2981        error_propagate(errp, local_err);
2982        goto out;
2983    }
2984
2985    if (!image_bs) {
2986        error_setg(errp, "image file not found");
2987        goto out;
2988    }
2989
2990    if (bdrv_find_base(image_bs) == image_bs) {
2991        error_setg(errp, "not allowing backing file change on an image "
2992                         "without a backing file");
2993        goto out;
2994    }
2995
2996    /* even though we are not necessarily operating on bs, we need it to
2997     * determine if block ops are currently prohibited on the chain */
2998    if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_CHANGE, errp)) {
2999        goto out;
3000    }
3001
3002    /* final sanity check */
3003    if (!bdrv_chain_contains(bs, image_bs)) {
3004        error_setg(errp, "'%s' and image file are not in the same chain",
3005                   device);
3006        goto out;
3007    }
3008
3009    /* if not r/w, reopen to make r/w */
3010    open_flags = image_bs->open_flags;
3011    ro = bdrv_is_read_only(image_bs);
3012
3013    if (ro) {
3014        bdrv_reopen(image_bs, open_flags | BDRV_O_RDWR, &local_err);
3015        if (local_err) {
3016            error_propagate(errp, local_err);
3017            goto out;
3018        }
3019    }
3020
3021    ret = bdrv_change_backing_file(image_bs, backing_file,
3022                               image_bs->drv ? image_bs->drv->format_name : "");
3023
3024    if (ret < 0) {
3025        error_setg_errno(errp, -ret, "Could not change backing file to '%s'",
3026                         backing_file);
3027        /* don't exit here, so we can try to restore open flags if
3028         * appropriate */
3029    }
3030
3031    if (ro) {
3032        bdrv_reopen(image_bs, open_flags, &local_err);
3033        if (local_err) {
3034            error_propagate(errp, local_err); /* will preserve prior errp */
3035        }
3036    }
3037
3038out:
3039    aio_context_release(aio_context);
3040}
3041
3042void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
3043{
3044    QmpOutputVisitor *ov = qmp_output_visitor_new();
3045    BlockBackend *blk;
3046    QObject *obj;
3047    QDict *qdict;
3048    Error *local_err = NULL;
3049
3050    /* Require an ID in the top level */
3051    if (!options->has_id) {
3052        error_setg(errp, "Block device needs an ID");
3053        goto fail;
3054    }
3055
3056    /* TODO Sort it out in raw-posix and drive_new(): Reject aio=native with
3057     * cache.direct=false instead of silently switching to aio=threads, except
3058     * when called from drive_new().
3059     *
3060     * For now, simply forbidding the combination for all drivers will do. */
3061    if (options->has_aio && options->aio == BLOCKDEV_AIO_OPTIONS_NATIVE) {
3062        bool direct = options->has_cache &&
3063                      options->cache->has_direct &&
3064                      options->cache->direct;
3065        if (!direct) {
3066            error_setg(errp, "aio=native requires cache.direct=true");
3067            goto fail;
3068        }
3069    }
3070
3071    visit_type_BlockdevOptions(qmp_output_get_visitor(ov),
3072                               &options, NULL, &local_err);
3073    if (local_err) {
3074        error_propagate(errp, local_err);
3075        goto fail;
3076    }
3077
3078    obj = qmp_output_get_qobject(ov);
3079    qdict = qobject_to_qdict(obj);
3080
3081    qdict_flatten(qdict);
3082
3083    blk = blockdev_init(NULL, qdict, &local_err);
3084    if (local_err) {
3085        error_propagate(errp, local_err);
3086        goto fail;
3087    }
3088
3089    if (bdrv_key_required(blk_bs(blk))) {
3090        blk_unref(blk);
3091        error_setg(errp, "blockdev-add doesn't support encrypted devices");
3092        goto fail;
3093    }
3094
3095fail:
3096    qmp_output_visitor_cleanup(ov);
3097}
3098
3099BlockJobInfoList *qmp_query_block_jobs(Error **errp)
3100{
3101    BlockJobInfoList *head = NULL, **p_next = &head;
3102    BlockDriverState *bs;
3103
3104    for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
3105        AioContext *aio_context = bdrv_get_aio_context(bs);
3106
3107        aio_context_acquire(aio_context);
3108
3109        if (bs->job) {
3110            BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
3111            elem->value = block_job_query(bs->job);
3112            *p_next = elem;
3113            p_next = &elem->next;
3114        }
3115
3116        aio_context_release(aio_context);
3117    }
3118
3119    return head;
3120}
3121
3122QemuOptsList qemu_common_drive_opts = {
3123    .name = "drive",
3124    .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head),
3125    .desc = {
3126        {
3127            .name = "snapshot",
3128            .type = QEMU_OPT_BOOL,
3129            .help = "enable/disable snapshot mode",
3130        },{
3131            .name = "discard",
3132            .type = QEMU_OPT_STRING,
3133            .help = "discard operation (ignore/off, unmap/on)",
3134        },{
3135            .name = BDRV_OPT_CACHE_WB,
3136            .type = QEMU_OPT_BOOL,
3137            .help = "enables writeback mode for any caches",
3138        },{
3139            .name = BDRV_OPT_CACHE_DIRECT,
3140            .type = QEMU_OPT_BOOL,
3141            .help = "enables use of O_DIRECT (bypass the host page cache)",
3142        },{
3143            .name = BDRV_OPT_CACHE_NO_FLUSH,
3144            .type = QEMU_OPT_BOOL,
3145            .help = "ignore any flush requests for the device",
3146        },{
3147            .name = "aio",
3148            .type = QEMU_OPT_STRING,
3149            .help = "host AIO implementation (threads, native)",
3150        },{
3151            .name = "format",
3152            .type = QEMU_OPT_STRING,
3153            .help = "disk format (raw, qcow2, ...)",
3154        },{
3155            .name = "rerror",
3156            .type = QEMU_OPT_STRING,
3157            .help = "read error action",
3158        },{
3159            .name = "werror",
3160            .type = QEMU_OPT_STRING,
3161            .help = "write error action",
3162        },{
3163            .name = "read-only",
3164            .type = QEMU_OPT_BOOL,
3165            .help = "open drive file as read-only",
3166        },{
3167            .name = "throttling.iops-total",
3168            .type = QEMU_OPT_NUMBER,
3169            .help = "limit total I/O operations per second",
3170        },{
3171            .name = "throttling.iops-read",
3172            .type = QEMU_OPT_NUMBER,
3173            .help = "limit read operations per second",
3174        },{
3175            .name = "throttling.iops-write",
3176            .type = QEMU_OPT_NUMBER,
3177            .help = "limit write operations per second",
3178        },{
3179            .name = "throttling.bps-total",
3180            .type = QEMU_OPT_NUMBER,
3181            .help = "limit total bytes per second",
3182        },{
3183            .name = "throttling.bps-read",
3184            .type = QEMU_OPT_NUMBER,
3185            .help = "limit read bytes per second",
3186        },{
3187            .name = "throttling.bps-write",
3188            .type = QEMU_OPT_NUMBER,
3189            .help = "limit write bytes per second",
3190        },{
3191            .name = "throttling.iops-total-max",
3192            .type = QEMU_OPT_NUMBER,
3193            .help = "I/O operations burst",
3194        },{
3195            .name = "throttling.iops-read-max",
3196            .type = QEMU_OPT_NUMBER,
3197            .help = "I/O operations read burst",
3198        },{
3199            .name = "throttling.iops-write-max",
3200            .type = QEMU_OPT_NUMBER,
3201            .help = "I/O operations write burst",
3202        },{
3203            .name = "throttling.bps-total-max",
3204            .type = QEMU_OPT_NUMBER,
3205            .help = "total bytes burst",
3206        },{
3207            .name = "throttling.bps-read-max",
3208            .type = QEMU_OPT_NUMBER,
3209            .help = "total bytes read burst",
3210        },{
3211            .name = "throttling.bps-write-max",
3212            .type = QEMU_OPT_NUMBER,
3213            .help = "total bytes write burst",
3214        },{
3215            .name = "throttling.iops-size",
3216            .type = QEMU_OPT_NUMBER,
3217            .help = "when limiting by iops max size of an I/O in bytes",
3218        },{
3219            .name = "throttling.group",
3220            .type = QEMU_OPT_STRING,
3221            .help = "name of the block throttling group",
3222        },{
3223            .name = "copy-on-read",
3224            .type = QEMU_OPT_BOOL,
3225            .help = "copy read data from backing file into image file",
3226        },{
3227            .name = "detect-zeroes",
3228            .type = QEMU_OPT_STRING,
3229            .help = "try to optimize zero writes (off, on, unmap)",
3230        },
3231        { /* end of list */ }
3232    },
3233};
3234
3235QemuOptsList qemu_drive_opts = {
3236    .name = "drive",
3237    .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
3238    .desc = {
3239        /*
3240         * no elements => accept any params
3241         * validation will happen later
3242         */
3243        { /* end of list */ }
3244    },
3245};
3246