The maximum extent tree depth really only depends on the filesystem block size, so cache the last result if possible. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- lib/ext2fs/extent.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c index b1130f6..19f38fd 100644 --- a/lib/ext2fs/extent.c +++ b/lib/ext2fs/extent.c @@ -1725,9 +1725,16 @@ size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle) size_t extents_per_block = (handle->fs->blocksize - sizeof(struct ext3_extent_header)) / sizeof(struct ext3_extent); + static unsigned int last_blocksize = 0; + static size_t last_result = 0; - return 1 + ((ul_log2(EXT_MAX_EXTENT_LBLK) - ul_log2(iblock_extents)) / + if (last_blocksize && last_blocksize == handle->fs->blocksize) + return last_result; + + last_result = 1 + ((ul_log2(EXT_MAX_EXTENT_LBLK) - ul_log2(iblock_extents)) / ul_log2(extents_per_block)); + last_blocksize = handle->fs->blocksize; + return last_result; } #ifdef DEBUG -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html