From 9e24ccbda026e28c43c8c7ba0e94fb836b497f6f Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Mon, 17 Sep 2018 15:52:25 +0200 Subject: [PATCH] Fixed subpath cleanup when /var/lib/kubelet is a symlink. --- pkg/util/mount/mount.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/util/mount/mount.go b/pkg/util/mount/mount.go index b48caaffbb..84f48e8407 100644 --- a/pkg/util/mount/mount.go +++ b/pkg/util/mount/mount.go @@ -251,9 +251,14 @@ func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, e // It is more extensive than IsLikelyNotMountPoint // and it detects bind mounts in linux func IsNotMountPoint(mounter Interface, file string) (bool, error) { + // 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 + } // IsLikelyNotMountPoint provides a quick check // to determine whether file IS A mountpoint - notMnt, notMntErr := mounter.IsLikelyNotMountPoint(file) + notMnt, notMntErr := mounter.IsLikelyNotMountPoint(resolvedFile) 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. @@ -274,7 +279,7 @@ func IsNotMountPoint(mounter Interface, file string) (bool, error) { return notMnt, mountPointsErr } for _, mp := range mountPoints { - if mounter.IsMountPointMatch(mp, file) { + if mounter.IsMountPointMatch(mp, resolvedFile) { notMnt = false break }