aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_vfsops.c
diff options
context:
space:
mode:
authorDavid Chinner <dgc@sgi.com>2008-03-05 21:43:49 -0500
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>2008-04-17 21:37:41 -0400
commitbad5584332e888ac40ca13584e8c114149ddb01e (patch)
treef66ff83686cd28967d8b9fc0a8b8d6411a081071 /fs/xfs/xfs_vfsops.c
parenta3f74ffb6d1448d9a8f482e593b80ec15f1695d4 (diff)
[XFS] Remove the xfs_icluster structure
Remove the xfs_icluster structure and replace with a radix tree lookup. We don't need to keep a list of inodes in each cluster around anymore as we can look them up quickly when we need to. The only time we need to do this now is during inode writeback. Factor the inode cluster writeback code out of xfs_iflush and convert it to use radix_tree_gang_lookup() instead of walking a list of inodes built when we first read in the inodes. This remove 3 pointers from each xfs_inode structure and the xfs_icluster structure per inode cluster. Hence we reduce the cache footprint of the xfs_inodes by between 5-10% depending on cluster sparseness. To be truly efficient we need a radix_tree_gang_lookup_range() call to stop searching once we are past the end of the cluster instead of trying to find a full cluster's worth of inodes. Before (ia64): $ cat /sys/slab/xfs_inode/object_size 536 After: $ cat /sys/slab/xfs_inode/object_size 512 SGI-PV: 977460 SGI-Modid: xfs-linux-melb:xfs-kern:30502a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_vfsops.c')
-rw-r--r--fs/xfs/xfs_vfsops.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c
index 79bdfb3d6081..3ec27bf8531c 100644
--- a/fs/xfs/xfs_vfsops.c
+++ b/fs/xfs/xfs_vfsops.c
@@ -112,9 +112,6 @@ xfs_init(void)
112 xfs_ili_zone = 112 xfs_ili_zone =
113 kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", 113 kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili",
114 KM_ZONE_SPREAD, NULL); 114 KM_ZONE_SPREAD, NULL);
115 xfs_icluster_zone =
116 kmem_zone_init_flags(sizeof(xfs_icluster_t), "xfs_icluster",
117 KM_ZONE_SPREAD, NULL);
118 115
119 /* 116 /*
120 * Allocate global trace buffers. 117 * Allocate global trace buffers.
@@ -152,7 +149,6 @@ xfs_cleanup(void)
152 extern kmem_zone_t *xfs_inode_zone; 149 extern kmem_zone_t *xfs_inode_zone;
153 extern kmem_zone_t *xfs_efd_zone; 150 extern kmem_zone_t *xfs_efd_zone;
154 extern kmem_zone_t *xfs_efi_zone; 151 extern kmem_zone_t *xfs_efi_zone;
155 extern kmem_zone_t *xfs_icluster_zone;
156 152
157 xfs_cleanup_procfs(); 153 xfs_cleanup_procfs();
158 xfs_sysctl_unregister(); 154 xfs_sysctl_unregister();
@@ -187,7 +183,6 @@ xfs_cleanup(void)
187 kmem_zone_destroy(xfs_efi_zone); 183 kmem_zone_destroy(xfs_efi_zone);
188 kmem_zone_destroy(xfs_ifork_zone); 184 kmem_zone_destroy(xfs_ifork_zone);
189 kmem_zone_destroy(xfs_ili_zone); 185 kmem_zone_destroy(xfs_ili_zone);
190 kmem_zone_destroy(xfs_icluster_zone);
191} 186}
192 187
193/* 188/*