mirror of
https://github.com/rclone/rclone.git
synced 2024-12-22 23:22:08 +01:00
mount: fix automount not detecting drive is ready
With automount the target mount drive appears twice in /proc/self/mountinfo. 379 27 0:70 / /mnt/rclone rw,relatime shared:433 - autofs systemd-1 rw,fd=57,... 566 379 0:90 / /mnt/rclone rw,nosuid,nodev,relatime shared:488 - fuse.rclone remote: rw,... Before this fix we only looked for the mount once in /proc/self/mountinfo. It finds the automount line and since this doesn't have fs type rclone it concludes the mount isn't ready yet. This patch makes rclone look through all the mounts and if any of them have fs type rclone it concludes the mount is ready. See: https://forum.rclone.org/t/systemd-mount-works-but-automount-does-not/42287/
This commit is contained in:
parent
c7a2719fac
commit
29baa5888f
@ -47,6 +47,15 @@ func CheckMountEmpty(mountpoint string) error {
|
||||
return checkMountEmpty(mountpoint)
|
||||
}
|
||||
|
||||
// singleEntryFilter looks for a specific entry.
|
||||
//
|
||||
// It may appear more than once and we return all of them if so.
|
||||
func singleEntryFilter(mp string) mountinfo.FilterFunc {
|
||||
return func(m *mountinfo.Info) (skip, stop bool) {
|
||||
return m.Mountpoint != mp, false
|
||||
}
|
||||
}
|
||||
|
||||
// CheckMountReady checks whether mountpoint is mounted by rclone.
|
||||
// Only mounts with type "rclone" or "fuse.rclone" count.
|
||||
func CheckMountReady(mountpoint string) error {
|
||||
@ -57,7 +66,7 @@ func CheckMountReady(mountpoint string) error {
|
||||
return fmt.Errorf("cannot get absolute path: %s: %w", mountpoint, err)
|
||||
}
|
||||
|
||||
infos, err := mountinfo.GetMounts(mountinfo.SingleEntryFilter(mountpointAbs))
|
||||
infos, err := mountinfo.GetMounts(singleEntryFilter(mountpointAbs))
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot get mounts: %w", err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user