From 0ca0f82eea64bef55da441b448430335e2832edf Mon Sep 17 00:00:00 2001 From: gaohuatao Date: Mon, 10 Aug 2020 16:14:47 +0800 Subject: [PATCH] devmapper: add deviceset free Signed-off-by: gaohuatao --- .../graphdriver/devmapper/devices_constants.h | 1 - .../graphdriver/devmapper/deviceset.c | 27 +++++++++++++++++++ .../graphdriver/devmapper/deviceset.h | 2 ++ .../graphdriver/devmapper/driver_devmapper.c | 10 +++++-- .../graphdriver/devmapper/metadata_store.c | 2 +- .../graphdriver/devmapper/metadata_store.h | 2 ++ 6 files changed, 40 insertions(+), 4 deletions(-) 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 015bca8..5ec6d2c 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 ff43f36..e020279 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 dfa1bee..eb2ead2 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 6a8884f..23ce44c 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 add9232..325f963 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 91eba64..f47c2f4 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 -- GitLab