devicemapper: remove thin pool if 'initDevmapper' failed
| ... | ... |
@@ -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 |