Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edca509a authored by Yifan Hong's avatar Yifan Hong Committed by android-build-merger
Browse files

libprocessgroup_setup: use libcgrouprc_format

am: d8ce1fb1

Change-Id: I43c903bae8fdbe752d70914c088a4770e192af22
parents c1c18f9a d8ce1fb1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ cc_defaults {
    static_libs: [
        "libseccomp_policy",
        "libavb",
        "libcgrouprc_format",
        "libprotobuf-cpp-lite",
        "libpropertyinfoserializer",
        "libpropertyinfoparser",
+4 −1
Original line number Diff line number Diff line
@@ -25,9 +25,12 @@ cc_library_shared {
    ],
    shared_libs: [
        "libbase",
        "libprocessgroup",
        "libcgrouprc",
        "libjsoncpp",
    ],
    static_libs: [
        "libcgrouprc_format",
    ],
    header_libs: [
        "libprocessgroup_headers",
    ],
+9 −4
Original line number Diff line number Diff line
@@ -16,8 +16,10 @@

#pragma once

// TODO(b/123664216): Use libcgrouprc_format
#include "../cgroup_map.h"
#include <processgroup/format/cgroup_controller.h>

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
+14 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <android-base/unique_fd.h>
#include <json/reader.h>
#include <json/value.h>
#include <processgroup/format/cgroup_file.h>
#include <processgroup/processgroup.h>
#include <processgroup/setup.h>

@@ -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<std::string, CgroupDescriptor>* descriptors
#if defined(__ANDROID__)

static bool SetupCgroup(const CgroupDescriptor& descriptor) {
    const CgroupController* controller = descriptor.controller();
    const format::CgroupController* controller = descriptor.controller();

    // mkdir <path> [mode] [owner] [group]
    if (!Mkdir(controller->path(), descriptor.mode(), descriptor.uid(), descriptor.gid())) {
@@ -244,8 +248,8 @@ static bool WriteRcFile(const std::map<std::string, CgroupDescriptor>& 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<std::string, CgroupDescriptor>& 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<std::string, CgroupDescriptor> descriptors;

    if (getpid() != 1) {