code: func (b *volumeBinder) BindPodVolumes(assumedPod *v1.Pod) (err error) {
  	podName := getPodName(assumedPod)
  	klog.V(4).Infof("BindPodVolumes for pod %q, node %q", podName, assumedPod.Spec.NodeName)
  
  	start := time.Now()
  	defer func() {
  		VolumeSchedulingStageLatency.WithLabelValues("bind").Observe(time.Since(start).Seconds())
  		if err != nil {
  			VolumeSchedulingStageFailed.WithLabelValues("bind").Inc()
  		}
  	}()
  
  	bindings := b.podBindingCache.GetBindings(assumedPod, assumedPod.Spec.NodeName)
  	claimsToProvision := b.podBindingCache.GetProvisionedPVCs(assumedPod, assumedPod.Spec.NodeName)
  
  	// Start API operations
  	err = b.bindAPIUpdate(podName, bindings, claimsToProvision)
  	if err != nil {
  		return err
  	}
  
  	return wait.Poll(time.Second, b.bindTimeout, func() (bool, error) {
  		b, err := b.checkBindings(assumedPod, bindings, claimsToProvision)
  		return b, err
  	})
  }
docs: // BindPodVolumes gets the cached bindings and PVCs to provision in podBindingCache,
  // makes the API update for those PVs/PVCs, and waits for the PVCs to be completely bound
  // by the PV controller.