linux/mm/rmap.c
<<
>>
Prefs
   1/*
   2 * mm/rmap.c - physical to virtual reverse mappings
   3 *
   4 * Copyright 2001, Rik van Riel <riel@conectiva.com.br>
   5 * Released under the General Public License (GPL).
   6 *
   7 * Simple, low overhead reverse mapping scheme.
   8 * Please try to keep this thing as modular as possible.
   9 *
  10 * Provides methods for unmapping each kind of mapped page:
  11 * the anon methods track anonymous pages, and
  12 * the file methods track pages belonging to an inode.
  13 *
  14 * Original design by Rik van Riel <riel@conectiva.com.br> 2001
  15 * File methods by Dave McCracken <dmccr@us.ibm.com> 2003, 2004
  16 * Anonymous methods by Andrea Arcangeli <andrea@suse.de> 2004
  17 * Contributions by Hugh Dickins 2003, 2004
  18 */
  19
  20/*
  21 * Lock ordering in mm:
  22 *
  23 * inode->i_mutex       (while writing or truncating, not reading or faulting)
  24 *   inode->i_alloc_sem (vmtruncate_range)
  25 *   mm->mmap_sem
  26 *     page->flags PG_locked (lock_page)
  27 *       mapping->i_mmap_lock
  28 *         anon_vma->lock
  29 *           mm->page_table_lock or pte_lock
  30 *             zone->lru_lock (in mark_page_accessed, isolate_lru_page)
  31 *             swap_lock (in swap_duplicate, swap_info_get)
  32 *               mmlist_lock (in mmput, drain_mmlist and others)
  33 *               mapping->private_lock (in __set_page_dirty_buffers)
  34 *               inode_lock (in set_page_dirty's __mark_inode_dirty)
  35 *                 sb_lock (within inode_lock in fs/fs-writeback.c)
  36 *                 mapping->tree_lock (widely used, in set_page_dirty,
  37 *                           in arch-dependent flush_dcache_mmap_lock,
  38 *                           within inode_lock in __sync_single_inode)
  39 *
  40 * (code doesn't rely on that order so it could be switched around)
  41 * ->tasklist_lock
  42 *   anon_vma->lock      (memory_failure, collect_procs_anon)
  43 *     pte map lock
  44 */
  45
  46#include <linux/mm.h>
  47#include <linux/pagemap.h>
  48#include <linux/swap.h>
  49#include <linux/swapops.h>
  50#include <linux/slab.h>
  51#include <linux/init.h>
  52#include <linux/ksm.h>
  53#include <linux/rmap.h>
  54#include <linux/rcupdate.h>
  55#include <linux/module.h>
  56#include <linux/memcontrol.h>
  57#include <linux/mmu_notifier.h>
  58#include <linux/migrate.h>
  59#include <linux/hugetlb.h>
  60
  61#include <asm/tlbflush.h>
  62
  63#include "internal.h"
  64
  65static struct kmem_cache *anon_vma_cachep;
  66static struct kmem_cache *anon_vma_chain_cachep;
  67
  68static inline struct anon_vma *anon_vma_alloc(void)
  69{
  70        return kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL);
  71}
  72
  73void anon_vma_free(struct anon_vma *anon_vma)
  74{
  75        kmem_cache_free(anon_vma_cachep, anon_vma);
  76}
  77
  78static inline struct anon_vma_chain *anon_vma_chain_alloc(void)
  79{
  80        return kmem_cache_alloc(anon_vma_chain_cachep, GFP_KERNEL);
  81}
  82
  83void anon_vma_chain_free(struct anon_vma_chain *anon_vma_chain)
  84{
  85        kmem_cache_free(anon_vma_chain_cachep, anon_vma_chain);
  86}
  87
  88/**
  89 * anon_vma_prepare - attach an anon_vma to a memory region
  90 * @vma: the memory region in question
  91 *
  92 * This makes sure the memory mapping described by 'vma' has
  93 * an 'anon_vma' attached to it, so that we can associate the
  94 * anonymous pages mapped into it with that anon_vma.
  95 *
  96 * The common case will be that we already have one, but if
  97 * if not we either need to find an adjacent mapping that we
  98 * can re-use the anon_vma from (very common when the only
  99 * reason for splitting a vma has been mprotect()), or we
 100 * allocate a new one.
 101 *
 102 * Anon-vma allocations are very subtle, because we may have
 103 * optimistically looked up an anon_vma in page_lock_anon_vma()
 104 * and that may actually touch the spinlock even in the newly
 105 * allocated vma (it depends on RCU to make sure that the
 106 * anon_vma isn't actually destroyed).
 107 *
 108 * As a result, we need to do proper anon_vma locking even
 109 * for the new allocation. At the same time, we do not want
 110 * to do any locking for the common case of already having
 111 * an anon_vma.
 112 *
 113 * This must be called with the mmap_sem held for reading.
 114 */
 115int anon_vma_prepare(struct vm_area_struct *vma)
 116{
 117        struct anon_vma *anon_vma = vma->anon_vma;
 118        struct anon_vma_chain *avc;
 119
 120        might_sleep();
 121        if (unlikely(!anon_vma)) {
 122                struct mm_struct *mm = vma->vm_mm;
 123                struct anon_vma *allocated;
 124
 125                avc = anon_vma_chain_alloc();
 126                if (!avc)
 127                        goto out_enomem;
 128
 129                anon_vma = find_mergeable_anon_vma(vma);
 130                allocated = NULL;
 131                if (!anon_vma) {
 132                        anon_vma = anon_vma_alloc();
 133                        if (unlikely(!anon_vma))
 134                                goto out_enomem_free_avc;
 135                        allocated = anon_vma;
 136                        /*
 137                         * This VMA had no anon_vma yet.  This anon_vma is
 138                         * the root of any anon_vma tree that might form.
 139                         */
 140                        anon_vma->root = anon_vma;
 141                }
 142
 143                anon_vma_lock(anon_vma);
 144                /* page_table_lock to protect against threads */
 145                spin_lock(&mm->page_table_lock);
 146                if (likely(!vma->anon_vma)) {
 147                        vma->anon_vma = anon_vma;
 148                        avc->anon_vma = anon_vma;
 149                        avc->vma = vma;
 150                        list_add(&avc->same_vma, &vma->anon_vma_chain);
 151                        list_add_tail(&avc->same_anon_vma, &anon_vma->head);
 152                        allocated = NULL;
 153                        avc = NULL;
 154                }
 155                spin_unlock(&mm->page_table_lock);
 156                anon_vma_unlock(anon_vma);
 157
 158                if (unlikely(allocated))
 159                        anon_vma_free(allocated);
 160                if (unlikely(avc))
 161                        anon_vma_chain_free(avc);
 162        }
 163        return 0;
 164
 165 out_enomem_free_avc:
 166        anon_vma_chain_free(avc);
 167 out_enomem:
 168        return -ENOMEM;
 169}
 170
 171static void anon_vma_chain_link(struct vm_area_struct *vma,
 172                                struct anon_vma_chain *avc,
 173                                struct anon_vma *anon_vma)
 174{
 175        avc->vma = vma;
 176        avc->anon_vma = anon_vma;
 177        list_add(&avc->same_vma, &vma->anon_vma_chain);
 178
 179        anon_vma_lock(anon_vma);
 180        list_add_tail(&avc->same_anon_vma, &anon_vma->head);
 181        anon_vma_unlock(anon_vma);
 182}
 183
 184/*
 185 * Attach the anon_vmas from src to dst.
 186 * Returns 0 on success, -ENOMEM on failure.
 187 */
 188int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
 189{
 190        struct anon_vma_chain *avc, *pavc;
 191
 192        list_for_each_entry_reverse(pavc, &src->anon_vma_chain, same_vma) {
 193                avc = anon_vma_chain_alloc();
 194                if (!avc)
 195                        goto enomem_failure;
 196                anon_vma_chain_link(dst, avc, pavc->anon_vma);
 197        }
 198        return 0;
 199
 200 enomem_failure:
 201        unlink_anon_vmas(dst);
 202        return -ENOMEM;
 203}
 204
 205/*
 206 * Attach vma to its own anon_vma, as well as to the anon_vmas that
 207 * the corresponding VMA in the parent process is attached to.
 208 * Returns 0 on success, non-zero on failure.
 209 */
 210int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
 211{
 212        struct anon_vma_chain *avc;
 213        struct anon_vma *anon_vma;
 214
 215        /* Don't bother if the parent process has no anon_vma here. */
 216        if (!pvma->anon_vma)
 217                return 0;
 218
 219        /*
 220         * First, attach the new VMA to the parent VMA's anon_vmas,
 221         * so rmap can find non-COWed pages in child processes.
 222         */
 223        if (anon_vma_clone(vma, pvma))
 224                return -ENOMEM;
 225
 226        /* Then add our own anon_vma. */
 227        anon_vma = anon_vma_alloc();
 228        if (!anon_vma)
 229                goto out_error;
 230        avc = anon_vma_chain_alloc();
 231        if (!avc)
 232                goto out_error_free_anon_vma;
 233
 234        /*
 235         * The root anon_vma's spinlock is the lock actually used when we
 236         * lock any of the anon_vmas in this anon_vma tree.
 237         */
 238        anon_vma->root = pvma->anon_vma->root;
 239        /*
 240         * With KSM refcounts, an anon_vma can stay around longer than the
 241         * process it belongs to.  The root anon_vma needs to be pinned
 242         * until this anon_vma is freed, because the lock lives in the root.
 243         */
 244        get_anon_vma(anon_vma->root);
 245        /* Mark this anon_vma as the one where our new (COWed) pages go. */
 246        vma->anon_vma = anon_vma;
 247        anon_vma_chain_link(vma, avc, anon_vma);
 248
 249        return 0;
 250
 251 out_error_free_anon_vma:
 252        anon_vma_free(anon_vma);
 253 out_error:
 254        unlink_anon_vmas(vma);
 255        return -ENOMEM;
 256}
 257
 258static void anon_vma_unlink(struct anon_vma_chain *anon_vma_chain)
 259{
 260        struct anon_vma *anon_vma = anon_vma_chain->anon_vma;
 261        int empty;
 262
 263        /* If anon_vma_fork fails, we can get an empty anon_vma_chain. */
 264        if (!anon_vma)
 265                return;
 266
 267        anon_vma_lock(anon_vma);
 268        list_del(&anon_vma_chain->same_anon_vma);
 269
 270        /* We must garbage collect the anon_vma if it's empty */
 271        empty = list_empty(&anon_vma->head) && !anonvma_external_refcount(anon_vma);
 272        anon_vma_unlock(anon_vma);
 273
 274        if (empty) {
 275                /* We no longer need the root anon_vma */
 276                if (anon_vma->root != anon_vma)
 277                        drop_anon_vma(anon_vma->root);
 278                anon_vma_free(anon_vma);
 279        }
 280}
 281
 282void unlink_anon_vmas(struct vm_area_struct *vma)
 283{
 284        struct anon_vma_chain *avc, *next;
 285
 286        /*
 287         * Unlink each anon_vma chained to the VMA.  This list is ordered
 288         * from newest to oldest, ensuring the root anon_vma gets freed last.
 289         */
 290        list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) {
 291                anon_vma_unlink(avc);
 292                list_del(&avc->same_vma);
 293                anon_vma_chain_free(avc);
 294        }
 295}
 296
 297static void anon_vma_ctor(void *data)
 298{
 299        struct anon_vma *anon_vma = data;
 300
 301        spin_lock_init(&anon_vma->lock);
 302        anonvma_external_refcount_init(anon_vma);
 303        INIT_LIST_HEAD(&anon_vma->head);
 304}
 305
 306void __init anon_vma_init(void)
 307{
 308        anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
 309                        0, SLAB_DESTROY_BY_RCU|SLAB_PANIC, anon_vma_ctor);
 310        anon_vma_chain_cachep = KMEM_CACHE(anon_vma_chain, SLAB_PANIC);
 311}
 312
 313/*
 314 * Getting a lock on a stable anon_vma from a page off the LRU is
 315 * tricky: page_lock_anon_vma rely on RCU to guard against the races.
 316 */
 317struct anon_vma *page_lock_anon_vma(struct page *page)
 318{
 319        struct anon_vma *anon_vma, *root_anon_vma;
 320        unsigned long anon_mapping;
 321
 322        rcu_read_lock();
 323        anon_mapping = (unsigned long) ACCESS_ONCE(page->mapping);
 324        if ((anon_mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON)
 325                goto out;
 326        if (!page_mapped(page))
 327                goto out;
 328
 329        anon_vma = (struct anon_vma *) (anon_mapping - PAGE_MAPPING_ANON);
 330        root_anon_vma = ACCESS_ONCE(anon_vma->root);
 331        spin_lock(&root_anon_vma->lock);
 332
 333        /*
 334         * If this page is still mapped, then its anon_vma cannot have been
 335         * freed.  But if it has been unmapped, we have no security against
 336         * the anon_vma structure being freed and reused (for another anon_vma:
 337         * SLAB_DESTROY_BY_RCU guarantees that - so the spin_lock above cannot
 338         * corrupt): with anon_vma_prepare() or anon_vma_fork() redirecting
 339         * anon_vma->root before page_unlock_anon_vma() is called to unlock.
 340         */
 341        if (page_mapped(page))
 342                return anon_vma;
 343
 344        spin_unlock(&root_anon_vma->lock);
 345out:
 346        rcu_read_unlock();
 347        return NULL;
 348}
 349
 350void page_unlock_anon_vma(struct anon_vma *anon_vma)
 351{
 352        anon_vma_unlock(anon_vma);
 353        rcu_read_unlock();
 354}
 355
 356/*
 357 * At what user virtual address is page expected in @vma?
 358 * Returns virtual address or -EFAULT if page's index/offset is not
 359 * within the range mapped the @vma.
 360 */
 361static inline unsigned long
 362vma_address(struct page *page, struct vm_area_struct *vma)
 363{
 364        pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
 365        unsigned long address;
 366
 367        if (unlikely(is_vm_hugetlb_page(vma)))
 368                pgoff = page->index << huge_page_order(page_hstate(page));
 369        address = vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT);
 370        if (unlikely(address < vma->vm_start || address >= vma->vm_end)) {
 371                /* page should be within @vma mapping range */
 372                return -EFAULT;
 373        }
 374        return address;
 375}
 376
 377/*
 378 * At what user virtual address is page expected in vma?
 379 * Caller should check the page is actually part of the vma.
 380 */
 381unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma)
 382{
 383        if (PageAnon(page)) {
 384                struct anon_vma *page__anon_vma = page_anon_vma(page);
 385                /*
 386                 * Note: swapoff's unuse_vma() is more efficient with this
 387                 * check, and needs it to match anon_vma when KSM is active.
 388                 */
 389                if (!vma->anon_vma || !page__anon_vma ||
 390                    vma->anon_vma->root != page__anon_vma->root)
 391                        return -EFAULT;
 392        } else if (page->mapping && !(vma->vm_flags & VM_NONLINEAR)) {
 393                if (!vma->vm_file ||
 394                    vma->vm_file->f_mapping != page->mapping)
 395                        return -EFAULT;
 396        } else
 397                return -EFAULT;
 398        return vma_address(page, vma);
 399}
 400
 401/*
 402 * Check that @page is mapped at @address into @mm.
 403 *
 404 * If @sync is false, page_check_address may perform a racy check to avoid
 405 * the page table lock when the pte is not present (helpful when reclaiming
 406 * highly shared pages).
 407 *
 408 * On success returns with pte mapped and locked.
 409 */
 410pte_t *page_check_address(struct page *page, struct mm_struct *mm,
 411                          unsigned long address, spinlock_t **ptlp, int sync)
 412{
 413        pgd_t *pgd;
 414        pud_t *pud;
 415        pmd_t *pmd;
 416        pte_t *pte;
 417        spinlock_t *ptl;
 418
 419        if (unlikely(PageHuge(page))) {
 420                pte = huge_pte_offset(mm, address);
 421                ptl = &mm->page_table_lock;
 422                goto check;
 423        }
 424
 425        pgd = pgd_offset(mm, address);
 426        if (!pgd_present(*pgd))
 427                return NULL;
 428
 429        pud = pud_offset(pgd, address);
 430        if (!pud_present(*pud))
 431                return NULL;
 432
 433        pmd = pmd_offset(pud, address);
 434        if (!pmd_present(*pmd))
 435                return NULL;
 436
 437        pte = pte_offset_map(pmd, address);
 438        /* Make a quick check before getting the lock */
 439        if (!sync && !pte_present(*pte)) {
 440                pte_unmap(pte);
 441                return NULL;
 442        }
 443
 444        ptl = pte_lockptr(mm, pmd);
 445check:
 446        spin_lock(ptl);
 447        if (pte_present(*pte) && page_to_pfn(page) == pte_pfn(*pte)) {
 448                *ptlp = ptl;
 449                return pte;
 450        }
 451        pte_unmap_unlock(pte, ptl);
 452        return NULL;
 453}
 454
 455/**
 456 * page_mapped_in_vma - check whether a page is really mapped in a VMA
 457 * @page: the page to test
 458 * @vma: the VMA to test
 459 *
 460 * Returns 1 if the page is mapped into the page tables of the VMA, 0
 461 * if the page is not mapped into the page tables of this VMA.  Only
 462 * valid for normal file or anonymous VMAs.
 463 */
 464int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma)
 465{
 466        unsigned long address;
 467        pte_t *pte;
 468        spinlock_t *ptl;
 469
 470        address = vma_address(page, vma);
 471        if (address == -EFAULT)         /* out of vma range */
 472                return 0;
 473        pte = page_check_address(page, vma->vm_mm, address, &ptl, 1);
 474        if (!pte)                       /* the page is not in this mm */
 475                return 0;
 476        pte_unmap_unlock(pte, ptl);
 477
 478        return 1;
 479}
 480
 481/*
 482 * Subfunctions of page_referenced: page_referenced_one called
 483 * repeatedly from either page_referenced_anon or page_referenced_file.
 484 */
 485int page_referenced_one(struct page *page, struct vm_area_struct *vma,
 486                        unsigned long address, unsigned int *mapcount,
 487                        unsigned long *vm_flags)
 488{
 489        struct mm_struct *mm = vma->vm_mm;
 490        pte_t *pte;
 491        spinlock_t *ptl;
 492        int referenced = 0;
 493
 494        pte = page_check_address(page, mm, address, &ptl, 0);
 495        if (!pte)
 496                goto out;
 497
 498        /*
 499         * Don't want to elevate referenced for mlocked page that gets this far,
 500         * in order that it progresses to try_to_unmap and is moved to the
 501         * unevictable list.
 502         */
 503        if (vma->vm_flags & VM_LOCKED) {
 504                *mapcount = 1;  /* break early from loop */
 505                *vm_flags |= VM_LOCKED;
 506                goto out_unmap;
 507        }
 508
 509        if (ptep_clear_flush_young_notify(vma, address, pte)) {
 510                /*
 511                 * Don't treat a reference through a sequentially read
 512                 * mapping as such.  If the page has been used in
 513                 * another mapping, we will catch it; if this other
 514                 * mapping is already gone, the unmap path will have
 515                 * set PG_referenced or activated the page.
 516                 */
 517                if (likely(!VM_SequentialReadHint(vma)))
 518                        referenced++;
 519        }
 520
 521        /* Pretend the page is referenced if the task has the
 522           swap token and is in the middle of a page fault. */
 523        if (mm != current->mm && has_swap_token(mm) &&
 524                        rwsem_is_locked(&mm->mmap_sem))
 525                referenced++;
 526
 527out_unmap:
 528        (*mapcount)--;
 529        pte_unmap_unlock(pte, ptl);
 530
 531        if (referenced)
 532                *vm_flags |= vma->vm_flags;
 533out:
 534        return referenced;
 535}
 536
 537static int page_referenced_anon(struct page *page,
 538                                struct mem_cgroup *mem_cont,
 539                                unsigned long *vm_flags)
 540{
 541        unsigned int mapcount;
 542        struct anon_vma *anon_vma;
 543        struct anon_vma_chain *avc;
 544        int referenced = 0;
 545
 546        anon_vma = page_lock_anon_vma(page);
 547        if (!anon_vma)
 548                return referenced;
 549
 550        mapcount = page_mapcount(page);
 551        list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
 552                struct vm_area_struct *vma = avc->vma;
 553                unsigned long address = vma_address(page, vma);
 554                if (address == -EFAULT)
 555                        continue;
 556                /*
 557                 * If we are reclaiming on behalf of a cgroup, skip
 558                 * counting on behalf of references from different
 559                 * cgroups
 560                 */
 561                if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))
 562                        continue;
 563                referenced += page_referenced_one(page, vma, address,
 564                                                  &mapcount, vm_flags);
 565                if (!mapcount)
 566                        break;
 567        }
 568
 569        page_unlock_anon_vma(anon_vma);
 570        return referenced;
 571}
 572
 573/**
 574 * page_referenced_file - referenced check for object-based rmap
 575 * @page: the page we're checking references on.
 576 * @mem_cont: target memory controller
 577 * @vm_flags: collect encountered vma->vm_flags who actually referenced the page
 578 *
 579 * For an object-based mapped page, find all the places it is mapped and
 580 * check/clear the referenced flag.  This is done by following the page->mapping
 581 * pointer, then walking the chain of vmas it holds.  It returns the number
 582 * of references it found.
 583 *
 584 * This function is only called from page_referenced for object-based pages.
 585 */
 586static int page_referenced_file(struct page *page,
 587                                struct mem_cgroup *mem_cont,
 588                                unsigned long *vm_flags)
 589{
 590        unsigned int mapcount;
 591        struct address_space *mapping = page->mapping;
 592        pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
 593        struct vm_area_struct *vma;
 594        struct prio_tree_iter iter;
 595        int referenced = 0;
 596
 597        /*
 598         * The caller's checks on page->mapping and !PageAnon have made
 599         * sure that this is a file page: the check for page->mapping
 600         * excludes the case just before it gets set on an anon page.
 601         */
 602        BUG_ON(PageAnon(page));
 603
 604        /*
 605         * The page lock not only makes sure that page->mapping cannot
 606         * suddenly be NULLified by truncation, it makes sure that the
 607         * structure at mapping cannot be freed and reused yet,
 608         * so we can safely take mapping->i_mmap_lock.
 609         */
 610        BUG_ON(!PageLocked(page));
 611
 612        spin_lock(&mapping->i_mmap_lock);
 613
 614        /*
 615         * i_mmap_lock does not stabilize mapcount at all, but mapcount
 616         * is more likely to be accurate if we note it after spinning.
 617         */
 618        mapcount = page_mapcount(page);
 619
 620        vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) {
 621                unsigned long address = vma_address(page, vma);
 622                if (address == -EFAULT)
 623                        continue;
 624                /*
 625                 * If we are reclaiming on behalf of a cgroup, skip
 626                 * counting on behalf of references from different
 627                 * cgroups
 628                 */
 629                if (mem_cont && !mm_match_cgroup(vma->vm_mm, mem_cont))
 630                        continue;
 631                referenced += page_referenced_one(page, vma, address,
 632                                                  &mapcount, vm_flags);
 633                if (!mapcount)
 634                        break;
 635        }
 636
 637        spin_unlock(&mapping->i_mmap_lock);
 638        return referenced;
 639}
 640
 641/**
 642 * page_referenced - test if the page was referenced
 643 * @page: the page to test
 644 * @is_locked: caller holds lock on the page
 645 * @mem_cont: target memory controller
 646 * @vm_flags: collect encountered vma->vm_flags who actually referenced the page
 647 *
 648 * Quick test_and_clear_referenced for all mappings to a page,
 649 * returns the number of ptes which referenced the page.
 650 */
 651int page_referenced(struct page *page,
 652                    int is_locked,
 653                    struct mem_cgroup *mem_cont,
 654                    unsigned long *vm_flags)
 655{
 656        int referenced = 0;
 657        int we_locked = 0;
 658
 659        *vm_flags = 0;
 660        if (page_mapped(page) && page_rmapping(page)) {
 661                if (!is_locked && (!PageAnon(page) || PageKsm(page))) {
 662                        we_locked = trylock_page(page);
 663                        if (!we_locked) {
 664                                referenced++;
 665                                goto out;
 666                        }
 667                }
 668                if (unlikely(PageKsm(page)))
 669                        referenced += page_referenced_ksm(page, mem_cont,
 670                                                                vm_flags);
 671                else if (PageAnon(page))
 672                        referenced += page_referenced_anon(page, mem_cont,
 673                                                                vm_flags);
 674                else if (page->mapping)
 675                        referenced += page_referenced_file(page, mem_cont,
 676                                                                vm_flags);
 677                if (we_locked)
 678                        unlock_page(page);
 679        }
 680out:
 681        if (page_test_and_clear_young(page))
 682                referenced++;
 683
 684        return referenced;
 685}
 686
 687static int page_mkclean_one(struct page *page, struct vm_area_struct *vma,
 688                            unsigned long address)
 689{
 690        struct mm_struct *mm = vma->vm_mm;
 691        pte_t *pte;
 692        spinlock_t *ptl;
 693        int ret = 0;
 694
 695        pte = page_check_address(page, mm, address, &ptl, 1);
 696        if (!pte)
 697                goto out;
 698
 699        if (pte_dirty(*pte) || pte_write(*pte)) {
 700                pte_t entry;
 701
 702                flush_cache_page(vma, address, pte_pfn(*pte));
 703                entry = ptep_clear_flush_notify(vma, address, pte);
 704                entry = pte_wrprotect(entry);
 705                entry = pte_mkclean(entry);
 706                set_pte_at(mm, address, pte, entry);
 707                ret = 1;
 708        }
 709
 710        pte_unmap_unlock(pte, ptl);
 711out:
 712        return ret;
 713}
 714
 715static int page_mkclean_file(struct address_space *mapping, struct page *page)
 716{
 717        pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
 718        struct vm_area_struct *vma;
 719        struct prio_tree_iter iter;
 720        int ret = 0;
 721
 722        BUG_ON(PageAnon(page));
 723
 724        spin_lock(&mapping->i_mmap_lock);
 725        vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) {
 726                if (vma->vm_flags & VM_SHARED) {
 727                        unsigned long address = vma_address(page, vma);
 728                        if (address == -EFAULT)
 729                                continue;
 730                        ret += page_mkclean_one(page, vma, address);
 731                }
 732        }
 733        spin_unlock(&mapping->i_mmap_lock);
 734        return ret;
 735}
 736
 737int page_mkclean(struct page *page)
 738{
 739        int ret = 0;
 740
 741        BUG_ON(!PageLocked(page));
 742
 743        if (page_mapped(page)) {
 744                struct address_space *mapping = page_mapping(page);
 745                if (mapping) {
 746                        ret = page_mkclean_file(mapping, page);
 747                        if (page_test_dirty(page)) {
 748                                page_clear_dirty(page);
 749                                ret = 1;
 750                        }
 751                }
 752        }
 753
 754        return ret;
 755}
 756EXPORT_SYMBOL_GPL(page_mkclean);
 757
 758/**
 759 * page_move_anon_rmap - move a page to our anon_vma
 760 * @page:       the page to move to our anon_vma
 761 * @vma:        the vma the page belongs to
 762 * @address:    the user virtual address mapped
 763 *
 764 * When a page belongs exclusively to one process after a COW event,
 765 * that page can be moved into the anon_vma that belongs to just that
 766 * process, so the rmap code will not search the parent or sibling
 767 * processes.
 768 */
 769void page_move_anon_rmap(struct page *page,
 770        struct vm_area_struct *vma, unsigned long address)
 771{
 772        struct anon_vma *anon_vma = vma->anon_vma;
 773
 774        VM_BUG_ON(!PageLocked(page));
 775        VM_BUG_ON(!anon_vma);
 776        VM_BUG_ON(page->index != linear_page_index(vma, address));
 777
 778        anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
 779        page->mapping = (struct address_space *) anon_vma;
 780}
 781
 782/**
 783 * __page_set_anon_rmap - setup new anonymous rmap
 784 * @page:       the page to add the mapping to
 785 * @vma:        the vm area in which the mapping is added
 786 * @address:    the user virtual address mapped
 787 * @exclusive:  the page is exclusively owned by the current process
 788 */
 789static void __page_set_anon_rmap(struct page *page,
 790        struct vm_area_struct *vma, unsigned long address, int exclusive)
 791{
 792        struct anon_vma *anon_vma = vma->anon_vma;
 793
 794        BUG_ON(!anon_vma);
 795
 796        /*
 797         * If the page isn't exclusively mapped into this vma,
 798         * we must use the _oldest_ possible anon_vma for the
 799         * page mapping!
 800         */
 801        if (!exclusive) {
 802                if (PageAnon(page))
 803                        return;
 804                anon_vma = anon_vma->root;
 805        } else {
 806                /*
 807                 * In this case, swapped-out-but-not-discarded swap-cache
 808                 * is remapped. So, no need to update page->mapping here.
 809                 * We convice anon_vma poitned by page->mapping is not obsolete
 810                 * because vma->anon_vma is necessary to be a family of it.
 811                 */
 812                if (PageAnon(page))
 813                        return;
 814        }
 815
 816        anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
 817        page->mapping = (struct address_space *) anon_vma;
 818        page->index = linear_page_index(vma, address);
 819}
 820
 821/**
 822 * __page_check_anon_rmap - sanity check anonymous rmap addition
 823 * @page:       the page to add the mapping to
 824 * @vma:        the vm area in which the mapping is added
 825 * @address:    the user virtual address mapped
 826 */
 827static void __page_check_anon_rmap(struct page *page,
 828        struct vm_area_struct *vma, unsigned long address)
 829{
 830#ifdef CONFIG_DEBUG_VM
 831        /*
 832         * The page's anon-rmap details (mapping and index) are guaranteed to
 833         * be set up correctly at this point.
 834         *
 835         * We have exclusion against page_add_anon_rmap because the caller
 836         * always holds the page locked, except if called from page_dup_rmap,
 837         * in which case the page is already known to be setup.
 838         *
 839         * We have exclusion against page_add_new_anon_rmap because those pages
 840         * are initially only visible via the pagetables, and the pte is locked
 841         * over the call to page_add_new_anon_rmap.
 842         */
 843        BUG_ON(page_anon_vma(page)->root != vma->anon_vma->root);
 844        BUG_ON(page->index != linear_page_index(vma, address));
 845#endif
 846}
 847
 848/**
 849 * page_add_anon_rmap - add pte mapping to an anonymous page
 850 * @page:       the page to add the mapping to
 851 * @vma:        the vm area in which the mapping is added
 852 * @address:    the user virtual address mapped
 853 *
 854 * The caller needs to hold the pte lock, and the page must be locked in
 855 * the anon_vma case: to serialize mapping,index checking after setting,
 856 * and to ensure that PageAnon is not being upgraded racily to PageKsm
 857 * (but PageKsm is never downgraded to PageAnon).
 858 */
 859void page_add_anon_rmap(struct page *page,
 860        struct vm_area_struct *vma, unsigned long address)
 861{
 862        do_page_add_anon_rmap(page, vma, address, 0);
 863}
 864
 865/*
 866 * Special version of the above for do_swap_page, which often runs
 867 * into pages that are exclusively owned by the current process.
 868 * Everybody else should continue to use page_add_anon_rmap above.
 869 */
 870void do_page_add_anon_rmap(struct page *page,
 871        struct vm_area_struct *vma, unsigned long address, int exclusive)
 872{
 873        int first = atomic_inc_and_test(&page->_mapcount);
 874        if (first)
 875                __inc_zone_page_state(page, NR_ANON_PAGES);
 876        if (unlikely(PageKsm(page)))
 877                return;
 878
 879        VM_BUG_ON(!PageLocked(page));
 880        VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end);
 881        if (first)
 882                __page_set_anon_rmap(page, vma, address, exclusive);
 883        else
 884                __page_check_anon_rmap(page, vma, address);
 885}
 886
 887/**
 888 * page_add_new_anon_rmap - add pte mapping to a new anonymous page
 889 * @page:       the page to add the mapping to
 890 * @vma:        the vm area in which the mapping is added
 891 * @address:    the user virtual address mapped
 892 *
 893 * Same as page_add_anon_rmap but must only be called on *new* pages.
 894 * This means the inc-and-test can be bypassed.
 895 * Page does not have to be locked.
 896 */
 897void page_add_new_anon_rmap(struct page *page,
 898        struct vm_area_struct *vma, unsigned long address)
 899{
 900        VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end);
 901        SetPageSwapBacked(page);
 902        atomic_set(&page->_mapcount, 0); /* increment count (starts at -1) */
 903        __inc_zone_page_state(page, NR_ANON_PAGES);
 904        __page_set_anon_rmap(page, vma, address, 1);
 905        if (page_evictable(page, vma))
 906                lru_cache_add_lru(page, LRU_ACTIVE_ANON);
 907        else
 908                add_page_to_unevictable_list(page);
 909}
 910
 911/**
 912 * page_add_file_rmap - add pte mapping to a file page
 913 * @page: the page to add the mapping to
 914 *
 915 * The caller needs to hold the pte lock.
 916 */
 917void page_add_file_rmap(struct page *page)
 918{
 919        if (atomic_inc_and_test(&page->_mapcount)) {
 920                __inc_zone_page_state(page, NR_FILE_MAPPED);
 921                mem_cgroup_update_file_mapped(page, 1);
 922        }
 923}
 924
 925/**
 926 * page_remove_rmap - take down pte mapping from a page
 927 * @page: page to remove mapping from
 928 *
 929 * The caller needs to hold the pte lock.
 930 */
 931void page_remove_rmap(struct page *page)
 932{
 933        /* page still mapped by someone else? */
 934        if (!atomic_add_negative(-1, &page->_mapcount))
 935                return;
 936
 937        /*
 938         * Now that the last pte has gone, s390 must transfer dirty
 939         * flag from storage key to struct page.  We can usually skip
 940         * this if the page is anon, so about to be freed; but perhaps
 941         * not if it's in swapcache - there might be another pte slot
 942         * containing the swap entry, but page not yet written to swap.
 943         */
 944        if ((!PageAnon(page) || PageSwapCache(page)) && page_test_dirty(page)) {
 945                page_clear_dirty(page);
 946                set_page_dirty(page);
 947        }
 948        /*
 949         * Hugepages are not counted in NR_ANON_PAGES nor NR_FILE_MAPPED
 950         * and not charged by memcg for now.
 951         */
 952        if (unlikely(PageHuge(page)))
 953                return;
 954        if (PageAnon(page)) {
 955                mem_cgroup_uncharge_page(page);
 956                __dec_zone_page_state(page, NR_ANON_PAGES);
 957        } else {
 958                __dec_zone_page_state(page, NR_FILE_MAPPED);
 959                mem_cgroup_update_file_mapped(page, -1);
 960        }
 961        /*
 962         * It would be tidy to reset the PageAnon mapping here,
 963         * but that might overwrite a racing page_add_anon_rmap
 964         * which increments mapcount after us but sets mapping
 965         * before us: so leave the reset to free_hot_cold_page,
 966         * and remember that it's only reliable while mapped.
 967         * Leaving it set also helps swapoff to reinstate ptes
 968         * faster for those pages still in swapcache.
 969         */
 970}
 971
 972/*
 973 * Subfunctions of try_to_unmap: try_to_unmap_one called
 974 * repeatedly from either try_to_unmap_anon or try_to_unmap_file.
 975 */
 976int try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
 977                     unsigned long address, enum ttu_flags flags)
 978{
 979        struct mm_struct *mm = vma->vm_mm;
 980        pte_t *pte;
 981        pte_t pteval;
 982        spinlock_t *ptl;
 983        int ret = SWAP_AGAIN;
 984
 985        pte = page_check_address(page, mm, address, &ptl, 0);
 986        if (!pte)
 987                goto out;
 988
 989        /*
 990         * If the page is mlock()d, we cannot swap it out.
 991         * If it's recently referenced (perhaps page_referenced
 992         * skipped over this mm) then we should reactivate it.
 993         */
 994        if (!(flags & TTU_IGNORE_MLOCK)) {
 995                if (vma->vm_flags & VM_LOCKED)
 996                        goto out_mlock;
 997
 998                if (TTU_ACTION(flags) == TTU_MUNLOCK)
 999                        goto out_unmap;
1000        }
1001        if (!(flags & TTU_IGNORE_ACCESS)) {
1002                if (ptep_clear_flush_young_notify(vma, address, pte)) {
1003                        ret = SWAP_FAIL;
1004                        goto out_unmap;
1005                }
1006        }
1007
1008        /* Nuke the page table entry. */
1009        flush_cache_page(vma, address, page_to_pfn(page));
1010        pteval = ptep_clear_flush_notify(vma, address, pte);
1011
1012        /* Move the dirty bit to the physical page now the pte is gone. */
1013        if (pte_dirty(pteval))
1014                set_page_dirty(page);
1015
1016        /* Update high watermark before we lower rss */
1017        update_hiwater_rss(mm);
1018
1019        if (PageHWPoison(page) && !(flags & TTU_IGNORE_HWPOISON)) {
1020                if (PageAnon(page))
1021                        dec_mm_counter(mm, MM_ANONPAGES);
1022                else
1023                        dec_mm_counter(mm, MM_FILEPAGES);
1024                set_pte_at(mm, address, pte,
1025                                swp_entry_to_pte(make_hwpoison_entry(page)));
1026        } else if (PageAnon(page)) {
1027                swp_entry_t entry = { .val = page_private(page) };
1028
1029                if (PageSwapCache(page)) {
1030                        /*
1031                         * Store the swap location in the pte.
1032                         * See handle_pte_fault() ...
1033                         */
1034                        if (swap_duplicate(entry) < 0) {
1035                                set_pte_at(mm, address, pte, pteval);
1036                                ret = SWAP_FAIL;
1037                                goto out_unmap;
1038                        }
1039                        if (list_empty(&mm->mmlist)) {
1040                                spin_lock(&mmlist_lock);
1041                                if (list_empty(&mm->mmlist))
1042                                        list_add(&mm->mmlist, &init_mm.mmlist);
1043                                spin_unlock(&mmlist_lock);
1044                        }
1045                        dec_mm_counter(mm, MM_ANONPAGES);
1046                        inc_mm_counter(mm, MM_SWAPENTS);
1047                } else if (PAGE_MIGRATION) {
1048                        /*
1049                         * Store the pfn of the page in a special migration
1050                         * pte. do_swap_page() will wait until the migration
1051                         * pte is removed and then restart fault handling.
1052                         */
1053                        BUG_ON(TTU_ACTION(flags) != TTU_MIGRATION);
1054                        entry = make_migration_entry(page, pte_write(pteval));
1055                }
1056                set_pte_at(mm, address, pte, swp_entry_to_pte(entry));
1057                BUG_ON(pte_file(*pte));
1058        } else if (PAGE_MIGRATION && (TTU_ACTION(flags) == TTU_MIGRATION)) {
1059                /* Establish migration entry for a file page */
1060                swp_entry_t entry;
1061                entry = make_migration_entry(page, pte_write(pteval));
1062                set_pte_at(mm, address, pte, swp_entry_to_pte(entry));
1063        } else
1064                dec_mm_counter(mm, MM_FILEPAGES);
1065
1066        page_remove_rmap(page);
1067        page_cache_release(page);
1068
1069out_unmap:
1070        pte_unmap_unlock(pte, ptl);
1071out:
1072        return ret;
1073
1074out_mlock:
1075        pte_unmap_unlock(pte, ptl);
1076
1077
1078        /*
1079         * We need mmap_sem locking, Otherwise VM_LOCKED check makes
1080         * unstable result and race. Plus, We can't wait here because
1081         * we now hold anon_vma->lock or mapping->i_mmap_lock.
1082         * if trylock failed, the page remain in evictable lru and later
1083         * vmscan could retry to move the page to unevictable lru if the
1084         * page is actually mlocked.
1085         */
1086        if (down_read_trylock(&vma->vm_mm->mmap_sem)) {
1087                if (vma->vm_flags & VM_LOCKED) {
1088                        mlock_vma_page(page);
1089                        ret = SWAP_MLOCK;
1090                }
1091                up_read(&vma->vm_mm->mmap_sem);
1092        }
1093        return ret;
1094}
1095
1096/*
1097 * objrmap doesn't work for nonlinear VMAs because the assumption that
1098 * offset-into-file correlates with offset-into-virtual-addresses does not hold.
1099 * Consequently, given a particular page and its ->index, we cannot locate the
1100 * ptes which are mapping that page without an exhaustive linear search.
1101 *
1102 * So what this code does is a mini "virtual scan" of each nonlinear VMA which
1103 * maps the file to which the target page belongs.  The ->vm_private_data field
1104 * holds the current cursor into that scan.  Successive searches will circulate
1105 * around the vma's virtual address space.
1106 *
1107 * So as more replacement pressure is applied to the pages in a nonlinear VMA,
1108 * more scanning pressure is placed against them as well.   Eventually pages
1109 * will become fully unmapped and are eligible for eviction.
1110 *
1111 * For very sparsely populated VMAs this is a little inefficient - chances are
1112 * there there won't be many ptes located within the scan cluster.  In this case
1113 * maybe we could scan further - to the end of the pte page, perhaps.
1114 *
1115 * Mlocked pages:  check VM_LOCKED under mmap_sem held for read, if we can
1116 * acquire it without blocking.  If vma locked, mlock the pages in the cluster,
1117 * rather than unmapping them.  If we encounter the "check_page" that vmscan is
1118 * trying to unmap, return SWAP_MLOCK, else default SWAP_AGAIN.
1119 */
1120#define CLUSTER_SIZE    min(32*PAGE_SIZE, PMD_SIZE)
1121#define CLUSTER_MASK    (~(CLUSTER_SIZE - 1))
1122
1123static int try_to_unmap_cluster(unsigned long cursor, unsigned int *mapcount,
1124                struct vm_area_struct *vma, struct page *check_page)
1125{
1126        struct mm_struct *mm = vma->vm_mm;
1127        pgd_t *pgd;
1128        pud_t *pud;
1129        pmd_t *pmd;
1130        pte_t *pte;
1131        pte_t pteval;
1132        spinlock_t *ptl;
1133        struct page *page;
1134        unsigned long address;
1135        unsigned long end;
1136        int ret = SWAP_AGAIN;
1137        int locked_vma = 0;
1138
1139        address = (vma->vm_start + cursor) & CLUSTER_MASK;
1140        end = address + CLUSTER_SIZE;
1141        if (address < vma->vm_start)
1142                address = vma->vm_start;
1143        if (end > vma->vm_end)
1144                end = vma->vm_end;
1145
1146        pgd = pgd_offset(mm, address);
1147        if (!pgd_present(*pgd))
1148                return ret;
1149
1150        pud = pud_offset(pgd, address);
1151        if (!pud_present(*pud))
1152                return ret;
1153
1154        pmd = pmd_offset(pud, address);
1155        if (!pmd_present(*pmd))
1156                return ret;
1157
1158        /*
1159         * If we can acquire the mmap_sem for read, and vma is VM_LOCKED,
1160         * keep the sem while scanning the cluster for mlocking pages.
1161         */
1162        if (down_read_trylock(&vma->vm_mm->mmap_sem)) {
1163                locked_vma = (vma->vm_flags & VM_LOCKED);
1164                if (!locked_vma)
1165                        up_read(&vma->vm_mm->mmap_sem); /* don't need it */
1166        }
1167
1168        pte = pte_offset_map_lock(mm, pmd, address, &ptl);
1169
1170        /* Update high watermark before we lower rss */
1171        update_hiwater_rss(mm);
1172
1173        for (; address < end; pte++, address += PAGE_SIZE) {
1174                if (!pte_present(*pte))
1175                        continue;
1176                page = vm_normal_page(vma, address, *pte);
1177                BUG_ON(!page || PageAnon(page));
1178
1179                if (locked_vma) {
1180                        mlock_vma_page(page);   /* no-op if already mlocked */
1181                        if (page == check_page)
1182                                ret = SWAP_MLOCK;
1183                        continue;       /* don't unmap */
1184                }
1185
1186                if (ptep_clear_flush_young_notify(vma, address, pte))
1187                        continue;
1188
1189                /* Nuke the page table entry. */
1190                flush_cache_page(vma, address, pte_pfn(*pte));
1191                pteval = ptep_clear_flush_notify(vma, address, pte);
1192
1193                /* If nonlinear, store the file page offset in the pte. */
1194                if (page->index != linear_page_index(vma, address))
1195                        set_pte_at(mm, address, pte, pgoff_to_pte(page->index));
1196
1197                /* Move the dirty bit to the physical page now the pte is gone. */
1198                if (pte_dirty(pteval))
1199                        set_page_dirty(page);
1200
1201                page_remove_rmap(page);
1202                page_cache_release(page);
1203                dec_mm_counter(mm, MM_FILEPAGES);
1204                (*mapcount)--;
1205        }
1206        pte_unmap_unlock(pte - 1, ptl);
1207        if (locked_vma)
1208                up_read(&vma->vm_mm->mmap_sem);
1209        return ret;
1210}
1211
1212static bool is_vma_temporary_stack(struct vm_area_struct *vma)
1213{
1214        int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP);
1215
1216        if (!maybe_stack)
1217                return false;
1218
1219        if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) ==
1220                                                VM_STACK_INCOMPLETE_SETUP)
1221                return true;
1222
1223        return false;
1224}
1225
1226/**
1227 * try_to_unmap_anon - unmap or unlock anonymous page using the object-based
1228 * rmap method
1229 * @page: the page to unmap/unlock
1230 * @flags: action and flags
1231 *
1232 * Find all the mappings of a page using the mapping pointer and the vma chains
1233 * contained in the anon_vma struct it points to.
1234 *
1235 * This function is only called from try_to_unmap/try_to_munlock for
1236 * anonymous pages.
1237 * When called from try_to_munlock(), the mmap_sem of the mm containing the vma
1238 * where the page was found will be held for write.  So, we won't recheck
1239 * vm_flags for that VMA.  That should be OK, because that vma shouldn't be
1240 * 'LOCKED.
1241 */
1242static int try_to_unmap_anon(struct page *page, enum ttu_flags flags)
1243{
1244        struct anon_vma *anon_vma;
1245        struct anon_vma_chain *avc;
1246        int ret = SWAP_AGAIN;
1247
1248        anon_vma = page_lock_anon_vma(page);
1249        if (!anon_vma)
1250                return ret;
1251
1252        list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
1253                struct vm_area_struct *vma = avc->vma;
1254                unsigned long address;
1255
1256                /*
1257                 * During exec, a temporary VMA is setup and later moved.
1258                 * The VMA is moved under the anon_vma lock but not the
1259                 * page tables leading to a race where migration cannot
1260                 * find the migration ptes. Rather than increasing the
1261                 * locking requirements of exec(), migration skips
1262                 * temporary VMAs until after exec() completes.
1263                 */
1264                if (PAGE_MIGRATION && (flags & TTU_MIGRATION) &&
1265                                is_vma_temporary_stack(vma))
1266                        continue;
1267
1268                address = vma_address(page, vma);
1269                if (address == -EFAULT)
1270                        continue;
1271                ret = try_to_unmap_one(page, vma, address, flags);
1272                if (ret != SWAP_AGAIN || !page_mapped(page))
1273                        break;
1274        }
1275
1276        page_unlock_anon_vma(anon_vma);
1277        return ret;
1278}
1279
1280/**
1281 * try_to_unmap_file - unmap/unlock file page using the object-based rmap method
1282 * @page: the page to unmap/unlock
1283 * @flags: action and flags
1284 *
1285 * Find all the mappings of a page using the mapping pointer and the vma chains
1286 * contained in the address_space struct it points to.
1287 *
1288 * This function is only called from try_to_unmap/try_to_munlock for
1289 * object-based pages.
1290 * When called from try_to_munlock(), the mmap_sem of the mm containing the vma
1291 * where the page was found will be held for write.  So, we won't recheck
1292 * vm_flags for that VMA.  That should be OK, because that vma shouldn't be
1293 * 'LOCKED.
1294 */
1295static int try_to_unmap_file(struct page *page, enum ttu_flags flags)
1296{
1297        struct address_space *mapping = page->mapping;
1298        pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
1299        struct vm_area_struct *vma;
1300        struct prio_tree_iter iter;
1301        int ret = SWAP_AGAIN;
1302        unsigned long cursor;
1303        unsigned long max_nl_cursor = 0;
1304        unsigned long max_nl_size = 0;
1305        unsigned int mapcount;
1306
1307        spin_lock(&mapping->i_mmap_lock);
1308        vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) {
1309                unsigned long address = vma_address(page, vma);
1310                if (address == -EFAULT)
1311                        continue;
1312                ret = try_to_unmap_one(page, vma, address, flags);
1313                if (ret != SWAP_AGAIN || !page_mapped(page))
1314                        goto out;
1315        }
1316
1317        if (list_empty(&mapping->i_mmap_nonlinear))
1318                goto out;
1319
1320        /*
1321         * We don't bother to try to find the munlocked page in nonlinears.
1322         * It's costly. Instead, later, page reclaim logic may call
1323         * try_to_unmap(TTU_MUNLOCK) and recover PG_mlocked lazily.
1324         */
1325        if (TTU_ACTION(flags) == TTU_MUNLOCK)
1326                goto out;
1327
1328        list_for_each_entry(vma, &mapping->i_mmap_nonlinear,
1329                                                shared.vm_set.list) {
1330                cursor = (unsigned long) vma->vm_private_data;
1331                if (cursor > max_nl_cursor)
1332                        max_nl_cursor = cursor;
1333                cursor = vma->vm_end - vma->vm_start;
1334                if (cursor > max_nl_size)
1335                        max_nl_size = cursor;
1336        }
1337
1338        if (max_nl_size == 0) { /* all nonlinears locked or reserved ? */
1339                ret = SWAP_FAIL;
1340                goto out;
1341        }
1342
1343        /*
1344         * We don't try to search for this page in the nonlinear vmas,
1345         * and page_referenced wouldn't have found it anyway.  Instead
1346         * just walk the nonlinear vmas trying to age and unmap some.
1347         * The mapcount of the page we came in with is irrelevant,
1348         * but even so use it as a guide to how hard we should try?
1349         */
1350        mapcount = page_mapcount(page);
1351        if (!mapcount)
1352                goto out;
1353        cond_resched_lock(&mapping->i_mmap_lock);
1354
1355        max_nl_size = (max_nl_size + CLUSTER_SIZE - 1) & CLUSTER_MASK;
1356        if (max_nl_cursor == 0)
1357                max_nl_cursor = CLUSTER_SIZE;
1358
1359        do {
1360                list_for_each_entry(vma, &mapping->i_mmap_nonlinear,
1361                                                shared.vm_set.list) {
1362                        cursor = (unsigned long) vma->vm_private_data;
1363                        while ( cursor < max_nl_cursor &&
1364                                cursor < vma->vm_end - vma->vm_start) {
1365                                if (try_to_unmap_cluster(cursor, &mapcount,
1366                                                vma, page) == SWAP_MLOCK)
1367                                        ret = SWAP_MLOCK;
1368                                cursor += CLUSTER_SIZE;
1369                                vma->vm_private_data = (void *) cursor;
1370                                if ((int)mapcount <= 0)
1371                                        goto out;
1372                        }
1373                        vma->vm_private_data = (void *) max_nl_cursor;
1374                }
1375                cond_resched_lock(&mapping->i_mmap_lock);
1376                max_nl_cursor += CLUSTER_SIZE;
1377        } while (max_nl_cursor <= max_nl_size);
1378
1379        /*
1380         * Don't loop forever (perhaps all the remaining pages are
1381         * in locked vmas).  Reset cursor on all unreserved nonlinear
1382         * vmas, now forgetting on which ones it had fallen behind.
1383         */
1384        list_for_each_entry(vma, &mapping->i_mmap_nonlinear, shared.vm_set.list)
1385                vma->vm_private_data = NULL;
1386out:
1387        spin_unlock(&mapping->i_mmap_lock);
1388        return ret;
1389}
1390
1391/**
1392 * try_to_unmap - try to remove all page table mappings to a page
1393 * @page: the page to get unmapped
1394 * @flags: action and flags
1395 *
1396 * Tries to remove all the page table entries which are mapping this
1397 * page, used in the pageout path.  Caller must hold the page lock.
1398 * Return values are:
1399 *
1400 * SWAP_SUCCESS - we succeeded in removing all mappings
1401 * SWAP_AGAIN   - we missed a mapping, try again later
1402 * SWAP_FAIL    - the page is unswappable
1403 * SWAP_MLOCK   - page is mlocked.
1404 */
1405int try_to_unmap(struct page *page, enum ttu_flags flags)
1406{
1407        int ret;
1408
1409        BUG_ON(!PageLocked(page));
1410
1411        if (unlikely(PageKsm(page)))
1412                ret = try_to_unmap_ksm(page, flags);
1413        else if (PageAnon(page))
1414                ret = try_to_unmap_anon(page, flags);
1415        else
1416                ret = try_to_unmap_file(page, flags);
1417        if (ret != SWAP_MLOCK && !page_mapped(page))
1418                ret = SWAP_SUCCESS;
1419        return ret;
1420}
1421
1422/**
1423 * try_to_munlock - try to munlock a page
1424 * @page: the page to be munlocked
1425 *
1426 * Called from munlock code.  Checks all of the VMAs mapping the page
1427 * to make sure nobody else has this page mlocked. The page will be
1428 * returned with PG_mlocked cleared if no other vmas have it mlocked.
1429 *
1430 * Return values are:
1431 *
1432 * SWAP_AGAIN   - no vma is holding page mlocked, or,
1433 * SWAP_AGAIN   - page mapped in mlocked vma -- couldn't acquire mmap sem
1434 * SWAP_FAIL    - page cannot be located at present
1435 * SWAP_MLOCK   - page is now mlocked.
1436 */
1437int try_to_munlock(struct page *page)
1438{
1439        VM_BUG_ON(!PageLocked(page) || PageLRU(page));
1440
1441        if (unlikely(PageKsm(page)))
1442                return try_to_unmap_ksm(page, TTU_MUNLOCK);
1443        else if (PageAnon(page))
1444                return try_to_unmap_anon(page, TTU_MUNLOCK);
1445        else
1446                return try_to_unmap_file(page, TTU_MUNLOCK);
1447}
1448
1449#if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION)
1450/*
1451 * Drop an anon_vma refcount, freeing the anon_vma and anon_vma->root
1452 * if necessary.  Be careful to do all the tests under the lock.  Once
1453 * we know we are the last user, nobody else can get a reference and we
1454 * can do the freeing without the lock.
1455 */
1456void drop_anon_vma(struct anon_vma *anon_vma)
1457{
1458        BUG_ON(atomic_read(&anon_vma->external_refcount) <= 0);
1459        if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
1460                struct anon_vma *root = anon_vma->root;
1461                int empty = list_empty(&anon_vma->head);
1462                int last_root_user = 0;
1463                int root_empty = 0;
1464
1465                /*
1466                 * The refcount on a non-root anon_vma got dropped.  Drop
1467                 * the refcount on the root and check if we need to free it.
1468                 */
1469                if (empty && anon_vma != root) {
1470                        BUG_ON(atomic_read(&root->external_refcount) <= 0);
1471                        last_root_user = atomic_dec_and_test(&root->external_refcount);
1472                        root_empty = list_empty(&root->head);
1473                }
1474                anon_vma_unlock(anon_vma);
1475
1476                if (empty) {
1477                        anon_vma_free(anon_vma);
1478                        if (root_empty && last_root_user)
1479                                anon_vma_free(root);
1480                }
1481        }
1482}
1483#endif
1484
1485#ifdef CONFIG_MIGRATION
1486/*
1487 * rmap_walk() and its helpers rmap_walk_anon() and rmap_walk_file():
1488 * Called by migrate.c to remove migration ptes, but might be used more later.
1489 */
1490static int rmap_walk_anon(struct page *page, int (*rmap_one)(struct page *,
1491                struct vm_area_struct *, unsigned long, void *), void *arg)
1492{
1493        struct anon_vma *anon_vma;
1494        struct anon_vma_chain *avc;
1495        int ret = SWAP_AGAIN;
1496
1497        /*
1498         * Note: remove_migration_ptes() cannot use page_lock_anon_vma()
1499         * because that depends on page_mapped(); but not all its usages
1500         * are holding mmap_sem. Users without mmap_sem are required to
1501         * take a reference count to prevent the anon_vma disappearing
1502         */
1503        anon_vma = page_anon_vma(page);
1504        if (!anon_vma)
1505                return ret;
1506        anon_vma_lock(anon_vma);
1507        list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
1508                struct vm_area_struct *vma = avc->vma;
1509                unsigned long address = vma_address(page, vma);
1510                if (address == -EFAULT)
1511                        continue;
1512                ret = rmap_one(page, vma, address, arg);
1513                if (ret != SWAP_AGAIN)
1514                        break;
1515        }
1516        anon_vma_unlock(anon_vma);
1517        return ret;
1518}
1519
1520static int rmap_walk_file(struct page *page, int (*rmap_one)(struct page *,
1521                struct vm_area_struct *, unsigned long, void *), void *arg)
1522{
1523        struct address_space *mapping = page->mapping;
1524        pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
1525        struct vm_area_struct *vma;
1526        struct prio_tree_iter iter;
1527        int ret = SWAP_AGAIN;
1528
1529        if (!mapping)
1530                return ret;
1531        spin_lock(&mapping->i_mmap_lock);
1532        vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, pgoff, pgoff) {
1533                unsigned long address = vma_address(page, vma);
1534                if (address == -EFAULT)
1535                        continue;
1536                ret = rmap_one(page, vma, address, arg);
1537                if (ret != SWAP_AGAIN)
1538                        break;
1539        }
1540        /*
1541         * No nonlinear handling: being always shared, nonlinear vmas
1542         * never contain migration ptes.  Decide what to do about this
1543         * limitation to linear when we need rmap_walk() on nonlinear.
1544         */
1545        spin_unlock(&mapping->i_mmap_lock);
1546        return ret;
1547}
1548
1549int rmap_walk(struct page *page, int (*rmap_one)(struct page *,
1550                struct vm_area_struct *, unsigned long, void *), void *arg)
1551{
1552        VM_BUG_ON(!PageLocked(page));
1553
1554        if (unlikely(PageKsm(page)))
1555                return rmap_walk_ksm(page, rmap_one, arg);
1556        else if (PageAnon(page))
1557                return rmap_walk_anon(page, rmap_one, arg);
1558        else
1559                return rmap_walk_file(page, rmap_one, arg);
1560}
1561#endif /* CONFIG_MIGRATION */
1562
1563#ifdef CONFIG_HUGETLB_PAGE
1564/*
1565 * The following three functions are for anonymous (private mapped) hugepages.
1566 * Unlike common anonymous pages, anonymous hugepages have no accounting code
1567 * and no lru code, because we handle hugepages differently from common pages.
1568 */
1569static void __hugepage_set_anon_rmap(struct page *page,
1570        struct vm_area_struct *vma, unsigned long address, int exclusive)
1571{
1572        struct anon_vma *anon_vma = vma->anon_vma;
1573
1574        BUG_ON(!anon_vma);
1575
1576        if (PageAnon(page))
1577                return;
1578        if (!exclusive)
1579                anon_vma = anon_vma->root;
1580
1581        anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
1582        page->mapping = (struct address_space *) anon_vma;
1583        page->index = linear_page_index(vma, address);
1584}
1585
1586void hugepage_add_anon_rmap(struct page *page,
1587                            struct vm_area_struct *vma, unsigned long address)
1588{
1589        struct anon_vma *anon_vma = vma->anon_vma;
1590        int first;
1591
1592        BUG_ON(!PageLocked(page));
1593        BUG_ON(!anon_vma);
1594        BUG_ON(address < vma->vm_start || address >= vma->vm_end);
1595        first = atomic_inc_and_test(&page->_mapcount);
1596        if (first)
1597                __hugepage_set_anon_rmap(page, vma, address, 0);
1598}
1599
1600void hugepage_add_new_anon_rmap(struct page *page,
1601                        struct vm_area_struct *vma, unsigned long address)
1602{
1603        BUG_ON(address < vma->vm_start || address >= vma->vm_end);
1604        atomic_set(&page->_mapcount, 0);
1605        __hugepage_set_anon_rmap(page, vma, address, 1);
1606}
1607#endif /* CONFIG_HUGETLB_PAGE */
1608
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.