lkml.org 
[lkml]   [2009]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [12/19] HWPOISON: Add invalidate_inode_page
    Date

    From: Wu Fengguang <fengguang.wu@intel.com>

    Add a simple way to invalidate a single page
    This is just a refactoring of the truncate.c code.
    Originally from Fengguang, modified by Andi Kleen.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>

    ---
    include/linux/mm.h | 2 ++
    mm/truncate.c | 26 ++++++++++++++++++++------
    2 files changed, 22 insertions(+), 6 deletions(-)

    Index: linux/include/linux/mm.h
    ===================================================================
    --- linux.orig/include/linux/mm.h
    +++ linux/include/linux/mm.h
    @@ -811,6 +811,8 @@ extern int vmtruncate_range(struct inode

    int truncate_inode_page(struct address_space *mapping, struct page *page);

    +int invalidate_inode_page(struct page *page);
    +
    #ifdef CONFIG_MMU
    extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long address, unsigned int flags);
    Index: linux/mm/truncate.c
    ===================================================================
    --- linux.orig/mm/truncate.c
    +++ linux/mm/truncate.c
    @@ -146,6 +146,24 @@ int truncate_inode_page(struct address_s
    return truncate_complete_page(mapping, page);
    }

    +/*
    + * Safely invalidate one page from its pagecache mapping.
    + * It only drops clean, unused pages. The page must be locked.
    + *
    + * Returns 1 if the page is successfully invalidated, otherwise 0.
    + */
    +int invalidate_inode_page(struct page *page)
    +{
    + struct address_space *mapping = page_mapping(page);
    + if (!mapping)
    + return 0;
    + if (PageDirty(page) || PageWriteback(page))
    + return 0;
    + if (page_mapped(page))
    + return 0;
    + return invalidate_complete_page(mapping, page);
    +}
    +
    /**
    * truncate_inode_pages - truncate range of pages specified by start & end byte offsets
    * @mapping: mapping to truncate
    @@ -312,12 +330,8 @@ unsigned long invalidate_mapping_pages(s
    if (lock_failed)
    continue;

    - if (PageDirty(page) || PageWriteback(page))
    - goto unlock;
    - if (page_mapped(page))
    - goto unlock;
    - ret += invalidate_complete_page(mapping, page);
    -unlock:
    + ret += invalidate_inode_page(page);
    +
    unlock_page(page);
    if (next > end)
    break;

    \
     
     \ /
      Last update: 2009-08-05 11:39    [W:0.021 / U:91.892 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site