code: func (svm *serviceVM) hotRemoveVHDsNoLock(mvds ...hcsshim.MappedVirtualDisk) error {
  	var retErr error
  	for _, mvd := range mvds {
  		if _, ok := svm.attachedVHDs[mvd.HostPath]; !ok {
  			// We continue instead of returning an error if we try to hot remove a non-existent VHD.
  			// This is because one of the callers of the function is graphdriver.Put(). Since graphdriver.Get()
  			// defers the VM start to the first operation, it's possible that nothing have been hot-added
  			// when Put() is called. To avoid Put returning an error in that case, we simply continue if we
  			// don't find the vhd attached.
  			logrus.Debugf("lcowdriver: UVM %s: %s is not attached, not doing anything", svm.config.Name, mvd.HostPath)
  			continue
  		}
  
  		if svm.attachedVHDs[mvd.HostPath].refCount > 1 {
  			svm.attachedVHDs[mvd.HostPath].refCount--
  			logrus.Debugf("lcowdriver: UVM %s: %s refCount dropped to %d. not removing from UVM", svm.config.Name, mvd.HostPath, svm.attachedVHDs[mvd.HostPath].refCount)
  			continue
  		}
  
  		// last reference to VHD, so remove from VM and map
  		if err := svm.config.HotRemoveVhd(mvd.HostPath); err == nil {
  			delete(svm.attachedVHDs, mvd.HostPath)
  		} else {
  			// Take note of the error, but still continue to remove the other VHDs
  			logrus.Warnf("Failed to hot remove %s: %s", mvd.HostPath, err)
  			if retErr == nil {
  				retErr = err
  			}
  		}
  	}
  	return retErr
  }
docs: // hotRemoveVHDsNoLock removes VHDs from a service VM. When calling this function,
  // the contract is the service VM lock must be held.