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/blockdev.h"
  34#include "hw/block/block.h"
  35#include "block/blockjob.h"
  36#include "monitor/monitor.h"
  37#include "qapi/qmp/qerror.h"
  38#include "qemu/option.h"
  39#include "qemu/config-file.h"
  40#include "qapi/qmp/types.h"
  41#include "sysemu/sysemu.h"
  42#include "block/block_int.h"
  43#include "qmp-commands.h"
  44#include "trace.h"
  45#include "sysemu/arch_init.h"
  46
  47static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
  48extern QemuOptsList qemu_common_drive_opts;
  49extern QemuOptsList qemu_old_drive_opts;
  50
  51static const char *const if_name[IF_COUNT] = {
  52    [IF_NONE] = "none",
  53    [IF_IDE] = "ide",
  54    [IF_SCSI] = "scsi",
  55    [IF_FLOPPY] = "floppy",
  56    [IF_PFLASH] = "pflash",
  57    [IF_MTD] = "mtd",
  58    [IF_SD] = "sd",
  59    [IF_VIRTIO] = "virtio",
  60    [IF_XEN] = "xen",
  61};
  62
  63static const int if_max_devs[IF_COUNT] = {
  64    /*
  65     * Do not change these numbers!  They govern how drive option
  66     * index maps to unit and bus.  That mapping is ABI.
  67     *
  68     * All controllers used to imlement if=T drives need to support
  69     * if_max_devs[T] units, for any T with if_max_devs[T] != 0.
  70     * Otherwise, some index values map to "impossible" bus, unit
  71     * values.
  72     *
  73     * For instance, if you change [IF_SCSI] to 255, -drive
  74     * if=scsi,index=12 no longer means bus=1,unit=5, but
  75     * bus=0,unit=12.  With an lsi53c895a controller (7 units max),
  76     * the drive can't be set up.  Regression.
  77     */
  78    [IF_IDE] = 2,
  79    [IF_SCSI] = 7,
  80};
  81
  82/*
  83 * We automatically delete the drive when a device using it gets
  84 * unplugged.  Questionable feature, but we can't just drop it.
  85 * Device models call blockdev_mark_auto_del() to schedule the
  86 * automatic deletion, and generic qdev code calls blockdev_auto_del()
  87 * when deletion is actually safe.
  88 */
  89void blockdev_mark_auto_del(BlockDriverState *bs)
  90{
  91    DriveInfo *dinfo = drive_get_by_blockdev(bs);
  92
  93    if (bs->job) {
  94        block_job_cancel(bs->job);
  95    }
  96    if (dinfo) {
  97        dinfo->auto_del = 1;
  98    }
  99}
 100
 101void blockdev_auto_del(BlockDriverState *bs)
 102{
 103    DriveInfo *dinfo = drive_get_by_blockdev(bs);
 104
 105    if (dinfo && dinfo->auto_del) {
 106        drive_put_ref(dinfo);
 107    }
 108}
 109
 110static int drive_index_to_bus_id(BlockInterfaceType type, int index)
 111{
 112    int max_devs = if_max_devs[type];
 113    return max_devs ? index / max_devs : 0;
 114}
 115
 116static int drive_index_to_unit_id(BlockInterfaceType type, int index)
 117{
 118    int max_devs = if_max_devs[type];
 119    return max_devs ? index % max_devs : index;
 120}
 121
 122QemuOpts *drive_def(const char *optstr)
 123{
 124    return qemu_opts_parse(qemu_find_opts("drive"), optstr, 0);
 125}
 126
 127QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
 128                    const char *optstr)
 129{
 130    QemuOpts *opts;
 131    char buf[32];
 132
 133    opts = drive_def(optstr);
 134    if (!opts) {
 135        return NULL;
 136    }
 137    if (type != IF_DEFAULT) {
 138        qemu_opt_set(opts, "if", if_name[type]);
 139    }
 140    if (index >= 0) {
 141        snprintf(buf, sizeof(buf), "%d", index);
 142        qemu_opt_set(opts, "index", buf);
 143    }
 144    if (file)
 145        qemu_opt_set(opts, "file", file);
 146    return opts;
 147}
 148
 149DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
 150{
 151    DriveInfo *dinfo;
 152
 153    /* seek interface, bus and unit */
 154
 155    QTAILQ_FOREACH(dinfo, &drives, next) {
 156        if (dinfo->type == type &&
 157            dinfo->bus == bus &&
 158            dinfo->unit == unit)
 159            return dinfo;
 160    }
 161
 162    return NULL;
 163}
 164
 165DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
 166{
 167    return drive_get(type,
 168                     drive_index_to_bus_id(type, index),
 169                     drive_index_to_unit_id(type, index));
 170}
 171
 172int drive_get_max_bus(BlockInterfaceType type)
 173{
 174    int max_bus;
 175    DriveInfo *dinfo;
 176
 177    max_bus = -1;
 178    QTAILQ_FOREACH(dinfo, &drives, next) {
 179        if(dinfo->type == type &&
 180           dinfo->bus > max_bus)
 181            max_bus = dinfo->bus;
 182    }
 183    return max_bus;
 184}
 185
 186/* Get a block device.  This should only be used for single-drive devices
 187   (e.g. SD/Floppy/MTD).  Multi-disk devices (scsi/ide) should use the
 188   appropriate bus.  */
 189DriveInfo *drive_get_next(BlockInterfaceType type)
 190{
 191    static int next_block_unit[IF_COUNT];
 192
 193    return drive_get(type, 0, next_block_unit[type]++);
 194}
 195
 196DriveInfo *drive_get_by_blockdev(BlockDriverState *bs)
 197{
 198    DriveInfo *dinfo;
 199
 200    QTAILQ_FOREACH(dinfo, &drives, next) {
 201        if (dinfo->bdrv == bs) {
 202            return dinfo;
 203        }
 204    }
 205    return NULL;
 206}
 207
 208static void bdrv_format_print(void *opaque, const char *name)
 209{
 210    error_printf(" %s", name);
 211}
 212
 213static void drive_uninit(DriveInfo *dinfo)
 214{
 215    qemu_opts_del(dinfo->opts);
 216    bdrv_delete(dinfo->bdrv);
 217    g_free(dinfo->id);
 218    QTAILQ_REMOVE(&drives, dinfo, next);
 219    g_free(dinfo->serial);
 220    g_free(dinfo);
 221}
 222
 223void drive_put_ref(DriveInfo *dinfo)
 224{
 225    assert(dinfo->refcount);
 226    if (--dinfo->refcount == 0) {
 227        drive_uninit(dinfo);
 228    }
 229}
 230
 231void drive_get_ref(DriveInfo *dinfo)
 232{
 233    dinfo->refcount++;
 234}
 235
 236typedef struct {
 237    QEMUBH *bh;
 238    DriveInfo *dinfo;
 239} DrivePutRefBH;
 240
 241static void drive_put_ref_bh(void *opaque)
 242{
 243    DrivePutRefBH *s = opaque;
 244
 245    drive_put_ref(s->dinfo);
 246    qemu_bh_delete(s->bh);
 247    g_free(s);
 248}
 249
 250/*
 251 * Release a drive reference in a BH
 252 *
 253 * It is not possible to use drive_put_ref() from a callback function when the
 254 * callers still need the drive.  In such cases we schedule a BH to release the
 255 * reference.
 256 */
 257static void drive_put_ref_bh_schedule(DriveInfo *dinfo)
 258{
 259    DrivePutRefBH *s;
 260
 261    s = g_new(DrivePutRefBH, 1);
 262    s->bh = qemu_bh_new(drive_put_ref_bh, s);
 263    s->dinfo = dinfo;
 264    qemu_bh_schedule(s->bh);
 265}
 266
 267static int parse_block_error_action(const char *buf, bool is_read)
 268{
 269    if (!strcmp(buf, "ignore")) {
 270        return BLOCKDEV_ON_ERROR_IGNORE;
 271    } else if (!is_read && !strcmp(buf, "enospc")) {
 272        return BLOCKDEV_ON_ERROR_ENOSPC;
 273    } else if (!strcmp(buf, "stop")) {
 274        return BLOCKDEV_ON_ERROR_STOP;
 275    } else if (!strcmp(buf, "report")) {
 276        return BLOCKDEV_ON_ERROR_REPORT;
 277    } else {
 278        error_report("'%s' invalid %s error action",
 279                     buf, is_read ? "read" : "write");
 280        return -1;
 281    }
 282}
 283
 284static bool do_check_io_limits(BlockIOLimit *io_limits, Error **errp)
 285{
 286    bool bps_flag;
 287    bool iops_flag;
 288
 289    assert(io_limits);
 290
 291    bps_flag  = (io_limits->bps[BLOCK_IO_LIMIT_TOTAL] != 0)
 292                 && ((io_limits->bps[BLOCK_IO_LIMIT_READ] != 0)
 293                 || (io_limits->bps[BLOCK_IO_LIMIT_WRITE] != 0));
 294    iops_flag = (io_limits->iops[BLOCK_IO_LIMIT_TOTAL] != 0)
 295                 && ((io_limits->iops[BLOCK_IO_LIMIT_READ] != 0)
 296                 || (io_limits->iops[BLOCK_IO_LIMIT_WRITE] != 0));
 297    if (bps_flag || iops_flag) {
 298        error_setg(errp, "bps(iops) and bps_rd/bps_wr(iops_rd/iops_wr) "
 299                         "cannot be used at the same time");
 300        return false;
 301    }
 302
 303    if (io_limits->bps[BLOCK_IO_LIMIT_TOTAL] < 0 ||
 304        io_limits->bps[BLOCK_IO_LIMIT_WRITE] < 0 ||
 305        io_limits->bps[BLOCK_IO_LIMIT_READ] < 0 ||
 306        io_limits->iops[BLOCK_IO_LIMIT_TOTAL] < 0 ||
 307        io_limits->iops[BLOCK_IO_LIMIT_WRITE] < 0 ||
 308        io_limits->iops[BLOCK_IO_LIMIT_READ] < 0) {
 309        error_setg(errp, "bps and iops values must be 0 or greater");
 310        return false;
 311    }
 312
 313    return true;
 314}
 315
 316static DriveInfo *blockdev_init(QemuOpts *all_opts,
 317                                BlockInterfaceType block_default_type)
 318{
 319    const char *buf;
 320    const char *file = NULL;
 321    const char *serial;
 322    const char *mediastr = "";
 323    BlockInterfaceType type;
 324    enum { MEDIA_DISK, MEDIA_CDROM } media;
 325    int bus_id, unit_id;
 326    int cyls, heads, secs, translation;
 327    int max_devs;
 328    int index;
 329    int ro = 0;
 330    int bdrv_flags = 0;
 331    int on_read_error, on_write_error;
 332    const char *devaddr;
 333    DriveInfo *dinfo;
 334    BlockIOLimit io_limits;
 335    int snapshot = 0;
 336    bool copy_on_read;
 337    int ret;
 338    Error *error = NULL;
 339    QemuOpts *opts;
 340    QDict *bs_opts;
 341    const char *id;
 342    bool has_driver_specific_opts;
 343    BlockDriver *drv = NULL;
 344
 345    translation = BIOS_ATA_TRANSLATION_AUTO;
 346    media = MEDIA_DISK;
 347
 348    /* Check common options by copying from all_opts to opts, all other options
 349     * are stored in bs_opts. */
 350    id = qemu_opts_id(all_opts);
 351    opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
 352    if (error_is_set(&error)) {
 353        qerror_report_err(error);
 354        error_free(error);
 355        return NULL;
 356    }
 357
 358    bs_opts = qdict_new();
 359    qemu_opts_to_qdict(all_opts, bs_opts);
 360    qemu_opts_absorb_qdict(opts, bs_opts, &error);
 361    if (error_is_set(&error)) {
 362        qerror_report_err(error);
 363        error_free(error);
 364        return NULL;
 365    }
 366
 367    if (id) {
 368        qdict_del(bs_opts, "id");
 369    }
 370
 371    has_driver_specific_opts = !!qdict_size(bs_opts);
 372
 373    /* extract parameters */
 374    bus_id  = qemu_opt_get_number(opts, "bus", 0);
 375    unit_id = qemu_opt_get_number(opts, "unit", -1);
 376    index   = qemu_opt_get_number(opts, "index", -1);
 377
 378    cyls  = qemu_opt_get_number(opts, "cyls", 0);
 379    heads = qemu_opt_get_number(opts, "heads", 0);
 380    secs  = qemu_opt_get_number(opts, "secs", 0);
 381
 382    snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
 383    ro = qemu_opt_get_bool(opts, "read-only", 0);
 384    copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false);
 385
 386    file = qemu_opt_get(opts, "file");
 387    serial = qemu_opt_get(opts, "serial");
 388
 389    if ((buf = qemu_opt_get(opts, "if")) != NULL) {
 390        for (type = 0; type < IF_COUNT && strcmp(buf, if_name[type]); type++)
 391            ;
 392        if (type == IF_COUNT) {
 393            error_report("unsupported bus type '%s'", buf);
 394            return NULL;
 395        }
 396    } else {
 397        type = block_default_type;
 398    }
 399
 400    max_devs = if_max_devs[type];
 401
 402    if (cyls || heads || secs) {
 403        if (cyls < 1) {
 404            error_report("invalid physical cyls number");
 405            return NULL;
 406        }
 407        if (heads < 1) {
 408            error_report("invalid physical heads number");
 409            return NULL;
 410        }
 411        if (secs < 1) {
 412            error_report("invalid physical secs number");
 413            return NULL;
 414        }
 415    }
 416
 417    if ((buf = qemu_opt_get(opts, "trans")) != NULL) {
 418        if (!cyls) {
 419            error_report("'%s' trans must be used with cyls, heads and secs",
 420                         buf);
 421            return NULL;
 422        }
 423        if (!strcmp(buf, "none"))
 424            translation = BIOS_ATA_TRANSLATION_NONE;
 425        else if (!strcmp(buf, "lba"))
 426            translation = BIOS_ATA_TRANSLATION_LBA;
 427        else if (!strcmp(buf, "auto"))
 428            translation = BIOS_ATA_TRANSLATION_AUTO;
 429        else {
 430            error_report("'%s' invalid translation type", buf);
 431            return NULL;
 432        }
 433    }
 434
 435    if ((buf = qemu_opt_get(opts, "media")) != NULL) {
 436        if (!strcmp(buf, "disk")) {
 437            media = MEDIA_DISK;
 438        } else if (!strcmp(buf, "cdrom")) {
 439            if (cyls || secs || heads) {
 440                error_report("CHS can't be set with media=%s", buf);
 441                return NULL;
 442            }
 443            media = MEDIA_CDROM;
 444        } else {
 445            error_report("'%s' invalid media", buf);
 446            return NULL;
 447        }
 448    }
 449
 450    if ((buf = qemu_opt_get(opts, "discard")) != NULL) {
 451        if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) {
 452            error_report("invalid discard option");
 453            return NULL;
 454        }
 455    }
 456
 457    if (qemu_opt_get_bool(opts, "cache.writeback", true)) {
 458        bdrv_flags |= BDRV_O_CACHE_WB;
 459    }
 460    if (qemu_opt_get_bool(opts, "cache.direct", false)) {
 461        bdrv_flags |= BDRV_O_NOCACHE;
 462    }
 463    if (qemu_opt_get_bool(opts, "cache.no-flush", false)) {
 464        bdrv_flags |= BDRV_O_NO_FLUSH;
 465    }
 466
 467#ifdef CONFIG_LINUX_AIO
 468    if ((buf = qemu_opt_get(opts, "aio")) != NULL) {
 469        if (!strcmp(buf, "native")) {
 470            bdrv_flags |= BDRV_O_NATIVE_AIO;
 471        } else if (!strcmp(buf, "threads")) {
 472            /* this is the default */
 473        } else {
 474           error_report("invalid aio option");
 475           return NULL;
 476        }
 477    }
 478#endif
 479
 480    if ((buf = qemu_opt_get(opts, "format")) != NULL) {
 481        if (is_help_option(buf)) {
 482            error_printf("Supported formats:");
 483            bdrv_iterate_format(bdrv_format_print, NULL);
 484            error_printf("\n");
 485            return NULL;
 486        }
 487
 488        drv = bdrv_find_whitelisted_format(buf, ro);
 489        if (!drv) {
 490            error_report("'%s' invalid format", buf);
 491            return NULL;
 492        }
 493    }
 494
 495    /* disk I/O throttling */
 496    io_limits.bps[BLOCK_IO_LIMIT_TOTAL]  =
 497        qemu_opt_get_number(opts, "throttling.bps-total", 0);
 498    io_limits.bps[BLOCK_IO_LIMIT_READ]   =
 499        qemu_opt_get_number(opts, "throttling.bps-read", 0);
 500    io_limits.bps[BLOCK_IO_LIMIT_WRITE]  =
 501        qemu_opt_get_number(opts, "throttling.bps-write", 0);
 502    io_limits.iops[BLOCK_IO_LIMIT_TOTAL] =
 503        qemu_opt_get_number(opts, "throttling.iops-total", 0);
 504    io_limits.iops[BLOCK_IO_LIMIT_READ]  =
 505        qemu_opt_get_number(opts, "throttling.iops-read", 0);
 506    io_limits.iops[BLOCK_IO_LIMIT_WRITE] =
 507        qemu_opt_get_number(opts, "throttling.iops-write", 0);
 508
 509    if (!do_check_io_limits(&io_limits, &error)) {
 510        error_report("%s", error_get_pretty(error));
 511        error_free(error);
 512        return NULL;
 513    }
 514
 515    if (qemu_opt_get(opts, "boot") != NULL) {
 516        fprintf(stderr, "qemu-kvm: boot=on|off is deprecated and will be "
 517                "ignored. Future versions will reject this parameter. Please "
 518                "update your scripts.\n");
 519    }
 520
 521    on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
 522    if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
 523        if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO && type != IF_NONE) {
 524            error_report("werror is not supported by this bus type");
 525            return NULL;
 526        }
 527
 528        on_write_error = parse_block_error_action(buf, 0);
 529        if (on_write_error < 0) {
 530            return NULL;
 531        }
 532    }
 533
 534    on_read_error = BLOCKDEV_ON_ERROR_REPORT;
 535    if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
 536        if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI && type != IF_NONE) {
 537            error_report("rerror is not supported by this bus type");
 538            return NULL;
 539        }
 540
 541        on_read_error = parse_block_error_action(buf, 1);
 542        if (on_read_error < 0) {
 543            return NULL;
 544        }
 545    }
 546
 547    if ((devaddr = qemu_opt_get(opts, "addr")) != NULL) {
 548        if (type != IF_VIRTIO) {
 549            error_report("addr is not supported by this bus type");
 550            return NULL;
 551        }
 552    }
 553
 554    /* compute bus and unit according index */
 555
 556    if (index != -1) {
 557        if (bus_id != 0 || unit_id != -1) {
 558            error_report("index cannot be used with bus and unit");
 559            return NULL;
 560        }
 561        bus_id = drive_index_to_bus_id(type, index);
 562        unit_id = drive_index_to_unit_id(type, index);
 563    }
 564
 565    /* if user doesn't specify a unit_id,
 566     * try to find the first free
 567     */
 568
 569    if (unit_id == -1) {
 570       unit_id = 0;
 571       while (drive_get(type, bus_id, unit_id) != NULL) {
 572           unit_id++;
 573           if (max_devs && unit_id >= max_devs) {
 574               unit_id -= max_devs;
 575               bus_id++;
 576           }
 577       }
 578    }
 579
 580    /* check unit id */
 581
 582    if (max_devs && unit_id >= max_devs) {
 583        error_report("unit %d too big (max is %d)",
 584                     unit_id, max_devs - 1);
 585        return NULL;
 586    }
 587
 588    /*
 589     * catch multiple definitions
 590     */
 591
 592    if (drive_get(type, bus_id, unit_id) != NULL) {
 593        error_report("drive with bus=%d, unit=%d (index=%d) exists",
 594                     bus_id, unit_id, index);
 595        return NULL;
 596    }
 597
 598    /* init */
 599
 600    dinfo = g_malloc0(sizeof(*dinfo));
 601    if ((buf = qemu_opts_id(opts)) != NULL) {
 602        dinfo->id = g_strdup(buf);
 603    } else {
 604        /* no id supplied -> create one */
 605        dinfo->id = g_malloc0(32);
 606        if (type == IF_IDE || type == IF_SCSI)
 607            mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
 608        if (max_devs)
 609            snprintf(dinfo->id, 32, "%s%i%s%i",
 610                     if_name[type], bus_id, mediastr, unit_id);
 611        else
 612            snprintf(dinfo->id, 32, "%s%s%i",
 613                     if_name[type], mediastr, unit_id);
 614    }
 615    dinfo->bdrv = bdrv_new(dinfo->id);
 616    dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0;
 617    dinfo->bdrv->read_only = ro;
 618    dinfo->devaddr = devaddr;
 619    dinfo->type = type;
 620    dinfo->bus = bus_id;
 621    dinfo->unit = unit_id;
 622    dinfo->cyls = cyls;
 623    dinfo->heads = heads;
 624    dinfo->secs = secs;
 625    dinfo->trans = translation;
 626    dinfo->opts = all_opts;
 627    dinfo->refcount = 1;
 628    if (serial != NULL) {
 629        dinfo->serial = g_strdup(serial);
 630    }
 631    QTAILQ_INSERT_TAIL(&drives, dinfo, next);
 632
 633    bdrv_set_on_error(dinfo->bdrv, on_read_error, on_write_error);
 634
 635    /* disk I/O throttling */
 636    bdrv_set_io_limits(dinfo->bdrv, &io_limits);
 637
 638    switch(type) {
 639    case IF_IDE:
 640    case IF_SCSI:
 641    case IF_XEN:
 642    case IF_NONE:
 643        dinfo->media_cd = media == MEDIA_CDROM;
 644        break;
 645    case IF_SD:
 646    case IF_FLOPPY:
 647    case IF_PFLASH:
 648    case IF_MTD:
 649        break;
 650    case IF_VIRTIO:
 651    {
 652        /* add virtio block device */
 653        QemuOpts *devopts;
 654        devopts = qemu_opts_create_nofail(qemu_find_opts("device"));
 655        if (arch_type == QEMU_ARCH_S390X) {
 656            qemu_opt_set(devopts, "driver", "virtio-blk-s390");
 657        } else {
 658            qemu_opt_set(devopts, "driver", "virtio-blk-pci");
 659        }
 660        qemu_opt_set(devopts, "drive", dinfo->id);
 661        if (devaddr)
 662            qemu_opt_set(devopts, "addr", devaddr);
 663        break;
 664    }
 665    default:
 666        abort();
 667    }
 668    if (!file || !*file) {
 669        if (has_driver_specific_opts) {
 670            file = NULL;
 671        } else {
 672            return dinfo;
 673        }
 674    }
 675    if (snapshot) {
 676        /* always use cache=unsafe with snapshot */
 677        bdrv_flags &= ~BDRV_O_CACHE_MASK;
 678        bdrv_flags |= (BDRV_O_SNAPSHOT|BDRV_O_CACHE_WB|BDRV_O_NO_FLUSH);
 679    }
 680
 681    if (copy_on_read) {
 682        bdrv_flags |= BDRV_O_COPY_ON_READ;
 683    }
 684
 685    if (runstate_check(RUN_STATE_INMIGRATE)) {
 686        bdrv_flags |= BDRV_O_INCOMING;
 687    }
 688
 689    if (media == MEDIA_CDROM) {
 690        /* CDROM is fine for any interface, don't check.  */
 691        ro = 1;
 692    } else if (ro == 1) {
 693        if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY &&
 694            type != IF_NONE && type != IF_PFLASH) {
 695            error_report("read-only not supported by this bus type");
 696            goto err;
 697        }
 698    }
 699
 700    bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
 701
 702    if (ro && copy_on_read) {
 703        error_report("warning: disabling copy_on_read on read-only drive");
 704    }
 705
 706    QINCREF(bs_opts);
 707    ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv);
 708
 709    if (ret < 0) {
 710        if (ret == -EMEDIUMTYPE) {
 711            error_report("could not open disk image %s: not in %s format",
 712                         file ?: dinfo->id, drv ? drv->format_name :
 713                         qdict_get_str(bs_opts, "driver"));
 714        } else {
 715            error_report("could not open disk image %s: %s",
 716                         file ?: dinfo->id, strerror(-ret));
 717        }
 718        goto err;
 719    }
 720
 721    if (bdrv_key_required(dinfo->bdrv))
 722        autostart = 0;
 723
 724    QDECREF(bs_opts);
 725    qemu_opts_del(opts);
 726
 727    return dinfo;
 728
 729err:
 730    qemu_opts_del(opts);
 731    QDECREF(bs_opts);
 732    bdrv_delete(dinfo->bdrv);
 733    g_free(dinfo->id);
 734    QTAILQ_REMOVE(&drives, dinfo, next);
 735    g_free(dinfo);
 736    return NULL;
 737}
 738
 739static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to)
 740{
 741    const char *value;
 742
 743    value = qemu_opt_get(opts, from);
 744    if (value) {
 745        qemu_opt_set(opts, to, value);
 746        qemu_opt_unset(opts, from);
 747    }
 748}
 749
 750DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
 751{
 752    const char *value;
 753
 754    /*
 755     * Check that only old options are used by copying into a QemuOpts with
 756     * stricter checks. Going through a QDict seems to be the easiest way to
 757     * achieve this...
 758     */
 759    QemuOpts* check_opts;
 760    QDict *qdict;
 761    Error *local_err = NULL;
 762
 763    qdict = qemu_opts_to_qdict(all_opts, NULL);
 764    check_opts = qemu_opts_from_qdict(&qemu_old_drive_opts, qdict, &local_err);
 765    QDECREF(qdict);
 766
 767    if (error_is_set(&local_err)) {
 768        qerror_report_err(local_err);
 769        error_free(local_err);
 770        return NULL;
 771    }
 772    qemu_opts_del(check_opts);
 773
 774    /* Change legacy command line options into QMP ones */
 775    qemu_opt_rename(all_opts, "iops", "throttling.iops-total");
 776    qemu_opt_rename(all_opts, "iops_rd", "throttling.iops-read");
 777    qemu_opt_rename(all_opts, "iops_wr", "throttling.iops-write");
 778
 779    qemu_opt_rename(all_opts, "bps", "throttling.bps-total");
 780    qemu_opt_rename(all_opts, "bps_rd", "throttling.bps-read");
 781    qemu_opt_rename(all_opts, "bps_wr", "throttling.bps-write");
 782
 783    qemu_opt_rename(all_opts, "readonly", "read-only");
 784
 785    value = qemu_opt_get(all_opts, "cache");
 786    if (value) {
 787        int flags = 0;
 788
 789        if (bdrv_parse_cache_flags(value, &flags) != 0) {
 790            error_report("invalid cache option");
 791            return NULL;
 792        }
 793
 794        /* Specific options take precedence */
 795        if (!qemu_opt_get(all_opts, "cache.writeback")) {
 796            qemu_opt_set_bool(all_opts, "cache.writeback",
 797                              !!(flags & BDRV_O_CACHE_WB));
 798        }
 799        if (!qemu_opt_get(all_opts, "cache.direct")) {
 800            qemu_opt_set_bool(all_opts, "cache.direct",
 801                              !!(flags & BDRV_O_NOCACHE));
 802        }
 803        if (!qemu_opt_get(all_opts, "cache.no-flush")) {
 804            qemu_opt_set_bool(all_opts, "cache.no-flush",
 805                              !!(flags & BDRV_O_NO_FLUSH));
 806        }
 807        qemu_opt_unset(all_opts, "cache");
 808    }
 809
 810    return blockdev_init(all_opts, block_default_type);
 811}
 812
 813void do_commit(Monitor *mon, const QDict *qdict)
 814{
 815    const char *device = qdict_get_str(qdict, "device");
 816    BlockDriverState *bs;
 817    int ret;
 818
 819    if (!strcmp(device, "all")) {
 820        ret = bdrv_commit_all();
 821    } else {
 822        bs = bdrv_find(device);
 823        if (!bs) {
 824            monitor_printf(mon, "Device '%s' not found\n", device);
 825            return;
 826        }
 827        ret = bdrv_commit(bs);
 828    }
 829    if (ret < 0) {
 830        monitor_printf(mon, "'commit' error for '%s': %s\n", device,
 831                       strerror(-ret));
 832    }
 833}
 834
 835static void blockdev_do_action(int kind, void *data, Error **errp)
 836{
 837    TransactionAction action;
 838    TransactionActionList list;
 839
 840    action.kind = kind;
 841    action.data = data;
 842    list.value = &action;
 843    list.next = NULL;
 844    qmp_transaction(&list, errp);
 845}
 846
 847void qmp_blockdev_snapshot_sync(const char *device, const char *snapshot_file,
 848                                bool has_format, const char *format,
 849                                bool has_mode, enum NewImageMode mode,
 850                                Error **errp)
 851{
 852    BlockdevSnapshot snapshot = {
 853        .device = (char *) device,
 854        .snapshot_file = (char *) snapshot_file,
 855        .has_format = has_format,
 856        .format = (char *) format,
 857        .has_mode = has_mode,
 858        .mode = mode,
 859    };
 860    blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
 861                       &snapshot, errp);
 862}
 863
 864
 865/* New and old BlockDriverState structs for group snapshots */
 866
 867typedef struct BlkTransactionState BlkTransactionState;
 868
 869/* Only prepare() may fail. In a single transaction, only one of commit() or
 870   abort() will be called, clean() will always be called if it present. */
 871typedef struct BdrvActionOps {
 872    /* Size of state struct, in bytes. */
 873    size_t instance_size;
 874    /* Prepare the work, must NOT be NULL. */
 875    void (*prepare)(BlkTransactionState *common, Error **errp);
 876    /* Commit the changes, can be NULL. */
 877    void (*commit)(BlkTransactionState *common);
 878    /* Abort the changes on fail, can be NULL. */
 879    void (*abort)(BlkTransactionState *common);
 880    /* Clean up resource in the end, can be NULL. */
 881    void (*clean)(BlkTransactionState *common);
 882} BdrvActionOps;
 883
 884/*
 885 * This structure must be arranged as first member in child type, assuming
 886 * that compiler will also arrange it to the same address with parent instance.
 887 * Later it will be used in free().
 888 */
 889struct BlkTransactionState {
 890    TransactionAction *action;
 891    const BdrvActionOps *ops;
 892    QSIMPLEQ_ENTRY(BlkTransactionState) entry;
 893};
 894
 895/* external snapshot private data */
 896typedef struct ExternalSnapshotState {
 897    BlkTransactionState common;
 898    BlockDriverState *old_bs;
 899    BlockDriverState *new_bs;
 900} ExternalSnapshotState;
 901
 902static void external_snapshot_prepare(BlkTransactionState *common,
 903                                      Error **errp)
 904{
 905    BlockDriver *drv;
 906    int flags, ret;
 907    Error *local_err = NULL;
 908    const char *device;
 909    const char *new_image_file;
 910    const char *format = "qcow2";
 911    enum NewImageMode mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
 912    ExternalSnapshotState *state =
 913                             DO_UPCAST(ExternalSnapshotState, common, common);
 914    TransactionAction *action = common->action;
 915
 916    /* get parameters */
 917    g_assert(action->kind == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC);
 918
 919    device = action->blockdev_snapshot_sync->device;
 920    new_image_file = action->blockdev_snapshot_sync->snapshot_file;
 921    if (action->blockdev_snapshot_sync->has_format) {
 922        format = action->blockdev_snapshot_sync->format;
 923    }
 924    if (action->blockdev_snapshot_sync->has_mode) {
 925        mode = action->blockdev_snapshot_sync->mode;
 926    }
 927
 928    /* start processing */
 929    drv = bdrv_find_format(format);
 930    if (!drv) {
 931        error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
 932        return;
 933    }
 934
 935    state->old_bs = bdrv_find(device);
 936    if (!state->old_bs) {
 937        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
 938        return;
 939    }
 940
 941    if (!bdrv_is_inserted(state->old_bs)) {
 942        error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
 943        return;
 944    }
 945
 946    if (bdrv_in_use(state->old_bs)) {
 947        error_set(errp, QERR_DEVICE_IN_USE, device);
 948        return;
 949    }
 950
 951    if (!bdrv_is_read_only(state->old_bs)) {
 952        if (bdrv_flush(state->old_bs)) {
 953            error_set(errp, QERR_IO_ERROR);
 954            return;
 955        }
 956    }
 957
 958    flags = state->old_bs->open_flags;
 959
 960    /* create new image w/backing file */
 961    if (mode != NEW_IMAGE_MODE_EXISTING) {
 962        bdrv_img_create(new_image_file, format,
 963                        state->old_bs->filename,
 964                        state->old_bs->drv->format_name,
 965                        NULL, -1, flags, &local_err, false);
 966        if (error_is_set(&local_err)) {
 967            error_propagate(errp, local_err);
 968            return;
 969        }
 970    }
 971
 972    /* We will manually add the backing_hd field to the bs later */
 973    state->new_bs = bdrv_new("");
 974    /* TODO Inherit bs->options or only take explicit options with an
 975     * extended QMP command? */
 976    ret = bdrv_open(state->new_bs, new_image_file, NULL,
 977                    flags | BDRV_O_NO_BACKING, drv);
 978    if (ret != 0) {
 979        error_setg_file_open(errp, -ret, new_image_file);
 980    }
 981}
 982
 983static void external_snapshot_commit(BlkTransactionState *common)
 984{
 985    ExternalSnapshotState *state =
 986                             DO_UPCAST(ExternalSnapshotState, common, common);
 987
 988    /* This removes our old bs and adds the new bs */
 989    bdrv_append(state->new_bs, state->old_bs);
 990    /* We don't need (or want) to use the transactional
 991     * bdrv_reopen_multiple() across all the entries at once, because we
 992     * don't want to abort all of them if one of them fails the reopen */
 993    bdrv_reopen(state->new_bs, state->new_bs->open_flags & ~BDRV_O_RDWR,
 994                NULL);
 995}
 996
 997static void external_snapshot_abort(BlkTransactionState *common)
 998{
 999    ExternalSnapshotState *state =
1000                             DO_UPCAST(ExternalSnapshotState, common, common);
1001    if (state->new_bs) {
1002        bdrv_delete(state->new_bs);
1003    }
1004}
1005
1006typedef struct DriveBackupState {
1007    BlkTransactionState common;
1008    BlockDriverState *bs;
1009    BlockJob *job;
1010} DriveBackupState;
1011
1012static void drive_backup_prepare(BlkTransactionState *common, Error **errp)
1013{
1014    DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
1015    DriveBackup *backup;
1016    Error *local_err = NULL;
1017
1018    assert(common->action->kind == TRANSACTION_ACTION_KIND_DRIVE_BACKUP);
1019    backup = common->action->drive_backup;
1020
1021    qmp_drive_backup(backup->device, backup->target,
1022                     backup->has_format, backup->format,
1023                     backup->sync,
1024                     backup->has_mode, backup->mode,
1025                     backup->has_speed, backup->speed,
1026                     backup->has_on_source_error, backup->on_source_error,
1027                     backup->has_on_target_error, backup->on_target_error,
1028                     &local_err);
1029    if (error_is_set(&local_err)) {
1030        error_propagate(errp, local_err);
1031        state->bs = NULL;
1032        state->job = NULL;
1033        return;
1034    }
1035
1036    state->bs = bdrv_find(backup->device);
1037    state->job = state->bs->job;
1038}
1039
1040static void drive_backup_abort(BlkTransactionState *common)
1041{
1042    DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
1043    BlockDriverState *bs = state->bs;
1044
1045    /* Only cancel if it's the job we started */
1046    if (bs && bs->job && bs->job == state->job) {
1047        block_job_cancel_sync(bs->job);
1048    }
1049}
1050
1051static void abort_prepare(BlkTransactionState *common, Error **errp)
1052{
1053    error_setg(errp, "Transaction aborted using Abort action");
1054}
1055
1056static void abort_commit(BlkTransactionState *common)
1057{
1058    g_assert_not_reached(); /* this action never succeeds */
1059}
1060
1061static const BdrvActionOps actions[] = {
1062    [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = {
1063        .instance_size = sizeof(ExternalSnapshotState),
1064        .prepare  = external_snapshot_prepare,
1065        .commit   = external_snapshot_commit,
1066        .abort = external_snapshot_abort,
1067    },
1068    [TRANSACTION_ACTION_KIND_DRIVE_BACKUP] = {
1069        .instance_size = sizeof(DriveBackupState),
1070        .prepare = drive_backup_prepare,
1071        .abort = drive_backup_abort,
1072    },
1073    [TRANSACTION_ACTION_KIND_ABORT] = {
1074        .instance_size = sizeof(BlkTransactionState),
1075        .prepare = abort_prepare,
1076        .commit = abort_commit,
1077    },
1078};
1079
1080/*
1081 * 'Atomic' group snapshots.  The snapshots are taken as a set, and if any fail
1082 *  then we do not pivot any of the devices in the group, and abandon the
1083 *  snapshots
1084 */
1085void qmp_transaction(TransactionActionList *dev_list, Error **errp)
1086{
1087    TransactionActionList *dev_entry = dev_list;
1088    BlkTransactionState *state, *next;
1089    Error *local_err = NULL;
1090
1091    QSIMPLEQ_HEAD(snap_bdrv_states, BlkTransactionState) snap_bdrv_states;
1092    QSIMPLEQ_INIT(&snap_bdrv_states);
1093
1094    /* drain all i/o before any snapshots */
1095    bdrv_drain_all();
1096
1097    /* We don't do anything in this loop that commits us to the snapshot */
1098    while (NULL != dev_entry) {
1099        TransactionAction *dev_info = NULL;
1100        const BdrvActionOps *ops;
1101
1102        dev_info = dev_entry->value;
1103        dev_entry = dev_entry->next;
1104
1105        assert(dev_info->kind < ARRAY_SIZE(actions));
1106
1107        ops = &actions[dev_info->kind];
1108        state = g_malloc0(ops->instance_size);
1109        state->ops = ops;
1110        state->action = dev_info;
1111        QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
1112
1113        state->ops->prepare(state, &local_err);
1114        if (error_is_set(&local_err)) {
1115            error_propagate(errp, local_err);
1116            goto delete_and_fail;
1117        }
1118    }
1119
1120    QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
1121        if (state->ops->commit) {
1122            state->ops->commit(state);
1123        }
1124    }
1125
1126    /* success */
1127    goto exit;
1128
1129delete_and_fail:
1130    /*
1131    * failure, and it is all-or-none; abandon each new bs, and keep using
1132    * the original bs for all images
1133    */
1134    QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
1135        if (state->ops->abort) {
1136            state->ops->abort(state);
1137        }
1138    }
1139exit:
1140    QSIMPLEQ_FOREACH_SAFE(state, &snap_bdrv_states, entry, next) {
1141        if (state->ops->clean) {
1142            state->ops->clean(state);
1143        }
1144        g_free(state);
1145    }
1146}
1147
1148
1149static void eject_device(BlockDriverState *bs, int force, Error **errp)
1150{
1151    if (bdrv_in_use(bs)) {
1152        error_set(errp, QERR_DEVICE_IN_USE, bdrv_get_device_name(bs));
1153        return;
1154    }
1155    if (!bdrv_dev_has_removable_media(bs)) {
1156        error_set(errp, QERR_DEVICE_NOT_REMOVABLE, bdrv_get_device_name(bs));
1157        return;
1158    }
1159
1160    if (bdrv_dev_is_medium_locked(bs) && !bdrv_dev_is_tray_open(bs)) {
1161        bdrv_dev_eject_request(bs, force);
1162        if (!force) {
1163            error_set(errp, QERR_DEVICE_LOCKED, bdrv_get_device_name(bs));
1164            return;
1165        }
1166    }
1167
1168    bdrv_close(bs);
1169}
1170
1171void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
1172{
1173    BlockDriverState *bs;
1174
1175    bs = bdrv_find(device);
1176    if (!bs) {
1177        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1178        return;
1179    }
1180
1181    eject_device(bs, force, errp);
1182}
1183
1184void qmp_block_passwd(const char *device, const char *password, Error **errp)
1185{
1186    BlockDriverState *bs;
1187    int err;
1188
1189    bs = bdrv_find(device);
1190    if (!bs) {
1191        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1192        return;
1193    }
1194
1195    err = bdrv_set_key(bs, password);
1196    if (err == -EINVAL) {
1197        error_set(errp, QERR_DEVICE_NOT_ENCRYPTED, bdrv_get_device_name(bs));
1198        return;
1199    } else if (err < 0) {
1200        error_set(errp, QERR_INVALID_PASSWORD);
1201        return;
1202    }
1203}
1204
1205static void qmp_bdrv_open_encrypted(BlockDriverState *bs, const char *filename,
1206                                    int bdrv_flags, BlockDriver *drv,
1207                                    const char *password, Error **errp)
1208{
1209    int ret;
1210
1211    ret = bdrv_open(bs, filename, NULL, bdrv_flags, drv);
1212    if (ret < 0) {
1213        error_setg_file_open(errp, -ret, filename);
1214        return;
1215    }
1216
1217    if (bdrv_key_required(bs)) {
1218        if (password) {
1219            if (bdrv_set_key(bs, password) < 0) {
1220                error_set(errp, QERR_INVALID_PASSWORD);
1221            }
1222        } else {
1223            error_set(errp, QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs),
1224                      bdrv_get_encrypted_filename(bs));
1225        }
1226    } else if (password) {
1227        error_set(errp, QERR_DEVICE_NOT_ENCRYPTED, bdrv_get_device_name(bs));
1228    }
1229}
1230
1231void qmp_change_blockdev(const char *device, const char *filename,
1232                         bool has_format, const char *format, Error **errp)
1233{
1234    BlockDriverState *bs;
1235    BlockDriver *drv = NULL;
1236    int bdrv_flags;
1237    Error *err = NULL;
1238
1239    bs = bdrv_find(device);
1240    if (!bs) {
1241        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1242        return;
1243    }
1244
1245    if (format) {
1246        drv = bdrv_find_whitelisted_format(format, bs->read_only);
1247        if (!drv) {
1248            error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
1249            return;
1250        }
1251    }
1252
1253    eject_device(bs, 0, &err);
1254    if (error_is_set(&err)) {
1255        error_propagate(errp, err);
1256        return;
1257    }
1258
1259    bdrv_flags = bdrv_is_read_only(bs) ? 0 : BDRV_O_RDWR;
1260    bdrv_flags |= bdrv_is_snapshot(bs) ? BDRV_O_SNAPSHOT : 0;
1261
1262    qmp_bdrv_open_encrypted(bs, filename, bdrv_flags, drv, NULL, errp);
1263}
1264
1265/* throttling disk I/O limits */
1266void qmp_block_set_io_throttle(const char *device, int64_t bps, int64_t bps_rd,
1267                               int64_t bps_wr, int64_t iops, int64_t iops_rd,
1268                               int64_t iops_wr, Error **errp)
1269{
1270    BlockIOLimit io_limits;
1271    BlockDriverState *bs;
1272
1273    bs = bdrv_find(device);
1274    if (!bs) {
1275        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1276        return;
1277    }
1278
1279    io_limits.bps[BLOCK_IO_LIMIT_TOTAL] = bps;
1280    io_limits.bps[BLOCK_IO_LIMIT_READ]  = bps_rd;
1281    io_limits.bps[BLOCK_IO_LIMIT_WRITE] = bps_wr;
1282    io_limits.iops[BLOCK_IO_LIMIT_TOTAL]= iops;
1283    io_limits.iops[BLOCK_IO_LIMIT_READ] = iops_rd;
1284    io_limits.iops[BLOCK_IO_LIMIT_WRITE]= iops_wr;
1285
1286    if (!do_check_io_limits(&io_limits, errp)) {
1287        return;
1288    }
1289
1290    bs->io_limits = io_limits;
1291
1292    if (!bs->io_limits_enabled && bdrv_io_limits_enabled(bs)) {
1293        bdrv_io_limits_enable(bs);
1294    } else if (bs->io_limits_enabled && !bdrv_io_limits_enabled(bs)) {
1295        bdrv_io_limits_disable(bs);
1296    } else {
1297        if (bs->block_timer) {
1298            qemu_mod_timer(bs->block_timer, qemu_get_clock_ns(vm_clock));
1299        }
1300    }
1301}
1302
1303int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
1304{
1305    const char *id = qdict_get_str(qdict, "id");
1306    BlockDriverState *bs;
1307
1308    bs = bdrv_find(id);
1309    if (!bs) {
1310        qerror_report(QERR_DEVICE_NOT_FOUND, id);
1311        return -1;
1312    }
1313    if (bdrv_in_use(bs)) {
1314        qerror_report(QERR_DEVICE_IN_USE, id);
1315        return -1;
1316    }
1317
1318    /* quiesce block driver; prevent further io */
1319    bdrv_drain_all();
1320    bdrv_flush(bs);
1321    bdrv_close(bs);
1322
1323    /* if we have a device attached to this BlockDriverState
1324     * then we need to make the drive anonymous until the device
1325     * can be removed.  If this is a drive with no device backing
1326     * then we can just get rid of the block driver state right here.
1327     */
1328    if (bdrv_get_attached_dev(bs)) {
1329        bdrv_make_anon(bs);
1330
1331        /* Further I/O must not pause the guest */
1332        bdrv_set_on_error(bs, BLOCKDEV_ON_ERROR_REPORT,
1333                          BLOCKDEV_ON_ERROR_REPORT);
1334    } else {
1335        drive_uninit(drive_get_by_blockdev(bs));
1336    }
1337
1338    return 0;
1339}
1340
1341void qmp_block_resize(const char *device, int64_t size, Error **errp)
1342{
1343    BlockDriverState *bs;
1344    int ret;
1345
1346    bs = bdrv_find(device);
1347    if (!bs) {
1348        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1349        return;
1350    }
1351
1352    if (size < 0) {
1353        error_set(errp, QERR_INVALID_PARAMETER_VALUE, "size", "a >0 size");
1354        return;
1355    }
1356
1357    /* complete all in-flight operations before resizing the device */
1358    bdrv_drain_all();
1359
1360    ret = bdrv_truncate(bs, size);
1361    switch (ret) {
1362    case 0:
1363        break;
1364    case -ENOMEDIUM:
1365        error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
1366        break;
1367    case -ENOTSUP:
1368        error_set(errp, QERR_UNSUPPORTED);
1369        break;
1370    case -EACCES:
1371        error_set(errp, QERR_DEVICE_IS_READ_ONLY, device);
1372        break;
1373    case -EBUSY:
1374        error_set(errp, QERR_DEVICE_IN_USE, device);
1375        break;
1376    default:
1377        error_setg_errno(errp, -ret, "Could not resize");
1378        break;
1379    }
1380}
1381
1382static void block_job_cb(void *opaque, int ret)
1383{
1384    BlockDriverState *bs = opaque;
1385    QObject *obj;
1386
1387    trace_block_job_cb(bs, bs->job, ret);
1388
1389    assert(bs->job);
1390    obj = qobject_from_block_job(bs->job);
1391    if (ret < 0) {
1392        QDict *dict = qobject_to_qdict(obj);
1393        qdict_put(dict, "error", qstring_from_str(strerror(-ret)));
1394    }
1395
1396    if (block_job_is_cancelled(bs->job)) {
1397        monitor_protocol_event(QEVENT_BLOCK_JOB_CANCELLED, obj);
1398    } else {
1399        monitor_protocol_event(QEVENT_BLOCK_JOB_COMPLETED, obj);
1400    }
1401    qobject_decref(obj);
1402
1403    drive_put_ref_bh_schedule(drive_get_by_blockdev(bs));
1404}
1405
1406void qmp_block_stream(const char *device, bool has_base,
1407                      const char *base, bool has_speed, int64_t speed,
1408                      bool has_on_error, BlockdevOnError on_error,
1409                      Error **errp)
1410{
1411    BlockDriverState *bs;
1412    BlockDriverState *base_bs = NULL;
1413    Error *local_err = NULL;
1414
1415    if (!has_on_error) {
1416        on_error = BLOCKDEV_ON_ERROR_REPORT;
1417    }
1418
1419    bs = bdrv_find(device);
1420    if (!bs) {
1421        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1422        return;
1423    }
1424
1425    if (base) {
1426        base_bs = bdrv_find_backing_image(bs, base);
1427        if (base_bs == NULL) {
1428            error_set(errp, QERR_BASE_NOT_FOUND, base);
1429            return;
1430        }
1431    }
1432
1433    stream_start(bs, base_bs, base, has_speed ? speed : 0,
1434                 on_error, block_job_cb, bs, &local_err);
1435    if (error_is_set(&local_err)) {
1436        error_propagate(errp, local_err);
1437        return;
1438    }
1439
1440    /* Grab a reference so hotplug does not delete the BlockDriverState from
1441     * underneath us.
1442     */
1443    drive_get_ref(drive_get_by_blockdev(bs));
1444
1445    trace_qmp_block_stream(bs, bs->job);
1446}
1447
1448void qmp_block_commit(const char *device,
1449                      bool has_base, const char *base, const char *top,
1450                      bool has_speed, int64_t speed,
1451                      Error **errp)
1452{
1453    BlockDriverState *bs;
1454    BlockDriverState *base_bs, *top_bs;
1455    Error *local_err = NULL;
1456    /* This will be part of the QMP command, if/when the
1457     * BlockdevOnError change for blkmirror makes it in
1458     */
1459    BlockdevOnError on_error = BLOCKDEV_ON_ERROR_REPORT;
1460
1461    /* drain all i/o before commits */
1462    bdrv_drain_all();
1463
1464    bs = bdrv_find(device);
1465    if (!bs) {
1466        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1467        return;
1468    }
1469
1470    /* default top_bs is the active layer */
1471    top_bs = bs;
1472
1473    if (top) {
1474        if (strcmp(bs->filename, top) != 0) {
1475            top_bs = bdrv_find_backing_image(bs, top);
1476        }
1477    }
1478
1479    if (top_bs == NULL) {
1480        error_setg(errp, "Top image file %s not found", top ? top : "NULL");
1481        return;
1482    }
1483
1484    if (has_base && base) {
1485        base_bs = bdrv_find_backing_image(top_bs, base);
1486    } else {
1487        base_bs = bdrv_find_base(top_bs);
1488    }
1489
1490    if (base_bs == NULL) {
1491        error_set(errp, QERR_BASE_NOT_FOUND, base ? base : "NULL");
1492        return;
1493    }
1494
1495    commit_start(bs, base_bs, top_bs, speed, on_error, block_job_cb, bs,
1496                &local_err);
1497    if (local_err != NULL) {
1498        error_propagate(errp, local_err);
1499        return;
1500    }
1501    /* Grab a reference so hotplug does not delete the BlockDriverState from
1502     * underneath us.
1503     */
1504    drive_get_ref(drive_get_by_blockdev(bs));
1505}
1506
1507void qmp_drive_backup(const char *device, const char *target,
1508                      bool has_format, const char *format,
1509                      enum MirrorSyncMode sync,
1510                      bool has_mode, enum NewImageMode mode,
1511                      bool has_speed, int64_t speed,
1512                      bool has_on_source_error, BlockdevOnError on_source_error,
1513                      bool has_on_target_error, BlockdevOnError on_target_error,
1514                      Error **errp)
1515{
1516    BlockDriverState *bs;
1517    BlockDriverState *target_bs;
1518    BlockDriverState *source = NULL;
1519    BlockDriver *drv = NULL;
1520    Error *local_err = NULL;
1521    int flags;
1522    int64_t size;
1523    int ret;
1524
1525    if (!has_speed) {
1526        speed = 0;
1527    }
1528    if (!has_on_source_error) {
1529        on_source_error = BLOCKDEV_ON_ERROR_REPORT;
1530    }
1531    if (!has_on_target_error) {
1532        on_target_error = BLOCKDEV_ON_ERROR_REPORT;
1533    }
1534    if (!has_mode) {
1535        mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
1536    }
1537
1538    bs = bdrv_find(device);
1539    if (!bs) {
1540        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1541        return;
1542    }
1543
1544    if (!bdrv_is_inserted(bs)) {
1545        error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
1546        return;
1547    }
1548
1549    if (!has_format) {
1550        format = mode == NEW_IMAGE_MODE_EXISTING ? NULL : bs->drv->format_name;
1551    }
1552    if (format) {
1553        drv = bdrv_find_format(format);
1554        if (!drv) {
1555            error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
1556            return;
1557        }
1558    }
1559
1560    if (bdrv_in_use(bs)) {
1561        error_set(errp, QERR_DEVICE_IN_USE, device);
1562        return;
1563    }
1564
1565    flags = bs->open_flags | BDRV_O_RDWR;
1566
1567    /* See if we have a backing HD we can use to create our new image
1568     * on top of. */
1569    if (sync == MIRROR_SYNC_MODE_TOP) {
1570        source = bs->backing_hd;
1571        if (!source) {
1572            sync = MIRROR_SYNC_MODE_FULL;
1573        }
1574    }
1575    if (sync == MIRROR_SYNC_MODE_NONE) {
1576        source = bs;
1577    }
1578
1579    size = bdrv_getlength(bs);
1580    if (size < 0) {
1581        error_setg_errno(errp, -size, "bdrv_getlength failed");
1582        return;
1583    }
1584
1585    if (mode != NEW_IMAGE_MODE_EXISTING) {
1586        assert(format && drv);
1587        if (source) {
1588            bdrv_img_create(target, format, source->filename,
1589                            source->drv->format_name, NULL,
1590                            size, flags, &local_err, false);
1591        } else {
1592            bdrv_img_create(target, format, NULL, NULL, NULL,
1593                            size, flags, &local_err, false);
1594        }
1595    }
1596
1597    if (error_is_set(&local_err)) {
1598        error_propagate(errp, local_err);
1599        return;
1600    }
1601
1602    target_bs = bdrv_new("");
1603    ret = bdrv_open(target_bs, target, NULL, flags, drv);
1604    if (ret < 0) {
1605        bdrv_delete(target_bs);
1606        error_setg_file_open(errp, -ret, target);
1607        return;
1608    }
1609
1610    backup_start(bs, target_bs, speed, sync, on_source_error, on_target_error,
1611                 block_job_cb, bs, &local_err);
1612    if (local_err != NULL) {
1613        bdrv_delete(target_bs);
1614        error_propagate(errp, local_err);
1615        return;
1616    }
1617
1618    /* Grab a reference so hotplug does not delete the BlockDriverState from
1619     * underneath us.
1620     */
1621    drive_get_ref(drive_get_by_blockdev(bs));
1622}
1623
1624#define DEFAULT_MIRROR_BUF_SIZE   (10 << 20)
1625
1626void qmp_drive_mirror(const char *device, const char *target,
1627                      bool has_format, const char *format,
1628                      enum MirrorSyncMode sync,
1629                      bool has_mode, enum NewImageMode mode,
1630                      bool has_speed, int64_t speed,
1631                      bool has_granularity, uint32_t granularity,
1632                      bool has_buf_size, int64_t buf_size,
1633                      bool has_on_source_error, BlockdevOnError on_source_error,
1634                      bool has_on_target_error, BlockdevOnError on_target_error,
1635                      Error **errp)
1636{
1637    BlockDriverState *bs;
1638    BlockDriverState *source, *target_bs;
1639    BlockDriver *drv = NULL;
1640    Error *local_err = NULL;
1641    int flags;
1642    int64_t size;
1643    int ret;
1644
1645    if (!has_speed) {
1646        speed = 0;
1647    }
1648    if (!has_on_source_error) {
1649        on_source_error = BLOCKDEV_ON_ERROR_REPORT;
1650    }
1651    if (!has_on_target_error) {
1652        on_target_error = BLOCKDEV_ON_ERROR_REPORT;
1653    }
1654    if (!has_mode) {
1655        mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
1656    }
1657    if (!has_granularity) {
1658        granularity = 0;
1659    }
1660    if (!has_buf_size) {
1661        buf_size = DEFAULT_MIRROR_BUF_SIZE;
1662    }
1663
1664    if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) {
1665        error_set(errp, QERR_INVALID_PARAMETER, device);
1666        return;
1667    }
1668    if (granularity & (granularity - 1)) {
1669        error_set(errp, QERR_INVALID_PARAMETER, device);
1670        return;
1671    }
1672
1673    bs = bdrv_find(device);
1674    if (!bs) {
1675        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
1676        return;
1677    }
1678
1679    if (!bdrv_is_inserted(bs)) {
1680        error_set(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
1681        return;
1682    }
1683
1684    if (!has_format) {
1685        format = mode == NEW_IMAGE_MODE_EXISTING ? NULL : bs->drv->format_name;
1686    }
1687    if (format) {
1688        drv = bdrv_find_format(format);
1689        if (!drv) {
1690            error_set(errp, QERR_INVALID_BLOCK_FORMAT, format);
1691            return;
1692        }
1693    }
1694
1695    if (bdrv_in_use(bs)) {
1696        error_set(errp, QERR_DEVICE_IN_USE, device);
1697        return;
1698    }
1699
1700    flags = bs->open_flags | BDRV_O_RDWR;
1701    source = bs->backing_hd;
1702    if (!source && sync == MIRROR_SYNC_MODE_TOP) {
1703        sync = MIRROR_SYNC_MODE_FULL;
1704    }
1705
1706    size = bdrv_getlength(bs);
1707    if (size < 0) {
1708        error_setg_errno(errp, -size, "bdrv_getlength failed");
1709        return;
1710    }
1711
1712    if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) {
1713        /* create new image w/o backing file */
1714        assert(format && drv);
1715        bdrv_img_create(target, format,
1716                        NULL, NULL, NULL, size, flags, &local_err, false);
1717    } else {
1718        switch (mode) {
1719        case NEW_IMAGE_MODE_EXISTING:
1720            ret = 0;
1721            break;
1722        case NEW_IMAGE_MODE_ABSOLUTE_PATHS:
1723            /* create new image with backing file */
1724            bdrv_img_create(target, format,
1725                            source->filename,
1726                            source->drv->format_name,
1727                            NULL, size, flags, &local_err, false);
1728            break;
1729        default:
1730            abort();
1731        }
1732    }
1733
1734    if (error_is_set(&local_err)) {
1735        error_propagate(errp, local_err);
1736        return;
1737    }
1738
1739    /* Mirroring takes care of copy-on-write using the source's backing
1740     * file.
1741     */
1742    target_bs = bdrv_new("");
1743    ret = bdrv_open(target_bs, target, NULL, flags | BDRV_O_NO_BACKING, drv);
1744    if (ret < 0) {
1745        bdrv_delete(target_bs);
1746        error_setg_file_open(errp, -ret, target);
1747        return;
1748    }
1749
1750    mirror_start(bs, target_bs, speed, granularity, buf_size, sync,
1751                 on_source_error, on_target_error,
1752                 block_job_cb, bs, &local_err);
1753    if (local_err != NULL) {
1754        bdrv_delete(target_bs);
1755        error_propagate(errp, local_err);
1756        return;
1757    }
1758
1759    /* Grab a reference so hotplug does not delete the BlockDriverState from
1760     * underneath us.
1761     */
1762    drive_get_ref(drive_get_by_blockdev(bs));
1763}
1764
1765static BlockJob *find_block_job(const char *device)
1766{
1767    BlockDriverState *bs;
1768
1769    bs = bdrv_find(device);
1770    if (!bs || !bs->job) {
1771        return NULL;
1772    }
1773    return bs->job;
1774}
1775
1776void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp)
1777{
1778    BlockJob *job = find_block_job(device);
1779
1780    if (!job) {
1781        error_set(errp, QERR_BLOCK_JOB_NOT_ACTIVE, device);
1782        return;
1783    }
1784
1785    block_job_set_speed(job, speed, errp);
1786}
1787
1788void qmp_block_job_cancel(const char *device,
1789                          bool has_force, bool force, Error **errp)
1790{
1791    BlockJob *job = find_block_job(device);
1792
1793    if (!has_force) {
1794        force = false;
1795    }
1796
1797    if (!job) {
1798        error_set(errp, QERR_BLOCK_JOB_NOT_ACTIVE, device);
1799        return;
1800    }
1801    if (job->paused && !force) {
1802        error_set(errp, QERR_BLOCK_JOB_PAUSED, device);
1803        return;
1804    }
1805
1806    trace_qmp_block_job_cancel(job);
1807    block_job_cancel(job);
1808}
1809
1810void qmp_block_job_pause(const char *device, Error **errp)
1811{
1812    BlockJob *job = find_block_job(device);
1813
1814    if (!job) {
1815        error_set(errp, QERR_BLOCK_JOB_NOT_ACTIVE, device);
1816        return;
1817    }
1818
1819    trace_qmp_block_job_pause(job);
1820    block_job_pause(job);
1821}
1822
1823void qmp_block_job_resume(const char *device, Error **errp)
1824{
1825    BlockJob *job = find_block_job(device);
1826
1827    if (!job) {
1828        error_set(errp, QERR_BLOCK_JOB_NOT_ACTIVE, device);
1829        return;
1830    }
1831
1832    trace_qmp_block_job_resume(job);
1833    block_job_resume(job);
1834}
1835
1836void qmp_block_job_complete(const char *device, Error **errp)
1837{
1838    BlockJob *job = find_block_job(device);
1839
1840    if (!job) {
1841        error_set(errp, QERR_BLOCK_JOB_NOT_ACTIVE, device);
1842        return;
1843    }
1844
1845    trace_qmp_block_job_complete(job);
1846    block_job_complete(job, errp);
1847}
1848
1849static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs)
1850{
1851    BlockJobInfoList **prev = opaque;
1852    BlockJob *job = bs->job;
1853
1854    if (job) {
1855        BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
1856        elem->value = block_job_query(bs->job);
1857        (*prev)->next = elem;
1858        *prev = elem;
1859    }
1860}
1861
1862BlockJobInfoList *qmp_query_block_jobs(Error **errp)
1863{
1864    /* Dummy is a fake list element for holding the head pointer */
1865    BlockJobInfoList dummy = {};
1866    BlockJobInfoList *prev = &dummy;
1867    bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
1868    return dummy.next;
1869}
1870
1871QemuOptsList qemu_common_drive_opts = {
1872    .name = "drive",
1873    .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head),
1874    .desc = {
1875        {
1876            .name = "bus",
1877            .type = QEMU_OPT_NUMBER,
1878            .help = "bus number",
1879        },{
1880            .name = "unit",
1881            .type = QEMU_OPT_NUMBER,
1882            .help = "unit number (i.e. lun for scsi)",
1883        },{
1884            .name = "if",
1885            .type = QEMU_OPT_STRING,
1886            .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
1887        },{
1888            .name = "index",
1889            .type = QEMU_OPT_NUMBER,
1890            .help = "index number",
1891        },{
1892            .name = "cyls",
1893            .type = QEMU_OPT_NUMBER,
1894            .help = "number of cylinders (ide disk geometry)",
1895        },{
1896            .name = "heads",
1897            .type = QEMU_OPT_NUMBER,
1898            .help = "number of heads (ide disk geometry)",
1899        },{
1900            .name = "secs",
1901            .type = QEMU_OPT_NUMBER,
1902            .help = "number of sectors (ide disk geometry)",
1903        },{
1904            .name = "trans",
1905            .type = QEMU_OPT_STRING,
1906            .help = "chs translation (auto, lba. none)",
1907        },{
1908            .name = "media",
1909            .type = QEMU_OPT_STRING,
1910            .help = "media type (disk, cdrom)",
1911        },{
1912            .name = "snapshot",
1913            .type = QEMU_OPT_BOOL,
1914            .help = "enable/disable snapshot mode",
1915        },{
1916            .name = "file",
1917            .type = QEMU_OPT_STRING,
1918            .help = "disk image",
1919        },{
1920            .name = "discard",
1921            .type = QEMU_OPT_STRING,
1922            .help = "discard operation (ignore/off, unmap/on)",
1923        },{
1924            .name = "cache.writeback",
1925            .type = QEMU_OPT_BOOL,
1926            .help = "enables writeback mode for any caches",
1927        },{
1928            .name = "cache.direct",
1929            .type = QEMU_OPT_BOOL,
1930            .help = "enables use of O_DIRECT (bypass the host page cache)",
1931        },{
1932            .name = "cache.no-flush",
1933            .type = QEMU_OPT_BOOL,
1934            .help = "ignore any flush requests for the device",
1935        },{
1936            .name = "aio",
1937            .type = QEMU_OPT_STRING,
1938            .help = "host AIO implementation (threads, native)",
1939        },{
1940            .name = "format",
1941            .type = QEMU_OPT_STRING,
1942            .help = "disk format (raw, qcow2, ...)",
1943        },{
1944            .name = "serial",
1945            .type = QEMU_OPT_STRING,
1946            .help = "disk serial number",
1947        },{
1948            .name = "rerror",
1949            .type = QEMU_OPT_STRING,
1950            .help = "read error action",
1951        },{
1952            .name = "werror",
1953            .type = QEMU_OPT_STRING,
1954            .help = "write error action",
1955        },{
1956            .name = "addr",
1957            .type = QEMU_OPT_STRING,
1958            .help = "pci address (virtio only)",
1959        },{
1960            .name = "read-only",
1961            .type = QEMU_OPT_BOOL,
1962            .help = "open drive file as read-only",
1963        },{
1964            .name = "throttling.iops-total",
1965            .type = QEMU_OPT_NUMBER,
1966            .help = "limit total I/O operations per second",
1967        },{
1968            .name = "throttling.iops-read",
1969            .type = QEMU_OPT_NUMBER,
1970            .help = "limit read operations per second",
1971        },{
1972            .name = "throttling.iops-write",
1973            .type = QEMU_OPT_NUMBER,
1974            .help = "limit write operations per second",
1975        },{
1976            .name = "throttling.bps-total",
1977            .type = QEMU_OPT_NUMBER,
1978            .help = "limit total bytes per second",
1979        },{
1980            .name = "throttling.bps-read",
1981            .type = QEMU_OPT_NUMBER,
1982            .help = "limit read bytes per second",
1983        },{
1984            .name = "throttling.bps-write",
1985            .type = QEMU_OPT_NUMBER,
1986            .help = "limit write bytes per second",
1987        },{
1988            .name = "copy-on-read",
1989            .type = QEMU_OPT_BOOL,
1990            .help = "copy read data from backing file into image file",
1991        },{
1992            .name = "boot",
1993            .type = QEMU_OPT_BOOL,
1994            .help = "(deprecated, ignored)",
1995        },
1996        { /* end of list */ }
1997    },
1998};
1999
2000QemuOptsList qemu_old_drive_opts = {
2001    .name = "drive",
2002    .head = QTAILQ_HEAD_INITIALIZER(qemu_old_drive_opts.head),
2003    .desc = {
2004        {
2005            .name = "bus",
2006            .type = QEMU_OPT_NUMBER,
2007            .help = "bus number",
2008        },{
2009            .name = "unit",
2010            .type = QEMU_OPT_NUMBER,
2011            .help = "unit number (i.e. lun for scsi)",
2012        },{
2013            .name = "if",
2014            .type = QEMU_OPT_STRING,
2015            .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
2016        },{
2017            .name = "index",
2018            .type = QEMU_OPT_NUMBER,
2019            .help = "index number",
2020        },{
2021            .name = "cyls",
2022            .type = QEMU_OPT_NUMBER,
2023            .help = "number of cylinders (ide disk geometry)",
2024        },{
2025            .name = "heads",
2026            .type = QEMU_OPT_NUMBER,
2027            .help = "number of heads (ide disk geometry)",
2028        },{
2029            .name = "secs",
2030            .type = QEMU_OPT_NUMBER,
2031            .help = "number of sectors (ide disk geometry)",
2032        },{
2033            .name = "trans",
2034            .type = QEMU_OPT_STRING,
2035            .help = "chs translation (auto, lba. none)",
2036        },{
2037            .name = "media",
2038            .type = QEMU_OPT_STRING,
2039            .help = "media type (disk, cdrom)",
2040        },{
2041            .name = "snapshot",
2042            .type = QEMU_OPT_BOOL,
2043            .help = "enable/disable snapshot mode",
2044        },{
2045            .name = "file",
2046            .type = QEMU_OPT_STRING,
2047            .help = "disk image",
2048        },{
2049            .name = "discard",
2050            .type = QEMU_OPT_STRING,
2051            .help = "discard operation (ignore/off, unmap/on)",
2052        },{
2053            .name = "cache",
2054            .type = QEMU_OPT_STRING,
2055            .help = "host cache usage (none, writeback, writethrough, "
2056                    "directsync, unsafe)",
2057        },{
2058            .name = "aio",
2059            .type = QEMU_OPT_STRING,
2060            .help = "host AIO implementation (threads, native)",
2061        },{
2062            .name = "format",
2063            .type = QEMU_OPT_STRING,
2064            .help = "disk format (raw, qcow2, ...)",
2065        },{
2066            .name = "serial",
2067            .type = QEMU_OPT_STRING,
2068            .help = "disk serial number",
2069        },{
2070            .name = "rerror",
2071            .type = QEMU_OPT_STRING,
2072            .help = "read error action",
2073        },{
2074            .name = "werror",
2075            .type = QEMU_OPT_STRING,
2076            .help = "write error action",
2077        },{
2078            .name = "addr",
2079            .type = QEMU_OPT_STRING,
2080            .help = "pci address (virtio only)",
2081        },{
2082            .name = "readonly",
2083            .type = QEMU_OPT_BOOL,
2084            .help = "open drive file as read-only",
2085        },{
2086            .name = "iops",
2087            .type = QEMU_OPT_NUMBER,
2088            .help = "limit total I/O operations per second",
2089        },{
2090            .name = "iops_rd",
2091            .type = QEMU_OPT_NUMBER,
2092            .help = "limit read operations per second",
2093        },{
2094            .name = "iops_wr",
2095            .type = QEMU_OPT_NUMBER,
2096            .help = "limit write operations per second",
2097        },{
2098            .name = "bps",
2099            .type = QEMU_OPT_NUMBER,
2100            .help = "limit total bytes per second",
2101        },{
2102            .name = "bps_rd",
2103            .type = QEMU_OPT_NUMBER,
2104            .help = "limit read bytes per second",
2105        },{
2106            .name = "bps_wr",
2107            .type = QEMU_OPT_NUMBER,
2108            .help = "limit write bytes per second",
2109        },{
2110            .name = "copy-on-read",
2111            .type = QEMU_OPT_BOOL,
2112            .help = "copy read data from backing file into image file",
2113        },{
2114            .name = "boot",
2115            .type = QEMU_OPT_BOOL,
2116            .help = "(deprecated, ignored)",
2117        },
2118        { /* end of list */ }
2119    },
2120};
2121
2122QemuOptsList qemu_drive_opts = {
2123    .name = "drive",
2124    .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
2125    .desc = {
2126        /*
2127         * no elements => accept any params
2128         * validation will happen later
2129         */
2130        { /* end of list */ }
2131    },
2132};
2133