diff options
Diffstat (limited to 'blockdev.c')
-rw-r--r-- | blockdev.c | 48 |
1 files changed, 17 insertions, 31 deletions
@@ -106,7 +106,7 @@ void blockdev_auto_del(BlockDriverState *bs) DriveInfo *dinfo = drive_get_by_blockdev(bs); if (dinfo && dinfo->auto_del) { - drive_put_ref(dinfo); + drive_del(dinfo); } } @@ -213,7 +213,7 @@ static void bdrv_format_print(void *opaque, const char *name) error_printf(" %s", name); } -static void drive_uninit(DriveInfo *dinfo) +void drive_del(DriveInfo *dinfo) { if (dinfo->opts) { qemu_opts_del(dinfo->opts); @@ -226,19 +226,6 @@ static void drive_uninit(DriveInfo *dinfo) g_free(dinfo); } -void drive_put_ref(DriveInfo *dinfo) -{ - assert(dinfo->refcount); - if (--dinfo->refcount == 0) { - drive_uninit(dinfo); - } -} - -void drive_get_ref(DriveInfo *dinfo) -{ - dinfo->refcount++; -} - typedef struct { QEMUBH *bh; BlockDriverState *bs; @@ -329,7 +316,6 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts, Error **errp) { const char *buf; - const char *serial; int ro = 0; int bdrv_flags = 0; int on_read_error, on_write_error; @@ -371,8 +357,6 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts, ro = qemu_opt_get_bool(opts, "read-only", 0); copy_on_read = qemu_opt_get_bool(opts, "copy-on-read", false); - serial = qemu_opt_get(opts, "serial"); - if ((buf = qemu_opt_get(opts, "discard")) != NULL) { if (bdrv_parse_discard_flags(buf, &bdrv_flags) != 0) { error_setg(errp, "invalid discard option"); @@ -500,10 +484,6 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts, dinfo->bdrv->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0; dinfo->bdrv->read_only = ro; dinfo->bdrv->detect_zeroes = detect_zeroes; - dinfo->refcount = 1; - if (serial != NULL) { - dinfo->serial = g_strdup(serial); - } QTAILQ_INSERT_TAIL(&drives, dinfo, next); bdrv_set_on_error(dinfo->bdrv, on_read_error, on_write_error); @@ -630,6 +610,10 @@ QemuOptsList qemu_legacy_drive_opts = { .type = QEMU_OPT_STRING, .help = "pci address (virtio only)", },{ + .name = "serial", + .type = QEMU_OPT_STRING, + .help = "disk serial number", + },{ .name = "file", .type = QEMU_OPT_STRING, .help = "file name", @@ -658,7 +642,7 @@ QemuOptsList qemu_legacy_drive_opts = { }, }; -DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) +DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type) { const char *value; DriveInfo *dinfo = NULL; @@ -672,6 +656,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) const char *werror, *rerror; bool read_only = false; bool copy_on_read; + const char *serial; const char *filename; Error *local_err = NULL; @@ -875,6 +860,9 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) goto fail; } + /* Serial number */ + serial = qemu_opt_get(legacy_opts, "serial"); + /* no id supplied -> create one */ if (qemu_opts_id(all_opts) == NULL) { char *new_id; @@ -965,6 +953,8 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type) dinfo->unit = unit_id; dinfo->devaddr = devaddr; + dinfo->serial = g_strdup(serial); + switch(type) { case IF_IDE: case IF_SCSI: @@ -1797,7 +1787,7 @@ int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data) bdrv_set_on_error(bs, BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT); } else { - drive_uninit(drive_get_by_blockdev(bs)); + drive_del(drive_get_by_blockdev(bs)); } return 0; @@ -2340,9 +2330,9 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) goto fail; } - /* TODO Sort it out in raw-posix and drive_init: Reject aio=native with + /* TODO Sort it out in raw-posix and drive_new(): Reject aio=native with * cache.direct=false instead of silently switching to aio=threads, except - * if called from drive_init. + * when called from drive_new(). * * For now, simply forbidding the combination for all drivers will do. */ if (options->has_aio && options->aio == BLOCKDEV_AIO_OPTIONS_NATIVE) { @@ -2374,7 +2364,7 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp) } if (bdrv_key_required(dinfo->bdrv)) { - drive_uninit(dinfo); + drive_del(dinfo); error_setg(errp, "blockdev-add doesn't support encrypted devices"); goto fail; } @@ -2438,10 +2428,6 @@ QemuOptsList qemu_common_drive_opts = { .type = QEMU_OPT_STRING, .help = "disk format (raw, qcow2, ...)", },{ - .name = "serial", - .type = QEMU_OPT_STRING, - .help = "disk serial number", - },{ .name = "rerror", .type = QEMU_OPT_STRING, .help = "read error action", |