qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 0/8] Add metadata overlap checks
Date: Fri, 13 Sep 2013 12:23:06 +0200	[thread overview]
Message-ID: <5232E78A.2030406@redhat.com> (raw)
In-Reply-To: <20130913095753.GC2804@dhcp-200-207.str.redhat.com>

On 2013-09-13 11:57, Kevin Wolf wrote:
>
> […]
> Am 12.09.2013 um 17:24 hat Max Reitz geschrieben:
>> On the other hand, we could replace QCOW2_OL_DEFAULT manually
>> everywhere by s->default_overlap_check; or, we change the macro to
>> take s as a parameter.
>>
>> Either way, I see three answers to your question:
>>
>> First, right now, we're basically stuck with a compile time constant.
>>
>> Second, if a user really wants to, he could always define the macro
>> to represent some variable. This should work pretty well already,
>> although this variable has to be defined first, of course.
>>
>> Third, it wouldn't be too much of a problem to write a follow-up
>> patch manually replacing every QCOW2_OL_DEFAULT occurrence by a true
>> variable (such as default_overlap_check from the current
>> BDRVQcowState structure). I'd just undefine the macro and work down
>> every compiler error. ;-)
>>
>> On the other hand, now, that I think about it, we could also invert
>> the current program logic: qcow2_check_metadata_overlap would then
>> no longer receive a bitmask of structures to check for overlaps, but
>> rather a bitmask of structures to ignore, since it can figure out
>> s->default_overlap_check by itself.
> Yup, see above. It's not necessary to invert to logic, though it's an
> option and perhaps the nicer one. The crucial part is moving the
> evalution of s->overlap_check into qcow2_check_metadata_overlap. (Note
> how I dropped the 'default' from s->default_overlap_check, it's not a
> default any more, but the actual user choice.)
Well, I didn't mean the “default” to express that it's QEMU's default, 
but rather that it's the default check to be performed by 
qcow2_check_metadata_overlap if the caller doesn't have any 
“restrictions” (such as which structures should be ignored). But anyway, 
it makes sense to drop the prefix in this case as well, because that 
value will then be used inside qcow2_check_metadata_overlap alone. 
Furthermore, I'm always in favor of shorter variable names. ;-)

> The more interesting part is that adding an option always needs thought
> because once it is exposed, it's an API that is set in stone. And I'm
> also not sure what the best command line and QMP representations of a
> bitmask like this are.
I'd personally add it to the runtime options of qcow2. In addition, I 
propose we add a mechanism to generally amend runtime options at runtime 
through QMP (if there isn't one already which I then am unaware of). I 
don't see why we should just allow the kind of overlap checks performed 
to be changed at runtime, but not, for instance, whether lazy refcounts 
should be used (except the latter would be a bit harder to implement, I 
guess).

About the representation: The discard behavior is basically a bitfield 
already and gives us therefore one possible representation (which is, 
just using a single boolean per structure, named something like 
"overlap-check.active-l1" etc.). In QMP we could probably also use a 
dict, but then again, this is a decision to be made when generally 
allowing modification of the qcow2 runtime options through QMP (in my 
opinion). And finally, we could obviously just use an integer to 
represent the mask.

I think, we should first take care of the command line interface and 
about QMP later (that is, if you agree on generally allowing 
modification of the qcow2 runtime options through QMP). There, we could 
offer both one boolean per mask element and an integer option, probably 
the boolean flags taking precedence.

The flags are nice for users who want an "easily" comprehensible 
interface, the masked integer is better for those who prefer a short 
representation.


Max

  reply	other threads:[~2013-09-13 10:23 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-02  7:25 [Qemu-devel] [PATCH v5 0/8] Add metadata overlap checks Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 1/8] qcow2: Add corrupt bit Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 2/8] qcow2: Metadata overlap checks Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 3/8] qcow2: Employ metadata " Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 4/8] qcow2-refcount: Move OFLAG_COPIED checks Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 5/8] qcow2-refcount: Repair OFLAG_COPIED errors Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 6/8] qcow2-refcount: Repair shared refcount blocks Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 7/8] qcow2_check: Mark image consistent Max Reitz
2013-09-02  7:25 ` [Qemu-devel] [PATCH v5 8/8] qemu-iotests: Overlapping cluster allocations Max Reitz
2013-09-12 14:57 ` [Qemu-devel] [PATCH v5 0/8] Add metadata overlap checks Eric Blake
2013-09-12 15:24   ` Max Reitz
2013-09-13  9:57     ` Kevin Wolf
2013-09-13 10:23       ` Max Reitz [this message]
2013-09-13 12:29         ` Eric Blake
2013-09-13 12:37           ` Max Reitz
2013-09-13 14:29           ` Max Reitz
2013-09-13 14:34             ` Eric Blake
2013-09-19 15:07 ` Max Reitz
2013-09-19 17:26   ` Eric Blake
2013-09-20  8:23     ` Max Reitz
2013-09-20 10:32   ` Stefan Hajnoczi
2013-10-26 13:03     ` Max Reitz
2013-10-26 13:05       ` Max Reitz
2013-11-05  8:51       ` Stefan Hajnoczi
2013-11-14 18:37         ` Max Reitz
2013-11-15  8:13           ` Stefan Hajnoczi

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=5232E78A.2030406@redhat.com \
    --to=mreitz@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).