aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/namei.c
diff options
context:
space:
mode:
authorTao Ma <tao.ma@oracle.com>2009-02-24 11:53:23 -0500
committerMark Fasheh <mfasheh@suse.com>2009-04-03 14:39:17 -0400
commit138211515c102807a16c02fdc15feef1f6ef8124 (patch)
tree9b6fff8512a19792f2e29458292607f4efb413c4 /fs/ocfs2/namei.c
parent1d46dc08d33138c29c63d717807c08ab704fc773 (diff)
ocfs2: Optimize inode allocation by remembering last group
In ocfs2, the inode block search looks for the "emptiest" inode group to allocate from. So if an inode alloc file has many equally (or almost equally) empty groups, new inodes will tend to get spread out amongst them, which in turn can put them all over the disk. This is undesirable because directory operations on conceptually "nearby" inodes force a large number of seeks. So we add ip_last_used_group in core directory inodes which records the last used allocation group. Another field named ip_last_used_slot is also added in case inode stealing happens. When claiming new inode, we passed in directory's inode so that the allocation can use this information. For more details, please see http://oss.oracle.com/osswiki/OCFS2/DesignDocs/InodeAllocationStrategy. Signed-off-by: Tao Ma <tao.ma@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/namei.c')
-rw-r--r--fs/ocfs2/namei.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 58c318d2f061..2220f93f668b 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -485,8 +485,8 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,
485 485
486 *new_fe_bh = NULL; 486 *new_fe_bh = NULL;
487 487
488 status = ocfs2_claim_new_inode(osb, handle, inode_ac, &suballoc_bit, 488 status = ocfs2_claim_new_inode(osb, handle, dir, parent_fe_bh,
489 &fe_blkno); 489 inode_ac, &suballoc_bit, &fe_blkno);
490 if (status < 0) { 490 if (status < 0) {
491 mlog_errno(status); 491 mlog_errno(status);
492 goto leave; 492 goto leave;