qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 0/8] Add metadata overlap checks
Date: Thu, 12 Sep 2013 17:24:22 +0200	[thread overview]
Message-ID: <5231DCA6.7090004@redhat.com> (raw)
In-Reply-To: <5231D673.6050907@redhat.com>

On 2013-09-12 16:57, Eric Blake wrote:
> On 09/02/2013 01:25 AM, Max Reitz wrote:
>> If a qcow2 image file becomes corrupted, any write may inadvertently
>> overwrite important metadata structures such as the L1 table. This
>> series adds functionality for detecting, preventing and (to some extent)
>> repairing such collisions.
>>
>> v5:
>>   - fixed patch 6 (forgot to update the event_names array for the new
>>     event BLKDBG_REFTABLE_UPDATE); no other changes
>>
>> v4:
>>   - fixed handling of preallocated zero clusters in patch 4
>>   - moved OFLAG_COPIED checks into a separate function (this affects
>>     patches 4 and 5); functionality remains unchanged
>>   - patches 1, 2, 3, 6, 7 and 8 remain unmodified (except for line
>>     numbers in block/qcow2-refcount.c)
> Just now looking at this series, and I have several questions.
>
> It looks like Kevin applied v4 rather than v5; have we fixed that up?
Seems like it – I have the change (from v4 to v5) in master (see 
block/blkdebug.c:171).

> Next, what sort of overhead do these new checks add to the write case?
> Is it something that would be a noticeable slowdown?  I'd love to see
> some benchmark numbers (hopefully, the default set of checks are in the
> noise compared to the overhead of actual I/O).
I'll do my best to get some benchmarking done.

> Also, is there a way to tune the set of checks used at runtime, or are
> we stuck with the compiled-in default?  That is, can a user opt in to
> more expensive tests for robustness, or opt out of default tests for
> speed, via a runtime command, or is it something where they have to
> recompile to choose a different QCOW2_OL_DEFAULT value?
>
Right now, it's obviously a compile-time constant. However, I think we 
could also define QCOW2_OL_DEFAULT to be a runtime variable, however, 
that variable would most probably be stored in the BDRVQcowState 
structure. We could take advantage of that structure's instance being 
named "s" almost universally, therefore we could define QCOW2_OL_DEFAULT 
to be s->default_overlap_check or something like that. It would 
obviously be kind of ugly, but it should work pretty well.

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.


Max

  reply	other threads:[~2013-09-12 15:24 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 [this message]
2013-09-13  9:57     ` Kevin Wolf
2013-09-13 10:23       ` Max Reitz
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=5231DCA6.7090004@redhat.com \
    --to=mreitz@redhat.com \
    --cc=eblake@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).