|
@@ -242,7 +242,7 @@ void rotate_reclaimable_page(struct page *page)
|
|
get_page(page);
|
|
get_page(page);
|
|
local_irq_save(flags);
|
|
local_irq_save(flags);
|
|
pvec = this_cpu_ptr(&lru_rotate_pvecs);
|
|
pvec = this_cpu_ptr(&lru_rotate_pvecs);
|
|
- if (!pagevec_add(pvec, page))
|
|
|
|
|
|
+ if (!pagevec_add(pvec, page) || PageCompound(page))
|
|
pagevec_move_tail(pvec);
|
|
pagevec_move_tail(pvec);
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
}
|
|
}
|
|
@@ -296,7 +296,7 @@ void activate_page(struct page *page)
|
|
struct pagevec *pvec = &get_cpu_var(activate_page_pvecs);
|
|
struct pagevec *pvec = &get_cpu_var(activate_page_pvecs);
|
|
|
|
|
|
get_page(page);
|
|
get_page(page);
|
|
- if (!pagevec_add(pvec, page))
|
|
|
|
|
|
+ if (!pagevec_add(pvec, page) || PageCompound(page))
|
|
pagevec_lru_move_fn(pvec, __activate_page, NULL);
|
|
pagevec_lru_move_fn(pvec, __activate_page, NULL);
|
|
put_cpu_var(activate_page_pvecs);
|
|
put_cpu_var(activate_page_pvecs);
|
|
}
|
|
}
|
|
@@ -391,9 +391,8 @@ static void __lru_cache_add(struct page *page)
|
|
struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
|
|
struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
|
|
|
|
|
|
get_page(page);
|
|
get_page(page);
|
|
- if (!pagevec_space(pvec))
|
|
|
|
|
|
+ if (!pagevec_add(pvec, page) || PageCompound(page))
|
|
__pagevec_lru_add(pvec);
|
|
__pagevec_lru_add(pvec);
|
|
- pagevec_add(pvec, page);
|
|
|
|
put_cpu_var(lru_add_pvec);
|
|
put_cpu_var(lru_add_pvec);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -628,7 +627,7 @@ void deactivate_file_page(struct page *page)
|
|
if (likely(get_page_unless_zero(page))) {
|
|
if (likely(get_page_unless_zero(page))) {
|
|
struct pagevec *pvec = &get_cpu_var(lru_deactivate_file_pvecs);
|
|
struct pagevec *pvec = &get_cpu_var(lru_deactivate_file_pvecs);
|
|
|
|
|
|
- if (!pagevec_add(pvec, page))
|
|
|
|
|
|
+ if (!pagevec_add(pvec, page) || PageCompound(page))
|
|
pagevec_lru_move_fn(pvec, lru_deactivate_file_fn, NULL);
|
|
pagevec_lru_move_fn(pvec, lru_deactivate_file_fn, NULL);
|
|
put_cpu_var(lru_deactivate_file_pvecs);
|
|
put_cpu_var(lru_deactivate_file_pvecs);
|
|
}
|
|
}
|
|
@@ -648,7 +647,7 @@ void deactivate_page(struct page *page)
|
|
struct pagevec *pvec = &get_cpu_var(lru_deactivate_pvecs);
|
|
struct pagevec *pvec = &get_cpu_var(lru_deactivate_pvecs);
|
|
|
|
|
|
get_page(page);
|
|
get_page(page);
|
|
- if (!pagevec_add(pvec, page))
|
|
|
|
|
|
+ if (!pagevec_add(pvec, page) || PageCompound(page))
|
|
pagevec_lru_move_fn(pvec, lru_deactivate_fn, NULL);
|
|
pagevec_lru_move_fn(pvec, lru_deactivate_fn, NULL);
|
|
put_cpu_var(lru_deactivate_pvecs);
|
|
put_cpu_var(lru_deactivate_pvecs);
|
|
}
|
|
}
|