'Migrates volume.
:param extra_specs: Instance of ExtraSpecs. The new volume will be
changed to align with the new extra specs.'

def _migrate_volume(self, volume, host, extra_specs):

    r = utils.validate_storage_migration(volume, host, self.serial_number, self.protocol)
    if (not r):
        return (r, None)
    rate = utils.get_migration_rate(volume)
    new_pool = utils.get_pool_from_host(host['host'])
    lun_id = self.client.get_lun_id(volume)
    lun_name = volume.name
    provision = extra_specs.provision
    tier = extra_specs.tier
    emc_taskflow.run_migration_taskflow(self.client, lun_id, lun_name, volume.size, new_pool, provision, tier, rate)
    if utils.is_volume_smp(volume):
        self.client.delete_snapshot(utils.construct_snap_name(volume))
    volume_metadata = utils.get_metadata(volume)
    pl = self._build_provider_location(lun_type='lun', lun_id=lun_id, base_lun_name=volume.name)
    volume_metadata['snapcopy'] = 'False'
    model_update = {'provider_location': pl, 'metadata': volume_metadata}
    return (True, model_update)
