[v5,7/8] ext4: add some kunit stub for mballoc kunit test
Commit Message
Multiblocks allocation will read and write block bitmap and group
descriptor which reside on disk. Add kunit stub to function
ext4_get_group_desc, ext4_read_block_bitmap_nowait, ext4_wait_block_bitmap
and ext4_mb_mark_group_bb to avoid real IO to disk.
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
---
fs/ext4/balloc.c | 16 ++++++++++++++++
fs/ext4/mballoc.c | 6 ++++++
2 files changed, 22 insertions(+)
Comments
On 2023/6/29 22:40, Kemeng Shi wrote:
> Multiblocks allocation will read and write block bitmap and group
> descriptor which reside on disk. Add kunit stub to function
> ext4_get_group_desc, ext4_read_block_bitmap_nowait, ext4_wait_block_bitmap
> and ext4_mb_mark_group_bb to avoid real IO to disk.
>
> Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
> ---
> fs/ext4/balloc.c | 16 ++++++++++++++++
> fs/ext4/mballoc.c | 6 ++++++
> 2 files changed, 22 insertions(+)
>
> diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
> index 1f72f977c6db..d39655fb2f53 100644
> --- a/fs/ext4/balloc.c
> +++ b/fs/ext4/balloc.c
> @@ -22,6 +22,7 @@
> #include "mballoc.h"
>
> #include <trace/events/ext4.h>
> +#include <kunit/static_stub.h>
>
> static unsigned ext4_num_base_meta_clusters(struct super_block *sb,
> ext4_group_t block_group);
> @@ -274,6 +275,11 @@ struct ext4_group_desc * ext4_get_group_desc(struct super_block *sb,
> struct ext4_sb_info *sbi = EXT4_SB(sb);
> struct buffer_head *bh_p;
>
> +#ifdef CONFIG_EXT4_KUNIT_TESTS
> + KUNIT_STATIC_STUB_REDIRECT(ext4_get_group_desc,
> + sb, block_group, bh);
> +#endif
Hi Kemeng,
I'm not a fan of adding "#ifdef" blocks in functions everywhere. The
right thing to do is to put these "#ifdef" blocks in header files and to
make the macro or functions empty if you want to make these codes
conditionally-compiled out.
The standard usage in kernel looks like:
In the header file: "a.h"
#ifdef CONFIG_XXXX
void foo(struct sas_task *task);
#else
static inline void foo(struct sas_task *task)
{
}
#endif
or
#ifdef CONFIG_XXXX
#define foo() do_something()
#else
#define foo()
#endif
And in the c file: "a.c"
#include "a.h"
void bar(void)
{
foo();
something_else();
}
Please refer to:
https://docs.kernel.org/process/4.Coding.html?#ifdef-and-preprocessor-use-in-general
Thanks,
Jason
@@ -22,6 +22,7 @@
#include "mballoc.h"
#include <trace/events/ext4.h>
+#include <kunit/static_stub.h>
static unsigned ext4_num_base_meta_clusters(struct super_block *sb,
ext4_group_t block_group);
@@ -274,6 +275,11 @@ struct ext4_group_desc * ext4_get_group_desc(struct super_block *sb,
struct ext4_sb_info *sbi = EXT4_SB(sb);
struct buffer_head *bh_p;
+#ifdef CONFIG_EXT4_KUNIT_TESTS
+ KUNIT_STATIC_STUB_REDIRECT(ext4_get_group_desc,
+ sb, block_group, bh);
+#endif
+
if (block_group >= ngroups) {
ext4_error(sb, "block_group >= groups_count - block_group = %u,"
" groups_count = %u", block_group, ngroups);
@@ -468,6 +474,11 @@ ext4_read_block_bitmap_nowait(struct super_block *sb, ext4_group_t block_group,
ext4_fsblk_t bitmap_blk;
int err;
+#ifdef CONFIG_EXT4_KUNIT_TESTS
+ KUNIT_STATIC_STUB_REDIRECT(ext4_read_block_bitmap_nowait,
+ sb, block_group, ignore_locked);
+#endif
+
desc = ext4_get_group_desc(sb, block_group, NULL);
if (!desc)
return ERR_PTR(-EFSCORRUPTED);
@@ -563,6 +574,11 @@ int ext4_wait_block_bitmap(struct super_block *sb, ext4_group_t block_group,
{
struct ext4_group_desc *desc;
+#ifdef CONFIG_EXT4_KUNIT_TESTS
+ KUNIT_STATIC_STUB_REDIRECT(ext4_wait_block_bitmap,
+ sb, block_group, bh);
+#endif
+
if (!buffer_new(bh))
return 0;
desc = ext4_get_group_desc(sb, block_group, NULL);
@@ -17,6 +17,7 @@
#include <linux/nospec.h>
#include <linux/backing-dev.h>
#include <trace/events/ext4.h>
+#include <kunit/static_stub.h>
/*
* MUSTDO:
@@ -3970,6 +3971,11 @@ ext4_mb_mark_group_bb(struct ext4_mark_context *mc, ext4_group_t group,
int err;
unsigned int i, already, changed = len;
+#ifdef CONFIG_EXT4_KUNIT_TESTS
+ KUNIT_STATIC_STUB_REDIRECT(ext4_mb_mark_group_bb,
+ mc, group, blkoff, len, flags);
+#endif
+
mc->changed = 0;
bitmap_bh = ext4_read_block_bitmap(sb, group);
if (IS_ERR(bitmap_bh))