On 05/12/2011 08:58 AM, Jan Safranek wrote:
> I've put few errors and warnings where I find them appropriate - usually
> when a function returns error and the user might be interested exactly what
> file/directory is bad.
>
> Signed-off-by: Jan Safranek<[email protected]>
Acked-By: Ivana Hutarova Varekova <[email protected]>
> ---
>
> src/api.c | 26 +++++++++++++++++++++++++-
> src/config.c | 20 ++++++++++++++++++--
> 2 files changed, 43 insertions(+), 3 deletions(-)
>
> diff --git a/src/api.c b/src/api.c
> index a1808df..40dc413 100644
> --- a/src/api.c
> +++ b/src/api.c
> @@ -142,6 +142,8 @@ static int cg_chown_file(FTS *fts, FTSENT *ent, uid_t
> owner, gid_t group)
> }
> if (ret< 0) {
> last_errno = errno;
> + cgroup_warn("Warning: cannot change owner of file %s: %s\n",
> + filename, strerror(errno));
> ret = ECGOTHER;
> }
> return ret;
> @@ -159,6 +161,8 @@ static int cg_chown_recursive(char **path, uid_t owner,
> gid_t group)
> fts = fts_open(path, FTS_PHYSICAL | FTS_NOCHDIR |
> FTS_NOSTAT, NULL);
> if (fts == NULL) {
> + cgroup_warn("Warning: cannot open directory %s: %s\n",
> + path, strerror(errno));
> last_errno = errno;
> return ECGOTHER;
> }
> @@ -201,6 +205,8 @@ int cg_chmod_file(FTS *fts, FTSENT *ent, mode_t dir_mode,
> break;
> }
> if (ret< 0) {
> + cgroup_warn("Warning: cannot change permissions of file %s:"
> + " %s\n", filename, strerror(errno));
> last_errno = errno;
> ret = ECGOTHER;
> }
> @@ -239,6 +245,8 @@ int cg_chmod_recursive(struct cgroup *cgroup, mode_t
> dir_mode,
> FTS_NOSTAT, NULL);
> if (fts == NULL) {
> last_errno = errno;
> + cgroup_warn("Warning: cannot open directory %s: %s\n",
> + fts_path, strerror(errno));
> final_ret = ECGOTHER;
> goto err;
> }
> @@ -778,6 +786,8 @@ int cgroup_init(void)
> if (!proc_cgroup) {
> last_errno = errno;
> ret = ECGOTHER;
> + cgroup_err("Error: cannot open /proc/cgroups: %s\n",
> + strerror(errno));
> goto unlock_exit;
> }
>
> @@ -797,6 +807,8 @@ int cgroup_init(void)
> free(buf);
> last_errno = errno;
> ret = ECGOTHER;
> + cgroup_err("Error: cannot read /proc/cgroups: %s\n",
> + strerror(errno));
> goto unlock_exit;
> }
> free(buf);
> @@ -813,7 +825,10 @@ int cgroup_init(void)
>
> proc_mount = fopen("/proc/mounts", "re");
> if (proc_mount == NULL) {
> - ret = ECGFAIL;
> + last_errno = errno;
> + cgroup_err("Error: cannot open /proc/mounts: %s\n",
> + strerror(errno));
> + ret = ECGOTHER;
> goto unlock_exit;
> }
>
> @@ -1774,6 +1789,9 @@ static int cg_delete_cgroup_controller(char
> *cgroup_name, char *controller,
> delete_tasks = fopen(path, "re");
> if (delete_tasks) {
> ret = cg_move_task_files(delete_tasks, target_tasks);
> + if (ret != 0)
> + cgroup_warn("Warning: removing tasks from %s failed:"
> + " %s\n", path, cgroup_strerror(ret));
> fclose(delete_tasks);
> } else {
> /*
> @@ -1783,6 +1801,8 @@ static int cg_delete_cgroup_controller(char
> *cgroup_name, char *controller,
> if (errno != ENOENT) {
> last_errno = errno;
> ret = ECGOTHER;
> + cgroup_warn("Warning: cannot open %s: %s\n",
> + path, strerror(errno));
> }
> }
>
> @@ -1798,6 +1818,8 @@ static int cg_delete_cgroup_controller(char
> *cgroup_name, char *controller,
> ret = rmdir(path);
> if (ret != 0&& errno != ENOENT) {
> last_errno = errno;
> + cgroup_warn("Warning: cannot remove directory %s: %s\n",
> + path, strerror(errno));
> return ECGOTHER;
> }
>
> @@ -1947,6 +1969,8 @@ int cgroup_delete_cgroup_ext(struct cgroup *cgroup, int
> flags)
> parent_tasks = fopen(parent_path, "we");
> if (!parent_tasks) {
> last_errno = errno;
> + cgroup_warn("Warning: cannot open tasks file %s: %s\n",
> + parent_path, strerror(errno));
> ret = ECGOTHER;
> } else {
> if (flags& CGFLAG_DELETE_RECURSIVE) {
> diff --git a/src/config.c b/src/config.c
> index 566ea60..aff3be5 100644
> --- a/src/config.c
> +++ b/src/config.c
> @@ -439,16 +439,23 @@ static int cgroup_config_mount_fs(void)
>
> if (ret< 0&& errno != ENOENT) {
> last_errno = errno;
> + cgroup_err("Error: cannot access %s: %s\n",
> + curr->mount.path, strerror(errno));
> return ECGOTHER;
> }
>
> if (errno == ENOENT) {
> ret = cg_mkdir_p(curr->mount.path);
> - if (ret)
> + if (ret) {
> + cgroup_err("Error: cannot create directory"
> + " %s\n", curr->mount.path);
> return ret;
> + }
> } else if (!S_ISDIR(buff.st_mode)) {
> errno = ENOTDIR;
> last_errno = errno;
> + cgroup_err("Error: %s already exists but it is not a"
> + " directory\n", curr->mount.path);
> return ECGOTHER;
> }
>
> @@ -459,8 +466,12 @@ static int cgroup_config_mount_fs(void)
> ret = mount(CGROUP_FILESYSTEM, curr->mount.path,
> CGROUP_FILESYSTEM, 0, curr->name);
>
> - if (ret< 0)
> + if (ret< 0) {
> + cgroup_err("Error: cannot mount %s to %s: %s\n",
> + curr->name, curr->mount.path,
> + strerror(errno));
> return ECGMOUNTFAIL;
> + }
> }
> return 0;
> }
> @@ -803,6 +814,9 @@ static int cgroup_config_unload_controller(const struct
> cgroup_mount_point *moun
> if (error) {
> last_errno = errno;
> ret = ECGOTHER;
> + cgroup_warn("Warning: cannot unmount controller %s on"
> + " %s: %s\n", mount_info->name,
> + mount_info->path, strerror(errno));
> goto out_error;
> }
> ret = cgroup_get_subsys_mount_point_next(&handle, path);
> @@ -850,6 +864,8 @@ int cgroup_unload_cgroups(void)
> if (error) {
> /* remember the error and continue unloading
> * the rest */
> + cgroup_warn("Warning: cannot clear controller"
> + " %s\n", info.name);
> ret = error;
> error = 0;
> }
>
>
> ------------------------------------------------------------------------------
> Achieve unprecedented app performance and reliability
> What every C/C++ and Fortran developer should know.
> Learn how Intel has extended the reach of its next-generation tools
> to help boost performance applications - inlcuding clusters.
> http://p.sf.net/sfu/intel-dev2devmay
> _______________________________________________
> Libcg-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/libcg-devel
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel