Whamcloud - gitweb
libext2fs: speed up the max extent depth api call
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 15 Dec 2014 17:26:57 +0000 (12:26 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 15 Dec 2014 17:26:57 +0000 (12:26 -0500)
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@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
lib/ext2fs/extent.c

index b1130f6..19f38fd 100644 (file)
@@ -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