From f7dd953c2d0380cef3c351afb03d68c6fcda1dca Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Fri, 13 Mar 2020 12:34:28 +0000 Subject: [PATCH 08/20] block: Introduce 'bdrv_reopen_commit_post' step RH-Author: Kevin Wolf Message-id: <20200313123439.10548-3-kwolf@redhat.com> Patchwork-id: 94278 O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 02/13] block: Introduce 'bdrv_reopen_commit_post' step Bugzilla: 1790482 1805143 RH-Acked-by: John Snow RH-Acked-by: Daniel P. Berrange RH-Acked-by: Peter Krempa From: Peter Krempa Add another step in the reopen process where driver can execute code after permission changes are comitted. Signed-off-by: Peter Krempa Message-Id: Signed-off-by: Kevin Wolf (cherry picked from commit 17e1e2be5f9e84e0298e28e70675655b43e225ea) Signed-off-by: Kevin Wolf Signed-off-by: Danilo C. L. de Paula --- block.c | 9 +++++++++ include/block/block_int.h | 1 + 2 files changed, 10 insertions(+) diff --git a/block.c b/block.c index e1a4e38..a744bb5 100644 --- a/block.c +++ b/block.c @@ -3657,6 +3657,15 @@ cleanup_perm: } } } + + if (ret == 0) { + QTAILQ_FOREACH_REVERSE(bs_entry, bs_queue, entry) { + BlockDriverState *bs = bs_entry->state.bs; + + if (bs->drv->bdrv_reopen_commit_post) + bs->drv->bdrv_reopen_commit_post(&bs_entry->state); + } + } cleanup: QTAILQ_FOREACH_SAFE(bs_entry, bs_queue, entry, next) { if (ret) { diff --git a/include/block/block_int.h b/include/block/block_int.h index dd033d0..c168690 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -123,6 +123,7 @@ struct BlockDriver { int (*bdrv_reopen_prepare)(BDRVReopenState *reopen_state, BlockReopenQueue *queue, Error **errp); void (*bdrv_reopen_commit)(BDRVReopenState *reopen_state); + void (*bdrv_reopen_commit_post)(BDRVReopenState *reopen_state); void (*bdrv_reopen_abort)(BDRVReopenState *reopen_state); void (*bdrv_join_options)(QDict *options, QDict *old_options); -- 1.8.3.1