selftests: cgroup: fix cleanup path in test_memcg_subtree_control()

Dan reported, that cleanup path in test_memcg_subtree_control()
triggers a static checker warning:
  ./tools/testing/selftests/cgroup/test_memcontrol.c:76 \
  test_memcg_subtree_control()
  error: uninitialized symbol 'child2'.

Fix this by initializing child2 and parent2 variables and
split the cleanup path into few stages.

Signed-off-by: Roman Gushchin <guro@fb.com>
Fixes: 84092dbcf9 ("selftests: cgroup: add memory controller self-tests")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Shuah Khan (Samsung OSG) <shuah@kernel.org>
Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Shuah Khan <shuah@kernel.org>
This commit is contained in:
Roman Gushchin 2019-04-08 15:12:30 -07:00 committed by Shuah Khan
parent f8a0590f0e
commit e14d314c7a
1 changed files with 21 additions and 17 deletions

View File

@ -26,7 +26,7 @@
*/ */
static int test_memcg_subtree_control(const char *root) static int test_memcg_subtree_control(const char *root)
{ {
char *parent, *child, *parent2, *child2; char *parent, *child, *parent2 = NULL, *child2 = NULL;
int ret = KSFT_FAIL; int ret = KSFT_FAIL;
char buf[PAGE_SIZE]; char buf[PAGE_SIZE];
@ -34,50 +34,54 @@ static int test_memcg_subtree_control(const char *root)
parent = cg_name(root, "memcg_test_0"); parent = cg_name(root, "memcg_test_0");
child = cg_name(root, "memcg_test_0/memcg_test_1"); child = cg_name(root, "memcg_test_0/memcg_test_1");
if (!parent || !child) if (!parent || !child)
goto cleanup; goto cleanup_free;
if (cg_create(parent)) if (cg_create(parent))
goto cleanup; goto cleanup_free;
if (cg_write(parent, "cgroup.subtree_control", "+memory")) if (cg_write(parent, "cgroup.subtree_control", "+memory"))
goto cleanup; goto cleanup_parent;
if (cg_create(child)) if (cg_create(child))
goto cleanup; goto cleanup_parent;
if (cg_read_strstr(child, "cgroup.controllers", "memory")) if (cg_read_strstr(child, "cgroup.controllers", "memory"))
goto cleanup; goto cleanup_child;
/* Create two nested cgroups without enabling memory controller */ /* Create two nested cgroups without enabling memory controller */
parent2 = cg_name(root, "memcg_test_1"); parent2 = cg_name(root, "memcg_test_1");
child2 = cg_name(root, "memcg_test_1/memcg_test_1"); child2 = cg_name(root, "memcg_test_1/memcg_test_1");
if (!parent2 || !child2) if (!parent2 || !child2)
goto cleanup; goto cleanup_free2;
if (cg_create(parent2)) if (cg_create(parent2))
goto cleanup; goto cleanup_free2;
if (cg_create(child2)) if (cg_create(child2))
goto cleanup; goto cleanup_parent2;
if (cg_read(child2, "cgroup.controllers", buf, sizeof(buf))) if (cg_read(child2, "cgroup.controllers", buf, sizeof(buf)))
goto cleanup; goto cleanup_all;
if (!cg_read_strstr(child2, "cgroup.controllers", "memory")) if (!cg_read_strstr(child2, "cgroup.controllers", "memory"))
goto cleanup; goto cleanup_all;
ret = KSFT_PASS; ret = KSFT_PASS;
cleanup: cleanup_all:
cg_destroy(child);
cg_destroy(parent);
free(parent);
free(child);
cg_destroy(child2); cg_destroy(child2);
cleanup_parent2:
cg_destroy(parent2); cg_destroy(parent2);
cleanup_free2:
free(parent2); free(parent2);
free(child2); free(child2);
cleanup_child:
cg_destroy(child);
cleanup_parent:
cg_destroy(parent);
cleanup_free:
free(parent);
free(child);
return ret; return ret;
} }