Ross Zwisler
f9fe48bece
dax: support dirty DAX entries in radix tree
...
Add support for tracking dirty DAX entries in the struct address_space
radix tree. This tree is already used for dirty page writeback, and it
already supports the use of exceptional (non struct page*) entries.
In order to properly track dirty DAX pages we will insert new
exceptional entries into the radix tree that represent dirty DAX PTE or
PMD pages. These exceptional entries will also contain the writeback
addresses for the PTE or PMD faults that we can use at fsync/msync time.
There are currently two types of exceptional entries (shmem and shadow)
that can be placed into the radix tree, and this adds a third. We rely
on the fact that only one type of exceptional entry can be found in a
given radix tree based on its usage. This happens for free with DAX vs
shmem but we explicitly prevent shadow entries from being added to radix
trees for DAX mappings.
The only shadow entries that would be generated for DAX radix trees
would be to track zero page mappings that were created for holes. These
pages would receive minimal benefit from having shadow entries, and the
choice to have only one type of exceptional entry in a given radix tree
makes the logic simpler both in clear_exceptional_entry() and in the
rest of DAX.
Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jan Kara <jack@suse.com>
Cc: Jeff Layton <jlayton@poochiereds.net>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <matthew.r.wilcox@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-01-22 17:02:18 -08:00
..
9p
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
adfs
fs/adfs/adfs.h: tidy up comments
2016-01-20 17:09:18 -08:00
affs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
afs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
autofs4
switch ->get_link() to delayed_call, kill ->put_link()
2015-12-30 13:01:03 -05:00
befs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
bfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
btrfs
Merge branch 'for-linus-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2016-01-22 11:49:21 -08:00
cachefiles
convert a bunch of open-coded instances of memdup_user_nul()
2016-01-04 10:26:58 -05:00
ceph
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
cifs
page-flags: define PG_locked behavior on compound pages
2016-01-15 17:56:32 -08:00
coda
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
configfs
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2016-01-20 17:20:53 -08:00
cramfs
don't put symlink bodies in pagecache into highmem
2015-12-08 22:41:36 -05:00
debugfs
devpts
dlm
[regression] fix braino in fs/dlm/user.c
2016-01-21 17:45:15 -05:00
ecryptfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
efivarfs
efs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
exofs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
exportfs
ext2
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
ext4
Some locking and page fault bug fixes from Jan Kara, some ext4
2016-01-22 11:23:35 -08:00
f2fs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
fat
fat: constify fatent_operations structures
2016-01-20 17:09:18 -08:00
freevxfs
don't put symlink bodies in pagecache into highmem
2015-12-08 22:41:36 -05:00
fscache
fuse
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
2016-01-21 12:14:24 -08:00
gfs2
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
2016-01-17 19:13:15 -08:00
hfs
fs/hfs/catalog.c: use list_for_each_entry in hfs_cat_delete
2016-01-20 17:09:18 -08:00
hfsplus
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
hostfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
hpfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
hugetlbfs
mm/hugetlbfs: unmap pages if page fault raced with hole punch
2016-01-15 17:56:32 -08:00
isofs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
jbd2
fs: use block_device name vsprintf helper
2016-01-06 13:03:18 -05:00
jffs2
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
jfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
kernfs
Revert "kernfs: do not account ino_ida allocations to memcg"
2016-01-14 16:00:49 -08:00
lockd
lockd: constify nlmsvc_binding structure
2016-01-07 10:10:50 -05:00
logfs
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
2016-01-20 09:45:43 -08:00
minix
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
ncpfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
nfs
Merge branch 'akpm' (patches from Andrew)
2016-01-15 11:41:44 -08:00
nfs_common
nfsd
Smaller bugfixes and cleanup, including a fix for a failures of
2016-01-15 12:49:44 -08:00
nilfs2
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
nls
notify
fsnotify: destroy marks with call_srcu instead of dedicated thread
2016-01-14 16:00:49 -08:00
ntfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
ocfs2
ocfs2: NFS hangs in __ocfs2_cluster_lock due to race with ocfs2_unblock_lock
2016-01-21 17:20:51 -08:00
omfs
openpromfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
overlayfs
Merge branch 'akpm' (patches from Andrew)
2016-01-21 12:32:08 -08:00
proc
thp: change pmd_trans_huge_lock() interface to return ptl
2016-01-21 17:20:51 -08:00
pstore
qnx4
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
qnx6
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
quota
quota: constify qtree_fmt_operations structures
2016-01-04 10:58:35 +01:00
ramfs
don't put symlink bodies in pagecache into highmem
2015-12-08 22:41:36 -05:00
reiserfs
reiserfs: fix dereference of ERR_PTR
2016-01-21 17:20:51 -08:00
romfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
squashfs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
sysfs
sysv
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
tracefs
ubifs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
udf
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
2016-01-15 11:51:51 -08:00
ufs
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
xfs
xfs: Update 2 for 4.5-rc1
2016-01-22 10:54:13 -08:00
aio.c
anon_inodes.c
attr.c
bad_inode.c
fs/bad_inode.c: is_bad_inode can be boolean
2015-12-06 21:17:14 -05:00
binfmt_aout.c
binfmt_elf.c
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
block_dev.c
dax: support dirty DAX entries in radix tree
2016-01-22 17:02:18 -08:00
buffer.c
fs: use block_device name vsprintf helper
2016-01-06 13:03:18 -05:00
char_dev.c
compat.c
saner calling conventions for copy_mount_options()
2016-01-04 10:28:32 -05:00
compat_binfmt_elf.c
compat_ioctl.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 17:11:47 -08:00
coredump.c
fs/coredump: prevent "" / "." / ".." core path components
2016-01-20 17:09:18 -08:00
dax.c
dax: fix conversion of holes to PMDs
2016-01-22 17:02:18 -08:00
dcache.c
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
dcookies.c
direct-io.c
fix the regression from "direct-io: Fix negative return from dio read beyond eof"
2015-12-08 15:02:42 -05:00
drop_caches.c
eventfd.c
Documentation: filesystem: Fix typo in fs/eventfd.c
2015-12-08 14:52:03 +01:00
eventpoll.c
epoll: add EPOLLEXCLUSIVE flag
2016-01-20 17:09:18 -08:00
exec.c
don't carry MAY_OPEN in op->acc_mode
2016-01-04 10:28:40 -05:00
fcntl.c
fcntl: allow to set O_DIRECT flag on pipe
2016-01-09 02:55:37 -05:00
fhandle.c
file.c
kmemcg: account certain kmem allocations to memcg
2016-01-14 16:00:49 -08:00
file_table.c
filesystems.c
find_filesystem(): simplify comparison
2016-01-19 12:02:23 -05:00
fs-writeback.c
cgroup, memcg, writeback: drop spurious rcu locking around mem_cgroup_css_from_page()
2016-01-15 17:56:32 -08:00
fs_pin.c
fs_struct.c
inode.c
dax: support dirty DAX entries in radix tree
2016-01-22 17:02:18 -08:00
internal.h
Merge branch 'for-linus' into work.misc
2016-01-08 21:20:11 -05:00
ioctl.c
Merge branch 'work.copy_file_range' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 16:30:34 -08:00
Kconfig
dax: re-enable dax pmd mappings
2016-01-15 17:56:32 -08:00
Kconfig.binfmt
libfs.c
switch ->get_link() to delayed_call, kill ->put_link()
2015-12-30 13:01:03 -05:00
locks.c
Merge branch 'work.copy_file_range' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 16:30:34 -08:00
Makefile
mbcache.c
mount.h
mpage.c
namei.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 17:11:47 -08:00
namespace.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 17:11:47 -08:00
no-block.c
nsfs.c
open.c
don't carry MAY_OPEN in op->acc_mode
2016-01-04 10:28:40 -05:00
pipe.c
pipe: limit the per-user amount of pages allocated in pipes
2016-01-19 19:25:21 -05:00
pnode.c
pnode.h
posix_acl.c
xattr handlers: Simplify list operation
2015-12-13 19:46:12 -05:00
proc_namespace.c
vfs: show_vfsstat: remove redundant initialization and check of error code
2015-12-06 21:17:16 -05:00
read_write.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 17:11:47 -08:00
readdir.c
select.c
poll: plug an unused argument to do_poll
2016-01-06 08:26:52 -05:00
seq_file.c
signalfd.c
splice.c
fs: __generic_file_splice_read retry lookup on AOP_TRUNCATED_PAGE
2016-01-09 02:55:35 -05:00
stack.c
stat.c
fs/stat.c: drop the last new_valid_dev check
2016-01-16 11:17:23 -08:00
statfs.c
super.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2016-01-14 17:04:19 -08:00
sync.c
timerfd.c
userfaultfd.c
utimes.c
xattr.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2016-01-12 17:11:47 -08:00