The comment to this function says: """ * Stupid algorithm --- we now just search forward starting from the * goal. Should put in a smarter one someday.... """ This adds in a rather hacky algorthim which starts where we finished searching previously using a static variable rather than starting from scratch if a hint isn't provided. This was after noticing that mkfs.ext4 -F X -d Y was spending *lots* of time in ext2fs_new_block2 called from ext2fs_bmap from ext2fs_file_write(). Numbers wise, this took a core-image-sato-sdk mkfs time from over 8 minutes to around 35 seconds. Upstream-Status: Pending RP 2015/02/20 Index: e2fsprogs-1.42.9/lib/ext2fs/alloc.c =================================================================== --- e2fsprogs-1.42.9.orig/lib/ext2fs/alloc.c +++ e2fsprogs-1.42.9/lib/ext2fs/alloc.c @@ -160,6 +160,8 @@ errcode_t ext2fs_new_inode(ext2_filsys f return 0; } +static blk64_t last_goal = 0; + /* * Stupid algorithm --- we now just search forward starting from the * goal. Should put in a smarter one someday.... @@ -170,6 +172,9 @@ errcode_t ext2fs_new_block2(ext2_filsys blk64_t i; int c_ratio; + if (!goal) + goal = last_goal; + EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); if (!map) @@ -194,6 +199,7 @@ errcode_t ext2fs_new_block2(ext2_filsys if (!ext2fs_fast_test_block_bitmap2(map, i)) { *ret = i; + last_goal = i; return 0; } i = (i + c_ratio) & ~(c_ratio - 1);