From d3d9cd38fe9ac1b2dfd9616da40149b465ffdbf8 Mon Sep 17 00:00:00 2001 From: Tom Hromatka Date: Mon, 31 Jan 2022 08:21:00 -0700 Subject: [PATCH] cgxset: Add a flag to ignore settings that can't be converted Add a flag, "-i", to cgxset to ignore settings that can't be converted from cgroup v1 to cgroup v2 or vice versa. Some cgroup v1 settings, e.g. cpuset.sched_relax_domain_level, don't have a cgroup v2 equivalent and likely never will. This flag allows users to ignore errors from these unconvertable settings. Signed-off-by: Tom Hromatka Reviewed-by: Kamalesh Babulal --- src/tools/cgxset.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/tools/cgxset.c b/src/tools/cgxset.c index efd050a5..95e7d1c0 100644 --- a/src/tools/cgxset.c +++ b/src/tools/cgxset.c @@ -43,6 +43,7 @@ static struct option const long_options[] = { {"v1", no_argument, NULL, '1'}, {"v2", no_argument, NULL, '2'}, + {"ignore-unmappable", no_argument, NULL, 'i'}, {"rule", required_argument, NULL, 'r'}, {"help", no_argument, NULL, 'h'}, {"copy-from", required_argument, NULL, COPY_FROM_OPTION}, @@ -96,6 +97,8 @@ static void usage(int status, const char *program_name) "v1 format\n"); printf(" -2, --v2 Provided parameters are in " "v2 format\n"); + printf(" -i, --ignore-unmappable Do not return an error for settings " + "that cannot be converted\n"); printf(" -r, --variable Define parameter "\ "to set\n"); printf(" --copy-from Control group whose "\ @@ -169,6 +172,7 @@ int main(int argc, char *argv[]) struct cgroup *cgroup; struct cgroup *converted_src_cgroup; enum cg_version_t src_version = CGROUP_UNK; + bool ignore_unmappable = false; /* no parametr on input */ if (argc < 2) { @@ -179,7 +183,7 @@ int main(int argc, char *argv[]) /* parse arguments */ while ((c = getopt_long (argc, argv, - "r:h12", long_options, NULL)) != -1) { + "r:h12i", long_options, NULL)) != -1) { switch (c) { case 'h': usage(0, argv[0]); @@ -234,6 +238,9 @@ int main(int argc, char *argv[]) case '2': src_version = CGROUP_V2; break; + case 'i': + ignore_unmappable = true; + break; default: usage(1, argv[0]); ret = -1; @@ -304,7 +311,13 @@ int main(int argc, char *argv[]) ret = cgroup_convert_cgroup(converted_src_cgroup, CGROUP_DISK, src_cgroup, src_version); - if (ret) + if (ret == ECGNOVERSIONCONVERT && ignore_unmappable) + /* The user has specified that we should ignore + * any errors due to being unable to map from v1 to + * v2 or vice versa + */ + ret = 0; + else if (ret) goto err; cgroup_free(&cgroup); -- 2.47.2