Commit 82e6381e authored by Zhang Yi's avatar Zhang Yi Committed by Theodore Ts'o
Browse files

ext4: initialize superblock fields in the kballoc-test.c kunit tests

Various changes in the "ext4: better scalability for ext4 block
allocation" patch series have resulted in kunit test failures, most
notably in the test_new_blocks_simple and the test_mb_mark_used tests.
The root cause of these failures is that various in-memory ext4 data
structures were not getting initialized, and while previous versions
of the functions exercised by the unit tests didn't use these
structure members, this was arguably a test bug.

Since one of the patches in the block allocation scalability patches
is a fix which is has a cc:stable tag, this commit also has a
cc:stable tag.

CC: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250714130327.1830534-1-libaokun1@huawei.com
Link: https://patch.msgid.link/20250725021550.3177573-1-yi.zhang@huaweicloud.com
Link: https://patch.msgid.link/20250725021654.3188798-1-yi.zhang@huaweicloud.com


Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Closes: https://lore.kernel.org/linux-ext4/b0635ad0-7ebf-4152-a69b-58e7e87d5085@roeck-us.net/


Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 90f097b1
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ static struct super_block *mbt_ext4_alloc_super_block(void)
	bgl_lock_init(sbi->s_blockgroup_lock);

	sbi->s_es = &fsb->es;
	sbi->s_sb = sb;
	sb->s_fs_info = sbi;

	up_write(&sb->s_umount);
@@ -802,6 +803,10 @@ static void test_mb_mark_used(struct kunit *test)
	KUNIT_ASSERT_EQ(test, ret, 0);

	grp->bb_free = EXT4_CLUSTERS_PER_GROUP(sb);
	grp->bb_largest_free_order = -1;
	grp->bb_avg_fragment_size_order = -1;
	INIT_LIST_HEAD(&grp->bb_largest_free_order_node);
	INIT_LIST_HEAD(&grp->bb_avg_fragment_size_node);
	mbt_generate_test_ranges(sb, ranges, TEST_RANGE_COUNT);
	for (i = 0; i < TEST_RANGE_COUNT; i++)
		test_mb_mark_used_range(test, &e4b, ranges[i].start,
@@ -875,6 +880,10 @@ static void test_mb_free_blocks(struct kunit *test)
	ext4_unlock_group(sb, TEST_GOAL_GROUP);

	grp->bb_free = 0;
	grp->bb_largest_free_order = -1;
	grp->bb_avg_fragment_size_order = -1;
	INIT_LIST_HEAD(&grp->bb_largest_free_order_node);
	INIT_LIST_HEAD(&grp->bb_avg_fragment_size_node);
	memset(bitmap, 0xff, sb->s_blocksize);

	mbt_generate_test_ranges(sb, ranges, TEST_RANGE_COUNT);