]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ext4: fix extents-test.c is not compiled when EXT4_KUNIT_TESTS=M
authorYe Bin <yebin10@huawei.com>
Sat, 14 Mar 2026 07:52:58 +0000 (15:52 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 28 Mar 2026 03:36:06 +0000 (23:36 -0400)
Now, only EXT4_KUNIT_TESTS=Y testcase will be compiled in 'extents.c'.
To solve this issue, the ext4 test code needs to be decoupled. The
'extents-test' module is compiled into 'ext4-test' module.

Fixes: cb1e0c1d1fad ("ext4: kunit tests for extent splitting and conversion")
Signed-off-by: Ye Bin <yebin10@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20260314075258.1317579-4-yebin@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/Makefile
fs/ext4/ext4_extents.h
fs/ext4/extents-test.c
fs/ext4/extents.c

index d836c3fe311b586a8f9e1694ad0b9678e6229550..3baee4e7c1cfbe07e078d1850dd3538d045da79c 100644 (file)
@@ -14,7 +14,8 @@ ext4-y        := balloc.o bitmap.o block_validity.o dir.o ext4_jbd2.o extents.o \
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)       += acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)                += xattr_security.o
-ext4-test-objs                         += inode-test.o mballoc-test.o
+ext4-test-objs                         += inode-test.o mballoc-test.o \
+                                          extents-test.o
 obj-$(CONFIG_EXT4_KUNIT_TESTS)         += ext4-test.o
 ext4-$(CONFIG_FS_VERITY)               += verity.o
 ext4-$(CONFIG_FS_ENCRYPTION)           += crypto.o
index c484125d963fb8a931837e12fa6f643d609a89ea..ebaf7cc42430fa2c36c08dedfc6767f651431442 100644 (file)
@@ -264,5 +264,17 @@ static inline void ext4_idx_store_pblock(struct ext4_extent_idx *ix,
                                     0xffff);
 }
 
+extern int __ext4_ext_dirty(const char *where, unsigned int line,
+                           handle_t *handle, struct inode *inode,
+                           struct ext4_ext_path *path);
+extern int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex);
+#if IS_ENABLED(CONFIG_EXT4_KUNIT_TESTS)
+extern int ext4_ext_space_root_idx_test(struct inode *inode, int check);
+extern struct ext4_ext_path *ext4_split_convert_extents_test(
+                               handle_t *handle, struct inode *inode,
+                               struct ext4_map_blocks *map,
+                               struct ext4_ext_path *path,
+                               int flags, unsigned int *allocated);
+#endif
 #endif /* _EXT4_EXTENTS */
 
index a6b3e6b592a5af557135439ffae917be1c0a1e61..5496b2c8e2cd3aff217f57ac7138951660657751 100644 (file)
@@ -282,8 +282,8 @@ static int extents_kunit_init(struct kunit *test)
        eh->eh_depth = 0;
        eh->eh_entries = cpu_to_le16(1);
        eh->eh_magic = EXT4_EXT_MAGIC;
-       eh->eh_max =
-               cpu_to_le16(ext4_ext_space_root_idx(&k_ctx.k_ei->vfs_inode, 0));
+       eh->eh_max = cpu_to_le16(ext4_ext_space_root_idx_test(
+                                       &k_ctx.k_ei->vfs_inode, 0));
        eh->eh_generation = 0;
 
        /*
@@ -386,8 +386,8 @@ static void test_split_convert(struct kunit *test)
 
        switch (param->type) {
        case TEST_SPLIT_CONVERT:
-               path = ext4_split_convert_extents(NULL, inode, &map, path,
-                                                 param->split_flags, NULL);
+               path = ext4_split_convert_extents_test(NULL, inode, &map,
+                                       path, param->split_flags, NULL);
                break;
        case TEST_CREATE_BLOCKS:
                ext4_map_create_blocks_helper(test, inode, &map, param->split_flags);
index 8744d3845577d540141e44c93824180efb1a9f53..da78eb23aaa68620664f2dc9dc0abb787e980fd1 100644 (file)
@@ -184,9 +184,9 @@ static int ext4_ext_get_access(handle_t *handle, struct inode *inode,
  *  - ENOMEM
  *  - EIO
  */
-static int __ext4_ext_dirty(const char *where, unsigned int line,
-                           handle_t *handle, struct inode *inode,
-                           struct ext4_ext_path *path)
+int __ext4_ext_dirty(const char *where, unsigned int line,
+                    handle_t *handle, struct inode *inode,
+                    struct ext4_ext_path *path)
 {
        int err;
 
@@ -3159,7 +3159,7 @@ static void ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex)
 }
 
 /* FIXME!! we need to try to merge to left or right after zero-out  */
-static int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex)
+int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex)
 {
        ext4_fsblk_t ee_pblock;
        unsigned int ee_len;
@@ -6257,6 +6257,33 @@ out:
        return 0;
 }
 
-#ifdef CONFIG_EXT4_KUNIT_TESTS
-#include "extents-test.c"
+#if IS_ENABLED(CONFIG_EXT4_KUNIT_TESTS)
+int ext4_ext_space_root_idx_test(struct inode *inode, int check)
+{
+       return ext4_ext_space_root_idx(inode, check);
+}
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_ext_space_root_idx_test);
+
+struct ext4_ext_path *ext4_split_convert_extents_test(handle_t *handle,
+                       struct inode *inode, struct ext4_map_blocks *map,
+                       struct ext4_ext_path *path, int flags,
+                       unsigned int *allocated)
+{
+       return ext4_split_convert_extents(handle, inode, map, path,
+                                         flags, allocated);
+}
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_split_convert_extents_test);
+
+EXPORT_SYMBOL_FOR_EXT4_TEST(__ext4_ext_dirty);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_ext_zeroout);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_es_register_shrinker);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_es_unregister_shrinker);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_map_create_blocks);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_es_init_tree);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_es_lookup_extent);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_es_insert_extent);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_ext_insert_extent);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_find_extent);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_issue_zeroout);
+EXPORT_SYMBOL_FOR_EXT4_TEST(ext4_map_query_blocks);
 #endif