def METHOD_NAME(self):
    """
    Before commit 53431b9086b28, mirror-top used to not take any
    permissions but WRITE and share all permissions.  Because it
    is inserted between the source's original parents and the
    source, there generally was no parent that would have taken or
    unshared any permissions on the source, which means that an
    external process could access the image unhindered by locks.
    (Unless there was a parent above the protocol node that would
    take its own locks, e.g. a format driver.)
    This is bad enough, but if the mirror job is then cancelled,
    the mirroring VM tries to take back the image, restores the
    original permissions taken and unshared, and assumes this must
    just work.  But it will not, and so the VM aborts.
    Commit 53431b9086b28 made mirror keep the original permissions
    and so no other process can "steal" the image.
    (Note that you cannot really do the same with the target image
    and then completing the job, because the mirror job always
    took/unshared the correct permissions on the target.  For
    example, it does not share READ_CONSISTENT, which makes it
    difficult to let some other qemu process open the image.)
    """
    result = self.vm.qmp('blockdev-mirror',
                         job_id='mirror',
                         device='drive0',
                         target='null',
                         sync='full')
    self.assert_qmp(result, 'return', {})
    self.vm.event_wait('BLOCK_JOB_READY')
    # We want this to fail because the image cannot be locked.
    # If it does not fail, continue still and see what happens.
    self.vm_b = iotests.VM(path_suffix='b')
    # Must use -blockdev -device so we can use share-rw.
    # (And we need share-rw=on because mirror-top was always
    # forced to take the WRITE permission so it can write to the
    # source image.)
    self.vm_b.add_blockdev(f'file,node-name=drive0,filename={source}')
    self.vm_b.add_device('virtio-blk,drive=drive0,share-rw=on')
    try:
        # Silence AQMP errors temporarily.
        # TODO: Remove this and just allow the errors to be logged when
        # AQMP fully replaces QMP.
        with change_log_level('qemu.aqmp'):
            self.vm_b.launch()
            print('ERROR: VM B launched successfully, '
                  'this should not have happened')
    except (QMPConnectError, machine.VMLaunchFailure):
        assert 'Is another process using the image' in self.vm_b.get_log()
    result = self.vm.qmp('block-job-cancel',
                         device='mirror')
    self.assert_qmp(result, 'return', {})
    self.vm.event_wait('BLOCK_JOB_COMPLETED')