diff options
| author | Yonghong Song <yhs@fb.com> | 2017-12-20 10:37:08 -0800 | 
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2017-12-20 19:15:54 -0800 | 
| commit | c475ffad58a8a2f1d3a2bd433eaa491471981b49 (patch) | |
| tree | 4f68acf4814c714328d6c8370654229205b08d0d | |
| parent | 7466177635be4d5f2452284085b5c2cc299367fe (diff) | |
| download | talos-op-linux-c475ffad58a8a2f1d3a2bd433eaa491471981b49.tar.gz talos-op-linux-c475ffad58a8a2f1d3a2bd433eaa491471981b49.zip | |
tools/bpf: adjust rlimit RLIMIT_MEMLOCK for test_dev_cgroup
The default rlimit RLIMIT_MEMLOCK is 64KB. In certain cases,
e.g. in a test machine mimicking our production system, this test may
fail due to unable to charge the required memory for prog load:
  $ ./test_dev_cgroup
  libbpf: load bpf program failed: Operation not permitted
  libbpf: failed to load program 'cgroup/dev'
  libbpf: failed to load object './dev_cgroup.o'
  Failed to load DEV_CGROUP program
  ...
Changing the default rlimit RLIMIT_MEMLOCK to unlimited
makes the test pass.
This patch also fixed a problem where when bpf_prog_load fails,
cleanup_cgroup_environment() should not be called since
setup_cgroup_environment() has not been invoked. Otherwise,
the following confusing message will appear:
  ...
  (/home/yhs/local/linux/tools/testing/selftests/bpf/cgroup_helpers.c:95:
   errno: No such file or directory) Opening Cgroup Procs: /mnt/cgroup.procs
  ...
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
| -rw-r--r-- | tools/testing/selftests/bpf/test_dev_cgroup.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/tools/testing/selftests/bpf/test_dev_cgroup.c b/tools/testing/selftests/bpf/test_dev_cgroup.c index 02c85d6c89b0..c1535b34f14f 100644 --- a/tools/testing/selftests/bpf/test_dev_cgroup.c +++ b/tools/testing/selftests/bpf/test_dev_cgroup.c @@ -10,6 +10,8 @@  #include <string.h>  #include <errno.h>  #include <assert.h> +#include <sys/time.h> +#include <sys/resource.h>  #include <linux/bpf.h>  #include <bpf/bpf.h> @@ -23,15 +25,19 @@  int main(int argc, char **argv)  { +	struct rlimit limit  = { RLIM_INFINITY, RLIM_INFINITY };  	struct bpf_object *obj;  	int error = EXIT_FAILURE;  	int prog_fd, cgroup_fd;  	__u32 prog_cnt; +	if (setrlimit(RLIMIT_MEMLOCK, &limit) < 0) +		perror("Unable to lift memlock rlimit"); +  	if (bpf_prog_load(DEV_CGROUP_PROG, BPF_PROG_TYPE_CGROUP_DEVICE,  			  &obj, &prog_fd)) {  		printf("Failed to load DEV_CGROUP program\n"); -		goto err; +		goto out;  	}  	if (setup_cgroup_environment()) { @@ -89,5 +95,6 @@ int main(int argc, char **argv)  err:  	cleanup_cgroup_environment(); +out:  	return error;  } | 

