Hi all, Now that we've landed support for reflink on the realtime device for cases where the rt extent size is the same as the fs block size, enhance the reflink code further to support cases where the rt extent size is a power-of-two multiple of the fs block size. This enables us to do data block sharing (for example) for much larger allocation units by dirtying pagecache around shared extents and expanding writeback to write back shared extents fully. If you're going to start using this mess, you probably ought to just pull from my git trees, which are linked below. This is an extraordinary way to destroy everything. Enjoy! Comments and questions are, as always, welcome. --D kernel git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=realtime-reflink-extsize --- fs/remap_range.c | 37 +++++++--- fs/xfs/xfs_aops.c | 43 +++++++++--- fs/xfs/xfs_file.c | 174 +++++++++++++++++++++++++++++++++++++++++++----- fs/xfs/xfs_inode.h | 2 + fs/xfs/xfs_iops.c | 15 ++++ fs/xfs/xfs_reflink.c | 181 +++++++++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_reflink.h | 9 ++ fs/xfs/xfs_super.c | 11 ++- include/linux/fs.h | 5 + 9 files changed, 429 insertions(+), 48 deletions(-)