This series enables and limits user extended attributes on tmpfs, and independently provides a trivial direct IO stub for tmpfs. It is here based on the vfs.tmpfs branch in vfs.git in next-20230808 but with a cherry-pick of v6.5-rc4's commit 253e5df8b8f0 ("tmpfs: fix Documentation of noswap and huge mount options") first: since the vfs.tmpfs branch is based on v6.5-rc1, but 3/5 in this series updates tmpfs.rst in a way which depends on that commit. IIUC the right thing to do would be to cherry-pick 253e5df8b8f0 into vfs.tmpfs before applying this series. I'm sorry that the series as posted does not apply cleanly to any known tree! but I think posting it against v6.5-rc5 or next-20230808 would be even less helpful. There is one "conflict" between this series and the final next-20230808: Jeff Layton's vfs.ctime mods update a line of shmem_xattr_handler_set(), where neighbouring lines are modified by 1/5 and 3/5 here: easily resolved in the merge commit, I hope. 1/5 xattr: simple_xattr_set() return old_xattr to be freed 2/5 tmpfs: track free_ispace instead of free_inodes 3/5 tmpfs,xattr: enable limited user extended attributes 4/5 tmpfs: trivial support for direct IO 5/5 mm: invalidation check mapping before folio_contains Documentation/filesystems/tmpfs.rst | 7 +- fs/Kconfig | 4 +- fs/kernfs/dir.c | 2 +- fs/kernfs/inode.c | 46 +++++++---- fs/xattr.c | 79 +++++++++++------- include/linux/shmem_fs.h | 2 +- include/linux/xattr.h | 10 ++- mm/shmem.c | 130 +++++++++++++++++++++++------- mm/truncate.c | 4 +- 9 files changed, 197 insertions(+), 87 deletions(-) Hugh