From 783a9aa06b9b35031c753ae6dc2209e0506edfdb Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Mon, 11 Jan 2016 18:57:37 +0000 Subject: [PATCH] Mark device ID free only if device actually got deleted Right now if somebody has enabled deferred device deletion, then deleteTransaction() returns success even if device could not be deleted. It has been marked for deferred deletion. Right now we will mark device ID free and potentially use it again when somebody tries to create new container. And that's wrong. Device ID is not free yet. It will become free once devices has actually been deleted by the goroutine later. So move the location of call to markDeviceIDFree() to a place where we know device actually got deleted and was not marked for deferred deletion. Signed-off-by: Vivek Goyal Upstream-commit: 2dccb562dff79fef0f7a1d3b5f0e760e9d799d44 Component: engine --- components/engine/daemon/graphdriver/devmapper/deviceset.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/engine/daemon/graphdriver/devmapper/deviceset.go b/components/engine/daemon/graphdriver/devmapper/deviceset.go index d9c3618cf0..d6adc99f17 100644 --- a/components/engine/daemon/graphdriver/devmapper/deviceset.go +++ b/components/engine/daemon/graphdriver/devmapper/deviceset.go @@ -1801,6 +1801,7 @@ func (devices *DeviceSet) deleteTransaction(info *devInfo, syncDelete bool) erro if info.Deleted { devices.nrDeletedDevices-- } + devices.markDeviceIDFree(info.DeviceID) } else { if err := devices.markForDeferredDeletion(info); err != nil { return err @@ -1855,8 +1856,6 @@ func (devices *DeviceSet) deleteDevice(info *devInfo, syncDelete bool) error { return err } - devices.markDeviceIDFree(info.DeviceID) - return nil }