From 39081eb3aa8f715c1da6f798c6531efd7a8a494c Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Wed, 30 Sep 2015 18:54:06 -0400 Subject: [PATCH 1/2] devmapper: Use deactivateDevice() instead of removeDevice() in deleteDevice() Use deactivateDevice() instead of removeDevice() directly. This will make sure for device deletion, deferred removal is used if user has configured it in. Also this makes reading code litle easier as there is single function to remove a device and that is deactivateDevice(). Signed-off-by: Vivek Goyal --- daemon/graphdriver/devmapper/deviceset.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index e96127a00..407eef9f8 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -1477,12 +1477,10 @@ func (devices *DeviceSet) deleteDevice(info *devInfo) error { } } - devinfo, _ := devicemapper.GetInfo(info.Name()) - if devinfo != nil && devinfo.Exists != 0 { - if err := devices.removeDevice(info.Name()); err != nil { - logrus.Debugf("Error removing device: %s", err) - return err - } + // Try to deactivate deivce in case it is active. + if err := devices.deactivateDevice(info); err != nil { + logrus.Debugf("Error deactivating device: %s", err) + return err } if err := devices.openTransaction(info.Hash, info.DeviceID); err != nil { From 94caae2477f42b55adeab22f14bcef22b90373d6 Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Wed, 30 Sep 2015 18:54:06 -0400 Subject: [PATCH 2/2] devmapper: Move maxDeviceID check in loadMetadata maxDeviceID is upper limit on device Id thin pool can support. Right now we have this check only during startup. It is a good idea to move this check in loadMetadata so that any time a device file is loaded and if it is corrupted and device Id is more than maxDevieceID, it will be detected right then and there. Signed-off-by: Vivek Goyal --- daemon/graphdriver/devmapper/deviceset.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 407eef9f8..e7a330d6e 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -405,11 +405,6 @@ func (devices *DeviceSet) deviceFileWalkFunction(path string, finfo os.FileInfo) return fmt.Errorf("Error loading device metadata file %s", hash) } - if dinfo.DeviceID > maxDeviceID { - logrus.Errorf("Ignoring Invalid DeviceID=%d", dinfo.DeviceID) - return nil - } - devices.Lock() devices.markDeviceIDUsed(dinfo.DeviceID) devices.Unlock() @@ -715,6 +710,11 @@ func (devices *DeviceSet) loadMetadata(hash string) *devInfo { return nil } + if info.DeviceID > maxDeviceID { + logrus.Errorf("Ignoring Invalid DeviceId=%d", info.DeviceID) + return nil + } + return info }