diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h index 015bca85502c4b31647af7a681d96866601b6f3f..5ec6d2c300d812b622d883f799337a6fd3c0c8bf 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/devices_constants.h @@ -68,7 +68,6 @@ struct device_set { char *base_device_filesystem; uint nr_deleted_devices; // number of deleted devices uint32_t min_free_space_percent; - char *xfs_nospace_retries; // max retries when xfs receives ENOSPC int64_t udev_wait_timeout; bool user_base_size; diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c index ff43f363e80c7d4a1ad8f294b73aaeed7e29a10d..e02027996479e214cf599803d4fed19381085707 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c @@ -3271,4 +3271,31 @@ free_out: return -1; } return ret; +} + +void free_device_set(struct device_set *devset) +{ + if (devset == NULL) { + return; + } + + UTIL_FREE_AND_SET_NULL(devset->root); + UTIL_FREE_AND_SET_NULL(devset->device_prefix); + metadata_store_free(devset->meta_store); + devset->meta_store = NULL; + map_free(devset->device_id_map); + devset->device_id_map = NULL; + UTIL_FREE_AND_SET_NULL(devset->filesystem); + pthread_rwlock_destroy(&(devset->devmapper_driver_rwlock)); + UTIL_FREE_AND_SET_NULL(devset->mount_options); + util_free_array_by_len(devset->mkfs_args, devset->mkfs_args_len); + UTIL_FREE_AND_SET_NULL(devset->data_device); + UTIL_FREE_AND_SET_NULL(devset->metadata_device); + UTIL_FREE_AND_SET_NULL(devset->thin_pool_device); + free_image_devmapper_transaction(devset->metadata_trans); + devset->metadata_trans = NULL; + UTIL_FREE_AND_SET_NULL(devset->base_device_uuid); + UTIL_FREE_AND_SET_NULL(devset->base_device_filesystem); + + free(devset); } \ No newline at end of file diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.h b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.h index dfa1bee8db120ffbeea4e58c380c519302e678e3..eb2ead284b6efdb4b249bc97b9790c39e4e77c82 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.h +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.h @@ -89,6 +89,8 @@ void free_devmapper_status(struct status *st); int device_set_shutdown(struct device_set *devset, const char *home); +void free_device_set(struct device_set *devset); + #ifdef __cplusplus } #endif diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c index 6a8884f7a20ffef9f347c95f4efc9daaccabf025..23ce44c28aa4e4009d80577b7a821eac4689b1d3 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c @@ -545,6 +545,8 @@ out: int devmapper_clean_up(struct graphdriver *driver) { + int ret = 0; + if (driver == NULL) { ERROR("Invalid input param to cleanup devicemapper"); return -1; @@ -552,10 +554,14 @@ int devmapper_clean_up(struct graphdriver *driver) if (device_set_shutdown(driver->devset, driver->home) != 0) { ERROR("devmapper: shutdown device set failed root is %s", driver->home); - return -1; + ret = -1; + goto out; } - return umount(driver->home); + free_device_set(driver->devset); + +out: + return ret; } int devmapper_repair_lowers(const char *id, const char *parent, const struct graphdriver *driver) diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.c index add92326714e1d8fa715cc304c8552a6b2634d4e..325f9633a9898d0d7257ad9e0daa24a722f174c5 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.c +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.c @@ -69,7 +69,7 @@ static void metadata_store_map_kvfree(void *key, void *value) devmapper_device_info_ref_dec((devmapper_device_info_t *)value); } -static void metadata_store_free(metadata_store_t *store) +void metadata_store_free(metadata_store_t *store) { if (store == NULL) { ERROR("invalid argument"); diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.h b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.h index 91eba6435b498cc73c3289f54ba54b3607497ac6..f47c2f4c4ad3e3fc8b13ca5a3f0e0ce2bb086daa 100644 --- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.h +++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/metadata_store.h @@ -43,6 +43,8 @@ bool metadata_store_remove(const char *hash, metadata_store_t *meta_store); char **metadata_store_list_hashes(metadata_store_t *meta_store); +void metadata_store_free(metadata_store_t *store); + #ifdef __cplusplus } #endif