This is an updated version of the XFS DAX support patchset. It was
first posted here:
This version of the patchset sits on top of the current for-next
branch of the XFS dev tree.
The series has grown slightly as a result of the first round of
reviews. The initial patch is a new patch that reworks the new XFS
mmap lock to nest correctly inside freeze notifications, as noticed
and requested by Jan Kara.
The second patch has been updated to move unwritten extent
conversion back into do_dax_fault so the completion function does
not need ot be passed around any further.
The third patch is also a new patch, derived from Willy's patch to
allow ext4 to correctly nest locking and freeze operations during
page faults. I gutted that patch down to the bare infrastructure
that was necessary for XFS, and havent included any of the ext4
changes because the unwritten extent conversion problems are dealt
with by the previous patch.
The rest of the patch set is updating the XFS support to use the new
infrastructure and changed mmap locking order via __dax_fault. Most
of the changes fall in the file operations patch (patch 5).
The main changes to patch 5 are that it no longer has separate
operations structures. I validated that splice has paths that don't
require page cache manipulations and switched XFS to use them (as
pointed out by Boaz) and that solved one of the duplicate operations
structures. All of the .fault and .page_mkwrite code were also made
common and that got rid of all the other ifdef CONFIG_DAX hackery
left in the code.
Overall, it's a much cleaner set of changes than in V1. it passes
xfstests without any significant regressions (the only problems are
to do with extent layouts differing from expected patterns) so I'm
happy that it won't immediately go feral and start eating babies for
Comments, thoughts and flames are welcome, especially for the DAX
fs/dax.c | 30 ++++++++---
fs/ext2/file.c | 4 +-
fs/ext4/file.c | 16 +++++-
fs/ext4/inode.c | 21 +++-----
fs/xfs/xfs_aops.c | 108 +++++++++++++++++++++++++++++++++-----
fs/xfs/xfs_aops.h | 7 ++-
fs/xfs/xfs_bmap_util.c | 23 +++++++--
fs/xfs/xfs_file.c | 143
fs/xfs/xfs_iops.c | 30 ++++++-----
fs/xfs/xfs_mount.h | 2 +
fs/xfs/xfs_super.c | 25 ++++++++-
include/linux/fs.h | 9 +++-
12 files changed, 303 insertions(+), 115 deletions(-)