#include <errno.h>
#include <fcntl.h>
+#include <mntent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int group_modified(char *path_control_file, int value_type);
struct cgroup *new_cgroup(char *group, char *controller_name,
char *control_file, int value_type);
+int check_fsmounted();
static inline pid_t cgrouptest_gettid()
{
case FS_MOUNTED:
+ /* Do a sanity check if cgroup fs is mounted */
+ if (check_fsmounted()) {
+ printf("Sanity check fails. cgroup fs not mounted\n");
+ printf("Exiting without running this set of tests\n");
+ exit(1);
+ }
+
/*
* Test01: call cgroup_attach_task() with null group
* without calling cgroup_inti(). We can check other apis too.
}
return newcgroup;
}
+
+int check_fsmounted()
+{
+ struct mntent *entry, *tmp_entry;
+ /* Need a better mechanism to decide memory allocation size here */
+ char entry_buffer[FILENAME_MAX * 4];
+ FILE *proc_file;
+
+ tmp_entry = (struct mntent *) malloc(sizeof(struct mntent *));
+ if (!tmp_entry) {
+ perror("Error: failled to mallloc for mntent\n");
+ return 1;
+ }
+
+ proc_file = fopen("/proc/mounts", "r");
+ if (!proc_file) {
+ printf("Error in opening /proc/mounts.\n");
+ return EIO;
+ }
+ while ((entry = getmntent_r(proc_file, tmp_entry, entry_buffer, FILENAME_MAX*4)) != NULL) {
+ if (!strncmp(entry->mnt_type, "cgroup", strlen("cgroup"))) {
+ printf("sanity check pass.... %s\n", entry->mnt_type);
+ return 0;
+ }
+ }
+ return 1;
+}