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

Reply via email to