X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Frmap.c;h=1ea4e6fcee77986f673d578a42bece82a92fb81e;hb=9ea319b61613085f501a79cf8d405cb221d084f3;hp=99bc3f9cd796f34a58ec1d61798c27c583a0eaf3;hpb=1d9b9f6a53d77ed801ba875f937d6dabbfc381ce;p=linux-2.6 diff --git a/mm/rmap.c b/mm/rmap.c index 99bc3f9cd7..1ea4e6fcee 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -422,7 +422,7 @@ int page_referenced(struct page *page, int is_locked, referenced += page_referenced_anon(page, mem_cont); else if (is_locked) referenced += page_referenced_file(page, mem_cont); - else if (TestSetPageLocked(page)) + else if (!trylock_page(page)) referenced++; else { if (page->mapping) @@ -667,7 +667,8 @@ void page_remove_rmap(struct page *page, struct vm_area_struct *vma) * Leaving it set also helps swapoff to reinstate ptes * faster for those pages still in swapcache. */ - if (page_test_dirty(page)) { + if ((!PageAnon(page) || PageSwapCache(page)) && + page_test_dirty(page)) { page_clear_dirty(page); set_page_dirty(page); }