Revision 251b97f552b1ad414cc5a9ccc8e4e94503edd5fc authored by Peter Zijlstra on 04 July 2008, 16:59:24 UTC, committed by Linus Torvalds on 04 July 2008, 17:40:04 UTC
Dirty page accounting accurately measures the amound of dirty pages in writable shared mappings by mapping the pages RO (as indicated by vma_wants_writenotify). We then trap on first write and call set_page_dirty() on the page, after which we map the page RW and continue execution. When we launder dirty pages, we call clear_page_dirty_for_io() which clears both the dirty flag, and maps the page RO again before we start writeout so that the story can repeat itself. vma_wants_writenotify() excludes VM_PFNMAP on the basis that we cannot do the regular dirty page stuff on raw PFNs and the memory isn't going anywhere anyway. The recently introduced VM_MIXEDMAP mixes both !pfn_valid() and pfn_valid() pages in a single mapping. We can't do dirty page accounting on !pfn_valid() pages as stated above, and mapping them RO causes them to be COW'ed on write, which breaks VM_SHARED semantics. Excluding VM_MIXEDMAP in vma_wants_writenotify() would mean we don't do the regular dirty page accounting for the pfn_valid() pages, which would bring back all the head-aches from inaccurate dirty page accounting. So instead, we let the !pfn_valid() pages get mapped RO, but fix them up unconditionally in the fault path. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Acked-by: Hugh Dickins <hugh@veritas.com> Cc: "Jared Hulbert" <jaredeh@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent cde5353
File | Mode | Size |
---|---|---|
lzo | ||
reed_solomon | ||
zlib_deflate | ||
zlib_inflate | ||
.gitignore | -rw-r--r-- | 51 bytes |
Kconfig | -rw-r--r-- | 2.9 KB |
Kconfig.debug | -rw-r--r-- | 23.4 KB |
Kconfig.kgdb | -rw-r--r-- | 1.7 KB |
Makefile | -rw-r--r-- | 2.5 KB |
argv_split.c | -rw-r--r-- | 1.8 KB |
audit.c | -rw-r--r-- | 1.2 KB |
bitmap.c | -rw-r--r-- | 30.0 KB |
bitrev.c | -rw-r--r-- | 2.1 KB |
bug.c | -rw-r--r-- | 4.1 KB |
bust_spinlocks.c | -rw-r--r-- | 588 bytes |
check_signature.c | -rw-r--r-- | 599 bytes |
cmdline.c | -rw-r--r-- | 3.5 KB |
cpumask.c | -rw-r--r-- | 565 bytes |
crc-ccitt.c | -rw-r--r-- | 3.0 KB |
crc-itu-t.c | -rw-r--r-- | 2.8 KB |
crc16.c | -rw-r--r-- | 2.8 KB |
crc32.c | -rw-r--r-- | 14.9 KB |
crc32defs.h | -rw-r--r-- | 1.0 KB |
crc7.c | -rw-r--r-- | 2.3 KB |
ctype.c | -rw-r--r-- | 1.3 KB |
debug_locks.c | -rw-r--r-- | 1.1 KB |
debugobjects.c | -rw-r--r-- | 21.0 KB |
dec_and_lock.c | -rw-r--r-- | 806 bytes |
devres.c | -rw-r--r-- | 7.7 KB |
div64.c | -rw-r--r-- | 2.3 KB |
dump_stack.c | -rw-r--r-- | 290 bytes |
extable.c | -rw-r--r-- | 1.9 KB |
fault-inject.c | -rw-r--r-- | 7.9 KB |
find_next_bit.c | -rw-r--r-- | 6.4 KB |
gen_crc32table.c | -rw-r--r-- | 1.8 KB |
genalloc.c | -rw-r--r-- | 5.3 KB |
halfmd4.c | -rw-r--r-- | 2.0 KB |
hexdump.c | -rw-r--r-- | 6.1 KB |
hweight.c | -rw-r--r-- | 1.6 KB |
idr.c | -rw-r--r-- | 19.3 KB |
inflate.c | -rw-r--r-- | 37.8 KB |
int_sqrt.c | -rw-r--r-- | 533 bytes |
iomap.c | -rw-r--r-- | 7.4 KB |
iomap_copy.c | -rw-r--r-- | 2.1 KB |
iommu-helper.c | -rw-r--r-- | 1.8 KB |
ioremap.c | -rw-r--r-- | 2.1 KB |
irq_regs.c | -rw-r--r-- | 578 bytes |
kasprintf.c | -rw-r--r-- | 680 bytes |
kernel_lock.c | -rw-r--r-- | 2.9 KB |
klist.c | -rw-r--r-- | 7.5 KB |
kobject.c | -rw-r--r-- | 20.5 KB |
kobject_uevent.c | -rw-r--r-- | 8.0 KB |
kref.c | -rw-r--r-- | 1.9 KB |
libcrc32c.c | -rw-r--r-- | 6.4 KB |
list_debug.c | -rw-r--r-- | 2.0 KB |
lmb.c | -rw-r--r-- | 11.6 KB |
locking-selftest-hardirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-mutex.h | -rw-r--r-- | 120 bytes |
locking-selftest-rlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-rsem.h | -rw-r--r-- | 163 bytes |
locking-selftest-softirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-spin-hardirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin-softirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin.h | -rw-r--r-- | 118 bytes |
locking-selftest-wlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-wsem.h | -rw-r--r-- | 163 bytes |
locking-selftest.c | -rw-r--r-- | 28.6 KB |
parser.c | -rw-r--r-- | 6.0 KB |
percpu_counter.c | -rw-r--r-- | 3.1 KB |
plist.c | -rw-r--r-- | 2.8 KB |
prio_heap.c | -rw-r--r-- | 1.4 KB |
prio_tree.c | -rw-r--r-- | 12.2 KB |
proportions.c | -rw-r--r-- | 9.3 KB |
radix-tree.c | -rw-r--r-- | 27.4 KB |
random32.c | -rw-r--r-- | 3.7 KB |
ratelimit.c | -rw-r--r-- | 1.3 KB |
rbtree.c | -rw-r--r-- | 8.6 KB |
reciprocal_div.c | -rw-r--r-- | 159 bytes |
rwsem-spinlock.c | -rw-r--r-- | 6.8 KB |
rwsem.c | -rw-r--r-- | 6.4 KB |
scatterlist.c | -rw-r--r-- | 9.2 KB |
sha1.c | -rw-r--r-- | 2.4 KB |
smp_processor_id.c | -rw-r--r-- | 1.1 KB |
sort.c | -rw-r--r-- | 2.5 KB |
spinlock_debug.c | -rw-r--r-- | 6.8 KB |
string.c | -rw-r--r-- | 13.6 KB |
swiotlb.c | -rw-r--r-- | 24.1 KB |
textsearch.c | -rw-r--r-- | 9.3 KB |
ts_bm.c | -rw-r--r-- | 4.9 KB |
ts_fsm.c | -rw-r--r-- | 10.5 KB |
ts_kmp.c | -rw-r--r-- | 3.8 KB |
vsprintf.c | -rw-r--r-- | 26.0 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...