Revision e3fce68cdbed297d927e993b3ea7b8b1cee545da authored by Jan Kara on 10 August 2016, 15:10:28 UTC, committed by Dan Williams on 27 December 2016, 04:29:24 UTC
Currently dax_iomap_rw() takes care of invalidating page tables and
evicting hole pages from the radix tree when write(2) to the file
happens. This invalidation is only necessary when there is some block
allocation resulting from write(2). Furthermore in current place the
invalidation is racy wrt page fault instantiating a hole page just after
we have invalidated it.

So perform the page invalidation inside dax_iomap_actor() where we can
do it only when really necessary and after blocks have been allocated so
nobody will be instantiating new hole pages anymore.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
1 parent c6dcf52
History
File Mode Size
bpf
configs
debug
events
gcov
irq
livepatch
locking
power
printk
rcu
sched
time
trace
.gitignore -rw-r--r-- 69 bytes
Kconfig.freezer -rw-r--r-- 52 bytes
Kconfig.hz -rw-r--r-- 1.6 KB
Kconfig.locks -rw-r--r-- 4.8 KB
Kconfig.preempt -rw-r--r-- 2.1 KB
Makefile -rw-r--r-- 4.0 KB
acct.c -rw-r--r-- 15.4 KB
async.c -rw-r--r-- 9.9 KB
audit.c -rw-r--r-- 57.6 KB
audit.h -rw-r--r-- 11.1 KB
audit_fsnotify.c -rw-r--r-- 6.1 KB
audit_tree.c -rw-r--r-- 22.6 KB
audit_watch.c -rw-r--r-- 14.4 KB
auditfilter.c -rw-r--r-- 34.0 KB
auditsc.c -rw-r--r-- 64.7 KB
backtracetest.c -rw-r--r-- 2.1 KB
bounds.c -rw-r--r-- 703 bytes
capability.c -rw-r--r-- 13.9 KB
cgroup.c -rw-r--r-- 176.7 KB
cgroup_freezer.c -rw-r--r-- 12.4 KB
cgroup_pids.c -rw-r--r-- 8.9 KB
compat.c -rw-r--r-- 29.7 KB
configs.c -rw-r--r-- 2.8 KB
context_tracking.c -rw-r--r-- 6.3 KB
cpu.c -rw-r--r-- 43.8 KB
cpu_pm.c -rw-r--r-- 6.5 KB
cpuset.c -rw-r--r-- 76.5 KB
crash_dump.c -rw-r--r-- 1.3 KB
cred.c -rw-r--r-- 21.5 KB
delayacct.c -rw-r--r-- 4.5 KB
dma.c -rw-r--r-- 3.6 KB
elfcore.c -rw-r--r-- 396 bytes
exec_domain.c -rw-r--r-- 1.4 KB
exit.c -rw-r--r-- 43.4 KB
extable.c -rw-r--r-- 4.0 KB
fork.c -rw-r--r-- 55.9 KB
freezer.c -rw-r--r-- 4.4 KB
futex.c -rw-r--r-- 89.4 KB
futex_compat.c -rw-r--r-- 4.5 KB
groups.c -rw-r--r-- 5.2 KB
hung_task.c -rw-r--r-- 5.9 KB
irq_work.c -rw-r--r-- 4.4 KB
jump_label.c -rw-r--r-- 15.2 KB
kallsyms.c -rw-r--r-- 15.7 KB
kcmp.c -rw-r--r-- 4.4 KB
kcov.c -rw-r--r-- 7.3 KB
kexec.c -rw-r--r-- 6.8 KB
kexec_core.c -rw-r--r-- 39.6 KB
kexec_file.c -rw-r--r-- 25.4 KB
kexec_internal.h -rw-r--r-- 861 bytes
kmod.c -rw-r--r-- 19.1 KB
kprobes.c -rw-r--r-- 60.7 KB
ksysfs.c -rw-r--r-- 6.2 KB
kthread.c -rw-r--r-- 32.0 KB
latencytop.c -rw-r--r-- 7.8 KB
membarrier.c -rw-r--r-- 2.4 KB
memremap.c -rw-r--r-- 11.9 KB
module-internal.h -rw-r--r-- 458 bytes
module.c -rw-r--r-- 109.8 KB
module_signing.c -rw-r--r-- 2.2 KB
notifier.c -rw-r--r-- 16.3 KB
nsproxy.c -rw-r--r-- 6.4 KB
padata.c -rw-r--r-- 25.3 KB
panic.c -rw-r--r-- 15.7 KB
params.c -rw-r--r-- 24.1 KB
pid.c -rw-r--r-- 15.0 KB
pid_namespace.c -rw-r--r-- 11.0 KB
profile.c -rw-r--r-- 14.7 KB
ptrace.c -rw-r--r-- 32.3 KB
range.c -rw-r--r-- 3.0 KB
reboot.c -rw-r--r-- 13.3 KB
relay.c -rw-r--r-- 32.1 KB
resource.c -rw-r--r-- 39.3 KB
seccomp.c -rw-r--r-- 23.6 KB
signal.c -rw-r--r-- 94.5 KB
smp.c -rw-r--r-- 21.0 KB
smpboot.c -rw-r--r-- 13.3 KB
smpboot.h -rw-r--r-- 601 bytes
softirq.c -rw-r--r-- 19.0 KB
stacktrace.c -rw-r--r-- 1.7 KB
stop_machine.c -rw-r--r-- 17.1 KB
sys.c -rw-r--r-- 57.3 KB
sys_ni.c -rw-r--r-- 7.2 KB
sysctl.c -rw-r--r-- 67.3 KB
sysctl_binary.c -rw-r--r-- 50.9 KB
task_work.c -rw-r--r-- 3.3 KB
taskstats.c -rw-r--r-- 15.0 KB
test_kprobes.c -rw-r--r-- 7.4 KB
torture.c -rw-r--r-- 21.0 KB
tracepoint.c -rw-r--r-- 14.6 KB
tsacct.c -rw-r--r-- 5.1 KB
ucount.c -rw-r--r-- 5.5 KB
uid16.c -rw-r--r-- 5.0 KB
up.c -rw-r--r-- 2.0 KB
user-return-notifier.c -rw-r--r-- 1.3 KB
user.c -rw-r--r-- 5.4 KB
user_namespace.c -rw-r--r-- 27.3 KB
utsname.c -rw-r--r-- 3.6 KB
utsname_sysctl.c -rw-r--r-- 3.0 KB
watchdog.c -rw-r--r-- 22.5 KB
watchdog_hld.c -rw-r--r-- 6.3 KB
workqueue.c -rw-r--r-- 154.5 KB
workqueue_internal.h -rw-r--r-- 2.2 KB

back to top