]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - mm/swap.c
mm: swap: provide lru_add_drain_all_cpuslocked()
[karo-tx-linux.git] / mm / swap.c
index 4f44dbd7f780bab490d5a6d1b21613e6d80dc6a9..60b1d2a758522a6b7ebb02aae182dd554e22bdab 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -688,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;
@@ -702,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) {
@@ -722,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