All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: qemu-devel@nongnu.org, kwolf@redhat.com,
	Jeff Cody <jcody@redhat.com>,
	qemu-block@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] block: Avoid bogus flags during mirroring
Date: Mon, 13 Jun 2016 06:39:23 -0600	[thread overview]
Message-ID: <575EA97B.4010005@redhat.com> (raw)
In-Reply-To: <20160612021513.GB27167@ad.usersys.redhat.com>

[-- Attachment #1: Type: text/plain, Size: 2102 bytes --]

On 06/11/2016 08:15 PM, Fam Zheng wrote:
> On Sat, 06/11 19:18, Eric Blake wrote:
>> Commit e253f4b8 converted mirroring from sector-based bdrv_aio_*
>> to byte-based blk_aio_*, but failed to account for the subtle
>> difference in signatures (the former takes a semi-redundant length,
>> the latter takes a flags parameter).  Since all of our flags are
>> currently smaller in size than BDRV_SECTOR_SIZE, it has no ill
>> effects until we either perform sub-sector mirroring, or we start
>> asserting that no unexpected flags are set.  I found it while
>> testing new asserts when qemu-iotests 132 started warning about an
>> unknown flag 0x200000.
>>
>> Add an assert to help us catch any other improper flags.
>>
>> Signed-off-by: Eric Blake <eblake@redhat.com>
>> ---
>>  block/block-backend.c | 2 ++
>>  block/mirror.c        | 6 ++----
>>  2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/block/block-backend.c b/block/block-backend.c
>> index 34500e6..a5dc6e3 100644
>> --- a/block/block-backend.c
>> +++ b/block/block-backend.c
>> @@ -945,6 +945,8 @@ static BlockAIOCB *blk_aio_prwv(BlockBackend *blk, int64_t offset, int bytes,
>>      acb->bh = NULL;
>>      acb->has_returned = false;
>>
>> +    assert(flags <= 0x1f);
>> +
> 
> Maybe define BDRV_REQ_FLAGS_MAX in include/block/block.h so it's easier to keep
> this assertion valid when we introduce more flags in the future?

Oh, good idea.  And I also don't know if blk_aio_prwv() is really the
best place (it happened to be nicer for getting a good gdb backtrace of
the culprit caller prior to entering coroutines, since coroutines tend
to kill the call trace - but is too narrow in that it doesn't catch
non-aio entry into the block layer) - so I should probably make the
actual asserts live in better places like bdrv_driver_p*.  I'll split
the patch between bug fix and assertion additions, v2 coming up later today.

> 
> Otherwise the patch looks good.
> 


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

      reply	other threads:[~2016-06-13 12:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-12  1:18 [Qemu-devel] [PATCH] block: Avoid bogus flags during mirroring Eric Blake
2016-06-12  2:15 ` Fam Zheng
2016-06-13 12:39   ` Eric Blake [this message]

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=575EA97B.4010005@redhat.com \
    --to=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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.