From: "Benoît Canet" <benoit.canet@irqsave.net>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, benoit.canet@irqsave.net, famz@redhat.com,
qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 08/23] block: Eliminate BlockDriverState member device_name[]
Date: Thu, 11 Sep 2014 13:34:33 +0200 [thread overview]
Message-ID: <20140911113433.GC8522@irqsave.net> (raw)
In-Reply-To: <1410336832-22160-9-git-send-email-armbru@redhat.com>
The Wednesday 10 Sep 2014 à 10:13:37 (+0200), Markus Armbruster wrote :
> device_name[] is can become non-empty only in bdrv_new_named() and
> bdrv_move_feature_fields(). The latter is used only to undo damage
> done by bdrv_swap(). The former is called only by blk_new_with_bs().
> Therefore, when a BlockDriverState's device_name[] is non-empty, then
> it's owned by a BlockBackend.
>
> The converse is also true, because blk_attach_bs() is called only by
> blk_new_with_bs() so far.
>
> Furthermore, blk_new_with_bs() keeps the two names equal.
>
> Therefore, device_name[] is redundant. Eliminate it.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> block-migration.c | 12 +++++----
> block.c | 63 ++++++++++++++---------------------------------
> block/block-backend.c | 12 ++++-----
> block/cow.c | 2 +-
> block/mirror.c | 3 ++-
> block/qapi.c | 6 ++---
> block/qcow.c | 4 +--
> block/qcow2.c | 4 +--
> block/qed.c | 2 +-
> block/quorum.c | 4 +--
> block/vdi.c | 2 +-
> block/vhdx.c | 2 +-
> block/vmdk.c | 4 +--
> block/vpc.c | 2 +-
> block/vvfat.c | 2 +-
> blockjob.c | 3 ++-
> include/block/block.h | 3 +--
> include/block/block_int.h | 2 --
> 18 files changed, 53 insertions(+), 79 deletions(-)
>
> diff --git a/block-migration.c b/block-migration.c
> index cb3e16c..da30e93 100644
> --- a/block-migration.c
> +++ b/block-migration.c
> @@ -14,7 +14,9 @@
> */
>
> #include "qemu-common.h"
> -#include "block/block_int.h"
> +#include "block/block.h"
> +#include "qemu/error-report.h"
> +#include "qemu/main-loop.h"
> #include "hw/hw.h"
> #include "qemu/queue.h"
> #include "qemu/timer.h"
> @@ -130,9 +132,9 @@ static void blk_send(QEMUFile *f, BlkMigBlock * blk)
> | flags);
>
> /* device name */
> - len = strlen(blk->bmds->bs->device_name);
> + len = strlen(bdrv_get_device_name(blk->bmds->bs));
> qemu_put_byte(f, len);
> - qemu_put_buffer(f, (uint8_t *)blk->bmds->bs->device_name, len);
> + qemu_put_buffer(f, (uint8_t *)bdrv_get_device_name(blk->bmds->bs), len);
>
> /* if a block is zero we need to flush here since the network
> * bandwidth is now a lot higher than the storage device bandwidth.
> @@ -382,9 +384,9 @@ static void init_blk_migration(QEMUFile *f)
>
> if (bmds->shared_base) {
> DPRINTF("Start migration for %s with shared base image\n",
> - bs->device_name);
> + bdrv_get_device_name(bs));
> } else {
> - DPRINTF("Start full migration for %s\n", bs->device_name);
> + DPRINTF("Start full migration for %s\n", bdrv_get_device_name(bs));
> }
>
> QSIMPLEQ_INSERT_TAIL(&block_mig_state.bmds_list, bmds, entry);
> diff --git a/block.c b/block.c
> index 593d89b..61ea15d 100644
> --- a/block.c
> +++ b/block.c
> @@ -332,31 +332,6 @@ void bdrv_register(BlockDriver *bdrv)
> QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
> }
>
> -/* create a new block device (by default it is empty) */
> -BlockDriverState *bdrv_new_named(const char *device_name, Error **errp)
> -{
> - BlockDriverState *bs;
> -
> - assert(*device_name);
> -
> - if (bdrv_find(device_name)) {
> - error_setg(errp, "Device with id '%s' already exists",
> - device_name);
> - return NULL;
> - }
> - if (bdrv_find_node(device_name)) {
> - error_setg(errp, "Device with node-name '%s' already exists",
> - device_name);
> - return NULL;
> - }
> -
> - bs = bdrv_new();
> -
> - pstrcpy(bs->device_name, sizeof(bs->device_name), device_name);
> -
> - return bs;
> -}
> -
> BlockDriverState *bdrv_new(void)
> {
> BlockDriverState *bs;
> @@ -1159,7 +1134,7 @@ void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
> } else if (backing_hd) {
> error_setg(&bs->backing_blocker,
> "device is used as backing hd of '%s'",
> - bs->device_name);
> + bdrv_get_device_name(bs));
> }
>
> bs->backing_hd = backing_hd;
> @@ -1533,7 +1508,7 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
> } else {
> error_setg(errp, "Block format '%s' used by device '%s' doesn't "
> "support the option '%s'", drv->format_name,
> - bs->device_name, entry->key);
> + bdrv_get_device_name(bs), entry->key);
> }
>
> ret = -EINVAL;
> @@ -1740,7 +1715,7 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
> if (!(reopen_state->bs->open_flags & BDRV_O_ALLOW_RDWR) &&
> reopen_state->flags & BDRV_O_RDWR) {
> error_set(errp, QERR_DEVICE_IS_READ_ONLY,
> - reopen_state->bs->device_name);
> + bdrv_get_device_name(reopen_state->bs));
> goto error;
> }
>
> @@ -1767,7 +1742,7 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state, BlockReopenQueue *queue,
> /* It is currently mandatory to have a bdrv_reopen_prepare()
> * handler for each supported drv. */
> error_set(errp, QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - drv->format_name, reopen_state->bs->device_name,
> + drv->format_name, bdrv_get_device_name(reopen_state->bs),
> "reopening of file");
> ret = -1;
> goto error;
> @@ -1955,7 +1930,6 @@ void bdrv_drain_all(void)
> Also, NULL terminate the device_name to prevent double remove */
> void bdrv_make_anon(BlockDriverState *bs)
> {
> - bs->device_name[0] = '\0';
> if (bs->node_name[0] != '\0') {
> QTAILQ_REMOVE(&graph_bdrv_states, bs, node_list);
> }
> @@ -2008,9 +1982,6 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
> /* job */
> bs_dest->job = bs_src->job;
>
> - pstrcpy(bs_dest->device_name, sizeof(bs_dest->device_name),
> - bs_src->device_name);
> -
> memcpy(bs_dest->op_blockers, bs_src->op_blockers,
> sizeof(bs_dest->op_blockers));
> }
> @@ -2023,7 +1994,7 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
> * This will modify the BlockDriverState fields, and swap contents
> * between bs_new and bs_old. Both bs_new and bs_old are modified.
> *
> - * bs_new must be nameless and not attached to a BlockBackend.
> + * bs_new must not be attached to a BlockBackend.
> *
> * This function does not create any image files.
> */
> @@ -2042,8 +2013,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
> QTAILQ_REMOVE(&graph_bdrv_states, bs_old, node_list);
> }
>
> - /* bs_new must be nameless and shouldn't have anything fancy enabled */
> - assert(bs_new->device_name[0] == '\0');
> + /* bs_new must be unattached and shouldn't have anything fancy enabled */
> assert(!bs_new->blk);
> assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
> assert(bs_new->job == NULL);
> @@ -2060,8 +2030,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
> bdrv_move_feature_fields(bs_old, bs_new);
> bdrv_move_feature_fields(bs_new, &tmp);
>
> - /* bs_new must remain nameless and unattached */
> - assert(bs_new->device_name[0] == '\0');
> + /* bs_new must remain unattached */
> assert(!bs_new->blk);
>
> /* Check a few fields that should remain attached to the device */
> @@ -2089,7 +2058,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
> * This will modify the BlockDriverState fields, and swap contents
> * between bs_new and bs_top. Both bs_new and bs_top are modified.
> *
> - * bs_new must be nameless and not attached to a BlockBackend.
> + * bs_new must not be attached to a BlockBackend.
> *
> * This function does not create any image files.
> */
> @@ -3799,7 +3768,7 @@ BlockDriverState *bdrv_find(const char *name)
> BlockDriverState *bs;
>
> for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
> - if (!strcmp(name, bs->device_name)) {
> + if (!strcmp(name, bdrv_get_device_name(bs))) {
> return bs;
> }
> }
> @@ -3889,9 +3858,10 @@ BlockDriverState *bdrv_next(BlockDriverState *bs)
> return blk ? blk_bs(blk) : NULL;
> }
>
> -const char *bdrv_get_device_name(BlockDriverState *bs)
> +const char *bdrv_get_device_name(const BlockDriverState *bs)
> {
> - return bs->device_name;
> + const char *name = bs->blk ? blk_name(bs->blk) : NULL;
> + return name ?: "";
> }
Why not ?
return bs->blk ? blk_name(bs->blk) : "";
or
if (bs->blk) {
return blk_name(bs->blk);
}
return "";
Would it fail to do the job ?
Also we could have made sure that bdrv_get_device_name return either
a non empty string or NULL.
(We know blk_name will return a non empty string it's asserted)
This would need to change a few test all around the code but the final
code logic would be less convoluted:
-convert NULL to "" then test for not ""
would turn into
-return NULL test for not NULL
>
> int bdrv_get_flags(BlockDriverState *bs)
> @@ -5253,13 +5223,15 @@ int bdrv_media_changed(BlockDriverState *bs)
> void bdrv_eject(BlockDriverState *bs, bool eject_flag)
> {
> BlockDriver *drv = bs->drv;
> + const char *device_name;
>
> if (drv && drv->bdrv_eject) {
> drv->bdrv_eject(bs, eject_flag);
> }
>
> - if (bs->device_name[0] != '\0') {
> - qapi_event_send_device_tray_moved(bdrv_get_device_name(bs),
> + device_name = bdrv_get_device_name(bs);
> + qapi_event_send_device_tray_moved(device_name,
> eject_flag, &error_abort);
> }
> }
> @@ -5469,7 +5441,8 @@ bool bdrv_op_is_blocked(BlockDriverState *bs, BlockOpType op, Error **errp)
> blocker = QLIST_FIRST(&bs->op_blockers[op]);
> if (errp) {
> error_setg(errp, "Device '%s' is busy: %s",
> - bs->device_name, error_get_pretty(blocker->reason));
> + bdrv_get_device_name(bs),
> + error_get_pretty(blocker->reason));
> }
> return true;
> }
> diff --git a/block/block-backend.c b/block/block-backend.c
> index c0876fa..2f10d6a 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -67,17 +67,17 @@ BlockBackend *blk_new_with_bs(const char *name, Error **errp)
> BlockBackend *blk;
> BlockDriverState *bs;
>
> + if (bdrv_find_node(name)) {
> + error_setg(errp, "Device with node-name '%s' already exists", name);
Maybe the message written by the person who contributed the initial code (me) mislead you.
I think the intent is good but the wording is wrong.
node-name is associated with a regular BDS. A device cannot have a node name.
Maybe something in the vein of:
error_setg(errp, "Device name '%s' would conflict with the node-name of an existing block driver state", name);
> + return NULL;
> + }
> +
> blk = blk_new(name, errp);
> if (!blk) {
> return NULL;
> }
>
> - bs = bdrv_new_named(name, errp);
> - if (!bs) {
> - blk_unref(blk);
> - return NULL;
> - }
> -
> + bs = bdrv_new();
> blk_attach_bs(blk, bs);
> return blk;
> }
> diff --git a/block/cow.c b/block/cow.c
> index 6ee4833..dda1e17 100644
> --- a/block/cow.c
> +++ b/block/cow.c
> @@ -84,7 +84,7 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags,
> snprintf(version, sizeof(version),
> "COW version %" PRIu32, cow_header.version);
> error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
> - bs->device_name, "cow", version);
> + bdrv_get_device_name(bs), "cow", version);
> ret = -ENOTSUP;
> goto fail;
> }
> diff --git a/block/mirror.c b/block/mirror.c
> index 18b18e0..829be2f 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -567,7 +567,8 @@ static void mirror_complete(BlockJob *job, Error **errp)
> return;
> }
> if (!s->synced) {
> - error_set(errp, QERR_BLOCK_JOB_NOT_READY, job->bs->device_name);
> + error_set(errp, QERR_BLOCK_JOB_NOT_READY,
> + bdrv_get_device_name(job->bs));
> return;
> }
>
> diff --git a/block/qapi.c b/block/qapi.c
> index 79d1e6a..cc8f711 100644
> --- a/block/qapi.c
> +++ b/block/qapi.c
> @@ -272,7 +272,7 @@ void bdrv_query_info(BlockDriverState *bs,
> BlockDriverState *bs0;
> ImageInfo **p_image_info;
> Error *local_err = NULL;
> - info->device = g_strdup(bs->device_name);
> + info->device = g_strdup(bdrv_get_device_name(bs));
> info->type = g_strdup("unknown");
> info->locked = bdrv_dev_is_medium_locked(bs);
> info->removable = bdrv_dev_has_removable_media(bs);
> @@ -327,9 +327,9 @@ static BlockStats *bdrv_query_stats(const BlockDriverState *bs)
>
> s = g_malloc0(sizeof(*s));
>
> - if (bs->device_name[0]) {
> + if (bdrv_get_device_name(bs)[0]) {
> s->has_device = true;
> - s->device = g_strdup(bs->device_name);
> + s->device = g_strdup(bdrv_get_device_name(bs));
> }
>
> s->stats = g_malloc0(sizeof(*s->stats));
> diff --git a/block/qcow.c b/block/qcow.c
> index 67c237f..2d803ac 100644
> --- a/block/qcow.c
> +++ b/block/qcow.c
> @@ -124,7 +124,7 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
> snprintf(version, sizeof(version), "QCOW version %" PRIu32,
> header.version);
> error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
> - bs->device_name, "qcow", version);
> + bdrv_get_device_name(bs), "qcow", version);
> ret = -ENOTSUP;
> goto fail;
> }
> @@ -231,7 +231,7 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
> /* Disable migration when qcow images are used */
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "qcow", bs->device_name, "live migration");
> + "qcow", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
>
> qemu_co_mutex_init(&s->lock);
> diff --git a/block/qcow2.c b/block/qcow2.c
> index f9e045f..0ab455e 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -203,8 +203,8 @@ static void GCC_FMT_ATTR(3, 4) report_unsupported(BlockDriverState *bs,
> vsnprintf(msg, sizeof(msg), fmt, ap);
> va_end(ap);
>
> - error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, bs->device_name, "qcow2",
> - msg);
> + error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
> + bdrv_get_device_name(bs), "qcow2", msg);
> }
>
> static void report_unsupported_feature(BlockDriverState *bs,
> diff --git a/block/qed.c b/block/qed.c
> index ba395af..f20ffb3 100644
> --- a/block/qed.c
> +++ b/block/qed.c
> @@ -422,7 +422,7 @@ static int bdrv_qed_open(BlockDriverState *bs, QDict *options, int flags,
> snprintf(buf, sizeof(buf), "%" PRIx64,
> s->header.features & ~QED_FEATURE_MASK);
> error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
> - bs->device_name, "QED", buf);
> + bdrv_get_device_name(bs), "QED", buf);
> return -ENOTSUP;
> }
> if (!qed_is_cluster_size_valid(s->header.cluster_size)) {
> diff --git a/block/quorum.c b/block/quorum.c
> index 093382e..f958269 100644
> --- a/block/quorum.c
> +++ b/block/quorum.c
> @@ -227,8 +227,8 @@ static void quorum_report_bad(QuorumAIOCB *acb, char *node_name, int ret)
>
> static void quorum_report_failure(QuorumAIOCB *acb)
> {
> - const char *reference = acb->common.bs->device_name[0] ?
> - acb->common.bs->device_name :
> + const char *reference = bdrv_get_device_name(acb->common.bs)[0] ?
> + bdrv_get_device_name(acb->common.bs) :
> acb->common.bs->node_name;
>
> qapi_event_send_quorum_failure(reference, acb->sector_num,
> diff --git a/block/vdi.c b/block/vdi.c
> index 4b10aac..2e6f31c 100644
> --- a/block/vdi.c
> +++ b/block/vdi.c
> @@ -490,7 +490,7 @@ static int vdi_open(BlockDriverState *bs, QDict *options, int flags,
> /* Disable migration when vdi images are used */
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "vdi", bs->device_name, "live migration");
> + "vdi", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
>
> return 0;
> diff --git a/block/vhdx.c b/block/vhdx.c
> index 87c99fc..8bf1af1 100644
> --- a/block/vhdx.c
> +++ b/block/vhdx.c
> @@ -1003,7 +1003,7 @@ static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
> /* Disable migration when VHDX images are used */
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "vhdx", bs->device_name, "live migration");
> + "vhdx", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
>
> return 0;
> diff --git a/block/vmdk.c b/block/vmdk.c
> index a1cb911..7bc1474 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -657,7 +657,7 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
> snprintf(buf, sizeof(buf), "VMDK version %" PRId32,
> le32_to_cpu(header.version));
> error_set(errp, QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
> - bs->device_name, "vmdk", buf);
> + bdrv_get_device_name(bs), "vmdk", buf);
> return -ENOTSUP;
> } else if (le32_to_cpu(header.version) == 3 && (flags & BDRV_O_RDWR)) {
> /* VMware KB 2064959 explains that version 3 added support for
> @@ -939,7 +939,7 @@ static int vmdk_open(BlockDriverState *bs, QDict *options, int flags,
> /* Disable migration when VMDK images are used */
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "vmdk", bs->device_name, "live migration");
> + "vmdk", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
> g_free(buf);
> return 0;
> diff --git a/block/vpc.c b/block/vpc.c
> index 055efc4..7bb90d5 100644
> --- a/block/vpc.c
> +++ b/block/vpc.c
> @@ -320,7 +320,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
> /* Disable migration when VHD images are used */
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "vpc", bs->device_name, "live migration");
> + "vpc", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
>
> return 0;
> diff --git a/block/vvfat.c b/block/vvfat.c
> index 6c9fde0..cefe3a4 100644
> --- a/block/vvfat.c
> +++ b/block/vvfat.c
> @@ -1182,7 +1182,7 @@ static int vvfat_open(BlockDriverState *bs, QDict *options, int flags,
> if (s->qcow) {
> error_set(&s->migration_blocker,
> QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
> - "vvfat (rw)", bs->device_name, "live migration");
> + "vvfat (rw)", bdrv_get_device_name(bs), "live migration");
> migrate_add_blocker(s->migration_blocker);
> }
>
> diff --git a/blockjob.c b/blockjob.c
> index 0689fdd..3af0f6c 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -107,7 +107,8 @@ void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp)
> void block_job_complete(BlockJob *job, Error **errp)
> {
> if (job->paused || job->cancelled || !job->driver->complete) {
> - error_set(errp, QERR_BLOCK_JOB_NOT_READY, job->bs->device_name);
> + error_set(errp, QERR_BLOCK_JOB_NOT_READY,
> + bdrv_get_device_name(job->bs));
> return;
> }
>
> diff --git a/include/block/block.h b/include/block/block.h
> index 8cf9ea3..fb4fff9 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
> @@ -203,7 +203,6 @@ BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
> int bdrv_create(BlockDriver *drv, const char* filename,
> QemuOpts *opts, Error **errp);
> int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp);
> -BlockDriverState *bdrv_new_named(const char *device_name, Error **errp);
> BlockDriverState *bdrv_new(void);
> void bdrv_make_anon(BlockDriverState *bs);
> void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old);
> @@ -415,7 +414,7 @@ int bdrv_set_key(BlockDriverState *bs, const char *key);
> int bdrv_query_missing_keys(void);
> void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
> void *opaque);
> -const char *bdrv_get_device_name(BlockDriverState *bs);
> +const char *bdrv_get_device_name(const BlockDriverState *bs);
> int bdrv_get_flags(BlockDriverState *bs);
> int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
> const uint8_t *buf, int nb_sectors);
> diff --git a/include/block/block_int.h b/include/block/block_int.h
> index d5de08b..08ccb27 100644
> --- a/include/block/block_int.h
> +++ b/include/block/block_int.h
> @@ -394,8 +394,6 @@ struct BlockDriverState {
> char node_name[32];
> /* element of the list of named nodes building the graph */
> QTAILQ_ENTRY(BlockDriverState) node_list;
> - /* Device name is the name associated with the "drive" the guest sees */
> - char device_name[32];
> QLIST_HEAD(, BdrvDirtyBitmap) dirty_bitmaps;
> int refcnt;
>
> --
> 1.9.3
>
>
next prev parent reply other threads:[~2014-09-11 11:36 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-10 8:13 [Qemu-devel] [PATCH 00/23] Split BlockBackend off BDS with an axe Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 01/23] block: Split bdrv_new_named() off bdrv_new() Markus Armbruster
2014-09-10 11:03 ` Benoît Canet
2014-09-10 15:05 ` Eric Blake
2014-09-11 8:20 ` Markus Armbruster
2014-09-11 8:29 ` Markus Armbruster
2014-09-10 15:07 ` Eric Blake
2014-09-10 15:27 ` Benoît Canet
2014-09-10 21:22 ` Benoît Canet
2014-09-11 6:33 ` Fam Zheng
2014-09-10 8:13 ` [Qemu-devel] [PATCH 02/23] block: New BlockBackend Markus Armbruster
2014-09-10 9:56 ` Kevin Wolf
2014-09-11 10:03 ` Markus Armbruster
2014-09-11 11:45 ` Markus Armbruster
2014-09-11 14:38 ` Markus Armbruster
2014-09-10 11:34 ` Benoît Canet
2014-09-10 11:44 ` Kevin Wolf
2014-09-10 11:51 ` Benoît Canet
2014-09-11 10:11 ` Markus Armbruster
2014-09-10 12:40 ` Benoît Canet
2014-09-10 12:46 ` Benoît Canet
2014-09-11 10:22 ` Markus Armbruster
2014-09-11 10:21 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 03/23] block: Connect BlockBackend to BlockDriverState Markus Armbruster
2014-09-10 11:55 ` Benoît Canet
2014-09-11 10:52 ` Markus Armbruster
2014-09-10 12:24 ` Kevin Wolf
2014-09-11 15:27 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 04/23] block: Connect BlockBackend and DriveInfo Markus Armbruster
2014-09-10 13:08 ` Benoît Canet
2014-09-11 18:03 ` Markus Armbruster
2014-09-11 20:43 ` Eric Blake
2014-09-10 13:30 ` Kevin Wolf
2014-09-11 17:41 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 05/23] block: Make BlockBackend own its BlockDriverState Markus Armbruster
2014-09-10 10:14 ` Kevin Wolf
2014-09-11 18:38 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 06/23] block: Eliminate bdrv_states, use block_next() instead Markus Armbruster
2014-09-11 10:25 ` Benoît Canet
2014-09-10 8:13 ` [Qemu-devel] [PATCH 07/23] block: Eliminate bdrv_iterate(), use bdrv_next() Markus Armbruster
2014-09-11 10:46 ` Benoît Canet
2014-09-11 18:44 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 08/23] block: Eliminate BlockDriverState member device_name[] Markus Armbruster
2014-09-10 16:09 ` Eric Blake
2014-09-11 18:45 ` Markus Armbruster
2014-09-11 11:34 ` Benoît Canet [this message]
2014-09-11 11:43 ` Benoît Canet
2014-09-11 13:00 ` Eric Blake
2014-09-11 13:18 ` Benoît Canet
2014-09-11 19:11 ` Markus Armbruster
2014-09-11 19:01 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 09/23] block: Merge BlockBackend and BlockDriverState name spaces Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 10/23] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo() Markus Armbruster
2014-09-11 12:07 ` Benoît Canet
2014-09-11 19:20 ` Markus Armbruster
2014-09-11 17:06 ` Benoît Canet
2014-09-11 19:12 ` Markus Armbruster
2014-09-11 19:34 ` Benoît Canet
2014-09-11 19:40 ` Eric Blake
2014-09-12 6:38 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 11/23] block: Rename BlockDriverAIOCB* to BlockAIOCB* Markus Armbruster
2014-09-11 12:15 ` Benoît Canet
2014-09-11 19:23 ` Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 12/23] virtio-blk: Drop redundant VirtIOBlock member conf Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 13/23] virtio-blk: Rename VirtIOBlkConf variables to conf Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 14/23] hw: Convert from BlockDriverState to BlockBackend, mostly Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 15/23] ide: Complete conversion from BlockDriverState to BlockBackend Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 16/23] pc87312: Drop unused members of PC87312State Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 17/23] blockdev: Drop superfluous DriveInfo member id Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 18/23] blockdev: Fix blockdev-add not to create IDE drive (0, 0) Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 19/23] blockdev: Drop DriveInfo member enable_auto_del Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 20/23] block/qapi: Convert qmp_query_block() to BlockBackend Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 21/23] blockdev: Convert qmp_eject(), qmp_change_blockdev() " Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 22/23] block: Lift device model API into BlockBackend Markus Armbruster
2014-09-10 8:13 ` [Qemu-devel] [PATCH 23/23] block: Make device model's references to BlockBackend strong Markus Armbruster
2014-09-11 19:24 ` [Qemu-devel] [PATCH 00/23] Split BlockBackend off BDS with an axe Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140911113433.GC8522@irqsave.net \
--to=benoit.canet@irqsave.net \
--cc=armbru@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.