Revision 4ceb5db9757aaeadcf8fbbf97d76bd42aa4df0d6 authored by Linus Torvalds on 01 August 2005, 18:14:49 UTC, committed by Linus Torvalds on 01 August 2005, 18:14:49 UTC
There's no real guarantee that handle_mm_fault() will always be able to break a COW situation - if an update from another thread ends up modifying the page table some way, handle_mm_fault() may end up requiring us to re-try the operation. That's normally fine, but get_user_pages() ended up re-trying it as a read, and thus a write access could in theory end up losing the dirty bit or be done on a page that had not been properly COW'ed. This makes get_user_pages() always retry write accesses as write accesses by making "follow_page()" require that a writable follow has the dirty bit set. That simplifies the code and solves the race: if the COW break fails for some reason, we'll just loop around and try again. Signed-off-by: Linus Torvalds <torvalds@osdl.org>
1 parent 8d894c4
File | Mode | Size |
---|---|---|
8253pit.h | -rw-r--r-- | 129 bytes |
a.out.h | -rw-r--r-- | 813 bytes |
acpi.h | -rw-r--r-- | 4.5 KB |
agp.h | -rw-r--r-- | 1.0 KB |
apic.h | -rw-r--r-- | 2.9 KB |
apicdef.h | -rw-r--r-- | 9.8 KB |
atomic.h | -rw-r--r-- | 8.2 KB |
bitops.h | -rw-r--r-- | 10.5 KB |
boot.h | -rw-r--r-- | 409 bytes |
bootsetup.h | -rw-r--r-- | 1.7 KB |
bug.h | -rw-r--r-- | 957 bytes |
bugs.h | -rw-r--r-- | 575 bytes |
byteorder.h | -rw-r--r-- | 726 bytes |
cache.h | -rw-r--r-- | 322 bytes |
cacheflush.h | -rw-r--r-- | 1.2 KB |
calling.h | -rw-r--r-- | 2.9 KB |
checksum.h | -rw-r--r-- | 5.3 KB |
compat.h | -rw-r--r-- | 4.4 KB |
cpu.h | -rw-r--r-- | 26 bytes |
cpufeature.h | -rw-r--r-- | 5.5 KB |
cputime.h | -rw-r--r-- | 121 bytes |
current.h | -rw-r--r-- | 429 bytes |
debugreg.h | -rw-r--r-- | 2.7 KB |
delay.h | -rw-r--r-- | 709 bytes |
desc.h | -rw-r--r-- | 5.2 KB |
div64.h | -rw-r--r-- | 31 bytes |
dma-mapping.h | -rw-r--r-- | 3.2 KB |
dma.h | -rw-r--r-- | 9.6 KB |
dwarf2.h | -rw-r--r-- | 1.0 KB |
e820.h | -rw-r--r-- | 1.7 KB |
elf.h | -rw-r--r-- | 5.5 KB |
emergency-restart.h | -rw-r--r-- | 151 bytes |
errno.h | -rw-r--r-- | 86 bytes |
fcntl.h | -rw-r--r-- | 2.2 KB |
fixmap.h | -rw-r--r-- | 2.8 KB |
floppy.h | -rw-r--r-- | 6.5 KB |
fpu32.h | -rw-r--r-- | 279 bytes |
genapic.h | -rw-r--r-- | 846 bytes |
hardirq.h | -rw-r--r-- | 1.1 KB |
hdreg.h | -rw-r--r-- | 53 bytes |
hpet.h | -rw-r--r-- | 1.6 KB |
hw_irq.h | -rw-r--r-- | 3.5 KB |
i387.h | -rw-r--r-- | 3.7 KB |
ia32.h | -rw-r--r-- | 3.7 KB |
ia32_unistd.h | -rw-r--r-- | 10.0 KB |
ide.h | -rw-r--r-- | 26 bytes |
io.h | -rw-r--r-- | 9.3 KB |
io_apic.h | -rw-r--r-- | 5.5 KB |
ioctl.h | -rw-r--r-- | 2.6 KB |
ioctls.h | -rw-r--r-- | 2.5 KB |
ipcbuf.h | -rw-r--r-- | 636 bytes |
ipi.h | -rw-r--r-- | 2.5 KB |
irq.h | -rw-r--r-- | 1.4 KB |
kdebug.h | -rw-r--r-- | 1.2 KB |
kexec.h | -rw-r--r-- | 980 bytes |
kmap_types.h | -rw-r--r-- | 255 bytes |
kprobes.h | -rw-r--r-- | 2.2 KB |
ldt.h | -rw-r--r-- | 909 bytes |
linkage.h | -rw-r--r-- | 86 bytes |
local.h | -rw-r--r-- | 1.9 KB |
mach_apic.h | -rw-r--r-- | 954 bytes |
mc146818rtc.h | -rw-r--r-- | 639 bytes |
mce.h | -rw-r--r-- | 2.2 KB |
mman.h | -rw-r--r-- | 1.8 KB |
mmsegment.h | -rw-r--r-- | 114 bytes |
mmu.h | -rw-r--r-- | 357 bytes |
mmu_context.h | -rw-r--r-- | 1.8 KB |
mmx.h | -rw-r--r-- | 270 bytes |
mmzone.h | -rw-r--r-- | 1.8 KB |
module.h | -rw-r--r-- | 179 bytes |
mpspec.h | -rw-r--r-- | 6.6 KB |
msgbuf.h | -rw-r--r-- | 838 bytes |
msi.h | -rw-r--r-- | 389 bytes |
msr.h | -rw-r--r-- | 10.9 KB |
mtrr.h | -rw-r--r-- | 3.8 KB |
namei.h | -rw-r--r-- | 226 bytes |
nmi.h | -rw-r--r-- | 1.1 KB |
node.h | -rw-r--r-- | 27 bytes |
numa.h | -rw-r--r-- | 391 bytes |
numnodes.h | -rw-r--r-- | 174 bytes |
page.h | -rw-r--r-- | 4.3 KB |
param.h | -rw-r--r-- | 487 bytes |
parport.h | -rw-r--r-- | 481 bytes |
pci-direct.h | -rw-r--r-- | 1.2 KB |
pci.h | -rw-r--r-- | 4.1 KB |
pda.h | -rw-r--r-- | 2.8 KB |
percpu.h | -rw-r--r-- | 1.6 KB |
pgalloc.h | -rw-r--r-- | 2.7 KB |
pgtable.h | -rw-r--r-- | 15.0 KB |
poll.h | -rw-r--r-- | 514 bytes |
posix_types.h | -rw-r--r-- | 3.2 KB |
prctl.h | -rw-r--r-- | 166 bytes |
processor.h | -rw-r--r-- | 12.5 KB |
proto.h | -rw-r--r-- | 3.4 KB |
ptrace.h | -rw-r--r-- | 3.0 KB |
resource.h | -rw-r--r-- | 95 bytes |
rtc.h | -rw-r--r-- | 142 bytes |
rwlock.h | -rw-r--r-- | 2.4 KB |
rwsem.h | -rw-r--r-- | 7.4 KB |
scatterlist.h | -rw-r--r-- | 592 bytes |
seccomp.h | -rw-r--r-- | 587 bytes |
sections.h | -rw-r--r-- | 128 bytes |
segment.h | -rw-r--r-- | 1.2 KB |
semaphore.h | -rw-r--r-- | 5.3 KB |
sembuf.h | -rw-r--r-- | 705 bytes |
serial.h | -rw-r--r-- | 1.0 KB |
setup.h | -rw-r--r-- | 85 bytes |
shmbuf.h | -rw-r--r-- | 1023 bytes |
shmparam.h | -rw-r--r-- | 158 bytes |
sigcontext.h | -rw-r--r-- | 1.2 KB |
sigcontext32.h | -rw-r--r-- | 1.5 KB |
siginfo.h | -rw-r--r-- | 143 bytes |
signal.h | -rw-r--r-- | 4.0 KB |
smp.h | -rw-r--r-- | 3.0 KB |
socket.h | -rw-r--r-- | 1.1 KB |
sockios.h | -rw-r--r-- | 279 bytes |
sparsemem.h | -rw-r--r-- | 678 bytes |
spinlock.h | -rw-r--r-- | 4.7 KB |
stat.h | -rw-r--r-- | 904 bytes |
statfs.h | -rw-r--r-- | 900 bytes |
string.h | -rw-r--r-- | 1.6 KB |
suspend.h | -rw-r--r-- | 1.7 KB |
swiotlb.h | -rw-r--r-- | 1.3 KB |
system.h | -rw-r--r-- | 9.7 KB |
termbits.h | -rw-r--r-- | 3.7 KB |
termios.h | -rw-r--r-- | 3.1 KB |
thread_info.h | -rw-r--r-- | 4.4 KB |
timex.h | -rw-r--r-- | 631 bytes |
tlb.h | -rw-r--r-- | 282 bytes |
tlbflush.h | -rw-r--r-- | 3.3 KB |
topology.h | -rw-r--r-- | 1.6 KB |
types.h | -rw-r--r-- | 1.0 KB |
uaccess.h | -rw-r--r-- | 11.4 KB |
ucontext.h | -rw-r--r-- | 255 bytes |
unaligned.h | -rw-r--r-- | 1.2 KB |
unistd.h | -rw-r--r-- | 28.1 KB |
user.h | -rw-r--r-- | 4.9 KB |
user32.h | -rw-r--r-- | 2.1 KB |
vga.h | -rw-r--r-- | 377 bytes |
vsyscall.h | -rw-r--r-- | 1.9 KB |
vsyscall32.h | -rw-r--r-- | 670 bytes |
xor.h | -rw-r--r-- | 7.8 KB |
Computing file changes ...