All of lore.kernel.org
 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 3/5] qcow2: Employ metadata overlap checks
Date: Tue, 27 Aug 2013 13:41:24 +0200	[thread overview]
Message-ID: <521C9064.2030101@redhat.com> (raw)
In-Reply-To: <20130827113205.GD648@dhcp-200-207.str.redhat.com>

Am 27.08.2013 13:32, schrieb Kevin Wolf:
> Am 26.08.2013 um 15:04 hat Max Reitz geschrieben:
>> The pre-write overlap check function is now called before most of the
>> qcow2 writes (aborting it on collision or other error).
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   block/qcow2-cache.c    | 17 +++++++++++++++++
>>   block/qcow2-cluster.c  | 23 +++++++++++++++++++++++
>>   block/qcow2-snapshot.c | 24 ++++++++++++++++++++++++
>>   block/qcow2.c          | 38 +++++++++++++++++++++++++++++++++++++-
>>   4 files changed, 101 insertions(+), 1 deletion(-)
>> @@ -368,6 +384,13 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs,
>>                           &s->aes_encrypt_key);
>>       }
>>   
>> +    ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT,
>> +            ((cluster_offset >> 9) + n_start) << 9, n * BDRV_SECTOR_SIZE);
> Looks a bit overcomplicated, I'd like something like this better:
>
> cluster_offset + n_start * BDRV_SECTOR_SIZE
Yes, but this wouldn't correspond with the write call if (cluster_offset 
& ((1 << 9) - 1)) != 0. ;-)

Basically, I just wanted it to match exactly the write command.

>
>> +    if (ret) {
>> +        ret = (ret < 0) ? ret : -EIO;
> I wonder whether the -EIO logic should be moved into
> qcow2_pre_write_overlap_check(). Currently each single caller seems to
> have this check.
Seems reasonable. I didn't want to prevent the caller from receiving 
information about the exact overlap, but that could be achieved through 
an optional result pointer as well, I think.

>
>> +        goto out;
>> +    }
>> +
>>       BLKDBG_EVENT(bs->file, BLKDBG_COW_WRITE);
>>       ret = bdrv_co_writev(bs->file, (cluster_offset >> 9) + n_start, n, &qiov);
>>       if (ret < 0) {
>> diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
>> index 0caac90..6f69ecc 100644
>> --- a/block/qcow2-snapshot.c
>> +++ b/block/qcow2-snapshot.c
>> @@ -189,6 +189,15 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
>>           return ret;
>>       }
>>   
>> +    /* The snapshot list position has not yet been updated, so these clusters
>> +     * must indeed be completely free */
>> +    ret = qcow2_pre_write_overlap_check(bs, QCOW2_OL_DEFAULT,
>> +                                        offset, s->nb_snapshots * sizeof(h));
>> +    if (ret) {
>> +        return (ret < 0) ? ret : -EIO;
>> +    }
> This doesn't check the full size. snapshots_size should have the right
> value.
Yes, you're right.

Max

  reply	other threads:[~2013-08-27 11:41 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-26 13:04 [Qemu-devel] [PATCH 0/5] qcow2: Add metadata overlap checks Max Reitz
2013-08-26 13:04 ` [Qemu-devel] [PATCH 1/5] qcow2: Add corrupt bit Max Reitz
2013-08-27  9:54   ` Kevin Wolf
2013-08-27 10:00     ` Max Reitz
2013-08-26 13:04 ` [Qemu-devel] [PATCH 2/5] qcow2: Metadata overlap checks Max Reitz
2013-08-27 10:17   ` Kevin Wolf
2013-08-27 11:06     ` Max Reitz
2013-08-27 11:16       ` Kevin Wolf
2013-08-26 13:04 ` [Qemu-devel] [PATCH 3/5] qcow2: Employ metadata " Max Reitz
2013-08-27 11:32   ` Kevin Wolf
2013-08-27 11:41     ` Max Reitz [this message]
2013-08-27 11:51       ` Kevin Wolf
2013-08-26 13:04 ` [Qemu-devel] [PATCH 4/5] qcow2: Check allocations in qcow2_check Max Reitz
2013-08-26 13:15   ` Max Reitz
2013-08-27 12:23   ` Kevin Wolf
2013-08-26 13:04 ` [Qemu-devel] [PATCH 5/5] qemu-iotests: Overlapping cluster allocations Max Reitz
2013-08-27 12:37   ` Kevin Wolf
  -- strict thread matches above, loose matches on Subject: below --
2013-08-26 10:18 [Qemu-devel] [PATCH 0/5] qcow2: Add metadata overlap checks Max Reitz
2013-08-26 10:18 ` [Qemu-devel] [PATCH 3/5] qcow2: Employ " Max Reitz

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=521C9064.2030101@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.