code: func IsNotMountPoint(mounter Interface, file string) (bool, error) {
  	// IsLikelyNotMountPoint provides a quick check
  	// to determine whether file IS A mountpoint
  	notMnt, notMntErr := mounter.IsLikelyNotMountPoint(file)
  	if notMntErr != nil && os.IsPermission(notMntErr) {
  		// We were not allowed to do the simple stat() check, e.g. on NFS with
  		// root_squash. Fall back to /proc/mounts check below.
  		notMnt = true
  		notMntErr = nil
  	}
  	if notMntErr != nil {
  		return notMnt, notMntErr
  	}
  	// identified as mountpoint, so return this fact
  	if notMnt == false {
  		return notMnt, nil
  	}
  
  	// Resolve any symlinks in file, kernel would do the same and use the resolved path in /proc/mounts
  	resolvedFile, err := mounter.EvalHostSymlinks(file)
  	if err != nil {
  		return true, err
  	}
  
  	// check all mountpoints since IsLikelyNotMountPoint
  	// is not reliable for some mountpoint types
  	mountPoints, mountPointsErr := mounter.List()
  	if mountPointsErr != nil {
  		return notMnt, mountPointsErr
  	}
  	for _, mp := range mountPoints {
  		if mounter.IsMountPointMatch(mp, resolvedFile) {
  			notMnt = false
  			break
  		}
  	}
  	return notMnt, nil
  }
docs: // IsNotMountPoint determines if a directory is a mountpoint.
  // It should return ErrNotExist when the directory does not exist.
  // IsNotMountPoint is more expensive than IsLikelyNotMountPoint.
  // IsNotMountPoint detects bind mounts in linux.
  // IsNotMountPoint enumerates all the mountpoints using List() and
  // the list of mountpoints may be large, then it uses
  // IsMountPointMatch to evaluate whether the directory is a mountpoint