diff --git a/internal/guest/storage/devicemapper/devicemapper.go b/internal/guest/storage/devicemapper/devicemapper.go index 976b02133e..6ea25edcd3 100644 --- a/internal/guest/storage/devicemapper/devicemapper.go +++ b/internal/guest/storage/devicemapper/devicemapper.go @@ -270,7 +270,7 @@ func CreateDevice(name string, flags CreateFlags, targets []Target) (_ string, e } // RemoveDevice removes a device-mapper device and its associated device node. -func RemoveDevice(name string) error { +func RemoveDevice(name string) (err error) { rm := func() error { f, err := openMapper() if err != nil { @@ -283,18 +283,14 @@ func RemoveDevice(name string) error { // This is workaround for "device or resource busy" error, which occasionally happens after the device mapper // target has been unmounted. - for { - if err := rm(); err != nil { - select { - case <-time.After(time.Second): - return fmt.Errorf("timeout removing device %s", name) - default: - time.Sleep(10 * time.Millisecond) - continue - } + for i := 0; i < 10; i++ { + if err = rm(); err != nil { + time.Sleep(10 * time.Millisecond) + continue } - return nil + break } + return } func removeDevice(f *os.File, name string) error {