On 07/05/2017 05:24 AM, Vladimir Sementsov-Ogievskiy wrote:
16.02.2017 16:04, Fam Zheng wrote:
+ dbms->node_name = bdrv_get_node_name(bs);
+ if (!dbms->node_name || dbms->node_name[0] == '\0') {
+ dbms->node_name = bdrv_get_device_name(bs);
+ }
+ dbms->bitmap = bitmap;
What protects the case that the bitmap is released before migration
completes?
What is the source of such deletion? qmp command? Theoretically possible.
I see the following variants:
1. additional variable BdrvDirtyBItmap.migration, which forbids bitmap
deletion
2. make bitmap anonymous (bdrv_dirty_bitmap_make_anon) - it will not be
available through qmp
Making the bitmap anonymous would forbid us to query the bitmap, which
there is no general reason to do, excepting the idea that a third party
attempting to use the bitmap during a migration is probably a bad idea.
I don't really like the idea of "hiding" information from the user,
though, because then we'd have to worry about name collisions when we
de-anonymized the bitmap again. That's not so palatable.
what do you think?
The modes for bitmaps are getting messy.
As a reminder, the officially exposed "modes" of a bitmap are currently:
FROZEN: Cannot be reset/deleted. Implication is that the bitmap is
otherwise "ACTIVE."
DISABLED: Not recording any writes (by choice.)
ACTIVE: Actively recording writes.
These are documented in the public API as possibilities for
DirtyBitmapStatus in block-core.json. We didn't add a new condition for
"readonly" either, which I think is actually required:
READONLY: Not recording any writes (by necessity.)
Your new use case here sounds like Frozen to me, but it simply does not
have an anonymous successor to force it to be recognized as "frozen." We
can add a `bool protected` or `bool frozen` field to force recognition
of this status and adjust the json documentation accordingly.