diff --git a/pkg/volume/fc/disk_manager.go b/pkg/volume/fc/disk_manager.go index b14d84ff31f..33a0c422cff 100644 --- a/pkg/volume/fc/disk_manager.go +++ b/pkg/volume/fc/disk_manager.go @@ -36,7 +36,6 @@ type diskManager interface { // utility to mount a disk based filesystem func diskSetUp(manager diskManager, b fcDiskMounter, volPath string, mounter mount.Interface, fsGroup *int64) error { globalPDPath := manager.MakeGlobalPDName(*b.fcDisk) - // TODO: handle failed mounts here. noMnt, err := mounter.IsLikelyNotMountPoint(volPath) if err != nil && !os.IsNotExist(err) { @@ -57,7 +56,30 @@ func diskSetUp(manager diskManager, b fcDiskMounter, volPath string, mounter mou } err = mounter.Mount(globalPDPath, volPath, "", options) if err != nil { - glog.Errorf("failed to bind mount:%s", globalPDPath) + glog.Errorf("Failed to bind mount: source:%s, target:%s, err:%v", globalPDPath, volPath, err) + noMnt, mntErr := b.mounter.IsLikelyNotMountPoint(volPath) + if mntErr != nil { + glog.Errorf("IsLikelyNotMountPoint check failed: %v", mntErr) + return err + } + if !noMnt { + if mntErr = b.mounter.Unmount(volPath); mntErr != nil { + glog.Errorf("Failed to unmount: %v", mntErr) + return err + } + noMnt, mntErr = b.mounter.IsLikelyNotMountPoint(volPath) + if mntErr != nil { + glog.Errorf("IsLikelyNotMountPoint check failed: %v", mntErr) + return err + } + if !noMnt { + // will most likely retry on next sync loop. + glog.Errorf("%s is still mounted, despite call to unmount(). Will try again next sync loop.", volPath) + return err + } + } + os.Remove(volPath) + return err }