[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()



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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.