--- linux/mm/memory.c 2003/10/17 11:16:03 1.1 +++ linux/mm/memory.c 2003/10/17 11:34:45 @@ -470,9 +470,13 @@ if (pte_present(pte)) { struct page * page = pte_page(pte); prefetch(page); - if (!write || - (pte_write(pte) && pte_dirty(pte))) + if (!write) return page; + if (pte_write(pte)) { + if (!pte_dirty(pte) && !PageDirty(page)) + set_page_dirty(page); + return page; + } } if (pte_none(pte)) none = 1;