Messages in this thread Patch in this message | | | Subject | [PATCH] zap_pte_range should not mark non-uptodate pages dirty | From | Dave Kleikamp <> | Date | Thu, 21 Oct 2004 16:15:46 -0500 |
| |
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/
| |