There are three parts in this patchset: Part1: Patch 1-7 is v2 of sent series v1->v2: 1. collect reviewed-by from Ojaswin. Only "ext4: add EXT4_MB_HINT_GOAL_ONLY test in ext4_mb_use_preallocated" needs futher review. See [1] for previous comments. 2. drop "ext4: fix wrong unit use in ext4_mb_new_inode_pa" which is already done in [2]. Part2: Patch 8-17 are more fixes and cleanups to mballoc Some patches in this part will be conflict with patches in part1, so append new patches in this series instead of creating a new one. Patch 8-11 are some random fixes and cleanups, see respective log message for detail. Patch 12-17 factor out codes to mark bit in group is used or free which will update on disk block bitmap and group descriptor. Several reasons to do this: 1. pair behavior of alloc/free bits. For example, ext4_mb_new_blocks_simple will update free_clusters in struct flex_groups in ext4_mb_mark_bb while ext4_free_blocks_simple forgets this. 2. remove repeat code to read from disk, update and write back to disk. 3. reduce future unit test mocks to avoid real IO to update structure on disk. Part3: Patch 18-19 add one unit test for mballoc Patch 18 add mocks to functions which will issue IO to disk. Patch 19 add unit test for ext4_mb_new_blocks_simple in mballoc. Details can be found in respective log message. Before add more unit test, there are something should be discussed: 1. How to test static function in mballoc.c Currently, include mballoc-test.c in mballoc.c to test static function in mballoc.c from mballoc-test.c.Not sure if there is any more elegant way to test static function without touch mballoc.c. 2. How add mocks to function in mballoc.c which may issue IO to disk Currently, KUNIT_STATIC_STUB_REDIRECT is added to functions as suggested in kunit document [3]. However, this will trigger warnning "ISO C90 forbids mixed declarations and code". 3. How to simulate a block bitmap. Currently, a fake buffer_head with bitmap data is returned, then no futher change is needed. If we simulate a block bitmap with an array of data structure like: struct test_bitmap { unsigned int start; unsigned int len; } which is suggested by Theodore in [4], then we need to add mocks to function which expected bitmap from bitmap_bh->b_data, like mb_find_next_bit, mb_find_next_zero_bit and maybe more. Would like to hear any suggestion! Thanks! [1] https://lore.kernel.org/linux-ext4/ZC3MoWn2UO6p+Swp@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ [2] https://lore.kernel.org/linux-ext4/9b35f3955a1d7b66bbd713eca1e63026e01f78c1.1679731817.git.ojaswin@xxxxxxxxxxxxx [3] https://docs.kernel.org/dev-tools/kunit/api/functionredirection.html#c.KUNIT_STATIC_STUB_REDIRECT [4] https://lore.kernel.org/linux-ext4/20230317155047.GB3270589@xxxxxxx/ By the way, the "xfstest somke" passes. Please let me know if any more test is needed. Kemeng Shi (19): ext4: fix wrong unit use in ext4_mb_normalize_request ext4: fix unit mismatch in ext4_mb_new_blocks_simple ext4: fix wrong unit use in ext4_mb_find_by_goal ext4: treat stripe in block unit ext4: add EXT4_MB_HINT_GOAL_ONLY test in ext4_mb_use_preallocated ext4: remove ext4_block_group and ext4_block_group_offset declaration ext4: try all groups in ext4_mb_new_blocks_simple ext4: get block from bh before pass it to ext4_free_blocks_simple in ext4_free_blocks ext4: remove unsed parameter and unnecessary forward declaration of ext4_mb_new_blocks_simple ext4: fix wrong unit use in ext4_mb_clear_bb ext4: fix wrong unit use in ext4_mb_new_blocks ext4: factor out codes to update block bitmap and group descriptor on disk from ext4_mb_mark_bb ext4: call ext4_mb_mark_group_bb in ext4_free_blocks_simple ext4: extent ext4_mb_mark_group_bb to support allocation under journal ext4: call ext4_mb_mark_group_bb in ext4_mb_mark_diskspace_used ext4: call ext4_mb_mark_group_bb in ext4_mb_clear_bb ext4: call ext4_mb_mark_group_bb in ext4_group_add_blocks ext4: add some kunit stub for mballoc kunit test ext4: add first unit test for ext4_mb_new_blocks_simple in mballoc fs/ext4/balloc.c | 13 + fs/ext4/ext4.h | 4 - fs/ext4/mballoc-test.c | 319 +++++++++++++++++++ fs/ext4/mballoc.c | 703 +++++++++++++++++++---------------------- fs/ext4/super.c | 13 + 5 files changed, 663 insertions(+), 389 deletions(-) create mode 100644 fs/ext4/mballoc-test.c -- 2.30.0