mm: introduce page_lru_base_type()
[pandora-kernel.git] / include / linux / mm_inline.h
index 7fbb972..99977ff 100644 (file)
@@ -39,21 +39,36 @@ del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l)
        mem_cgroup_del_lru_list(page, l);
 }
 
+/**
+ * page_lru_base_type - which LRU list type should a page be on?
+ * @page: the page to test
+ *
+ * Used for LRU list index arithmetic.
+ *
+ * Returns the base LRU type - file or anon - @page should be on.
+ */
+static inline enum lru_list page_lru_base_type(struct page *page)
+{
+       if (page_is_file_cache(page))
+               return LRU_INACTIVE_FILE;
+       return LRU_INACTIVE_ANON;
+}
+
 static inline void
 del_page_from_lru(struct zone *zone, struct page *page)
 {
-       enum lru_list l = LRU_BASE;
+       enum lru_list l;
 
        list_del(&page->lru);
        if (PageUnevictable(page)) {
                __ClearPageUnevictable(page);
                l = LRU_UNEVICTABLE;
        } else {
+               l = page_lru_base_type(page);
                if (PageActive(page)) {
                        __ClearPageActive(page);
                        l += LRU_ACTIVE;
                }
-               l += page_is_file_cache(page);
        }
        __dec_zone_state(zone, NR_LRU_BASE + l);
        mem_cgroup_del_lru_list(page, l);
@@ -68,14 +83,14 @@ del_page_from_lru(struct zone *zone, struct page *page)
  */
 static inline enum lru_list page_lru(struct page *page)
 {
-       enum lru_list lru = LRU_BASE;
+       enum lru_list lru;
 
        if (PageUnevictable(page))
                lru = LRU_UNEVICTABLE;
        else {
+               lru = page_lru_base_type(page);
                if (PageActive(page))
                        lru += LRU_ACTIVE;
-               lru += page_is_file_cache(page);
        }
 
        return lru;