lkml.org 
[lkml]   [2019]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 bpf-next 3/4] selftests/bpf: enable all available cgroup v2 controllers
    Date
    Enable all available cgroup v2 controllers when setting up
    the environment for the bpf kselftests. It's required to properly test
    the bpf prog auto-detach feature. Also it will generally increase
    the code coverage.

    Signed-off-by: Roman Gushchin <guro@fb.com>
    ---
    tools/testing/selftests/bpf/cgroup_helpers.c | 57 ++++++++++++++++++++
    1 file changed, 57 insertions(+)

    diff --git a/tools/testing/selftests/bpf/cgroup_helpers.c b/tools/testing/selftests/bpf/cgroup_helpers.c
    index 6692a40a6979..4efe57c171cd 100644
    --- a/tools/testing/selftests/bpf/cgroup_helpers.c
    +++ b/tools/testing/selftests/bpf/cgroup_helpers.c
    @@ -33,6 +33,60 @@
    snprintf(buf, sizeof(buf), "%s%s%s", CGROUP_MOUNT_PATH, \
    CGROUP_WORK_DIR, path)

    +/**
    + * enable_all_controllers() - Enable all available cgroup v2 controllers
    + *
    + * Enable all available cgroup v2 controllers in order to increase
    + * the code coverage.
    + *
    + * If successful, 0 is returned.
    + */
    +int enable_all_controllers(char *cgroup_path)
    +{
    + char path[PATH_MAX + 1];
    + char buf[PATH_MAX];
    + char *c, *c2;
    + int fd, cfd;
    + size_t len;
    +
    + snprintf(path, sizeof(path), "%s/cgroup.controllers", cgroup_path);
    + fd = open(path, O_RDONLY);
    + if (fd < 0) {
    + log_err("Opening cgroup.controllers: %s", path);
    + return -1;
    + }
    +
    + len = read(fd, buf, sizeof(buf) - 1);
    + if (len < 0) {
    + close(fd);
    + log_err("Reading cgroup.controllers: %s", path);
    + return -1;
    + }
    + buf[len] = 0;
    + close(fd);
    +
    + /* No controllers available? We're probably on cgroup v1. */
    + if (len == 0)
    + return 0;
    +
    + snprintf(path, sizeof(path), "%s/cgroup.subtree_control", cgroup_path);
    + cfd = open(path, O_RDWR);
    + if (cfd < 0) {
    + log_err("Opening cgroup.subtree_control: %s", path);
    + return -1;
    + }
    +
    + for (c = strtok_r(buf, " ", &c2); c; c = strtok_r(NULL, " ", &c2)) {
    + if (dprintf(cfd, "+%s\n", c) <= 0) {
    + log_err("Enabling controller %s: %s", c, path);
    + close(cfd);
    + return -1;
    + }
    + }
    + close(cfd);
    + return 0;
    +}
    +
    /**
    * setup_cgroup_environment() - Setup the cgroup environment
    *
    @@ -71,6 +125,9 @@ int setup_cgroup_environment(void)
    return 1;
    }

    + if (enable_all_controllers(cgroup_workdir))
    + return 1;
    +
    return 0;
    }

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-05-23 01:21    [W:9.075 / U:0.648 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site