@@ -437,7 +437,18 @@ void activate_page(struct page *page)
void mark_page_accessed(struct page *page)
{
if (!PageActive(page) && !PageUnevictable(page) &&
- PageReferenced(page) && PageLRU(page)) {
+ PageReferenced(page)) {
+ /* Page could be in pagevec */
+ if (!PageLRU(page))
+ lru_add_drain();
+
+ /*
+ * Weeeee, using in_atomic() like this is a hand-grenade.
+ * Patch is for debugging purposes only, do not merge this.
+ */
+ if (!PageLRU(page) && !in_atomic())
+ lru_add_drain_all();
+
activate_page(page);
ClearPageReferenced(page);
} else if (!PageReferenced(page)) {