'Check if all block storage of an instance can be shared
between source and destination of a live migration.
Returns true if the instance is volume backed and has no local disks,
or if the image backend is the same on source and destination and the
backend shares block storage between compute nodes.
:param instance: nova.objects.instance.Instance object
:param dest_check_data: dict with boolean fields image_type,
is_shared_instance_path, and is_volume_backed'

def _is_shared_block_storage(self, instance, dest_check_data, block_device_info=None):

    if (dest_check_data.obj_attr_is_set('image_type') and (CONF.libvirt.images_type == dest_check_data.image_type) and self.image_backend.backend().is_shared_block_storage()):
        return True
    if (dest_check_data.is_shared_instance_path and self.image_backend.backend().is_file_in_instance_path()):
        return True
    if (dest_check_data.is_volume_backed and (not bool(self._get_instance_disk_info(instance, block_device_info)))):
        return True
    return False
