All of lore.kernel.org
 help / color / mirror / Atom feed
From: wangyong <yongw.pur@gmail.com>
To: gregkh@linuxfoundation.org
Cc: jaewon31.kim@samsung.com, linux-kernel@vger.kernel.org,
	mhocko@kernel.org, stable@vger.kernel.org,
	wang.yong12@zte.com.cn, yongw.pur@gmail.com,
	Minchan Kim <minchan@kernel.org>, Baoquan He <bhe@redhat.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Yong-Taek Lee <ytk.lee@samsung.com>,
	stable@vger.kerenl.org, Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH 3/3] page_alloc: fix invalid watermark check on a negative value
Date: Fri, 16 Sep 2022 10:05:49 -0700	[thread overview]
Message-ID: <1663347949-20389-4-git-send-email-wang.yong12@zte.com.cn> (raw)
In-Reply-To: <1663347949-20389-1-git-send-email-wang.yong12@zte.com.cn>

From: Jaewon Kim <jaewon31.kim@samsung.com>

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>
---
 mm/page_alloc.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 237463d..d6d8a37 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3243,11 +3243,15 @@ static inline bool zone_watermark_fast(struct zone *z, unsigned int order,
 	 * need to be calculated.
 	 */
 	if (!order) {
-		long fast_free;
+		long usable_free;
+		long reserved;
 
-		fast_free = free_pages;
-		fast_free -= __zone_watermark_unusable_free(z, 0, alloc_flags);
-		if (fast_free > mark + z->lowmem_reserve[classzone_idx])
+		usable_free = free_pages;
+		reserved = __zone_watermark_unusable_free(z, 0, alloc_flags);
+
+		/* reserved may over estimate high-atomic reserves. */
+		usable_free -= min(usable_free, reserved);
+		if (usable_free > mark + z->lowmem_reserve[classzone_idx])
 			return true;
 	}
 
-- 
2.7.4


  parent reply	other threads:[~2022-09-16 17:07 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-13 13:09 [PATCH v4] page_alloc: consider highatomic reserve in watermark fast yong
2022-09-13 13:54 ` Greg KH
2022-09-14  0:46   ` yong w
2022-09-16  9:40     ` Greg KH
2022-09-16 17:05       ` [PATCH stable-4.19 0/3] page_alloc: consider highatomic reserve in watermark fast backports to 4.19 wangyong
2022-09-16 17:05         ` [PATCH 1/3] mm/page_alloc: use ac->high_zoneidx for classzone_idx wangyong
2022-09-16 17:09           ` kernel test robot
2022-09-16 17:05         ` [PATCH 2/3] page_alloc: consider highatomic reserve in watermark fast wangyong
2022-09-16 17:05         ` wangyong [this message]
2022-09-20 17:41         ` [PATCH stable-4.19 0/3] page_alloc: consider highatomic reserve in watermark fast backports to 4.19 Greg KH
2022-09-25 10:35           ` [PATCH v2 " wangyong
2022-09-25 10:35             ` [PATCH v2 stable-4.19 1/3] mm/page_alloc: use ac->high_zoneidx for classzone_idx wangyong
2022-09-25 10:36               ` kernel test robot
2022-09-25 11:00               ` Greg KH
2022-09-25 14:32                 ` yong w
2022-09-26  6:46                   ` Greg KH
2022-09-25 10:35             ` [PATCH v2 stable-4.19 2/3] page_alloc: consider highatomic reserve in watermark fast wangyong
2022-09-25 10:35             ` [PATCH v2 stable-4.19 3/3] page_alloc: fix invalid watermark check on a negative value wangyong
2022-10-02 15:37             ` [PATCH v2 stable-4.19 0/3] page_alloc: consider highatomic reserve in watermark fast backports to 4.19 Greg KH
     [not found]               ` <CAOH5QeB2EqpqQd6fw-P199w8K8-3QNv_t-u_Wn1BLnfaSscmCg@mail.gmail.com>
2022-10-07 16:41                 ` Greg KH
2022-10-10 15:47                   ` yong w
2022-10-10 15:58                     ` Greg KH
     [not found]     ` <CGME20220916094017epcas1p1deed4041f897d2bf0e0486554d79b3af@epcms1p4>
2022-09-18  1:41       ` [PATCH v4] page_alloc: consider highatomic reserve in watermark fast Jaewon Kim
2022-09-19 13:21         ` yong w

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1663347949-20389-4-git-send-email-wang.yong12@zte.com.cn \
    --to=yongw.pur@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=bhe@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=jaewon31.kim@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhocko@kernel.org \
    --cc=minchan@kernel.org \
    --cc=stable@vger.kerenl.org \
    --cc=stable@vger.kernel.org \
    --cc=vbabka@suse.cz \
    --cc=wang.yong12@zte.com.cn \
    --cc=ytk.lee@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.