One other fun thing. I have a "victim" thread sitting in a loop doing: sleep(1) memcpy(&garbage, buffer, sz); The "attacker" is doing madvise(buffer, sz, MADV_PAGEOUT); in a loop. That, oddly enough doesn't cause the victim to page fault. But, if I do: memcpy(&garbage, buffer, sz); madvise(buffer, sz, MADV_PAGEOUT); It *does* cause the memory to get paged out. The MADV_PAGEOUT code actually has a !pte_present() check. It will punt on a PTE if it sees it. In other words, if a page is in the swap cache but not mapped by a pte_present() PTE, MADV_PAGEOUT won't touch it. Shouldn't MADV_PAGEOUT be able to find and reclaim those pages? Patch attached.