From: Paolo Bonzini <pbonzini@redhat.com>
To: Fam Zheng <famz@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
fam@euphon.net, Jeff Cody <jcody@redhat.com>,
qemu-block@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [RFC PATCH 00/12] block: Protect block jobs with lock / unlock API
Date: Fri, 29 May 2015 14:01:09 +0200 [thread overview]
Message-ID: <55685505.30007@redhat.com> (raw)
In-Reply-To: <1432896805-23867-1-git-send-email-famz@redhat.com>
On 29/05/2015 12:53, Fam Zheng wrote:
> This is the partial work to introduce bdrv_lock / bdrv_unlock and use them in
> block jobs where exclusive access to a BDS is necessary. It address the same
> category of problems as [1] with a different API, as the idea proposed by Paolo
> and Kevin.
>
> What's implemented in this series is also very close to [1], i.e. pausing
> ioeventfd and NBD server, with a notifier list.
I haven't yet fully digested patch 2 but, in the meanwhile, I can point
out how I would like the patch series to be structured.
Patch 1 is okay.
Patch 2 should be a very simple change that introduces the API simply as
bdrv_lock(bs) { bdrv_drain(bs); }
bdrv_unlock(bs) {}
Then you can introduce bdrv_lock/unlock (patches 3-4-5-6-12) which
remove most calls to bdrv_drain. BTW you can also remove the
bdrv_drain_all in qmp_transaction. These patches introduce the new API
but have no semantic change. If we agree that the API makes sense, they
can also be committed right now.
Only then you introduce full-blown locking and notifiers, and patches
7-8-9-10-11.
Thanks for your work!
Paolo
> The important missing pieces are converting bdrv_lock/unlock callers to
> coroutine, so that they can wait in the bs->lock_queue. In other words, this
> API is not complete without that, because we can't handle the case where two
> non-coroutine callers have contention, which is now asserted in bdrv_lock as
> practically impossible.
>
> [1]: https://lists.gnu.org/archive/html/qemu-block/2015-05/msg00800.html
>
> Thanks,
>
> Fam
>
>
> Fam Zheng (12):
> block: Use bdrv_drain to replace uncessary bdrv_drain_all
> block: Introduce bdrv_lock and bdrv_unlock API
> blockdev: Lock BDS during internal snapshot transaction
> blockdev: Lock BDS during external snapshot transaction
> blockdev: Lock BDS during drive-backup transaction
> blockdev: Lock BDS during blockdev-backup transaction
> block-backend: Add blk_add_lock_unlock_notifier
> virtio-blk: Move complete_request to 'ops' structure
> virtio-blk: Don't handle output when backend is locked
> virtio-scsi-dataplane: Add backend lock listener
> nbd-server: Clear "can_read" when backend is locked
> mirror: Protect source between bdrv_drain and bdrv_swap
>
> block.c | 16 +++++++--
> block/block-backend.c | 6 ++++
> block/io.c | 69 ++++++++++++++++++++++++++++++++++++
> block/mirror.c | 18 ++++++++--
> block/snapshot.c | 2 +-
> blockdev.c | 17 +++++++--
> hw/block/dataplane/virtio-blk.c | 36 ++++++++++++++++---
> hw/block/virtio-blk.c | 63 +++++++++++++++++++++++++++++++--
> hw/scsi/virtio-scsi-dataplane.c | 78 ++++++++++++++++++++++++++++++-----------
> hw/scsi/virtio-scsi.c | 3 ++
> include/block/block.h | 39 +++++++++++++++++++++
> include/block/block_int.h | 5 +++
> include/hw/virtio/virtio-blk.h | 17 +++++++--
> include/hw/virtio/virtio-scsi.h | 3 ++
> include/sysemu/block-backend.h | 1 +
> migration/block.c | 2 +-
> nbd.c | 21 +++++++++++
> 17 files changed, 356 insertions(+), 40 deletions(-)
>
prev parent reply other threads:[~2015-05-29 12:01 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-29 10:53 [Qemu-devel] [RFC PATCH 00/12] block: Protect block jobs with lock / unlock API Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 01/12] block: Use bdrv_drain to replace uncessary bdrv_drain_all Fam Zheng
2015-05-29 11:42 ` Paolo Bonzini
2015-06-25 12:19 ` [Qemu-devel] [PATCH for-2.4 " Paolo Bonzini
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 02/12] block: Introduce bdrv_lock and bdrv_unlock API Fam Zheng
2015-05-29 16:57 ` Eric Blake
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 03/12] blockdev: Lock BDS during internal snapshot transaction Fam Zheng
2015-05-29 11:39 ` Paolo Bonzini
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 04/12] blockdev: Lock BDS during external " Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 05/12] blockdev: Lock BDS during drive-backup transaction Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 06/12] blockdev: Lock BDS during blockdev-backup transaction Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 07/12] block-backend: Add blk_add_lock_unlock_notifier Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 08/12] virtio-blk: Move complete_request to 'ops' structure Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 09/12] virtio-blk: Don't handle output when backend is locked Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 10/12] virtio-scsi-dataplane: Add backend lock listener Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 11/12] nbd-server: Clear "can_read" when backend is locked Fam Zheng
2015-05-29 10:53 ` [Qemu-devel] [RFC PATCH 12/12] mirror: Protect source between bdrv_drain and bdrv_swap Fam Zheng
2015-05-29 12:01 ` Paolo Bonzini [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=55685505.30007@redhat.com \
--to=pbonzini@redhat.com \
--cc=fam@euphon.net \
--cc=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--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 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).