code: func SearchMountPoints(hostSource, mountInfoPath string) ([]string, error) {
  	mis, err := parseMountInfo(mountInfoPath)
  	if err != nil {
  		return nil, err
  	}
  
  	mountID := 0
  	rootPath := ""
  	majorMinor := ""
  
  	// Finding the underlying root path and major:minor if possible.
  	// We need search in backward order because it's possible for later mounts
  	// to overlap earlier mounts.
  	for i := len(mis) - 1; i >= 0; i-- {
  		if hostSource == mis[i].mountPoint || PathWithinBase(hostSource, mis[i].mountPoint) {
  			// If it's a mount point or path under a mount point.
  			mountID = mis[i].id
  			rootPath = filepath.Join(mis[i].root, strings.TrimPrefix(hostSource, mis[i].mountPoint))
  			majorMinor = mis[i].majorMinor
  			break
  		}
  	}
  
  	if rootPath == "" || majorMinor == "" {
  		return nil, fmt.Errorf("failed to get root path and major:minor for %s", hostSource)
  	}
  
  	var refs []string
  	for i := range mis {
  		if mis[i].id == mountID {
  			// Ignore mount entry for mount source itself.
  			continue
  		}
  		if mis[i].root == rootPath && mis[i].majorMinor == majorMinor {
  			refs = append(refs, mis[i].mountPoint)
  		}
  	}
  
  	return refs, nil
  }
docs: // SearchMountPoints finds all mount references to the source, returns a list of
  // mountpoints.
  // This function assumes source cannot be device.
  // Some filesystems may share a source name, e.g. tmpfs. And for bind mounting,
  // it's possible to mount a non-root path of a filesystem, so we need to use
  // root path and major:minor to represent mount source uniquely.
  // This implementation is shared between Linux and NsEnterMounter