'Relocate volume backing to a datastore accessible to the given host.
The backing is not relocated if the current datastore is already
accessible to the host and compliant with the backing\'s storage
profile.
:param volume: Volume to be relocated
:param backing: Reference to the backing
:param host: Reference to the host'

def _relocate_backing(self, volume, backing, host):

    datastore = self.volumeops.get_datastore(backing)
    backing_profile = None
    if self._storage_policy_enabled:
        backing_profile = self._get_storage_profile(volume)
    if (self.volumeops.is_datastore_accessible(datastore, host) and self.ds_sel.is_datastore_compliant(datastore, backing_profile)):
        LOG.debug("Datastore:    %(datastore)s    of    backing:    %(backing)s    is    already    accessible    to    instance's    host:    %(host)s.", {'backing': backing, 'datastore': datastore, 'host': host})
        if backing_profile:
            LOG.debug('Backing:    %(backing)s    is    compliant    with    storage    profile:    %(profile)s.', {'backing': backing, 'profile': backing_profile})
        return
    req = {}
    req[hub.DatastoreSelector.SIZE_BYTES] = (volume['size'] * units.Gi)
    req[hub.DatastoreSelector.PROFILE_NAME] = backing_profile
    (host, resource_pool, summary) = self._select_datastore(req, host)
    dc = self._get_dc(resource_pool)
    folder = self._get_volume_group_folder(dc, volume['project_id'])
    self.volumeops.relocate_backing(backing, summary.datastore, resource_pool, host)
    self.volumeops.move_backing_to_folder(backing, folder)
