Skip to content

Commit be5cd90

Browse files
Dmitry Monakhovtytso
authored andcommitted
ext4: optimize block allocation on grow indepth
It is reasonable to prepend newly created index to older one. [ Dropped no longer used function parameter newext. -tytso ] Signed-off-by: Dmitry Monakhov <[email protected]> Signed-off-by: Theodore Ts'o <[email protected]>
1 parent dfe076c commit be5cd90

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

fs/ext4/extents.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,16 +1263,24 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
12631263
* just created block
12641264
*/
12651265
static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
1266-
unsigned int flags,
1267-
struct ext4_extent *newext)
1266+
unsigned int flags)
12681267
{
12691268
struct ext4_extent_header *neh;
12701269
struct buffer_head *bh;
1271-
ext4_fsblk_t newblock;
1270+
ext4_fsblk_t newblock, goal = 0;
1271+
struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es;
12721272
int err = 0;
12731273

1274-
newblock = ext4_ext_new_meta_block(handle, inode, NULL,
1275-
newext, &err, flags);
1274+
/* Try to prepend new index to old one */
1275+
if (ext_depth(inode))
1276+
goal = ext4_idx_pblock(EXT_FIRST_INDEX(ext_inode_hdr(inode)));
1277+
if (goal > le32_to_cpu(es->s_first_data_block)) {
1278+
flags |= EXT4_MB_HINT_TRY_GOAL;
1279+
goal--;
1280+
} else
1281+
goal = ext4_inode_to_goal_block(inode);
1282+
newblock = ext4_new_meta_blocks(handle, inode, goal, flags,
1283+
NULL, &err);
12761284
if (newblock == 0)
12771285
return err;
12781286

@@ -1373,7 +1381,7 @@ static int ext4_ext_create_new_leaf(handle_t *handle, struct inode *inode,
13731381
err = PTR_ERR(path);
13741382
} else {
13751383
/* tree is full, time to grow in depth */
1376-
err = ext4_ext_grow_indepth(handle, inode, mb_flags, newext);
1384+
err = ext4_ext_grow_indepth(handle, inode, mb_flags);
13771385
if (err)
13781386
goto out;
13791387

0 commit comments

Comments
 (0)