func (devices *DeviceSet) deactivatePool() error { glog.V(1).Infof("[devmapper] deactivatePool()") defer glog.V(1).Infof("[devmapper] deactivatePool END") devname := devices.getPoolDevName() devinfo, err := devicemapper.GetInfo(devname) if err != nil { return err } if d, err := devicemapper.GetDeps(devname); err == nil { // Access to more Debug output glog.V(1).Infof("[devmapper] devicemapper.GetDeps() %s: %#v", devname, d) } if devinfo.Exists != 0 { return devicemapper.RemoveDevice(devname) } return nil }
// Issues the underlying dm remove operation. func (devices *DeviceSet) removeDevice(devname string) error { var err error glog.V(1).Infof("[devmapper] removeDevice START(%s)", devname) defer glog.V(1).Infof("[devmapper] removeDevice END(%s)", devname) for i := 0; i < 200; i++ { err = devicemapper.RemoveDevice(devname) if err == nil { break } if err != devicemapper.ErrBusy { return err } // If we see EBUSY it may be a transient error, // sleep a bit a retry a few times. devices.Unlock() time.Sleep(100 * time.Millisecond) devices.Lock() } return err }