From 5646e5f75a5a84c1b444687904d0db931027587a Mon Sep 17 00:00:00 2001 From: gaohuatao Date: Mon, 29 Jun 2020 12:13:21 +0800 Subject: [PATCH] devmapper: fix cri get fsusage bug to adapt devmapper Signed-off-by: gaohuatao --- src/daemon/cri/cri_container.cc | 39 ++++++++++++------- .../graphdriver/devmapper/deviceset.c | 4 ++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/daemon/cri/cri_container.cc b/src/daemon/cri/cri_container.cc index df420c6..9505e34 100644 --- a/src/daemon/cri/cri_container.cc +++ b/src/daemon/cri/cri_container.cc @@ -891,6 +891,29 @@ void CRIRuntimeServiceImpl::PackContainerStatsAttributes( } } +static void SetFsUsage(const imagetool_fs_info *fs_usage, std::unique_ptr &container) +{ + if (fs_usage == nullptr || fs_usage->image_filesystems[0] == nullptr) { + container->mutable_writable_layer()->mutable_used_bytes()->set_value(0); + container->mutable_writable_layer()->mutable_inodes_used()->set_value(0); + return; + } + + if (fs_usage->image_filesystems[0]->used_bytes == nullptr) { + container->mutable_writable_layer()->mutable_used_bytes()->set_value(0); + } else { + container->mutable_writable_layer()->mutable_used_bytes()->set_value( + fs_usage->image_filesystems[0]->used_bytes->value); + } + + if (fs_usage->image_filesystems[0]->inodes_used == nullptr) { + container->mutable_writable_layer()->mutable_inodes_used()->set_value(0); + } else { + container->mutable_writable_layer()->mutable_inodes_used()->set_value( + fs_usage->image_filesystems[0]->inodes_used->value); + } +} + void CRIRuntimeServiceImpl::PackContainerStatsFilesystemUsage( const char *id, const char *image_type, std::unique_ptr &container, @@ -905,21 +928,7 @@ void CRIRuntimeServiceImpl::PackContainerStatsFilesystemUsage( ERROR("Failed to get container filesystem usage"); } - if (fs_usage == nullptr) { - container->mutable_writable_layer()->mutable_used_bytes()->set_value(0); - container->mutable_writable_layer()->mutable_inodes_used()->set_value(0); - } else { - if (fs_usage->image_filesystems[0]->used_bytes->value) { - container->mutable_writable_layer()->mutable_used_bytes()->set_value( - fs_usage->image_filesystems[0]->used_bytes->value); - } - - if (fs_usage->image_filesystems[0]->inodes_used->value) { - container->mutable_writable_layer()->mutable_inodes_used()->set_value( - fs_usage->image_filesystems[0]->inodes_used->value); - } - } - + SetFsUsage(fs_usage, container); free_imagetool_fs_info(fs_usage); } diff --git a/src/daemon/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c b/src/daemon/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c index 06b16e4..8654e45 100644 --- a/src/daemon/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c +++ b/src/daemon/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c @@ -789,6 +789,7 @@ static void construct_device_id_map(struct device_set *devset) mark_device_id_used(devset, device_info->info->device_id); devmapper_device_info_ref_dec(device_info); } + util_free_array(dev_arr); } static void count_deleted_devices(struct device_set *devset) @@ -812,6 +813,7 @@ static void count_deleted_devices(struct device_set *devset) } devmapper_device_info_ref_dec(device_info); } + util_free_array(dev_arr); } static int remove_transaction_metadata(struct device_set *devset) @@ -2383,6 +2385,8 @@ static int do_check_all_devices(struct device_set *devset) if (!util_has_prefix(devices_list[i], devset->device_prefix)) { continue; } + UTIL_FREE_AND_SET_NULL(target_type); + UTIL_FREE_AND_SET_NULL(params); if (dev_get_status(&start, &length, &target_type, ¶ms, devices_list[i]) != 0) { WARN("devmapper: get device status %s failed", devices_list[i]); continue; -- GitLab