code: func (ctrl *PersistentVolumeController) bindVolumeToClaim(volume *v1.PersistentVolume, claim *v1.PersistentVolumeClaim) (*v1.PersistentVolume, error) {
  	klog.V(4).Infof("updating PersistentVolume[%s]: binding to %q", volume.Name, claimToClaimKey(claim))
  
  	volumeClone, dirty, err := GetBindVolumeToClaim(volume, claim)
  	if err != nil {
  		return nil, err
  	}
  
  	// Save the volume only if something was changed
  	if dirty {
  		return ctrl.updateBindVolumeToClaim(volumeClone, claim, true)
  	}
  
  	klog.V(4).Infof("updating PersistentVolume[%s]: already bound to %q", volume.Name, claimToClaimKey(claim))
  	return volume, 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!