]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/swap.c
rcu: Abstract the dynticks snapshot operation
[karo-tx-linux.git] / mm / swap.c
index 75c63bb2a1da1dc0c3e55600e9db1618949df87a..844baedd24292f0803ddadb2a2be03a754ec150b 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -69,6 +69,7 @@ static void __page_cache_release(struct page *page)
                del_page_from_lru_list(page, lruvec, page_off_lru(page));
                spin_unlock_irqrestore(zone_lru_lock(zone), flags);
        }
+       __ClearPageWaiters(page);
        mem_cgroup_uncharge(page);
 }
 
@@ -748,10 +749,8 @@ void release_pages(struct page **pages, int nr, bool cold)
                        locked_pgdat = NULL;
                }
 
-               if (is_huge_zero_page(page)) {
-                       put_huge_zero_page();
+               if (is_huge_zero_page(page))
                        continue;
-               }
 
                page = compound_head(page);
                if (!put_page_testzero(page))
@@ -786,6 +785,7 @@ void release_pages(struct page **pages, int nr, bool cold)
 
                /* Clear Active bit in case of parallel mark_page_accessed */
                __ClearPageActive(page);
+               __ClearPageWaiters(page);
 
                list_add(&page->lru, &pages_to_free);
        }