diff options
author | Eric Blake | 2020-10-27 06:05:50 +0100 |
---|---|---|
committer | Eric Blake | 2020-10-30 21:10:15 +0100 |
commit | 02e87e3b1c77422b71855102b9cb884e4c7823f7 (patch) | |
tree | 23a4d31524b41797d6efff326d6c5194f3183d40 /nbd | |
parent | nbd: Update qapi to support exporting multiple bitmaps (diff) | |
download | qemu-02e87e3b1c77422b71855102b9cb884e4c7823f7.tar.gz qemu-02e87e3b1c77422b71855102b9cb884e4c7823f7.tar.xz qemu-02e87e3b1c77422b71855102b9cb884e4c7823f7.zip |
nbd: Simplify qemu bitmap context name
Each dirty bitmap already knows its name; by reducing the scope of the
places where we construct "qemu:dirty-bitmap:NAME" strings, tracking
the name is more localized, and there are fewer per-export fields to
worry about. This in turn will make it easier for an upcoming patch
to export more than one bitmap at once.
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20201027050556.269064-6-eblake@redhat.com>
Diffstat (limited to 'nbd')
-rw-r--r-- | nbd/server.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/nbd/server.c b/nbd/server.c index 8d01662b45..77fdecdf9d 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -95,7 +95,6 @@ struct NBDExport { Notifier eject_notifier; BdrvDirtyBitmap *export_bitmap; - char *export_bitmap_context; }; static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports); @@ -871,14 +870,15 @@ static bool nbd_meta_qemu_query(NBDClient *client, NBDExportMetaContexts *meta, } if (nbd_strshift(&query, "dirty-bitmap:")) { + const char *bm_name; + trace_nbd_negotiate_meta_query_parse("dirty-bitmap:"); if (!meta->exp->export_bitmap) { trace_nbd_negotiate_meta_query_skip("no dirty-bitmap exported"); return true; } - if (nbd_meta_empty_or_pattern(client, - meta->exp->export_bitmap_context + - strlen("qemu:dirty-bitmap:"), query)) { + bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap); + if (nbd_meta_empty_or_pattern(client, bm_name, query)) { meta->bitmap = true; } return true; @@ -1004,8 +1004,11 @@ static int nbd_negotiate_meta_queries(NBDClient *client, } if (meta->bitmap) { - ret = nbd_negotiate_send_meta_context(client, - meta->exp->export_bitmap_context, + const char *bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap); + g_autofree char *context = g_strdup_printf("qemu:dirty-bitmap:%s", + bm_name); + + ret = nbd_negotiate_send_meta_context(client, context, NBD_META_ID_DIRTY_BITMAP, errp); if (ret < 0) { @@ -1576,9 +1579,6 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args, bdrv_dirty_bitmap_set_busy(bm, true); exp->export_bitmap = bm; assert(strlen(bitmap) <= BDRV_BITMAP_MAX_NAME_SIZE); - exp->export_bitmap_context = g_strdup_printf("qemu:dirty-bitmap:%s", - bitmap); - assert(strlen(exp->export_bitmap_context) < NBD_MAX_STRING_SIZE); } blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp); @@ -1656,7 +1656,6 @@ static void nbd_export_delete(BlockExport *blk_exp) if (exp->export_bitmap) { bdrv_dirty_bitmap_set_busy(exp->export_bitmap, false); - g_free(exp->export_bitmap_context); } } |