On 08/02/2018 11:10, Alberto Garcia wrote: > On Wed 07 Feb 2018 05:29:20 PM CET, Paolo Bonzini wrote: >> Even if an op blocker is present for BLOCK_OP_TYPE_MIRROR_SOURCE, >> it is checked a bit late and the result is that the target is >> created even if drive-mirror subsequently fails. Add an early >> check to avoid this. >> >> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> >> --- >> blockdev.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/blockdev.c b/blockdev.c >> index 8e977eef11..c7e2e0a00e 100644 >> --- a/blockdev.c >> +++ b/blockdev.c >> @@ -3565,6 +3565,11 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp) >> return; >> } >> >> + /* Early check to avoid creating target */ >> + if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR_SOURCE, errp)) { >> + return; >> + } >> + >> aio_context = bdrv_get_aio_context(bs); >> aio_context_acquire(aio_context); > > Do we need to hold the AioContext in order to check for op blockers?
In include/block/block_int.h, they are not in the "Protected by AioContext lock" section. Paolo