@@ -883,6 +883,56 @@ static void test_mb_free_blocks(struct kunit *test)
883
883
ext4_mb_unload_buddy (& e4b );
884
884
}
885
885
886
+ #define COUNT_FOR_ESTIMATE 100000
887
+ static void test_mb_mark_used_cost (struct kunit * test )
888
+ {
889
+ struct ext4_buddy e4b ;
890
+ struct super_block * sb = (struct super_block * )test -> priv ;
891
+ struct ext4_free_extent ex ;
892
+ int ret ;
893
+ struct test_range ranges [TEST_RANGE_COUNT ];
894
+ int i , j ;
895
+ unsigned long start , end , all = 0 ;
896
+
897
+ /* buddy cache assumes that each page contains at least one block */
898
+ if (sb -> s_blocksize > PAGE_SIZE )
899
+ kunit_skip (test , "blocksize exceeds pagesize" );
900
+
901
+ ret = ext4_mb_load_buddy (sb , TEST_GOAL_GROUP , & e4b );
902
+ KUNIT_ASSERT_EQ (test , ret , 0 );
903
+
904
+ ex .fe_group = TEST_GOAL_GROUP ;
905
+ for (j = 0 ; j < COUNT_FOR_ESTIMATE ; j ++ ) {
906
+ mbt_generate_test_ranges (sb , ranges , TEST_RANGE_COUNT );
907
+ start = jiffies ;
908
+ for (i = 0 ; i < TEST_RANGE_COUNT ; i ++ ) {
909
+ if (ranges [i ].len == 0 )
910
+ continue ;
911
+
912
+ ex .fe_start = ranges [i ].start ;
913
+ ex .fe_len = ranges [i ].len ;
914
+ ext4_lock_group (sb , TEST_GOAL_GROUP );
915
+ mb_mark_used (& e4b , & ex );
916
+ ext4_unlock_group (sb , TEST_GOAL_GROUP );
917
+ }
918
+ end = jiffies ;
919
+ all += (end - start );
920
+
921
+ for (i = 0 ; i < TEST_RANGE_COUNT ; i ++ ) {
922
+ if (ranges [i ].len == 0 )
923
+ continue ;
924
+
925
+ ext4_lock_group (sb , TEST_GOAL_GROUP );
926
+ mb_free_blocks (NULL , & e4b , ranges [i ].start ,
927
+ ranges [i ].len );
928
+ ext4_unlock_group (sb , TEST_GOAL_GROUP );
929
+ }
930
+ }
931
+
932
+ kunit_info (test , "costed jiffies %lu\n" , all );
933
+ ext4_mb_unload_buddy (& e4b );
934
+ }
935
+
886
936
static const struct mbt_ext4_block_layout mbt_test_layouts [] = {
887
937
{
888
938
.blocksize_bits = 10 ,
@@ -925,6 +975,8 @@ static struct kunit_case mbt_test_cases[] = {
925
975
KUNIT_CASE_PARAM (test_mb_mark_used , mbt_layouts_gen_params ),
926
976
KUNIT_CASE_PARAM (test_mb_free_blocks , mbt_layouts_gen_params ),
927
977
KUNIT_CASE_PARAM (test_mark_diskspace_used , mbt_layouts_gen_params ),
978
+ KUNIT_CASE_PARAM_ATTR (test_mb_mark_used_cost , mbt_layouts_gen_params ,
979
+ { .speed = KUNIT_SPEED_SLOW }),
928
980
{}
929
981
};
930
982
0 commit comments