https://github.com/torvalds/linux
Revision 9282012fc0aa248b77a69f5eb802b67c5a16bb13 authored by Jaewon Kim on 25 July 2022, 09:52:12 UTC, committed by Andrew Morton on 29 July 2022, 18:33:37 UTC
There was a report that a task is waiting at the
throttle_direct_reclaim. The pgscan_direct_throttle in vmstat was
increasing.

This is a bug where zone_watermark_fast returns true even when the free
is very low. The commit f27ce0e14088 ("page_alloc: consider highatomic
reserve in watermark fast") changed the watermark fast to consider
highatomic reserve. But it did not handle a negative value case which
can be happened when reserved_highatomic pageblock is bigger than the
actual free.

If watermark is considered as ok for the negative value, allocating
contexts for order-0 will consume all free pages without direct reclaim,
and finally free page may become depleted except highatomic free.

Then allocating contexts may fall into throttle_direct_reclaim. This
symptom may easily happen in a system where wmark min is low and other
reclaimers like kswapd does not make free pages quickly.

Handle the negative case by using MIN.

Link: https://lkml.kernel.org/r/20220725095212.25388-1-jaewon31.kim@samsung.com
Fixes: f27ce0e14088 ("page_alloc: consider highatomic reserve in watermark fast")
Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com>
Reported-by: GyeongHwan Hong <gh21.hong@samsung.com>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Baoquan He <bhe@redhat.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Yong-Taek Lee <ytk.lee@samsung.com>
Cc: <stable@vger.kerenl.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 1f7ea54
Raw File
Tip revision: 9282012fc0aa248b77a69f5eb802b67c5a16bb13 authored by Jaewon Kim on 25 July 2022, 09:52:12 UTC
page_alloc: fix invalid watermark check on a negative value
Tip revision: 9282012
remove-stale-files
#!/bin/sh

set -e

# When you move, remove or rename generated files, you probably also update
# .gitignore and cleaning rules in the Makefile. This is the right thing
# to do. However, people usually do 'git pull', 'git bisect', etc. without
# running 'make clean'. Then, the stale generated files are left over, often
# causing build issues.
#
# Also, 'git status' shows such stale build artifacts as untracked files.
# What is worse, some people send a wrong patch to get them back to .gitignore
# without checking the commit history.
#
# So, when you (re)move generated files, please move the cleaning rules from
# the Makefile to this script. This is run before Kbuild starts building
# anything, so people will not be annoyed by such garbage files.
#
# This script is not intended to grow endlessly. Rather, it is a temporary scrap
# yard. Stale files stay in this file for a while (for some release cycles?),
# then will be really dead and removed from the code base entirely.

# These were previously generated source files. When you are building the kernel
# with O=, make sure to remove the stale files in the output tree. Otherwise,
# the build system wrongly compiles the stale ones.
if [ -n "${building_out_of_srctree}" ]; then
	for f in fdt_rw.c fdt_ro.c fdt_wip.c fdt.c ashldi3.S bswapsdi2.S font.c lib1funcs.S hyp-stub.S
	do
		rm -f arch/arm/boot/compressed/${f}
	done

	for f in uart-ath79.c ashldi3.c bswapdi.c bswapsi.c
	do
		rm -f arch/mips/boot/compressed/${f}
	done

	for f in firmware.c real2.S
	do
		rm -f arch/parisc/boot/compressed/${f}
	done
fi

rm -f scripts/extract-cert
back to top