mirror of
https://github.com/qemu/qemu.git
synced 2024-12-01 15:53:35 +08:00
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>
This commit is contained in:
parent
cbad81cef8
commit
02e87e3b1c
19
nbd/server.c
19
nbd/server.c
@ -95,7 +95,6 @@ struct NBDExport {
|
|||||||
Notifier eject_notifier;
|
Notifier eject_notifier;
|
||||||
|
|
||||||
BdrvDirtyBitmap *export_bitmap;
|
BdrvDirtyBitmap *export_bitmap;
|
||||||
char *export_bitmap_context;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports);
|
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:")) {
|
if (nbd_strshift(&query, "dirty-bitmap:")) {
|
||||||
|
const char *bm_name;
|
||||||
|
|
||||||
trace_nbd_negotiate_meta_query_parse("dirty-bitmap:");
|
trace_nbd_negotiate_meta_query_parse("dirty-bitmap:");
|
||||||
if (!meta->exp->export_bitmap) {
|
if (!meta->exp->export_bitmap) {
|
||||||
trace_nbd_negotiate_meta_query_skip("no dirty-bitmap exported");
|
trace_nbd_negotiate_meta_query_skip("no dirty-bitmap exported");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (nbd_meta_empty_or_pattern(client,
|
bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap);
|
||||||
meta->exp->export_bitmap_context +
|
if (nbd_meta_empty_or_pattern(client, bm_name, query)) {
|
||||||
strlen("qemu:dirty-bitmap:"), query)) {
|
|
||||||
meta->bitmap = true;
|
meta->bitmap = true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -1004,8 +1004,11 @@ static int nbd_negotiate_meta_queries(NBDClient *client,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (meta->bitmap) {
|
if (meta->bitmap) {
|
||||||
ret = nbd_negotiate_send_meta_context(client,
|
const char *bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap);
|
||||||
meta->exp->export_bitmap_context,
|
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,
|
NBD_META_ID_DIRTY_BITMAP,
|
||||||
errp);
|
errp);
|
||||||
if (ret < 0) {
|
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);
|
bdrv_dirty_bitmap_set_busy(bm, true);
|
||||||
exp->export_bitmap = bm;
|
exp->export_bitmap = bm;
|
||||||
assert(strlen(bitmap) <= BDRV_BITMAP_MAX_NAME_SIZE);
|
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);
|
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) {
|
if (exp->export_bitmap) {
|
||||||
bdrv_dirty_bitmap_set_busy(exp->export_bitmap, false);
|
bdrv_dirty_bitmap_set_busy(exp->export_bitmap, false);
|
||||||
g_free(exp->export_bitmap_context);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user