code: func (g *Cloud) ResizeDisk(diskToResize string, oldSize resource.Quantity, newSize resource.Quantity) (resource.Quantity, error) {
  	disk, err := g.GetDiskByNameUnknownZone(diskToResize)
  	if err != nil {
  		return oldSize, err
  	}
  
  	// GCE resizes in chunks of GiBs
  	requestGIB := volumehelpers.RoundUpToGiB(newSize)
  	newSizeQuant := resource.MustParse(fmt.Sprintf("%dGi", requestGIB))
  
  	// If disk is already of size equal or greater than requested size, we simply return
  	if disk.SizeGb >= requestGIB {
  		return newSizeQuant, nil
  	}
  
  	var mc *metricContext
  
  	switch zoneInfo := disk.ZoneInfo.(type) {
  	case singleZone:
  		mc = newDiskMetricContextZonal("resize", disk.Region, zoneInfo.zone)
  		err := g.manager.ResizeDiskOnCloudProvider(disk, requestGIB, zoneInfo.zone)
  
  		if err != nil {
  			return oldSize, mc.Observe(err)
  		}
  		return newSizeQuant, mc.Observe(err)
  	case multiZone:
  		if !utilfeature.DefaultFeatureGate.Enabled(cloudfeatures.GCERegionalPersistentDisk) {
  			return oldSize, fmt.Errorf("disk.ZoneInfo has unexpected type %T", zoneInfo)
  		}
  
  		mc = newDiskMetricContextRegional("resize", disk.Region)
  		err := g.manager.RegionalResizeDiskOnCloudProvider(disk, requestGIB)
  
  		if err != nil {
  			return oldSize, mc.Observe(err)
  		}
  		return newSizeQuant, mc.Observe(err)
  	case nil:
  		return oldSize, fmt.Errorf("PD has nil ZoneInfo: %v", disk)
  	default:
  		return oldSize, fmt.Errorf("disk.ZoneInfo has unexpected type %T", zoneInfo)
  	}
  }
docs: // ResizeDisk expands given disk and returns new disk size