qemu-devel.nongnu.org archive mirror
 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 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).