[CRIU] [PATCH] cg: don't try to copy special props to cpuset:/

Pavel Emelyanov xemul at parallels.com
Fri Oct 3 01:47:39 PDT 2014


On 10/03/2014 03:40 AM, Tycho Andersen wrote:
> We can't write to cpuset's root cg (indeed, we didn't create it and it has
> stuff in it), so ignore this special case.

Wait a second. I though we should avoid writing the "special props"
to all directories that we did *not* created on restore. Is this
assumption correct?

> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
>  cgroup.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/cgroup.c b/cgroup.c
> index 29e373d..36e3487 100644
> --- a/cgroup.c
> +++ b/cgroup.c
> @@ -886,7 +886,7 @@ static int find_value(const char *controller, const char *path, const char *prop
>  			*pos = 0;
>  			snprintf(prefix, PATH_MAX, "%s/%s", controller, my_path);
>  		} else {
> -			snprintf(fpath, PATH_MAX, "%s", controller);
> +			snprintf(prefix, PATH_MAX, "%s", controller);
>  		}
>  		snprintf(fpath, PATH_MAX, "%s/%s", prefix, prop);
>  
> @@ -964,6 +964,17 @@ static int copy_special_cg_props(const char *controller, char *path)
>  			if (find_value(controller, path, prop, buf, prefix, missing_path) < 0)
>  				return -1;
>  
> +			/*
> +			 * If the path that was missing is "/", we should skip
> +			 * copying this property, since cpuset won't allow us
> +			 * to write to it because there are already processes
> +			 * there (e.g. init). The root cg had no restrictions
> +			 * on cpuset resources here, so ignoring this and
> +			 * writing nothing is safe.
> +			 */
> +			if (strcmp(missing_path, "/") == 0)
> +				continue;
> +
>  			if (copy_recursive(prefix, missing_path, prop, buf) < 0) {
>  				pr_err("copying prop %s failed\n", prop);
>  				return -1;
> 



More information about the CRIU mailing list