mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
mm: frontswap: split out __frontswap_curr_pages
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>
This commit is contained in:
parent
4bb3e31ef4
commit
96253444db
1 changed files with 17 additions and 11 deletions
|
@ -216,6 +216,20 @@ void __frontswap_invalidate_area(unsigned type)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__frontswap_invalidate_area);
|
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
|
* Frontswap, like a true swap device, may unnecessarily retain pages
|
||||||
* under certain circumstances; "shrink" frontswap is essentially a
|
* under certain circumstances; "shrink" frontswap is essentially a
|
||||||
|
@ -240,11 +254,7 @@ void frontswap_shrink(unsigned long target_pages)
|
||||||
*/
|
*/
|
||||||
spin_lock(&swap_lock);
|
spin_lock(&swap_lock);
|
||||||
locked = true;
|
locked = true;
|
||||||
total_pages = 0;
|
total_pages = __frontswap_curr_pages();
|
||||||
for (type = swap_list.head; type >= 0; type = si->next) {
|
|
||||||
si = swap_info[type];
|
|
||||||
total_pages += atomic_read(&si->frontswap_pages);
|
|
||||||
}
|
|
||||||
if (total_pages <= target_pages)
|
if (total_pages <= target_pages)
|
||||||
goto out;
|
goto out;
|
||||||
total_pages_to_unuse = total_pages - target_pages;
|
total_pages_to_unuse = total_pages - target_pages;
|
||||||
|
@ -282,16 +292,12 @@ EXPORT_SYMBOL(frontswap_shrink);
|
||||||
*/
|
*/
|
||||||
unsigned long frontswap_curr_pages(void)
|
unsigned long frontswap_curr_pages(void)
|
||||||
{
|
{
|
||||||
int type;
|
|
||||||
unsigned long totalpages = 0;
|
unsigned long totalpages = 0;
|
||||||
struct swap_info_struct *si = NULL;
|
|
||||||
|
|
||||||
spin_lock(&swap_lock);
|
spin_lock(&swap_lock);
|
||||||
for (type = swap_list.head; type >= 0; type = si->next) {
|
totalpages = __frontswap_curr_pages();
|
||||||
si = swap_info[type];
|
|
||||||
totalpages += atomic_read(&si->frontswap_pages);
|
|
||||||
}
|
|
||||||
spin_unlock(&swap_lock);
|
spin_unlock(&swap_lock);
|
||||||
|
|
||||||
return totalpages;
|
return totalpages;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(frontswap_curr_pages);
|
EXPORT_SYMBOL(frontswap_curr_pages);
|
||||||
|
|
Loading…
Add table
Reference in a new issue