return -ENOMEDIUM;
unified_cache = CGROUP_UNIFIED_NONE;
}
- } else
+ } else {
+ log_debug("Unknown filesystem type %llx mounted on /sys/fs/cgroup.",
+ (unsigned long long) fs.f_type);
return -ENOMEDIUM;
+ }
return 0;
}
log_parse_environment();
log_open();
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice("cgroupfs not available, skipping tests");
+ return EXIT_TEST_SKIP;
+ }
+
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
assert_se(runtime_dir = setup_fake_runtime_dir());
FDSet *fdset = NULL;
int r;
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ puts("Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
/* Prepare the manager. */
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
Job *j;
int r;
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice_errno(r, "Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
/* prepare the test */
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
/* It is needed otherwise cgroup creation fails */
if (getuid() != 0) {
- printf("Skipping test: not root\n");
+ puts("Skipping test: not root");
return EXIT_TEST_SKIP;
}
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ puts("Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
assert_se(setenv("XDG_RUNTIME_DIR", "/tmp/", 1) == 0);
assert_se(set_unit_path(get_testdata_dir("/test-execute")) >= 0);
#include "alloc-util.h"
#include "cgroup-util.h"
-void enter_cgroup_subroot(void) {
+int enter_cgroup_subroot(void) {
_cleanup_free_ char *cgroup_root = NULL, *cgroup_subroot = NULL;
CGroupMask supported;
+ int r;
+
+ r = cg_pid_get_path(NULL, 0, &cgroup_root);
+ if (r == -ENOMEDIUM)
+ return log_warning_errno(r, "cg_pid_get_path(NULL, 0, ...) failed: %m");
+ assert(r >= 0);
- assert_se(cg_pid_get_path(NULL, 0, &cgroup_root) >= 0);
assert_se(asprintf(&cgroup_subroot, "%s/%" PRIx64, cgroup_root, random_u64()) >= 0);
assert_se(cg_mask_supported(&supported) >= 0);
/* If this fails, then we don't mind as the later cgroup operations will fail too, and it's fine if we handle
* any errors at that point. */
- if (cg_create_everywhere(supported, _CGROUP_MASK_ALL, cgroup_subroot) < 0)
- return;
+ r = cg_create_everywhere(supported, _CGROUP_MASK_ALL, cgroup_subroot);
+ if (r < 0)
+ return r;
- if (cg_attach_everywhere(supported, cgroup_subroot, 0, NULL, NULL) < 0)
- return;
+ return cg_attach_everywhere(supported, cgroup_subroot, 0, NULL, NULL);
}
-ENOMEDIUM /* cannot determine cgroup */ \
)
-void enter_cgroup_subroot(void);
+int enter_cgroup_subroot(void);
assert_se(m);
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice_errno(r, "Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &tmp);
if (MANAGER_SKIP_TEST(r)) {
FDSet *fdset = NULL;
int r;
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice_errno(r, "Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
/* prepare the test */
assert_se(set_unit_path(get_testdata_dir("")) >= 0);
log_parse_environment();
log_open();
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice_errno(r, "Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
assert_se(runtime_dir = setup_fake_runtime_dir());
int main(int argc, char* argv[]) {
_cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
- int rc = 0;
+ int r, rc = 0;
log_parse_environment();
log_open();
- enter_cgroup_subroot();
+ r = enter_cgroup_subroot();
+ if (r == -ENOMEDIUM) {
+ log_notice_errno(r, "Skipping test: cgroupfs not available");
+ return EXIT_TEST_SKIP;
+ }
assert_se(runtime_dir = setup_fake_runtime_dir());