mm: frontswap: split out __frontswap_curr_pages
authorSasha Levin <levinsasha928@gmail.com>
Sun, 10 Jun 2012 10:51:01 +0000 (12:51 +0200)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Mon, 11 Jun 2012 19:30:47 +0000 (15:30 -0400)
Code was duplicated in two functions, clean it up.

Also, assert that the deduplicated code runs under the swap spinlock.

Reviewed-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
mm/frontswap.c

index 7ec53d53c13ae23e4e2c49670044027c0f058c6e..5faf840f872614d6d33e2391bd0795a5a6333685 100644 (file)
@@ -216,6 +216,20 @@ void __frontswap_invalidate_area(unsigned type)
 }
 EXPORT_SYMBOL(__frontswap_invalidate_area);
 
+static unsigned long __frontswap_curr_pages(void)
+{
+       int type;
+       unsigned long totalpages = 0;
+       struct swap_info_struct *si = NULL;
+
+       assert_spin_locked(&swap_lock);
+       for (type = swap_list.head; type >= 0; type = si->next) {
+               si = swap_info[type];
+               totalpages += atomic_read(&si->frontswap_pages);
+       }
+       return totalpages;
+}
+
 /*
  * Frontswap, like a true swap device, may unnecessarily retain pages
  * under certain circumstances; "shrink" frontswap is essentially a
@@ -240,11 +254,7 @@ void frontswap_shrink(unsigned long target_pages)
         */
        spin_lock(&swap_lock);
        locked = true;
-       total_pages = 0;
-       for (type = swap_list.head; type >= 0; type = si->next) {
-               si = swap_info[type];
-               total_pages += atomic_read(&si->frontswap_pages);
-       }
+       total_pages = __frontswap_curr_pages();
        if (total_pages <= target_pages)
                goto out;
        total_pages_to_unuse = total_pages - target_pages;
@@ -282,16 +292,12 @@ EXPORT_SYMBOL(frontswap_shrink);
  */
 unsigned long frontswap_curr_pages(void)
 {
-       int type;
        unsigned long totalpages = 0;
-       struct swap_info_struct *si = NULL;
 
        spin_lock(&swap_lock);
-       for (type = swap_list.head; type >= 0; type = si->next) {
-               si = swap_info[type];
-               totalpages += atomic_read(&si->frontswap_pages);
-       }
+       totalpages = __frontswap_curr_pages();
        spin_unlock(&swap_lock);
+
        return totalpages;
 }
 EXPORT_SYMBOL(frontswap_curr_pages);