lkml.org 
[lkml]   [2012]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/27] mm: Update file times from fault path only if .page_mkwrite is not set
    Date
    Filesystems wanting to properly support freezing need to have control
    when file_update_time() is called. After pushing file_update_time()
    to all relevant .page_mkwrite implementations we can just stop calling
    file_update_time() when filesystem implements .page_mkwrite.

    Tested-by: Kamal Mostafa <kamal@canonical.com>
    Tested-by: Peter M. Petrakis <peter.petrakis@canonical.com>
    Tested-by: Dann Frazier <dann.frazier@canonical.com>
    Tested-by: Massimo Morana <massimo.morana@canonical.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    ---
    mm/memory.c | 14 +++++++-------
    1 files changed, 7 insertions(+), 7 deletions(-)

    diff --git a/mm/memory.c b/mm/memory.c
    index 6105f47..4803e47 100644
    --- a/mm/memory.c
    +++ b/mm/memory.c
    @@ -2633,6 +2633,9 @@ reuse:
    if (!page_mkwrite) {
    wait_on_page_locked(dirty_page);
    set_page_dirty_balance(dirty_page, page_mkwrite);
    + /* file_update_time outside page_lock */
    + if (vma->vm_file)
    + file_update_time(vma->vm_file);
    }
    put_page(dirty_page);
    if (page_mkwrite) {
    @@ -2650,10 +2653,6 @@ reuse:
    }
    }

    - /* file_update_time outside page_lock */
    - if (vma->vm_file)
    - file_update_time(vma->vm_file);
    -
    return ret;
    }

    @@ -3322,12 +3321,13 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,

    if (dirty_page) {
    struct address_space *mapping = page->mapping;
    + int dirtied = 0;

    if (set_page_dirty(dirty_page))
    - page_mkwrite = 1;
    + dirtied = 1;
    unlock_page(dirty_page);
    put_page(dirty_page);
    - if (page_mkwrite && mapping) {
    + if ((dirtied || page_mkwrite) && mapping) {
    /*
    * Some device drivers do not set page.mapping but still
    * dirty their pages
    @@ -3336,7 +3336,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
    }

    /* file_update_time outside page_lock */
    - if (vma->vm_file)
    + if (vma->vm_file && !page_mkwrite)
    file_update_time(vma->vm_file);
    } else {
    unlock_page(vmf.page);
    --
    1.7.1


    \
     
     \ /
      Last update: 2012-04-16 18:27    [W:0.024 / U:60.656 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site