]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - mm/swap.c
UBUNTU: [Config] CONFIG_SENSORS_IR35221=m
[mirror_ubuntu-artful-kernel.git] / mm / swap.c
index 98d08b4579faa42b8ef43ba4563ed6cb76f19893..ea84f04d75a4666c05e818adbfcc41438dd0736c 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -575,7 +575,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec,
                            void *arg)
 {
        if (PageLRU(page) && PageAnon(page) && PageSwapBacked(page) &&
-           !PageUnevictable(page)) {
+           !PageSwapCache(page) && !PageUnevictable(page)) {
                bool active = PageActive(page);
 
                del_page_from_lru_list(page, lruvec,
@@ -591,6 +591,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec,
                add_page_to_lru_list(page, lruvec, LRU_INACTIVE_FILE);
 
                __count_vm_events(PGLAZYFREE, hpage_nr_pages(page));
+               count_memcg_page_event(page, PGLAZYFREE);
                update_page_reclaim_stat(lruvec, 1, 0);
        }
 }
@@ -664,7 +665,7 @@ void deactivate_file_page(struct page *page)
 void mark_page_lazyfree(struct page *page)
 {
        if (PageLRU(page) && PageAnon(page) && PageSwapBacked(page) &&
-           !PageUnevictable(page)) {
+           !PageSwapCache(page) && !PageUnevictable(page)) {
                struct pagevec *pvec = &get_cpu_var(lru_lazyfree_pvecs);
 
                get_page(page);
@@ -687,7 +688,7 @@ static void lru_add_drain_per_cpu(struct work_struct *dummy)
 
 static DEFINE_PER_CPU(struct work_struct, lru_add_drain_work);
 
-void lru_add_drain_all(void)
+void lru_add_drain_all_cpuslocked(void)
 {
        static DEFINE_MUTEX(lock);
        static struct cpumask has_work;
@@ -701,7 +702,6 @@ void lru_add_drain_all(void)
                return;
 
        mutex_lock(&lock);
-       get_online_cpus();
        cpumask_clear(&has_work);
 
        for_each_online_cpu(cpu) {
@@ -721,10 +721,16 @@ void lru_add_drain_all(void)
        for_each_cpu(cpu, &has_work)
                flush_work(&per_cpu(lru_add_drain_work, cpu));
 
-       put_online_cpus();
        mutex_unlock(&lock);
 }
 
+void lru_add_drain_all(void)
+{
+       get_online_cpus();
+       lru_add_drain_all_cpuslocked();
+       put_online_cpus();
+}
+
 /**
  * release_pages - batched put_page()
  * @pages: array of pages to release