lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1243388859-9760-1-git-send-email-hannes@cmpxchg.org>
Date:	Wed, 27 May 2009 03:47:39 +0200
From:	Johannes Weiner <hannes@...xchg.org>
To:	Andrew Morton <akpm@...ux-foundation.org>
Cc:	linux-mm@...ck.org, linux-kernel@...r.kernel.org,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com>,
	Rik van Riel <riel@...hat.com>,
	Hugh Dickins <hugh.dickins@...cali.co.uk>
Subject: [patch] mm: release swap slots for actively used pages

For anonymous pages activated by the reclaim scan or faulted from an
evicted page table entry we should always try to free up swap space.

Both events indicate that the page is in active use and a possible
change in the working set.  Thus removing the slot association from
the page increases the chance of the page being placed near its new
LRU buddies on the next eviction and helps keeping the amount of stale
swap cache entries low.

try_to_free_swap() inherently only succeeds when the last user of the
swap slot vanishes so it is safe to use from places where that single
mapping just brought the page back to life.

Signed-off-by: Johannes Weiner <hannes@...xchg.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com>
Cc: Rik van Riel <riel@...hat.com>
Cc: Hugh Dickins <hugh.dickins@...cali.co.uk>
---
 mm/memory.c |    3 +--
 mm/vmscan.c |    2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/mm/memory.c b/mm/memory.c
index 8b4e40e..407ebf7 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2671,8 +2671,7 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
 	mem_cgroup_commit_charge_swapin(page, ptr);
 
 	swap_free(entry);
-	if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
-		try_to_free_swap(page);
+	try_to_free_swap(page);
 	unlock_page(page);
 
 	if (write_access) {
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 621708f..2f0549d 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -788,7 +788,7 @@ cull_mlocked:
 
 activate_locked:
 		/* Not a candidate for swapping, so reclaim swap space. */
-		if (PageSwapCache(page) && vm_swap_full())
+		if (PageSwapCache(page))
 			try_to_free_swap(page);
 		VM_BUG_ON(PageActive(page));
 		SetPageActive(page);
-- 
1.6.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ