[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 10/12] block.c: add subtree_drains where needed
From: |
Emanuele Giuseppe Esposito |
Subject: |
Re: [PATCH 10/12] block.c: add subtree_drains where needed |
Date: |
Thu, 3 Feb 2022 14:13:27 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
On 19/01/2022 10:47, Paolo Bonzini wrote:
>
> About this:
>
>> + * TODO: this is called by job_unref with lock held, because
>> + * afterwards it calls bdrv_try_set_aio_context.
>> + * Once all of this is fixed, take care of removing
>> + * the aiocontext lock and make this function _unlocked.
>
> It may be clear to you, but it's quite cryptic:
>
I think you figured it by looking at the job patches, but:
> - which lock is held by job_unref()? Also, would it make more sense to
> talk about block_job_free() rather than job_unref()? I can't quite
> follow where the AioContext lock is taken.
AioContext lock. I think this is a change I made in the job patches, so
comparing it with the master would make this piece harder to understand.
In the job series, I reduce the granularity of the AioContext lock,
ending up having it only around few callbacks of JobDriver, namely
->free(). This is why I talk about job_unref, because it calls ->free.
The actual lock is taken in job_unref, but the caller (->free) is
block_job_free. Yes it makes more sense mentioning block_job_free.
> - what is "all of this", and what do you mean by "not safe yet"? Do
> both refer to bdrv_try_set_aio_context() needing the AioContext lock?
Yes
> - what is "this function" (that should become _unlocked)?
bdrv_subtree_drained_begin
This is the new comment I intend to put:
/*
* TODO: this function is called by BlockJobDriver's ->free()
* callback, block_job_free.
* We unfortunately must still take the AioContext lock around
* ->free() in job_unref, because of the bdrv_try_set_aio_context
* call below that still releases/acquires it.
* Once bdrv_try_set_aio_context does not require the AioContext lock,
* take care of removing it around ->free() and replace
* the following bdrv_subtree_drained_begin with its
* _unlocked version.
*/
>
> I think you could also split the patch in multiple parts for different
> call chains. In particular bdrv_set_backing_hd can be merged with the
> patch to bdrv_reopen_parse_file_or_backing, since both of them deal with
> bdrv_set_file_or_backing_noperm.
> Ok, I will try to do that.
Emanuele
- Re: [PATCH 10/12] block.c: add subtree_drains where needed,
Emanuele Giuseppe Esposito <=