|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 05/12] block: remove AioContext locking
On Thu, Nov 30, 2023 at 03:31:37PM -0600, Eric Blake wrote:
> On Wed, Nov 29, 2023 at 02:55:46PM -0500, Stefan Hajnoczi wrote:
> > This is the big patch that removes
> > aio_context_acquire()/aio_context_release() from the block layer and
> > affected block layer users.
> >
> > There isn't a clean way to split this patch and the reviewers are likely
> > the same group of people, so I decided to do it in one patch.
> >
> > Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
> > ---
>
> > +++ b/block.c
> > @@ -7585,29 +7433,12 @@ void coroutine_fn bdrv_co_leave(BlockDriverState
> > *bs, AioContext *old_ctx)
> >
> > void coroutine_fn bdrv_co_lock(BlockDriverState *bs)
> > {
> > - AioContext *ctx = bdrv_get_aio_context(bs);
> > -
> > - /* In the main thread, bs->aio_context won't change concurrently */
> > - assert(qemu_get_current_aio_context() == qemu_get_aio_context());
> > -
> > - /*
> > - * We're in coroutine context, so we already hold the lock of the main
> > - * loop AioContext. Don't lock it twice to avoid deadlocks.
> > - */
> > - assert(qemu_in_coroutine());
>
> Is this assertion worth keeping in the short term?...
Probably not because coroutine vs non-coroutine functions don't change
in this patch series, so it's unlikely that this will break.
>
> > - if (ctx != qemu_get_aio_context()) {
> > - aio_context_acquire(ctx);
> > - }
> > + /* TODO removed in next patch */
> > }
>
> ...I guess I'll see in the next patch.
>
> >
> > void coroutine_fn bdrv_co_unlock(BlockDriverState *bs)
> > {
> > - AioContext *ctx = bdrv_get_aio_context(bs);
> > -
> > - assert(qemu_in_coroutine());
> > - if (ctx != qemu_get_aio_context()) {
> > - aio_context_release(ctx);
> > - }
> > + /* TODO removed in next patch */
> > }
>
> Same comment.
>
> > +++ b/blockdev.c
> > @@ -1395,7 +1352,6 @@ static void
> > external_snapshot_action(TransactionAction *action,
> > /* File name of the new image (for 'blockdev-snapshot-sync') */
> > const char *new_image_file;
> > ExternalSnapshotState *state = g_new0(ExternalSnapshotState, 1);
> > - AioContext *aio_context;
> > uint64_t perm, shared;
> >
> > /* TODO We'll eventually have to take a writer lock in this function */
>
> I'm guessing removal of the locking gets us one step closer to
> implementing this TODO at a later time? Or is it now a stale comment?
> Either way, it doesn't affect this patch.
I'm not sure. Kevin can answer questions about the graph lock.
> > +++ b/tests/unit/test-blockjob.c
>
> > -static void test_complete_in_standby(void)
> > -{
>
> > @@ -531,13 +402,5 @@ int main(int argc, char **argv)
> > g_test_add_func("/blockjob/cancel/standby", test_cancel_standby);
> > g_test_add_func("/blockjob/cancel/pending", test_cancel_pending);
> > g_test_add_func("/blockjob/cancel/concluded", test_cancel_concluded);
> > -
> > - /*
> > - * This test is flaky and sometimes fails in CI and otherwise:
> > - * don't run unless user opts in via environment variable.
> > - */
> > - if (getenv("QEMU_TEST_FLAKY_TESTS")) {
> > - g_test_add_func("/blockjob/complete_in_standby",
> > test_complete_in_standby);
> > - }
>
> Looks like you ripped out this entire test, because it is no longer
> viable. I might have mentioned it in the commit message, or squashed
> the removal of this test into the earlier 02/12 patch.
I have sent a separate patch to remove this test and once it's merged
this hunk will disappear this patch series:
https://lore.kernel.org/qemu-devel/20231127170210.422728-1-stefanha@xxxxxxxxxx/
Stefan
Attachment:
signature.asc
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |