]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ext4: initialize superblock fields in the kballoc-test.c kunit tests
authorZhang Yi <yi.zhang@huawei.com>
Fri, 25 Jul 2025 02:15:50 +0000 (10:15 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 25 Jul 2025 13:13:44 +0000 (09:13 -0400)
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: Guenter Roeck <linux@roeck-us.net>
Closes: https://lore.kernel.org/linux-ext4/b0635ad0-7ebf-4152-a69b-58e7e87d5085@roeck-us.net/
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/mballoc-test.c

index d634c12f1984749ce7ea9332b77906799e4af21c..f018bc8424c7cb5d3504ff55ee18dd68259d1a67 100644 (file)
@@ -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);