Commit 9e1b1432 authored by Ye Bin's avatar Ye Bin Committed by Theodore Ts'o
Browse files

ext4: fix extents-test.c is not compiled when EXT4_KUNIT_TESTS=M



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: cb1e0c1d ("ext4: kunit tests for extent splitting and conversion")
Signed-off-by: default avatarYe Bin <yebin10@huawei.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Link: https://patch.msgid.link/20260314075258.1317579-4-yebin@huaweicloud.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 519b76ac
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -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 */
+4 −4
Original line number Diff line number Diff line
@@ -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);
+33 −6
Original line number Diff line number Diff line
@@ -184,7 +184,7 @@ 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,
int __ext4_ext_dirty(const char *where, unsigned int line,
		     handle_t *handle, struct inode *inode,
		     struct ext4_ext_path *path)
{
@@ -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 @@ int ext4_ext_clear_bb(struct inode *inode)
	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