Browse code

Merge pull request #32468 from coolljt0725/clean_thin

devicemapper: remove thin pool if 'initDevmapper' failed

Brian Goff authored on 2017/06/13 21:34:15
Showing 1 changed files
... ...
@@ -1689,7 +1689,7 @@ func (devices *DeviceSet) enableDeferredRemovalDeletion() error {
1689 1689
 	return nil
1690 1690
 }
1691 1691
 
1692
-func (devices *DeviceSet) initDevmapper(doInit bool) error {
1692
+func (devices *DeviceSet) initDevmapper(doInit bool) (retErr error) {
1693 1693
 	// give ourselves to libdm as a log handler
1694 1694
 	devicemapper.LogInit(devices)
1695 1695
 
... ...
@@ -1871,6 +1871,14 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error {
1871 1871
 		if err := devicemapper.CreatePool(devices.getPoolName(), dataFile, metadataFile, devices.thinpBlockSize); err != nil {
1872 1872
 			return err
1873 1873
 		}
1874
+		defer func() {
1875
+			if retErr != nil {
1876
+				err = devices.deactivatePool()
1877
+				if err != nil {
1878
+					logrus.Warnf("devmapper: Failed to deactivatePool: %v", err)
1879
+				}
1880
+			}
1881
+		}()
1874 1882
 	}
1875 1883
 
1876 1884
 	// Pool already exists and caller did not pass us a pool. That means