code: func (ctrl *PersistentVolumeController) updateBindVolumeToClaim(volumeClone *v1.PersistentVolume, claim *v1.PersistentVolumeClaim, updateCache bool) (*v1.PersistentVolume, error) {
  	klog.V(2).Infof("claim %q bound to volume %q", claimToClaimKey(claim), volumeClone.Name)
  	newVol, err := ctrl.kubeClient.CoreV1().PersistentVolumes().Update(volumeClone)
  	if err != nil {
  		klog.V(4).Infof("updating PersistentVolume[%s]: binding to %q failed: %v", volumeClone.Name, claimToClaimKey(claim), err)
  		return newVol, err
  	}
  	if updateCache {
  		_, err = ctrl.storeVolumeUpdate(newVol)
  		if err != nil {
  			klog.V(4).Infof("updating PersistentVolume[%s]: cannot update internal cache: %v", volumeClone.Name, err)
  			return newVol, err
  		}
  	}
  	klog.V(4).Infof("updating PersistentVolume[%s]: bound to %q", newVol.Name, claimToClaimKey(claim))
  	return newVol, nil
  }
docs: // bindVolumeToClaim modifies given volume to be bound to a claim and saves it to
  // API server. The claim is not modified in this method!