From ea22d7ab91e7febc69433b979160dda8a79ad46e Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Mon, 10 Apr 2017 13:11:39 -0400 Subject: [PATCH] devicemapper: remove thin pool if 'initDevmapper' failed if initDevmapper failed after creating thin-pool, the thin-pool will not be removed, this would cause we can't use the same lvm to create another thin-pool. Signed-off-by: Lei Jitang --- daemon/graphdriver/devmapper/deviceset.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index ba845d4d01..930b5ce7cc 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -1686,7 +1686,7 @@ func (devices *DeviceSet) enableDeferredRemovalDeletion() error { return nil } -func (devices *DeviceSet) initDevmapper(doInit bool) error { +func (devices *DeviceSet) initDevmapper(doInit bool) (retErr error) { // give ourselves to libdm as a log handler devicemapper.LogInit(devices) @@ -1840,6 +1840,14 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error { if err := devicemapper.CreatePool(devices.getPoolName(), dataFile, metadataFile, devices.thinpBlockSize); err != nil { return err } + defer func() { + if retErr != nil { + err = devices.deactivatePool() + if err != nil { + logrus.Warnf("devmapper: Failed to deactivatePool: %v", err) + } + } + }() } // Pool already exists and caller did not pass us a pool. That means