code: func RecursiveUnmount(target string) error {
  	mounts, err := parseMountTable(PrefixFilter(target))
  	if err != nil {
  		return err
  	}
  
  	// Make the deepest mount be first
  	sort.Slice(mounts, func(i, j int) bool {
  		return len(mounts[i].Mountpoint) > len(mounts[j].Mountpoint)
  	})
  
  	for i, m := range mounts {
  		logrus.Debugf("Trying to unmount %s", m.Mountpoint)
  		err = unmount(m.Mountpoint, mntDetach)
  		if err != nil {
  			if i == len(mounts)-1 { // last mount
  				if mounted, e := Mounted(m.Mountpoint); e != nil || mounted {
  					return err
  				}
  			} else {
  				// This is some submount, we can ignore this error for now, the final unmount will fail if this is a real problem
  				logrus.WithError(err).Warnf("Failed to unmount submount %s", m.Mountpoint)
  			}
  		}
  
  		logrus.Debugf("Unmounted %s", m.Mountpoint)
  	}
  	return nil
  }
docs: // RecursiveUnmount unmounts the target and all mounts underneath, starting with
  // the deepsest mount first.