Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96253444 authored by Sasha Levin's avatar Sasha Levin Committed by Konrad Rzeszutek Wilk
Browse files

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: default avatarMinchan Kim <minchan@kernel.org>
Signed-off-by: default avatarSasha Levin <levinsasha928@gmail.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent 4bb3e31e
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -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);