[PATCHBOMB 6.14 v6.1] xfs: realtime rmap and reflink

Darrick J. Wong
2024-12-19T19:14:19Z

Hi everyone,

Christoph and I have been working on getting the long-delayed port of
reverse mapping and reflink to the realtime device into mergeable shape.
With these changes, the realtime volume finally reaches feature parity
with the data device. This is the base for building more functionality
into xfs, such as the zoned storage support that Christoph posted last
week.

Since v6.0 I've added Christoph's review tags, and folded in the
documentation updates requested during review.

The first patchset are bug fixes. The final patchset are a few xfsprogs
patches that complete the metadir/rtgroups changes. Both of these are
technically 6.13 material.

The second and third patchsets are all cleanups and refactoring so that
we can fully support having btrees rooted in an inode's data fork. This
is necessary because the generic btree code only supports using the
immediate area as an internal tree node -- conversion from extents to
bmbt format only happens when there are too many leaf records to fit in
the immediate area. Therefore, we need to remodel it to support storing
records in the immediate area. We also need to be able to reserve space
for future btree expansion, so the second patchset enables tracking
per-inode reservations from the free space.

The fourth patchset ports reverse mapping btree to the realtime device,
which mainly consists of constructing a btree in an inode, linking the
inode into the metadata directory tree, and updating the log items to
handle rt rmap update log intent items.

The fifth patchset ports the refcount btree, block sharing, and copy on
write to the realtime device.

I dropped the fifth patchset from v6.0 because rtextsize>1 is a fringe
feature and doesn't need to be added right now.

Please have a look at the git tree links for code changes:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git/log/?h=realtime-reflink_2024-12-19
https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=realtime-reflink_2024-12-19
https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfstests-dev.git/log/?h=realtime-reflink_2024-12-19

(fstests is still behind because I haven't rebased atop the parallel
fstests work)

These are the patches that haven't passed review yet.

[PATCHSET 1/5] xfs: bug fixes for 6.13
[PATCH 2/2] xfs: release the dquot buf outside of qli_lock
[PATCHSET v6.1 3/5] xfs: enable in-core block reservation for rt
[PATCH 1/2] xfs: prepare to reuse the dquot pointer space in struct
[PATCH 2/2] xfs: allow inode-based btrees to reserve space in the
[PATCHSET v6.1 4/5] xfs: realtime reverse-mapping support
[PATCH 27/37] xfs: online repair of realtime file bmaps
[PATCH 32/37] xfs: online repair of the realtime rmap btree
[PATCH 35/37] xfs: don't shut down the filesystem for media failures
[PATCH 36/37] xfs: react to fsdax failure notifications on the rt
[PATCH 37/37] xfs: enable realtime rmap btree
[PATCHSET v6.1 5/5] xfs: reflink on the realtime device
[PATCH 28/43] xfs: scrub the realtime refcount btree
[PATCH 42/43] xfs: fix CoW forks for realtime files
[PATCH 43/43] xfs: enable realtime reflink
[PATCHSET v6.1] xfsprogs: last few bits of rtgroups patches
[PATCH 1/3] xfs_db: drop the metadata checking code from blockget
[PATCH 2/3] xfs_mdrestore: refactor open-coded fd/is_file into a
[PATCH 3/3] xfs_mdrestore: restore rt group superblocks to realtime

--D