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

Commit dbb67aae authored by Liam Mark's avatar Liam Mark Committed by Vinayak Menon
Browse files

lowmemorykiller: Don't count swap cache pages twice



The lowmem_shrink function discounts all the swap cache pages from
the file cache count. The zone aware code also discounts all file
cache pages from a certain zone.  This results in some swap cache
pages being discounted twice, which can result in the low memory
killer being unnecessarily aggressive.

Fix the low memory killer to only discount the swap cache pages
once.

Change-Id: I650bbfbf0fbbabd01d82bdb3502b57ff59c3e14f
Signed-off-by: default avatarLiam Mark <lmark@codeaurora.org>
Signed-off-by: default avatarVinayak Menon <vinmenon@codeaurora.org>
parent 37765cc1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -247,7 +247,8 @@ void tune_lmk_zone_param(struct zonelist *zonelist, int classzone_idx,
			if (other_file != NULL)
				*other_file -= zone_page_state(zone,
							       NR_FILE_PAGES)
					      - zone_page_state(zone, NR_SHMEM);
					- zone_page_state(zone, NR_SHMEM)
					- zone_page_state(zone, NR_SWAPCACHE);
		} else if (zone_idx < classzone_idx) {
			if (zone_watermark_ok(zone, 0, 0, classzone_idx, 0) &&
			    other_free) {
+1 −0
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@ enum zone_stat_item {
	WORKINGSET_NODERECLAIM,
	NR_ANON_TRANSPARENT_HUGEPAGES,
	NR_FREE_CMA_PAGES,
	NR_SWAPCACHE,
	NR_VM_ZONE_STAT_ITEMS };

/*
+2 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ int __add_to_swap_cache(struct page *page, swp_entry_t entry)
	if (likely(!error)) {
		address_space->nrpages++;
		__inc_zone_page_state(page, NR_FILE_PAGES);
		__inc_zone_page_state(page, NR_SWAPCACHE);
		INC_CACHE_INFO(add_total);
	}
	spin_unlock_irq(&address_space->tree_lock);
@@ -155,6 +156,7 @@ void __delete_from_swap_cache(struct page *page)
	ClearPageSwapCache(page);
	address_space->nrpages--;
	__dec_zone_page_state(page, NR_FILE_PAGES);
	__dec_zone_page_state(page, NR_SWAPCACHE);
	INC_CACHE_INFO(del_total);
}

+1 −0
Original line number Diff line number Diff line
@@ -794,6 +794,7 @@ const char * const vmstat_text[] = {
	"workingset_nodereclaim",
	"nr_anon_transparent_hugepages",
	"nr_free_cma",
	"nr_swapcache",

	/* enum writeback_stat_item counters */
	"nr_dirty_threshold",