diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-04-11 23:16:32 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-11 23:16:32 -0700 |
| commit | e2ea83742133d581a0422f1b2d276e690a81f043 (patch) | |
| tree | a6cbd50bdc7db7e84e2d488bf9f1f9da39c4ae61 /include/linux | |
| parent | 209b450cc4e91c47cd38c42266840a90638c9b22 (diff) | |
[PATCH] mremap: move_vma fixes and cleanup
From: Hugh Dickins <hugh@veritas.com>
Partial rewrite of mremap's move_vma. Rajesh Venkatasubramanian has pointed
out that vmtruncate could miss ptes, leaving orphaned pages, because move_vma
only made the new vma visible after filling it. We see no good reason for
that, and time to make move_vma more robust.
Removed all its vma merging decisions, leave them to mmap.c's vma_merge, with
copy_vma added. Removed duplicated is_mergeable_vma test from vma_merge, and
duplicated validate_mm from insert_vm_struct.
move_vma move from old to new then unmap old; but on error move back from new
to old and unmap new. Don't unwind within move_page_tables, let move_vma
call it explicitly to unwind, with the right source vma. Get the
VM_ACCOUNTing right even when the final do_munmap fails.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mm.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index f827be900157..43335c61e0da 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -541,6 +541,8 @@ extern void si_meminfo_node(struct sysinfo *val, int nid); extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *); extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *, struct rb_node **, struct rb_node *); +extern struct vm_area_struct *copy_vma(struct vm_area_struct *, + unsigned long addr, unsigned long len, unsigned long pgoff); extern void exit_mmap(struct mm_struct *); extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); |
