From: Pekka Enberg <[EMAIL PROTECTED]> As alloc_inode() touches the same cache line as init_once(), we gain nothing from using slab constructors.
Cc: Stephen C. Tweedie <[EMAIL PROTECTED]> Cc: Andreas Dilger <[EMAIL PROTECTED]> Cc: Christoph Lameter <[EMAIL PROTECTED]> Signed-off-by: Pekka Enberg <[EMAIL PROTECTED]> --- fs/ext4/super.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) Index: 26-mm/fs/ext4/super.c =================================================================== --- 26-mm.orig/fs/ext4/super.c 2007-05-05 12:26:44.000000000 +0300 +++ 26-mm/fs/ext4/super.c 2007-05-05 12:28:56.000000000 +0300 @@ -496,16 +496,21 @@ static struct kmem_cache *ext4_inode_cac static struct inode *ext4_alloc_inode(struct super_block *sb) { struct ext4_inode_info *ei; + struct inode *inode; ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS); if (!ei) return NULL; + INIT_LIST_HEAD(&ei->i_orphan); +#ifdef CONFIG_EXT4DEV_FS_XATTR + init_rwsem(&ei->xattr_sem); +#endif + mutex_init(&ei->truncate_mutex); #ifdef CONFIG_EXT4DEV_FS_POSIX_ACL ei->i_acl = EXT4_ACL_NOT_CACHED; ei->i_default_acl = EXT4_ACL_NOT_CACHED; #endif ei->i_block_alloc_info = NULL; - ei->vfs_inode.i_version = 1; memset(&ei->i_cached_extent, 0, sizeof(struct ext4_ext_cache)); /* FIXME: these wb-related fields could be initialized once */ @@ -514,7 +519,10 @@ ei->i_md_reserved = 0; atomic_set(&ei->i_wb_writers, 0); spin_lock_init(&ei->i_wb_reserved_lock); - return &ei->vfs_inode; + inode = &ei->vfs_inode; + inode_init_once(inode); + inode->i_version = 1; + return inode; } static void ext4_destroy_inode(struct inode *inode) @@ -522,27 +530,13 @@ static void ext4_destroy_inode(struct in kmem_cache_free(ext4_inode_cachep, EXT4_I(inode)); } -static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) -{ - struct ext4_inode_info *ei = (struct ext4_inode_info *) foo; - - if (flags & SLAB_CTOR_CONSTRUCTOR) { - INIT_LIST_HEAD(&ei->i_orphan); -#ifdef CONFIG_EXT4DEV_FS_XATTR - init_rwsem(&ei->xattr_sem); -#endif - mutex_init(&ei->truncate_mutex); - inode_init_once(&ei->vfs_inode); - } -} - static int init_inodecache(void) { ext4_inode_cachep = kmem_cache_create("ext4_inode_cache", sizeof(struct ext4_inode_info), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), - init_once, NULL); + NULL, NULL); if (ext4_inode_cachep == NULL) return -ENOMEM; return 0; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/