Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e14d314c authored by Roman Gushchin's avatar Roman Gushchin Committed by Shuah Khan
Browse files

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: default avatarRoman Gushchin <guro@fb.com>
Fixes: 84092dbc ("selftests: cgroup: add memory controller self-tests")
Reported-by: default avatarDan 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: default avatarShuah Khan <shuah@kernel.org>
parent f8a0590f
Loading
Loading
Loading
Loading
+21 −17
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@
 */
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;
	char buf[PAGE_SIZE];

@@ -34,50 +34,54 @@ static int test_memcg_subtree_control(const char *root)
	parent = cg_name(root, "memcg_test_0");
	child = cg_name(root, "memcg_test_0/memcg_test_1");
	if (!parent || !child)
		goto cleanup;
		goto cleanup_free;

	if (cg_create(parent))
		goto cleanup;
		goto cleanup_free;

	if (cg_write(parent, "cgroup.subtree_control", "+memory"))
		goto cleanup;
		goto cleanup_parent;

	if (cg_create(child))
		goto cleanup;
		goto cleanup_parent;

	if (cg_read_strstr(child, "cgroup.controllers", "memory"))
		goto cleanup;
		goto cleanup_child;

	/* Create two nested cgroups without enabling memory controller */
	parent2 = cg_name(root, "memcg_test_1");
	child2 = cg_name(root, "memcg_test_1/memcg_test_1");
	if (!parent2 || !child2)
		goto cleanup;
		goto cleanup_free2;

	if (cg_create(parent2))
		goto cleanup;
		goto cleanup_free2;

	if (cg_create(child2))
		goto cleanup;
		goto cleanup_parent2;

	if (cg_read(child2, "cgroup.controllers", buf, sizeof(buf)))
		goto cleanup;
		goto cleanup_all;

	if (!cg_read_strstr(child2, "cgroup.controllers", "memory"))
		goto cleanup;
		goto cleanup_all;

	ret = KSFT_PASS;

cleanup:
	cg_destroy(child);
	cg_destroy(parent);
	free(parent);
	free(child);

cleanup_all:
	cg_destroy(child2);
cleanup_parent2:
	cg_destroy(parent2);
cleanup_free2:
	free(parent2);
	free(child2);
cleanup_child:
	cg_destroy(child);
cleanup_parent:
	cg_destroy(parent);
cleanup_free:
	free(parent);
	free(child);

	return ret;
}