code: func (r *DiskSubresource) validateStorageRelocateDiff() error {
  	log.Printf("[DEBUG] %s: Validating storage vMotion eligibility", r)
  	if err := r.blockRelocateAttachedDisks(); err != nil {
  		return err
  	}
  	log.Printf("[DEBUG] %s: Storage vMotion validation successful", r)
  	return nil
  }
docs: // validateStorageRelocateDiff validates certain storage vMotion diffs to make
  // sure they are functional. These mainly have to do with limitations
  // associated with our tracking of virtual disks via their names.
  //
  // The current limitations are:
  //
  // * Externally-attached virtual disks are not allowed to be vMotioned.
  // * Disks must match the vSphere naming convention, where the first disk is
  // named VMNAME.vmdk, and all other disks are named VMNAME_INDEX.vmdk This is a
  // validation we use for cloning as well.
  // * Any VM that has been created by a linked clone is blocked from storage
  // vMotion full stop.
  //
  // TODO: Once we have solved the disk tracking issue and are no longer tracking
  // disks via their file names, the only restriction that should remain is for
  // externally attached disks. That restriction will go away once we figure out
  // a strategy for handling when said disks have been moved OOB of the VM
  // workflow.