[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 11/13] block/fuse: take AioContext lock around blk_exp_ref/unref()
- To: Stefan Hajnoczi <stefanha@xxxxxxxxxx>, qemu-devel@xxxxxxxxxx
- From: Paolo Bonzini <pbonzini@xxxxxxxxxx>
- Date: Tue, 4 Apr 2023 15:46:34 +0200
- Cc: Julia Suvorova <jusual@xxxxxxxxxx>, Kevin Wolf <kwolf@xxxxxxxxxx>, Peter Lieven <pl@xxxxxxx>, Coiby Xu <Coiby.Xu@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx, Richard Henderson <richard.henderson@xxxxxxxxxx>, Stefano Garzarella <sgarzare@xxxxxxxxxx>, qemu-block@xxxxxxxxxx, Eduardo Habkost <eduardo@xxxxxxxxxxx>, Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, "Richard W.M. Jones" <rjones@xxxxxxxxxx>, "Dr. David Alan Gilbert" <dgilbert@xxxxxxxxxx>, Marcel Apfelbaum <marcel.apfelbaum@xxxxxxxxx>, Aarushi Mehta <mehta.aaru20@xxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Fam Zheng <fam@xxxxxxxxxx>, David Woodhouse <dwmw2@xxxxxxxxxxxxx>, Stefan Weil <sw@xxxxxxxxxxx>, Juan Quintela <quintela@xxxxxxxxxx>, Xie Yongji <xieyongji@xxxxxxxxxxxxx>, Hanna Reitz <hreitz@xxxxxxxxxx>, Ronnie Sahlberg <ronniesahlberg@xxxxxxxxx>, eesposit@xxxxxxxxxx, "Michael S. Tsirkin" <mst@xxxxxxxxxx>, Daniel P. Berrangé <berrange@xxxxxxxxxx>, Anthony Perard <anthony.perard@xxxxxxxxxx>
- Delivery-date: Tue, 04 Apr 2023 13:46:46 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 4/3/23 20:30, Stefan Hajnoczi wrote:
These functions must be called with the AioContext acquired:
/* Callers must hold exp->ctx lock */
void blk_exp_ref(BlockExport *exp)
...
/* Callers must hold exp->ctx lock */
void blk_exp_unref(BlockExport *exp)
Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
---
block/export/fuse.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/block/export/fuse.c b/block/export/fuse.c
index 06fa41079e..18394f9e07 100644
--- a/block/export/fuse.c
+++ b/block/export/fuse.c
@@ -244,7 +244,9 @@ static void read_from_fuse_export(void *opaque)
FuseExport *exp = opaque;
int ret;
+ aio_context_acquire(exp->common.ctx);
blk_exp_ref(&exp->common);
+ aio_context_release(exp->common.ctx);
do {
ret = fuse_session_receive_buf(exp->fuse_session, &exp->fuse_buf);
@@ -256,7 +258,9 @@ static void read_from_fuse_export(void *opaque)
fuse_session_process_buf(exp->fuse_session, &exp->fuse_buf);
out:
+ aio_context_acquire(exp->common.ctx);
blk_exp_unref(&exp->common);
+ aio_context_release(exp->common.ctx);
}
Since the actual thread-unsafe work is done in a bottom half, perhaps
instead you can use qatomic_inc and qatomic_fetch_dec in
blk_exp_{ref,unref}?
Paolo
|