diff options
author | Balbir Singh <balbir@linux.vnet.ibm.com> | 2009-04-21 14:27:28 +0530 |
---|---|---|
committer | Balbir Singh <balbir@linux.vnet.ibm.com> | 2009-04-21 14:27:28 +0530 |
commit | 01b53987d3587d026fcfc0f0486fed24e8737feb (patch) | |
tree | 86d8e01ec2dad15500e52fae15d26b19c086710a | |
parent | d47ac40b87f246f2f1badbf25d8e814614296051 (diff) | |
parent | 8d8a747b161508ebfd48a6dac52f1438e2714a2b (diff) | |
download | libcg-01b53987d3587d026fcfc0f0486fed24e8737feb.tar.gz libcg-01b53987d3587d026fcfc0f0486fed24e8737feb.tar.xz libcg-01b53987d3587d026fcfc0f0486fed24e8737feb.zip |
Merge branch 'master' of ssh://balbir_singh@libcg.git.sourceforge.net/gitroot/libcg
-rw-r--r-- | configure.in | 3 | ||||
-rw-r--r-- | scripts/init.d/cgconfig | 14 | ||||
-rw-r--r-- | scripts/init.d/cgred | 11 | ||||
-rw-r--r-- | src/api.c | 110 | ||||
-rw-r--r-- | src/daemon/cgrulesengd.c | 4 |
5 files changed, 70 insertions, 72 deletions
diff --git a/configure.in b/configure.in index 0d82f96..cb54d15 100644 --- a/configure.in +++ b/configure.in @@ -48,9 +48,6 @@ fi AM_PROG_LEX AC_PROG_LIBTOOL -# Checks for libraries. -AC_CHECK_LIB([cgroup], [cgroup_create_cgroup]) - # Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC diff --git a/scripts/init.d/cgconfig b/scripts/init.d/cgconfig index 6e6bcd6..6b01d9c 100644 --- a/scripts/init.d/cgconfig +++ b/scripts/init.d/cgconfig @@ -69,6 +69,7 @@ umount_fs() { } start() { + echo -n "Starting cgconfig service: " if [ -f /var/lock/subsys/$servicename ] then log_warning_msg "lock file already exists" @@ -77,11 +78,11 @@ start() { if [ $? -eq 0 ] then - #log_progress_msg "Starting cgconfig service: " cgconfigparser -l $CONFIG_FILE retval=$? if [ $retval -ne 0 ] then + log_failure_msg "Failed to parse " $CONFIG_FILE return $retval fi fi @@ -136,7 +137,14 @@ start() { done touch /var/lock/subsys/$servicename - return $? + retval=$? + if [ $retval -ne 0 ] + then + log_failure_msg "Failed to touch " /var/lock/subsys/$servicename + return $retval + fi + log_success_msg + return 0 } move_all_to_init_class() { @@ -169,9 +177,11 @@ move_all_to_init_class() { stop() { + echo -n "Stopping cgconfig service: " move_all_to_init_class umount_fs rm -f /var/lock/subsys/$servicename + log_success_msg } trapped() { diff --git a/scripts/init.d/cgred b/scripts/init.d/cgred index 73ca480..fa824df 100644 --- a/scripts/init.d/cgred +++ b/scripts/init.d/cgred @@ -67,7 +67,7 @@ start() { echo $"Starting CGroup Rules Engine Daemon..." if [ -f "/var/lock/subsys/$servicename" ] ; then - echo "$servicename is already running with PID `cat ${pidfile}`" + log_failure_msg "$servicename is already running with PID `cat ${pidfile}`" return 1 fi daemon --check $servicename --pidfile $pidfile $processname $OPTIONS @@ -87,6 +87,7 @@ stop() rm -f /var/lock/subsys/$servicename rm -f $pidfile fi + log_success_msg } # See how we are called @@ -116,9 +117,13 @@ case "$1" in echo $"Reloading rules configuration..." kill -s 12 `cat ${pidfile}` RETVAL=$? - echo + if [ $RETVAL -eq 0 ] ; then + log_success_msg + else + log_failure_msg + fi else - echo $"$servicename is not running." + log_failure_msg "$servicename is not running." fi ;; *) @@ -25,6 +25,10 @@ * for mistakes in APIs for reading statistics. */ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + #include <dirent.h> #include <errno.h> #include <libcgroup.h> @@ -762,6 +766,43 @@ char *cg_build_path(char *name, char *path, char *type) return path; } +static int __cgroup_attach_task_pid(char *path, pid_t tid) +{ + int ret = 0; + FILE *tasks = NULL; + + tasks = fopen(path, "w"); + if (!tasks) { + switch (errno) { + case EPERM: + return ECGROUPNOTOWNER; + case ENOENT: + return ECGROUPNOTEXIST; + default: + return ECGROUPNOTALLOWED; + } + } + ret = fprintf(tasks, "%d", tid); + if (ret < 0) { + last_errno = errno; + ret = ECGOTHER; + goto err; + } + ret = fflush(tasks); + if (ret) { + last_errno = errno; + ret = ECGOTHER; + goto err; + } + fclose(tasks); + return 0; +err: + cgroup_dbg("Error writing tid %d to %s:%s\n", + tid, path, strerror(errno)); + fclose(tasks); + return ret; +} + /** cgroup_attach_task_pid is used to assign tasks to a cgroup. * struct cgroup *cgroup: The cgroup to assign the thread to. * pid_t tid: The thread to be assigned to the cgroup. @@ -773,7 +814,6 @@ char *cg_build_path(char *name, char *path, char *type) int cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid) { char path[FILENAME_MAX]; - FILE *tasks = NULL; int i, ret = 0; if (!cgroup_initialized) { @@ -789,37 +829,11 @@ int cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid) cg_mount_table[i].name)) continue; strncat(path, "/tasks", sizeof(path) - strlen(path)); - - tasks = fopen(path, "w"); - if (!tasks) { - pthread_rwlock_unlock(&cg_mount_table_lock); - switch (errno) { - case EPERM: - return ECGROUPNOTOWNER; - case ENOENT: - return ECGROUPNOTEXIST; - default: - return ECGROUPNOTALLOWED; - } - } - ret = fprintf(tasks, "%d", tid); - if (ret < 0) { - cgroup_dbg("Error writing tid %d to %s:%s\n", - tid, path, strerror(errno)); - fclose(tasks); - last_errno = errno; - return ECGOTHER; - } - - ret = fflush(tasks); + ret = __cgroup_attach_task_pid(path, tid); if (ret) { - last_errno = errno; - cgroup_dbg("Error writing tid %d to %s:%s\n", - tid, path, strerror(errno)); - fclose(tasks); - return ECGOTHER; + pthread_rwlock_unlock(&cg_mount_table_lock); + return ret; } - fclose(tasks); } pthread_rwlock_unlock(&cg_mount_table_lock); } else { @@ -835,40 +849,10 @@ int cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid) if (!cg_build_path(cgroup->name, path, cgroup->controller[i]->name)) continue; - strncat(path, "/tasks", sizeof(path) - strlen(path)); - - tasks = fopen(path, "w"); - if (!tasks) { - cgroup_dbg("fopen failed for %s:%s", path, - strerror(errno)); - - switch (errno) { - case EPERM: - return ECGROUPNOTOWNER; - case ENOENT: - return ECGROUPNOTEXIST; - default: - return ECGROUPNOTALLOWED; - } - } - ret = fprintf(tasks, "%d", tid); - if (ret < 0) { - last_errno = errno; - cgroup_dbg("Error writing tid %d to %s:%s\n", - tid, path, strerror(errno)); - fclose(tasks); - return ECGOTHER; - } - ret = fflush(tasks); - if (ret) { - last_errno = errno; - cgroup_dbg("Error writing tid %d to %s:%s\n", - tid, path, strerror(errno)); - fclose(tasks); - return ECGOTHER; - } - fclose(tasks); + ret = __cgroup_attach_task_pid(path, tid); + if (ret) + return ret; } } return 0; diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c index 8efdce1..4e00e18 100644 --- a/src/daemon/cgrulesengd.c +++ b/src/daemon/cgrulesengd.c @@ -386,8 +386,10 @@ int cgre_create_netlink_socket_process_msg() continue; while (NLMSG_OK(nlh, recv_len)) { cn_hdr = NLMSG_DATA(nlh); - if (nlh->nlmsg_type == NLMSG_NOOP) + if (nlh->nlmsg_type == NLMSG_NOOP) { + nlh = NLMSG_NEXT(nlh, recv_len); continue; + } if ((nlh->nlmsg_type == NLMSG_ERROR) || (nlh->nlmsg_type == NLMSG_OVERRUN)) break; |