[libvirt] [PATCH] qemu: Add missing VIR_DOMAIN_BLOCK_COMMIT_DELETE flags

Michal Privoznik mprivozn at redhat.com
Tue Aug 27 09:37:30 UTC 2013


On 27.08.2013 10:58, Alex Jia wrote:
> On 08/27/2013 04:47 PM, Peter Krempa wrote:
>> On 08/27/13 09:53, Alex Jia wrote:
>>> The flag "VIR_DOMAIN_BLOCK_COMMIT_DELETE" is missed by
>>> qemuDomainBlockCommit(),
>>> and then will hit error "unsupported flags (0x2) in function
>>> qemuDomainBlockCommit" if users run 'virsh blockcommit' with
>>> '--delete' option.
>>>
>>> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1001475
>>>
>>> Signed-off-by: Alex Jia<ajia at redhat.com>
>>> ---
>>>   src/qemu/qemu_driver.c |    3 ++-
>>>   1 files changed, 2 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>>> index ed29373..8863124 100644
>>> --- a/src/qemu/qemu_driver.c
>>> +++ b/src/qemu/qemu_driver.c
>>> @@ -14444,7 +14444,8 @@ qemuDomainBlockCommit(virDomainPtr dom, const
>>> char *path, const char *base,
>>>       const char *base_canon = NULL;
>>>       bool clean_access = false;
>>>
>>> -    virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW, -1);
>>> +    virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW |
>>> +                  VIR_DOMAIN_BLOCK_COMMIT_DELETE, -1);
>>>
>>>       if (!(vm = qemuDomObjFromDomain(dom)))
>>>           goto cleanup;
>>>
>> The code doesn't seem to support the BLOCK_COMMIT_DELETE flag. It was
> 
> Yes, the codes haven't any implementation for BLOCK_COMMIT_DELETE flag
> now, maybe, only need to raise a friendly error message in here instead
> of "unsupported flags (0x2) xxxx".

I agree that this error message is not user-friendly. Bare virsh users
know nothing about our flags and their numerical expression. However, I
don't think there is a way how to produce "Unsupported flag
VIR_DOMAIN_BLOCK_COMMIT_DELETE" instead of "Unsupported flag 0x2" since
all we see in the qemuDomainBlockCommit() function is just number. I
mean, mapping of flag onto numeric value is not one-to-one function (aka
injective function). That is, a value 0x2 can express
VIR_DOMAIN_BLOCK_COMMIT_DELETE, VIR_DOMAIN_START_AUTODESTROY,
VIR_DUMP_DESTROY, etc. (git grep "1 << 1," include/).

If we want to make it work, we have to introduce an injective function,
e.g. virUnsupportedFlags(), which would accept a list (not an ORed
value) of all flags that are not supported. Too much effort for not much
outcome.

Michal




More information about the libvir-list mailing list