From: Paolo Bonzini <pbonzini@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 3/5] dma-helpers: rewrite completion/cancellation
Date: Fri, 09 Sep 2011 15:12:07 +0200 [thread overview]
Message-ID: <4E6A10A7.2010709@redhat.com> (raw)
In-Reply-To: <4E6A0D97.60606@redhat.com>
On 09/09/2011 02:59 PM, Kevin Wolf wrote:
>>> Also, I think it should be -EIO instead of -ENOMEM (even though it
>>> doesn't make any difference if we don't call the callback)
>>
>> If I understood the code correctly, dbs->io_func can only fail if it
>> fails to get an AIOCB, which is basically out-of-memory.
>
> Yeah, maybe you're right with the error code. Anyway, should we call the
> callback?
Considering that out-of-memory cannot happen and a couple of drivers do
return NULL, you're right about going for EIO and calling the callback.
> I think it would make sense to require block drivers to return a valid
> ACB (qemu_aio_get never returns NULL). If they have an error to report
> they should schedule a BH that calls the callback.
Perhaps you can write it down on the Wiki? There is already a block
driver braindump page, right?
>>> Did you consider that there are block drivers that implement
>>> bdrv_aio_cancel() as waiting for completion of outstanding requests? I
>>> think in that case dma_complete() may be called twice. For most of it,
>>> this shouldn't be a problem, but I think it doesn't work with the
>>> qemu_aio_release(dbs).
>>
>> Right. But then what to do (short of inventing reference counting
>> of some sort for AIOCBs) with those that don't? Leaking should not
>> be acceptable, should it?
>
> Hm, not sure. This whole cancellation stuff is so broken...
>
> Maybe we should really refcount dbs (actually it would be more like a
> bool in_cancel that means that dma_complete doesn't release the AIOCB)
But then it would leak for the drivers that do not wait for completion?
The problem is that the caller specifies what you should do but you do
not know it.
In fact it may be worse than just the qemu_aio_release: if the driver is
waiting for the request to complete, it will write over the bounce
buffer after dma_bdrv_unmap has been called.
In other words, I don't think this is fixable at all without reference
counting _all_ AIOCBs.
>> In short, this patch can be dropped, but it shows more problems. :)
>
> I'd rather have it fixed than dropped :-)
Me too. However, I'm looking at this because SCSI reset cancels all
pending I/O, and I would like to do a SCSI reset (and report unit
attention) just before migration, as an easy way to avoid saving the
pending requests in the migration stream. But if it's just leaking the
iovec on the migration source, I really do not care much, not yet at
least, because it's going to exit anyway. The other problems only
happen with DMA over I/O areas, which virtio-scsi won't do. I don't
think it's really fixable, so I quit. :)
Paolo
next prev parent reply other threads:[~2011-09-09 13:12 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-07 15:20 [Qemu-devel] [PATCH 0/5] block: preparatory patches for scatter/gather support Paolo Bonzini
2011-09-07 15:20 ` [Qemu-devel] [PATCH 1/5] dma-helpers: rename is_write to to_dev Paolo Bonzini
2011-09-09 11:31 ` Kevin Wolf
2011-09-07 15:20 ` [Qemu-devel] [PATCH 2/5] dma-helpers: allow including from target-independent code Paolo Bonzini
2011-09-09 11:39 ` Kevin Wolf
2011-09-09 11:53 ` Paolo Bonzini
2011-09-07 15:21 ` [Qemu-devel] [PATCH 3/5] dma-helpers: rewrite completion/cancellation Paolo Bonzini
2011-09-09 12:14 ` Kevin Wolf
2011-09-09 12:43 ` Paolo Bonzini
2011-09-09 12:59 ` Kevin Wolf
2011-09-09 13:12 ` Paolo Bonzini [this message]
2011-09-09 13:34 ` Kevin Wolf
2011-09-09 13:43 ` Paolo Bonzini
2011-09-07 15:21 ` [Qemu-devel] [PATCH 4/5] scsi-disk: commonize iovec creation between reads and writes Paolo Bonzini
2011-09-07 15:21 ` [Qemu-devel] [PATCH 5/5] scsi-disk: lazily allocate bounce buffer Paolo Bonzini
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=4E6A10A7.2010709@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--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).