From dbf04ec4e2a6b4fe73f7f300918a906c0ff1a37b Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Thu, 2 Apr 2015 16:47:14 -0400 Subject: [PATCH] devmapper: Remove extra wait after device removal Currently in device removal path (device deactivation), we wait for 10 seconds for devive to actually go away. waitRemove(). In current code this is not required. If dm removal task has completed and one has done the wait on udev cookie, then device is gone and there is no need to write another loop to wait for device removal. This patch removes the waitRemove() which waits for 10 seconds after device removal. This seems unnecessary. Signed-off-by: Vivek Goyal --- daemon/graphdriver/devmapper/deviceset.go | 52 +++-------------------- 1 file changed, 7 insertions(+), 45 deletions(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 5923811d26..221c87eb4d 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -1157,7 +1157,7 @@ func (devices *DeviceSet) deleteDevice(info *DevInfo) error { devinfo, _ := devicemapper.GetInfo(info.Name()) if devinfo != nil && devinfo.Exists != 0 { - if err := devices.removeDeviceAndWait(info.Name()); err != nil { + if err := devices.removeDevice(info.Name()); err != nil { logrus.Debugf("Error removing device: %s", err) return err } @@ -1236,7 +1236,7 @@ func (devices *DeviceSet) deactivateDevice(info *DevInfo) error { return err } if devinfo.Exists != 0 { - if err := devices.removeDeviceAndWait(info.Name()); err != nil { + if err := devices.removeDevice(info.Name()); err != nil { return err } } @@ -1244,13 +1244,12 @@ func (devices *DeviceSet) deactivateDevice(info *DevInfo) error { return nil } -// Issues the underlying dm remove operation and then waits -// for it to finish. -func (devices *DeviceSet) removeDeviceAndWait(devname string) error { +// Issues the underlying dm remove operation. +func (devices *DeviceSet) removeDevice(devname string) error { var err error - logrus.Debugf("[devmapper] removeDeviceAndWait START(%s)", devname) - defer logrus.Debugf("[devmapper] removeDeviceAndWait END(%s)", devname) + logrus.Debugf("[devmapper] removeDevice START(%s)", devname) + defer logrus.Debugf("[devmapper] removeDevice END(%s)", devname) for i := 0; i < 1000; i++ { err = devicemapper.RemoveDevice(devname) @@ -1267,45 +1266,8 @@ func (devices *DeviceSet) removeDeviceAndWait(devname string) error { time.Sleep(10 * time.Millisecond) devices.Lock() } - if err != nil { - return err - } - if err := devices.waitRemove(devname); err != nil { - return err - } - return nil -} - -// waitRemove blocks until either: -// a) the device registered at - is removed, -// or b) the 10 second timeout expires. -func (devices *DeviceSet) waitRemove(devname string) error { - logrus.Debugf("[deviceset %s] waitRemove(%s)", devices.devicePrefix, devname) - defer logrus.Debugf("[deviceset %s] waitRemove(%s) END", devices.devicePrefix, devname) - i := 0 - for ; i < 1000; i++ { - devinfo, err := devicemapper.GetInfo(devname) - if err != nil { - // If there is an error we assume the device doesn't exist. - // The error might actually be something else, but we can't differentiate. - return nil - } - if i%100 == 0 { - logrus.Debugf("Waiting for removal of %s: exists=%d", devname, devinfo.Exists) - } - if devinfo.Exists == 0 { - break - } - - devices.Unlock() - time.Sleep(10 * time.Millisecond) - devices.Lock() - } - if i == 1000 { - return fmt.Errorf("Timeout while waiting for device %s to be removed", devname) - } - return nil + return err } // waitClose blocks until either: