code: func (w *walker) walkSymlink(ctx context.Context, relPath string, info fs.FileInfo, finishedChan chan<- ScanResult) error {
  	// Symlinks are not supported on Windows. We ignore instead of returning
  	// an error.
  	if runtime.GOOS == "windows" {
  		return nil
  	}
  
  	f, err := CreateFileInfo(info, relPath, w.Filesystem)
  	if err != nil {
  		w.handleError(ctx, "reading link:", relPath, err, finishedChan)
  		return nil
  	}
  
  	curFile, hasCurFile := w.CurrentFiler.CurrentFile(relPath)
  
  	f = w.updateFileInfo(f, curFile)
  
  	if hasCurFile {
  		if curFile.IsEquivalentOptional(f, w.IgnorePerms, true, w.LocalFlags) {
  			return nil
  		}
  		if curFile.ShouldConflict() {
  			// The old file was invalid for whatever reason and probably not
  			// up to date with what was out there in the cluster. Drop all
  			// others from the version vector to indicate that we haven't
  			// taken their version into account, and possibly cause a
  			// conflict.
  			f.Version = f.Version.DropOthers(w.ShortID)
  		}
  	}
  
  	l.Debugln("symlink changedb:", relPath, f)
  
  	select {
  	case finishedChan <- ScanResult{File: f}:
  	case <-ctx.Done():
  		return ctx.Err()
  	}
  
  	return nil
  }
docs: // walkSymlink returns nil or an error, if the error is of the nature that
  // it should stop the entire walk.