[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 00/11] Refactor bdrv_try_set_aio_context using transaction
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
Re: [PATCH v2 00/11] Refactor bdrv_try_set_aio_context using transactions |
Date: |
Wed, 27 Jul 2022 19:13:44 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 |
On 7/25/22 15:21, Emanuele Giuseppe Esposito wrote:
The aim of this series is to reorganize bdrv_try_set_aio_context
and drop BDS ->set_aio_context and ->can_set_aio_ctx callbacks in
favour of a new one, ->change_aio_ctx.
More informations in patch 3 (which is also RFC, due to the doubts
I have with AioContext locks).
Patch 1 just add assertions in the code, 2 extends the transactions API to be
able to add also transactions in the tail
of the list.
Patch 3 is the core of this series, and introduces the new callback.
It is marked as RFC and the reason is explained in the commit message.
Patches 4-5-6 implement ->change_aio_ctx in the various block, blockjob
and block-backend BDSes.
Patch 7 substitutes ->change_aio_ctx with the old callbacks, and
patch 8 takes care of deleting the old callbacks and unused code.
This series is based on "job: replace AioContext lock with job_mutex",
but just because it uses job_set_aio_context() introduced there.
Suggested-by: Paolo Bonzini<pbonzini@redhat.com>
Based-on:<20220706201533.289775-1-eesposit@redhat.com>
What I dislike here is that you refactor aio-context-change to use transactions, but you
use it "internally" for aio-context-change. aio-context-change doesn't become a
native part of block-graph modifiction transaction system after the series.
For example, bdrv_attach_child_common(..., tran) still calls
bdrv_try_change_aio_context() function which doesn't take @tran argument. And
we have to call bdrv_try_change_aio_context() again in
bdrv_attach_child_common_abort() with opposite arguments by hand. We create in
_try_ separate Transaction object which is unrelated to the original
block-graph-change transaction.
With good refactoring we should get rid of these _try_ functions, and have just
bdrv_change_aio_context(..., tran) that can be natively used with external tran
object, where other block-graph change actions participate. This way we'll not
have to call reverse aio_context_change() in .abort, it will be done
automatically.
Moreover, your *aio_context_change* functions that do have tran parameter
cannot be simply used in the block-graph change transaction, as you don't
follow the common paradigm, that in .prepare we do all visible changes. That's
why you have to still use _try_*() version that creates seaparate transaction
object and completes it: after that the action is actually done and other
graph-modifying actions can be done on top.
So, IMHO, we shouldn't go this way, as that adds transaction actions that
actually can't be used in common block-graph-modifying transaction but only
context of bdrv_try_change_aio_context() internal transaction.
I agree that aio-context change should finally be rewritten to take a native
place in block-graph transactions, but that should be a complete solution,
introducing native bdrv_change_aio_context(..., tran) transaction action that
is directly used in the block-graph transaction, do visible effect in .prepare
and don't create extra Transaction objects.
--
Best regards,
Vladimir
- [PATCH v2 01/11] block.c: assert bs->aio_context is written under BQL and drains, (continued)
- [PATCH v2 01/11] block.c: assert bs->aio_context is written under BQL and drains, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 08/11] block: use the new _change_ API instead of _can_set_ and _set_, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 07/11] block-backend: implement .change_aio_ctx in child_root, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 06/11] block: implement .change_aio_ctx in child_of_bds, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 09/11] block: remove all unused ->can_set_aio_ctx and ->set_aio_ctx callbacks, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 02/11] block: use transactions as a replacement of ->{can_}set_aio_context(), Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 03/11] bdrv_change_aio_context: use hash table instead of list of visited nodes, Emanuele Giuseppe Esposito, 2022/07/25
- [PATCH v2 11/11] block: remove bdrv_try_set_aio_context and replace it with bdrv_try_change_aio_context, Emanuele Giuseppe Esposito, 2022/07/25
- Re: [PATCH v2 00/11] Refactor bdrv_try_set_aio_context using transactions, Vladimir Sementsov-Ogievskiy, 2022/07/26
- Re: [PATCH v2 00/11] Refactor bdrv_try_set_aio_context using transactions,
Vladimir Sementsov-Ogievskiy <=