It must never show UUID-named containers there, but currently it will if UUID, and therefore cpu cgroup name, starts with a digit. This is due to the way sscanf called by legacy_veid_to_name, which is used for converting cpu cgroup names to fairsched ids, works.
Fix this by using kstrtoul for parsing farisched ids from cgroup name. https://jira.sw.ru/browse/PSBM-33806 Signed-off-by: Vladimir Davydov <[email protected]> --- kernel/fairsched.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/fairsched.c b/kernel/fairsched.c index 412afed6c77d..3879f8e6b5c9 100644 --- a/kernel/fairsched.c +++ b/kernel/fairsched.c @@ -32,6 +32,16 @@ static struct fairsched_node root_node = {NULL, NULL}; #define fairsched_id(id) (id == FAIRSCHED_HOST_NODE ? 0 : id) +static int fairsched_id_parse(const char *s) +{ + unsigned long id; + + if (kstrtoul(s, 10, &id)) + return -1; + + return id ?: FAIRSCHED_HOST_NODE; +} + static int fairsched_open(struct fairsched_node *node, int id) { envid_t veid = fairsched_id(id); @@ -467,7 +477,8 @@ static struct fairsched_dump *fairsched_do_dump(int compat) if (d_unhashed(dentry) || !dentry->d_inode || !S_ISDIR(dentry->d_inode->i_mode)) continue; - if (legacy_name_to_veid(dentry->d_name.name, &id) < 0) + id = fairsched_id_parse(dentry->d_name.name); + if (id < 0) continue; if (!ve_is_super(ve) && strcmp(ve_name(ve), dentry->d_name.name)) -- 2.1.4 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
