• Andrew Morton's avatar
    [PATCH] rmap 9 remove pte_chains · 123e4df7
    Andrew Morton authored
    From: Hugh Dickins <hugh@veritas.com>
    
    Lots of deletions: the next patch will put in the new anon rmap, which
    should look clearer if first we remove all of the old pte-pointer-based
    rmap from the core in this patch - which therefore leaves anonymous rmap
    totally disabled, anon pages locked in memory until process frees them.
    
    Leave arch files (and page table rmap) untouched for now, clean them up in
    a later batch.  A few constructive changes amidst all the deletions:
    
    Choose names (e.g.  page_add_anon_rmap) and args (e.g.  no more pteps) now
    so we need not revisit so many files in the next patch.  Inline function
    page_dup_rmap for fork's copy_page_range, simply bumps mapcount under lock.
     cond_resched_lock in copy_page_range.  Struct page rearranged: no pte
    union, just mapcount moved next to atomic count, so two ints can occupy one
    long on 64-bit; i386 struct page now 32 bytes even with PAE.  Never pass
    PageReserved to page_remove_rmap, only do_wp_page did so.
    
    
    From: Hugh Dickins <hugh@veritas.com>
    
      Move page_add_anon_rmap's BUG_ON(page_mapping(page)) inside the rmap_lock
      (well, might as well just check mapping if !mapcount then): if this page is
      being mapped or unmapped on another cpu at the same time, page_mapping's
      PageAnon(page) and page->mapping are volatile.
    
      But page_mapping(page) is used more widely: I've a nasty feeling that
      clear_page_anon, page_add_anon_rmap and/or page_mapping need barriers added
      (also in 2.6.6 itself),
    123e4df7
memory.c 45.1 KB