lkml.org 
[lkml]   [2004]   [Oct]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] zap_pte_range should not mark non-uptodate pages dirty
    From
    Date
    zap_pte_range should not mark non-uptodate pages dirty

    Doing O_DIRECT writes to an mmapped file caused pages in the page cache to
    be marked dirty but not uptodate. This led to a bug in mpage_writepage.

    Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
    Signed-off-by: Andrea Arcangeli <andrea@novell.com>

    diff -urp linux-2.6.9/mm/memory.c linux/mm/memory.c
    --- linux-2.6.9/mm/memory.c 2004-10-21 10:49:26.598031488 -0500
    +++ linux/mm/memory.c 2004-10-21 16:01:44.902376232 -0500
    @@ -414,7 +414,15 @@ static void zap_pte_range(struct mmu_gat
    && linear_page_index(details->nonlinear_vma,
    address+offset) != page->index)
    set_pte(ptep, pgoff_to_pte(page->index));
    - if (pte_dirty(pte))
    + /*
    + * PG_uptodate can be cleared by
    + * invalidate_inode_pages2, so we must not try to write
    + * not uptodate pages. Otherwise we risk invalidating
    + * underlying O_DIRECT writes, and secondly because
    + * pdflush would BUG(). Coherency of mmaps against
    + * O_DIRECT still cannot be guaranteed though.
    + */
    + if (pte_dirty(pte) && PageUptodate(page))
    set_page_dirty(page);
    if (pte_young(pte) && !PageAnon(page))
    mark_page_accessed(page);

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:07    [W:0.020 / U:91.020 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site