[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 04/14] aio: make aio_context_acquire()/aio_context_release() a no-op
Am 19.12.2023 um 22:23 hat Stefan Hajnoczi geschrieben: > The following hack makes the test pass but there are larger safety > issues that I'll need to look at on Wednesday: I see, you're taking the same approach as in the SCSI layer: Don't make things thread-safe, but just always access them from the same thread. In theory this should be okay, but I'm almost sure that at least nbd_drained_poll() must then run in the same AioContext, too. > diff --git a/nbd/server.c b/nbd/server.c > index 895cf0a752..cf4b7d5c6d 100644 > --- a/nbd/server.c > +++ b/nbd/server.c > @@ -1617,7 +1617,7 @@ static void nbd_drained_begin(void *opaque) > } > } > > -static void nbd_drained_end(void *opaque) > +static void nbd_resume_clients(void *opaque) > { > NBDExport *exp = opaque; > NBDClient *client; > @@ -1628,6 +1628,15 @@ static void nbd_drained_end(void *opaque) > } > } > > +static void nbd_drained_end(void *opaque) > +{ > + NBDExport *exp = opaque; > + > + /* TODO how to make sure exp doesn't go away? */ blk_exp_ref()? > + /* TODO what if AioContext changes before this runs? */ > + aio_bh_schedule_oneshot(nbd_export_aio_context(exp), > nbd_resume_clients, exp); We could increase client->nb_requests if we change it to be accessed atomically. Then nbd_drained_poll() will make any AioContext change wait for the BH. Or maybe aio_wait_bh_oneshot() would already solve both problems? > +} > + Kevin
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |