mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 18:24:07 +00:00
fix cinder volume dir umount issue #24717
fix https://github.com/kubernetes/kubernetes/issues/24717 If kubelet root-dir is a symlink, the pod's cinder volume dir can't be umounted even after pod is deleted. This patch reads target path of symlink before comparing with entries in proc mounts.
This commit is contained in:
parent
7a725418af
commit
1fb33aa2da
@ -21,6 +21,7 @@ package mount
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/kubernetes/pkg/util/exec"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type Interface interface {
|
||||
@ -86,8 +87,13 @@ func GetMountRefs(mounter Interface, mountPath string) ([]string, error) {
|
||||
|
||||
// Find the device name.
|
||||
deviceName := ""
|
||||
// If mountPath is symlink, need get its target path.
|
||||
slTarget, err := filepath.EvalSymlinks(mountPath)
|
||||
if err != nil {
|
||||
slTarget = mountPath
|
||||
}
|
||||
for i := range mps {
|
||||
if mps[i].Path == mountPath {
|
||||
if mps[i].Path == slTarget {
|
||||
deviceName = mps[i].Device
|
||||
break
|
||||
}
|
||||
@ -99,7 +105,7 @@ func GetMountRefs(mounter Interface, mountPath string) ([]string, error) {
|
||||
glog.Warningf("could not determine device for path: %q", mountPath)
|
||||
} else {
|
||||
for i := range mps {
|
||||
if mps[i].Device == deviceName && mps[i].Path != mountPath {
|
||||
if mps[i].Device == deviceName && mps[i].Path != slTarget {
|
||||
refs = append(refs, mps[i].Path)
|
||||
}
|
||||
}
|
||||
@ -118,8 +124,13 @@ func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, e
|
||||
// Find the device name.
|
||||
// FIXME if multiple devices mounted on the same mount path, only the first one is returned
|
||||
device := ""
|
||||
// If mountPath is symlink, need get its target path.
|
||||
slTarget, err := filepath.EvalSymlinks(mountPath)
|
||||
if err != nil {
|
||||
slTarget = mountPath
|
||||
}
|
||||
for i := range mps {
|
||||
if mps[i].Path == mountPath {
|
||||
if mps[i].Path == slTarget {
|
||||
device = mps[i].Device
|
||||
break
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user