On Thu, 2009-05-07 at 17:10 +0200, Johannes Weiner wrote:
@@ -1269,8 +1270,15 @@ static void shrink_active_list(unsigned /* page_referenced clears PageReferenced */Since we walk the VMAs in page_referenced anyway, wouldn't it be
if (page_mapping_inuse(page) &&
- page_referenced(page, 0, sc->mem_cgroup))
+ page_referenced(page, 0, sc->mem_cgroup)) {
+ struct address_space *mapping = page_mapping(page);
+
pgmoved++;
+ if (mapping && test_bit(AS_EXEC, &mapping->flags)) {
+ list_add(&page->lru, &l_active);
+ continue;
+ }
+ }
better to check if one of them is executable? This would even work
for executable anon pages. After all, there are applications that cow
executable mappings (sbcl and other language environments that use an
executable, run-time modified core image come to mind).
Hmm, like provide a vm_flags mask along to page_referenced() to only
account matching vmas... seems like a sensible idea.