'This is a generic volume failback.
:param volumes: List of volumes that need to be failed back.
:return: volume_updates for the list of volumes.'

def failback_volumes(self, volumes):

    LOG.info('failback_volumes')
    with self._client.open_connection() as api:
        qosnode = self._get_qos(api.ssn)
        if (not qosnode):
            raise exception.VolumeBackendAPIException(message=_('Unable    to    failback.    Backend    is    misconfigured.'))
        volume_updates = []
        replitems = []
        for volume in volumes:
            LOG.info('failback_volumes:    starting    volume:    %s', volume)
            model_update = {}
            if volume.get('replication_driver_data'):
                rspecs = self._get_replication_specs(self._get_volume_extra_specs(volume))
                if rspecs['live']:
                    model_update = self._failback_live_volume(api, volume['id'], volume['provider_id'])
                else:
                    replitem = self._failback_replication(api, volume, qosnode)
                    replitems.append(replitem)
            else:
                model_update = {'status': 'available'}
            if model_update:
                volume_updates.append({'volume_id': volume['id'], 'updates': model_update})
            if (len(replitems) == 5):
                volume_updates += self._finish_failback(api, replitems)
                replitems = []
        if replitems:
            volume_updates += self._finish_failback(api, replitems)
        self._update_backend(None)
        return volume_updates
