These days I have tried to implement shrinkfs feature according to Dave's
previous design which can
be found at:
Here is a very initial patch set, it only support shrinking up to the latest
empty AG since
I have not add the data moving and extents swap functions to the user tools.
I know the current patches definitely looks stupid and there have many places
need to fix.
I'd like to post it eaiser to seek any directions so that I can continue to
improve it, especially
on inode swap semantics, AG metadata removing as well as the command interface.
The following two links are referred to a couple of untested patches of inode
swapping for xfs_reno(8).
The user patch does extents swapping after swapping inodes, I was confused
because xfs_reno only do
modify the inodes from 64bits to 32bits, inodes swap should be sufficient to
perform it since it
don't need to move the data extents(i.e. perform extents/blocks allocation for
target files like
- AG metadata clean up
For now, I only wipe the pre-allocated sectors/blocks out of an empty AG, I
guess I missed something
for btree info updates.
- xfs_shrinkfs CLI
I observed Dave has posted a patch to fetch the FS freespace via FIEMAP, but
for now, I have to get the FS freespace
via shell script(wrapper of xfs_db).
And also, I didn't add the data moving functions because there still has issues
on inode swap routine, it would
failed to swap directories :(, so it can only be used to reflect my current
Last but not the least, I have not add the placeholder for log area shrink as
well as compat_ioctl32 functions since
this version can only be considered at input comments stage.
Any suggestions are appreciated!