XFS dynamically allocates space for inodes as they are created,
this is different from many other filesystems where inode space
is statically allocated at mkfs time. While inode space is
dynamically allocated, it is never freed - up until now that is.
This non-freeing of space tends to lead to fragmentation on
filesystems where lots of files come and go. It can also lead
to inodes and their parent directories being scattered around
the disk more.
With this change, the default behavior is changed to free a
cluster of inodes once the last entry in the cluster is freed.
The old behavior is still available with the -o ikeep mount
option.
Date: Mon Oct 6 11:11:55 PDT 2003
Workarea: jen.americas.sgi.com:/src/lord/xfs-idelete
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: xfs-linux:slinx:159536a
linux/fs/xfs/xfsidbg.c - 1.239
- add tracing flags for stale inode clusters.
linux/fs/xfs/xfs_ialloc.h - 1.44
- changed prototype for xfs_difree
linux/fs/xfs/xfs_ialloc.c - 1.175
- When freeing an inode, check to see if this is the last in use inode
in the cluster. If it is, then remove the inode cluster from the
inode btree and fix up the super block and agi inode counters.
linux/fs/xfs/xfs_buf_item.h - 1.40
- Add XFS_BLI_STALE_INODE definition
linux/fs/xfs/xfs_buf_item.c - 1.143
- when unpinning a stale buffer after a log write, add code to
deal with it being an inode cluster, we execute the callbacks
on the buffer directly, rather than just removing it from
the AIL.
linux/fs/xfs/xfs_vnodeops.c - 1.613
- extend the inactive path logic to deal with freeing the space
which could be removed with an inode cluster.
linux/fs/xfs/xfs_ialloc_btree.h - 1.25
- turn on prototype for xfs_inobt_delete
linux/fs/xfs/xfs_ialloc_btree.c - 1.76
- Turn on the inode btree free path and fix up several bugs in
the implementation.
linux/fs/xfs/xfs_inode_item.c - 1.116
- add logic for dealing with stale inode log items
linux/fs/xfs/xfs_inode_item.h - 1.45
- prototype for xfs_istale_done
linux/fs/xfs/xfs_log_recover.c - 1.279
- During log recovery, take into acount the fact that an inode write
in the log may be cancelled by a subsequent stale of the inode buffer.
We need to prevent the inode log record from being replayed to disk
in this case.
linux/fs/xfs/xfs_vfsops.c - 1.434
- mount option parsing for freeing inode clusters
linux/fs/xfs/xfs_iget.c - 1.193
- clear inode stale flag when reusing an inode
linux/fs/xfs/xfs_clnt.h - 1.41
- add mount option to control freeing of inode clusters
linux/fs/xfs/xfs_mount.h - 1.183
- define for mount option control of inode cluster freeing
linux/fs/xfs/xfs_inode.c - 1.389
- Add xfs_ifree_cluster to free up an inode cluster. This has to
synchronize with sync activity and make sure we have cleaned out
the sync path on all the inodes in the cluster before we free
the space.
linux/fs/xfs/xfs_inode.h - 1.186
- Add XFS_ISTALE and change some prototypes for inode cluster freeing
linux/fs/xfs/xfs_trans.c - 1.153
- remove assert that the inode count always increments
linux/fs/xfs/xfs_trans.h - 1.123
- Change log reservation for deallocating an inode
linux/fs/xfs/xfs_trans_buf.c - 1.115
- Add special handler for staling an inode buffer
Modid: 2.4.x-xfs:slinx:159536b
linux/Documentation/filesystems/xfs.txt - 1.15
- Describe new ikeep mount option.
|