Hi all, This is an RFC for the kernel work to support a free inode btree. The free inode btree (finobt) is equivalent to the existing inode allocation btree with the exception that the finobt only tracks inode chunks with at least one free inode. The purpose is to improve lookups for free inode clusters for inode allocation. Newly allocated inode chunks by definition contain free inodes and are thus inserted into the finobt immediately. The record for a previously full inode chunk is inserted to the finobt when the first inode is freed. A record is removed from the finobt when the last free inode has been allocated or the entire chunk is completely deallocated. Patches 1-3 refactor some ialloc btree code to introduce the new finobt type and feature bit. Patches 4-7 fix up the transaction handling for inode allocation and deallocation to account for the new tree. Patches 8-10 add the finobt management code to insert, remove and modify records as appropriate. Patch 11 fixes growfs to support the finobt. Thoughts, reviews, flames appreciated. NOTES: - This is RFC because it is lightly tested and I don't have much userspace code at the moment (though most of this code should apply). - I'm not totally sure about the scope of change in patch 6 (use correct transaction reservations in xfs_inactive()). I started off minimally altering the reserved blocks value, but the existing transaction management seemed strange enough that I ended up with the current patch. I figured I'd start here and pare it back as necessary if the changes are bogus or lead to other problems. - I've yet to do any performance testing to measure the benefit of patch 9. Brian Brian Foster (11): xfs: refactor xfs_ialloc_btree.c to support multiple inobt numbers xfs: reserve v5 superblock read-only compat. feature bit for finobt xfs: support the XFS_BTNUM_FINOBT free inode btree type xfs: update inode allocation transaction reservations for finobt xfs: update ifree transaction reservations for finobt xfs: use correct transaction reservations in xfs_inactive() xfs: retry trans reservation on ENOSPC in xfs_inactive() xfs: insert newly allocated inode chunks into the finobt xfs: use and update the finobt on inode allocation xfs: update the finobt on inode free xfs: add finobt support to growfs fs/xfs/xfs_ag.h | 7 +- fs/xfs/xfs_btree.c | 6 +- fs/xfs/xfs_btree.h | 3 + fs/xfs/xfs_fsops.c | 32 +++++ fs/xfs/xfs_ialloc.c | 343 ++++++++++++++++++++++++++++++++++++++++++---- fs/xfs/xfs_ialloc_btree.c | 37 +++-- fs/xfs/xfs_ialloc_btree.h | 17 ++- fs/xfs/xfs_inode.c | 82 ++++++----- fs/xfs/xfs_itable.c | 6 +- fs/xfs/xfs_log_recover.c | 2 + fs/xfs/xfs_sb.h | 10 +- fs/xfs/xfs_stats.h | 18 ++- fs/xfs/xfs_trans_resv.c | 14 +- fs/xfs/xfs_trans_space.h | 4 +- fs/xfs/xfs_types.h | 2 +- 15 files changed, 500 insertions(+), 83 deletions(-) -- 1.8.1.4 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs