code: func (m *csiBlockMapper) unstageVolumeForBlock(ctx context.Context, csi csiClient, stagingPath string) error {
  	// Check whether "STAGE_UNSTAGE_VOLUME" is set
  	stageUnstageSet, err := csi.NodeSupportsStageUnstage(ctx)
  	if err != nil {
  		klog.Error(log("blockMapper.unstageVolumeForBlock failed to check STAGE_UNSTAGE_VOLUME capability: %v", err))
  		return err
  	}
  	if !stageUnstageSet {
  		klog.Infof(log("blockMapper.unstageVolumeForBlock STAGE_UNSTAGE_VOLUME capability not set. Skipping unstageVolumeForBlock ..."))
  		return nil
  	}
  
  	// Request to unstage a block volume from stagingPath.
  	// Expected implementation for driver is removing driver specific resource in stagingPath and
  	// detaching the block volume from the node.
  	if err := csi.NodeUnstageVolume(ctx, m.volumeID, stagingPath); err != nil {
  		klog.Errorf(log("blockMapper.unstageVolumeForBlock failed: %v", err))
  		return err
  	}
  	klog.V(4).Infof(log("blockMapper.unstageVolumeForBlock NodeUnstageVolume successfully [%s]", stagingPath))
  
  	// Remove stagingPath directory and its contents
  	if err := os.RemoveAll(stagingPath); err != nil {
  		klog.Error(log("blockMapper.unstageVolumeForBlock failed to remove staging path after NodeUnstageVolume() error [%s]: %v", stagingPath, err))
  		return err
  	}
  
  	return nil
  }
docs: // unstageVolumeForBlock unstages a block volume from stagingPath