Message ID | 1411455752-2332-3-git-send-email-dmonakhov@openvz.org |
---|---|
State | New, archived |
Headers | show |
On Tue 23-09-14 11:02:32, Dmitry Monakhov wrote: > It is reasonable to prepent newly created index to older one. ... > - newblock = ext4_ext_new_meta_block(handle, inode, NULL, > - newext, &err, flags); > + /* Try to prepend new index to old one */ > + if (ext_depth(inode)) > + goal = ext4_idx_pblock(EXT_FIRST_INDEX(ext_inode_hdr(inode))); > + if (goal > le32_to_cpu(es->s_first_data_block)) { > + flags |= EXT4_MB_HINT_TRY_GOAL; > + goal--; > + } else > + goal = ext4_inode_to_goal_block(inode); > + newblock = ext4_new_meta_blocks(handle, inode, goal, flags, > + NULL, &err); > if (newblock == 0) > return err; Hum, did you actually observe any improvement in file layout with this patch? Honza
On Tue, 23 Sep 2014 12:00:31 +0200, Jan Kara <jack@suse.cz> wrote: > On Tue 23-09-14 11:02:32, Dmitry Monakhov wrote: > > It is reasonable to prepent newly created index to older one. > ... > > - newblock = ext4_ext_new_meta_block(handle, inode, NULL, > > - newext, &err, flags); > > + /* Try to prepend new index to old one */ > > + if (ext_depth(inode)) > > + goal = ext4_idx_pblock(EXT_FIRST_INDEX(ext_inode_hdr(inode))); > > + if (goal > le32_to_cpu(es->s_first_data_block)) { > > + flags |= EXT4_MB_HINT_TRY_GOAL; > > + goal--; > > + } else > > + goal = ext4_inode_to_goal_block(inode); > > + newblock = ext4_new_meta_blocks(handle, inode, goal, flags, > > + NULL, &err); > > if (newblock == 0) > > return err; > Hum, did you actually observe any improvement in file layout with this > patch? Hmmm.... well this patch itself unlikely result in improvements because the block we asks is likely used already. This is because non optimal block allocation for mdata. I hope to fix it once we start working on ideas which was described in "fast fsck" tread (http://comments.gmane.org/gmane.comp.file-systems.ext4/41472) > > Honza > -- > Jan Kara <jack@suse.cz> > SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 8170b32..37267ea 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -1268,11 +1268,20 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode, { struct ext4_extent_header *neh; struct buffer_head *bh; - ext4_fsblk_t newblock; + ext4_fsblk_t newblock, goal = 0; + struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es; int err = 0; - newblock = ext4_ext_new_meta_block(handle, inode, NULL, - newext, &err, flags); + /* Try to prepend new index to old one */ + if (ext_depth(inode)) + goal = ext4_idx_pblock(EXT_FIRST_INDEX(ext_inode_hdr(inode))); + if (goal > le32_to_cpu(es->s_first_data_block)) { + flags |= EXT4_MB_HINT_TRY_GOAL; + goal--; + } else + goal = ext4_inode_to_goal_block(inode); + newblock = ext4_new_meta_blocks(handle, inode, goal, flags, + NULL, &err); if (newblock == 0) return err;
It is reasonable to prepent newly created index to older one. Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> --- fs/ext4/extents.c | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-)