From e7bd00b0b8741acbb6cc7c1a5076e80f93795b89 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Mon, 13 Feb 2023 17:51:50 +0100 Subject: [PATCH] Revert "check umount result" This reverts commit 368fd9d01e09a667867de0d5bd51782321fa9037. --- staging/src/k8s.io/mount-utils/mount_linux.go | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/staging/src/k8s.io/mount-utils/mount_linux.go b/staging/src/k8s.io/mount-utils/mount_linux.go index f0125fcb489..db0beb6d034 100644 --- a/staging/src/k8s.io/mount-utils/mount_linux.go +++ b/staging/src/k8s.io/mount-utils/mount_linux.go @@ -363,7 +363,19 @@ func (mounter *Mounter) Unmount(target string) error { command := exec.Command("umount", target) output, err := command.CombinedOutput() if err != nil { - return checkUmountError(target, command, output, err, mounter.withSafeNotMountedBehavior) + if err.Error() == errNoChildProcesses { + if command.ProcessState.Success() { + // We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753). + return nil + } + // Rewrite err with the actual exit error of the process. + err = &exec.ExitError{ProcessState: command.ProcessState} + } + if mounter.withSafeNotMountedBehavior && strings.Contains(string(output), errNotMounted) { + klog.V(4).Infof("ignoring 'not mounted' error for %s", target) + return nil + } + return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output)) } return nil } @@ -371,11 +383,11 @@ func (mounter *Mounter) Unmount(target string) error { // UnmountWithForce unmounts given target but will retry unmounting with force option // after given timeout. func (mounter *Mounter) UnmountWithForce(target string, umountTimeout time.Duration) error { - err := tryUnmount(target, mounter.withSafeNotMountedBehavior, umountTimeout) + err := tryUnmount(mounter, target, umountTimeout) if err != nil { if err == context.DeadlineExceeded { klog.V(2).Infof("Timed out waiting for unmount of %s, trying with -f", target) - err = forceUmount(target, mounter.withSafeNotMountedBehavior) + err = forceUmount(target) } return err } @@ -787,13 +799,13 @@ func (mounter *Mounter) IsMountPoint(file string) (bool, error) { } // tryUnmount calls plain "umount" and waits for unmountTimeout for it to finish. -func tryUnmount(target string, withSafeNotMountedBehavior bool, unmountTimeout time.Duration) error { - klog.V(4).Infof("Unmounting %s", target) +func tryUnmount(mounter *Mounter, path string, unmountTimeout time.Duration) error { + klog.V(4).Infof("Unmounting %s", path) ctx, cancel := context.WithTimeout(context.Background(), unmountTimeout) defer cancel() - command := exec.CommandContext(ctx, "umount", target) - output, err := command.CombinedOutput() + cmd := exec.CommandContext(ctx, "umount", path) + out, cmderr := cmd.CombinedOutput() // CombinedOutput() does not return DeadlineExceeded, make sure it's // propagated on timeout. @@ -801,35 +813,22 @@ func tryUnmount(target string, withSafeNotMountedBehavior bool, unmountTimeout t return ctx.Err() } - if err != nil { - return checkUmountError(target, command, output, err, withSafeNotMountedBehavior) - } - return nil -} - -func forceUmount(target string, withSafeNotMountedBehavior bool) error { - command := exec.Command("umount", "-f", target) - output, err := command.CombinedOutput() - - if err != nil { - return checkUmountError(target, command, output, err, withSafeNotMountedBehavior) - } - return nil -} - -// checkUmountError checks a result of umount command and determine a return value. -func checkUmountError(target string, command *exec.Cmd, output []byte, err error, withSafeNotMountedBehavior bool) error { - if err.Error() == errNoChildProcesses { - if command.ProcessState.Success() { - // We don't consider errNoChildProcesses an error if the process itself succeeded (see - k/k issue #103753). + if cmderr != nil { + if mounter.withSafeNotMountedBehavior && strings.Contains(string(out), errNotMounted) { + klog.V(4).Infof("ignoring 'not mounted' error for %s", path) return nil } - // Rewrite err with the actual exit error of the process. - err = &exec.ExitError{ProcessState: command.ProcessState} + return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", cmderr, path, string(out)) } - if withSafeNotMountedBehavior && strings.Contains(string(output), errNotMounted) { - klog.V(4).Infof("ignoring 'not mounted' error for %s", target) - return nil - } - return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", err, target, string(output)) + return nil +} + +func forceUmount(path string) error { + cmd := exec.Command("umount", "-f", path) + out, cmderr := cmd.CombinedOutput() + + if cmderr != nil { + return fmt.Errorf("unmount failed: %v\nUnmounting arguments: %s\nOutput: %s", cmderr, path, string(out)) + } + return nil }