From d8ce1fb1d1b93f2d67e5b786484a82bf42d15bd6 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Fri, 22 Mar 2019 17:21:58 -0700 Subject: [PATCH] libprocessgroup_setup: use libcgrouprc_format Use CgroupController definition from libcgrouprc_format, not libprocessgroup, because the wire format will be removed from libprocessgroup later. Bug: 123664216 Test: builds Change-Id: If5e2301a1b65c3f6a51a1661cfeeed4e299f634e Merged-In: If5e2301a1b65c3f6a51a1661cfeeed4e299f634e --- init/Android.bp | 1 + libprocessgroup/setup/Android.bp | 5 ++++- libprocessgroup/setup/cgroup_descriptor.h | 13 +++++++++---- libprocessgroup/setup/cgroup_map_write.cpp | 18 ++++++++++++++---- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/init/Android.bp b/init/Android.bp index e834e99e0..69ee34f13 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -61,6 +61,7 @@ cc_defaults { static_libs: [ "libseccomp_policy", "libavb", + "libcgrouprc_format", "libprotobuf-cpp-lite", "libpropertyinfoserializer", "libpropertyinfoparser", diff --git a/libprocessgroup/setup/Android.bp b/libprocessgroup/setup/Android.bp index a403a23f1..f6fc066f2 100644 --- a/libprocessgroup/setup/Android.bp +++ b/libprocessgroup/setup/Android.bp @@ -25,9 +25,12 @@ cc_library_shared { ], shared_libs: [ "libbase", - "libprocessgroup", + "libcgrouprc", "libjsoncpp", ], + static_libs: [ + "libcgrouprc_format", + ], header_libs: [ "libprocessgroup_headers", ], diff --git a/libprocessgroup/setup/cgroup_descriptor.h b/libprocessgroup/setup/cgroup_descriptor.h index 185c5f9fe..597060e35 100644 --- a/libprocessgroup/setup/cgroup_descriptor.h +++ b/libprocessgroup/setup/cgroup_descriptor.h @@ -16,8 +16,10 @@ #pragma once -// TODO(b/123664216): Use libcgrouprc_format -#include "../cgroup_map.h" +#include + +namespace android { +namespace cgrouprc { // Complete controller description for mounting cgroups class CgroupDescriptor { @@ -25,14 +27,17 @@ class CgroupDescriptor { CgroupDescriptor(uint32_t version, const std::string& name, const std::string& path, mode_t mode, const std::string& uid, const std::string& gid); - const CgroupController* controller() const { return &controller_; } + const format::CgroupController* controller() const { return &controller_; } mode_t mode() const { return mode_; } std::string uid() const { return uid_; } std::string gid() const { return gid_; } private: - CgroupController controller_; + format::CgroupController controller_; mode_t mode_ = 0; std::string uid_; std::string gid_; }; + +} // namespace cgrouprc +} // namespace android diff --git a/libprocessgroup/setup/cgroup_map_write.cpp b/libprocessgroup/setup/cgroup_map_write.cpp index 8ecc0a4ac..6aabd56bd 100644 --- a/libprocessgroup/setup/cgroup_map_write.cpp +++ b/libprocessgroup/setup/cgroup_map_write.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -46,6 +47,9 @@ using android::base::GetBoolProperty; using android::base::StringPrintf; using android::base::unique_fd; +namespace android { +namespace cgrouprc { + static constexpr const char* CGROUPS_DESC_FILE = "/etc/cgroups.json"; static constexpr const char* CGROUPS_DESC_VENDOR_FILE = "/vendor/etc/cgroups.json"; @@ -185,7 +189,7 @@ static bool ReadDescriptors(std::map* descriptors #if defined(__ANDROID__) static bool SetupCgroup(const CgroupDescriptor& descriptor) { - const CgroupController* controller = descriptor.controller(); + const format::CgroupController* controller = descriptor.controller(); // mkdir [mode] [owner] [group] if (!Mkdir(controller->path(), descriptor.mode(), descriptor.uid(), descriptor.gid())) { @@ -244,8 +248,8 @@ static bool WriteRcFile(const std::map& descripto return false; } - CgroupFile fl; - fl.version_ = CgroupFile::FILE_CURR_VERSION; + format::CgroupFile fl; + fl.version_ = format::CgroupFile::FILE_CURR_VERSION; fl.controller_count_ = descriptors.size(); int ret = TEMP_FAILURE_RETRY(write(fd, &fl, sizeof(fl))); if (ret < 0) { @@ -254,7 +258,8 @@ static bool WriteRcFile(const std::map& descripto } for (const auto& [name, descriptor] : descriptors) { - ret = TEMP_FAILURE_RETRY(write(fd, descriptor.controller(), sizeof(CgroupController))); + ret = TEMP_FAILURE_RETRY( + write(fd, descriptor.controller(), sizeof(format::CgroupController))); if (ret < 0) { PLOG(ERROR) << "write() failed for " << CGROUPS_RC_PATH; return false; @@ -269,7 +274,12 @@ CgroupDescriptor::CgroupDescriptor(uint32_t version, const std::string& name, const std::string& gid) : controller_(version, name, path), mode_(mode), uid_(uid), gid_(gid) {} +} // namespace cgrouprc +} // namespace android + bool CgroupSetupCgroups() { + using namespace android::cgrouprc; + std::map descriptors; if (getpid() != 1) {