From: Kevin Wolf <kwolf@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, stefanha@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH 4/8] block: add a Rwlock to synchronous read/write drivers
Date: Thu, 20 Oct 2011 11:47:48 +0200 [thread overview]
Message-ID: <4E9FEE44.7050905@redhat.com> (raw)
In-Reply-To: <1319036398-14320-5-git-send-email-pbonzini@redhat.com>
Am 19.10.2011 16:59, schrieb Paolo Bonzini:
> The big conversion of bdrv_read/write to coroutines caused the two
> homonymous callbacks in BlockDriver to become reentrant. It goes
> like this:
>
> 1) bdrv_read is now called in a coroutine, and calls bdrv_read or
> bdrv_pread.
>
> 2) the nested bdrv_read goes through the fast path in bdrv_rw_co_entry;
>
> 3) in the common case when the protocol is file, bdrv_co_do_readv calls
> bdrv_co_readv_em (and from here goes to bdrv_co_io_em), which yields
> until the AIO operation is complete;
>
> 4) if bdrv_read had been called from a bottom half, the main loop
> is free to iterate again: a device model or another bottom half
> can then come and call bdrv_read again.
>
> This applies to all four of read/write/flush/discard. It would also
> apply to is_allocated, but it is not used from within coroutines:
> besides qemu-img.c and qemu-io.c, which operate synchronously, the
> only user is the monitor. Copy-on-read will introduce a use in the
> block layer, and will require converting it.
>
> The solution is "simply" to convert all drivers to coroutines! We
> have nothing to do for the read-only drivers. For the others, we
> add a Rwlock that is taken around affected operations.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
For the record, we just discussed this on IRC: We'll probably need a
mutex in some/most cases instead. Also, cloop and dmg need locking. That
leaves only bochs and parallels that should be okay without a lock.
We decided to play it the safe way and add locking in every driver and
make it a mutex everywhere.
Kevin
next prev parent reply other threads:[~2011-10-20 9:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-19 14:59 [Qemu-devel] [PATCH 0/8] finish coroutinization of drivers Paolo Bonzini
2011-10-19 14:59 ` [Qemu-devel] [PATCH 1/8] vpc: detect floppy disk geometries Paolo Bonzini
2011-10-20 9:14 ` Kevin Wolf
2011-10-20 10:13 ` Paolo Bonzini
2011-10-19 14:59 ` [Qemu-devel] [PATCH 2/8] vmdk: fix return values of vmdk_parent_open Paolo Bonzini
2011-10-20 9:16 ` Kevin Wolf
2011-10-19 14:59 ` [Qemu-devel] [PATCH 3/8] vmdk: clean up open Paolo Bonzini
2011-10-20 9:28 ` Kevin Wolf
2011-10-20 10:12 ` Paolo Bonzini
2011-10-20 10:25 ` Kevin Wolf
2011-10-19 14:59 ` [Qemu-devel] [PATCH 4/8] block: add a Rwlock to synchronous read/write drivers Paolo Bonzini
2011-10-20 9:47 ` Kevin Wolf [this message]
2011-10-19 14:59 ` [Qemu-devel] [PATCH 5/8] block: take lock around bdrv_read implementations Paolo Bonzini
2011-10-19 14:59 ` [Qemu-devel] [PATCH 6/8] block: take lock around bdrv_write implementations Paolo Bonzini
2011-10-19 14:59 ` [Qemu-devel] [PATCH 7/8] block: change flush to co_flush Paolo Bonzini
2011-10-20 10:04 ` Kevin Wolf
2011-10-19 14:59 ` [Qemu-devel] [PATCH 8/8] block: change discard to co_discard Paolo Bonzini
2011-10-20 10:08 ` Kevin Wolf
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=4E9FEE44.7050905@redhat.com \
--to=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.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.