On 05/13/2011 02:01 PM, Michal Hocko wrote:
> Let's add file permission for tasks and file and directory permissions
> for control files into cgroup so that we can add them into configuration
> files.
> Permissions are initialized to NO_PERMS (unsigned -1 which doesn't
> represent any valid permissions) to reflect that no value is set. Let's
> also add a common initialization functions for both cgroup table and
> single cgroup.
>
> Signed-off-by: Michal Hocko <[email protected]>
I know, probably you do not know, but we use kernel's checkpatch script
for code style checking of libcgroup sources. And the script complains a
bit:
WARNING: externs should be avoided in .c files
#45: FILE: src/config.c:75:
+void init_cgroup_table(struct cgroup *cgroups, size_t count);
WARNING: return of an errno should typically be -ve (return -ECGFAIL)
#63: FILE: src/config.c:726:
+ return ECGFAIL;
WARNING: line over 80 characters
#96: FILE: src/wrapper.c:28:
+ cgroup->task_fperm = cgroup->control_fperm =
cgroup->control_dperm = NO_PERMS;
(well, you can ignore -ECGFAIL warning, I wonder how to turn it off)
Apart from few checkpatch problems, the patch looks fine.
> ---
> include/libcgroup/groups.h | 4 ++++
> src/config.c | 8 ++++++++
> src/libcgroup-internal.h | 3 +++
> src/wrapper.c | 15 ++++++++++++++-
> 4 files changed, 29 insertions(+), 1 deletions(-)
>
> diff --git a/include/libcgroup/groups.h b/include/libcgroup/groups.h
> index 1060641..61f18a0 100644
> --- a/include/libcgroup/groups.h
> +++ b/include/libcgroup/groups.h
> @@ -109,6 +109,10 @@ struct cgroup;
> */
> struct cgroup_controller;
>
> +/**
> + * Uninitialized file/directory permissions used for task/control files.
> + */
> +#define NO_PERMS (-1U)
>
> /**
> * Allocate new cgroup structure. This function itself does not create new
> diff --git a/src/config.c b/src/config.c
> index f1873ea..4f5d04a 100644
> --- a/src/config.c
> +++ b/src/config.c
> @@ -72,6 +72,8 @@ static int cgroup_table_index;
> */
> #define CGROUP_FILESYSTEM "cgroup"
>
> +void init_cgroup_table(struct cgroup *cgroups, size_t count);
> +
> /*
> * NOTE: All these functions return 1 on success
> * and not 0 as is the library convention
> @@ -105,6 +107,7 @@ int cgroup_config_insert_cgroup(char *cg_name)
>
> memset(newblk + oldlen, 0, (MAX_CGROUPS - oldlen) *
> sizeof(struct cgroup));
> + init_cgroup_table(newblk + oldlen, MAX_CGROUPS - oldlen);
> config_cgroup_table = newblk;
> cgroup_dbg("MAX_CGROUPS %d\n", MAX_CGROUPS);
> cgroup_dbg("reallocated config_cgroup_table to %p\n",
> config_cgroup_table);
> @@ -712,6 +715,11 @@ int cgroup_config_load_config(const char *pathname)
> }
>
> config_cgroup_table = calloc(MAX_CGROUPS, sizeof(struct cgroup));
> + if (!config_cgroup_table)
> + return ECGFAIL;
> +
> + init_cgroup_table(config_cgroup_table, MAX_CGROUPS);
> +
> if (yyparse() != 0) {
> cgroup_dbg("Failed to parse file %s\n", pathname);
> fclose(yyin);
> diff --git a/src/libcgroup-internal.h b/src/libcgroup-internal.h
> index 45c1ded..e79c038 100644
> --- a/src/libcgroup-internal.h
> +++ b/src/libcgroup-internal.h
> @@ -84,8 +84,11 @@ struct cgroup {
> int index;
> uid_t tasks_uid;
> gid_t tasks_gid;
> + mode_t task_fperm;
> uid_t control_uid;
> gid_t control_gid;
> + mode_t control_fperm;
> + mode_t control_dperm;
> };
>
> struct cg_mount_point {
> diff --git a/src/wrapper.c b/src/wrapper.c
> index 4828ea8..90c8bc3 100644
> --- a/src/wrapper.c
> +++ b/src/wrapper.c
> @@ -23,13 +23,26 @@
> #include <string.h>
> #include <unistd.h>
>
> +static void init_cgroup(struct cgroup *cgroup)
> +{
> + cgroup->task_fperm = cgroup->control_fperm = cgroup->control_dperm =
> NO_PERMS;
> +}
> +
> +void init_cgroup_table(struct cgroup *cgroups, size_t count)
> +{
> + size_t i;
> +
> + for (i = 0; i < count; ++i)
> + init_cgroup(&cgroups[i]);
> +}
> +
> struct cgroup *cgroup_new_cgroup(const char *name)
> {
> struct cgroup *cgroup = calloc(1, sizeof(struct cgroup));
> -
> if (!cgroup)
> return NULL;
>
> + init_cgroup(cgroup);
> strncpy(cgroup->name, name, sizeof(cgroup->name));
>
> return cgroup;
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery,
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now.
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel