From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B118D28A72F for ; Fri, 12 Jun 2026 08:50:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781254259; cv=none; b=kyzVDwSNLrABzqZeW/qvkqL8/8gOFDSfF9vzn2S63eAZ/BD/qWnrOGzPzbggl12Qza9FkcAbit0oWE/XuQSBS8zuZlmd9Mx5R6U+NXb/9G5YdRohElbauNxUU00ceH7o75eLYC8hNHleLsFeC++74+dqwzjdr2V2KdiP0mimF2s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781254259; c=relaxed/simple; bh=lRqeYV2YDWgPRf4InkcXqvCNJ8BTQNsH9F2u9P7bask=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=J4obMNVByC5E3FUDDkh+y7U7gNkPruiKS6h4GNBLKgvfXaXWNSzIGYpB2eAw+S2F1qsHpLCFXIskWjm+tE+tRlYv9X7Mvx6b+0Gx/BnSx5zEsUDe/R4mjvWICX2B5hFosNgMYux5y6suVRdCdjpevdIHZ2WsqN4i3W4NdVofwIk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=L2zA2yfg; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="L2zA2yfg" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-490a78fbd7bso823165e9.2 for ; Fri, 12 Jun 2026 01:50:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1781254255; x=1781859055; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=nNJytZYwtWap9OtauGtl0DFhUI7k+x3Laa2gQQWZ0fs=; b=L2zA2yfg7PGCAMcgfJXRyrckD3LesKDwSaoPAF41zHrMWE7fV3YCDZLIAlKP7pWFu5 kFTlsRTfzOP7Wr5b0cb5VThid55s7donJntu9gL9Krban5sPaXafxLie05RNbPsrF2JY zXVz7igEFZz5/Kn6Ttg4mICdd1hn6uB1fKadWEPctshA3FrIzxqMI1DxdhsDiiRPSQdv kJ94T5EEOu7YKt9l+hrVKz7YGfupj9uCRyGqbpPbHA8nRxJQp0iBURjXHXJRv8kmJWSV E+jI1+vv4HusISOi7Hg98dvUBbT0xKXakumMuQaKJuzrWq6+NvNsJQfvkAO5KV0d50gQ b9hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781254255; x=1781859055; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=nNJytZYwtWap9OtauGtl0DFhUI7k+x3Laa2gQQWZ0fs=; b=eEUdHadr7wKz/tuMe42fNq4CnfFewRLcKaDWQWc2F8L4v8DSZiDh0ORezx7np6i8cQ jy/2kzrn5aA5eiMTweuUUYoy6gPUbBPgJrxUJBC/8wM0RZ5cwYXQv/rwZyATVHftYYPV AqP4ZbVfw7RoYVuOtM/NSI5GuhrDzTsjB4gND3UEQ4wxjFx9BeKOpnSamMUNpbgkDF33 7WzmYoXXDs9C+m+LmS+EDmoIaiiyvzWoWr9c7nBeh13HPPYpraZsmYKY3uJgeEhnp7BA YDExsS7kuta+wlRPyjhEJW+9ed95wYAV3gnu5TwhqoYQmj6sLxYkM67Z8hb1Zs6AlBf4 VS+Q== X-Forwarded-Encrypted: i=1; AFNElJ8nKNurpJCOm+or2b2SvCMsTiU8WpxNHWfM+pmCZvNEYcFZzUV1DW4csrVjgesSaWkzkhnDL0BgYIBkXgQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yzt4TPdDtrSHGCsOfQDrOJzDoAG4k5qJjYSpr69blHfTaUYfLNl FYNTaI6VkAv3Y7IeYiuR8HKxChRCLQbF+Ge7jo6w+Bfb3M/PEn8SDznfcwTjtOjTBqo= X-Gm-Gg: Acq92OF64SbC2RwAkN8TjZCCL2FqjqYVdq5e5y/HIZJEr++wyc9WfiWB2nq4uS72W/t +gshRuPxWcc1DBv5T6lP3xe8AOANA2i9KXLR9vMgKDXUFZ3hkki/p/ILHu6pr+gZWZcYQr7oK8g C7dC0tJNc/HrG1Q1gbYKP0JnrgD0YrqDdqi7H8kH9OOYuXKIqkgiRUbtHDq5W+90CMD10BYRD4H BcrChvtjDObhuYm/WtMPRxLzEeu202aOk3UecwrwgEpnSYyL/vcpnSwdZiV8H+k92XubJaQQbdY Ckg7sS1klk42Dekll0QTPLnIgEckr9czy4NL5CUpF0G/aUg2qegUA/jDVD0jlpFdHmJ9I4IPKXW NvOLIH6Bp00OmBvbJ0eYowNrH+e4zXwsfL72He8RjmXxlFn3dQsBxZNpXO2i3+ZazxPIf8LngF+ cwQ8SL2HxWWoFRMoVrd582wzTzov8EjEfaFIpEgz4yFXRIkI8BIukI0bZM2Fk0SvrZG3Ny5MJPv D1OEwMGqxR7DlQmUVs6aYdqeYXx X-Received: by 2002:a05:600c:3b04:b0:490:af9d:8b6f with SMTP id 5b1f17b1804b1-490ec524eeamr9355105e9.7.1781254255005; Fri, 12 Jun 2026 01:50:55 -0700 (PDT) Received: from localhost (dynamic-2a00-1028-83b8-1e7a-3010-3bd6-8521-caf1.ipv6.o2.cz. [2a00:1028:83b8:1e7a:3010:3bd6:8521:caf1]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490e2c90668sm119824505e9.4.2026.06.12.01.50.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2026 01:50:54 -0700 (PDT) From: Petr Tesarik To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org Cc: Brendan Jackman , Johannes Weiner , Zi Yan , linux-kernel@vger.kernel.org, Petr Tesarik Subject: [PATCH v2 1/1] mm: reduce NODE_RECLAIM_xxx and change to enum Date: Fri, 12 Jun 2026 10:50:52 +0200 Message-ID: <20260612085052.59291-1-ptesarik@suse.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Change node_reclaim() to return an enum indicating whether any pages have been reclaimed, because that's all the information needed by the only caller, get_page_from_freelist(). This leads to the following translation of the old macro identifiers to the new enum values: - NODE_RECLAIM_NOSCAN -> NODE_RECLAIM_NONE - NODE_RECLAIM_FULL -> NODE_RECLAIM_NONE - NODE_RECLAIM_SOME -> NODE_RECLAIM_SUCCESS - NODE_RECLAIM_SUCCESS -> NODE_RECLAIM_SUCCESS Originally, I was looking for occurences of NODE_RECLAIM_SOME and NODE_RECLAIM_SUCCESS, but I couldn't find any. That's because they are typecast from the result of a relational operator. This seemed a bit fragile, so I dug a bit deeper and came up with this proposed cleanup. Signed-off-by: Petr Tesarik -- Changes from v1: - use an enum instead of a bool --- mm/internal.h | 17 +++++++++-------- mm/page_alloc.c | 19 ++++--------------- mm/vmscan.c | 18 +++++++++--------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 181e79f1d6a20..89b0ea28051c1 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1373,23 +1373,24 @@ static inline void mminit_verify_zonelist(void) } #endif /* CONFIG_DEBUG_MEMORY_INIT */ -#define NODE_RECLAIM_NOSCAN -2 -#define NODE_RECLAIM_FULL -1 -#define NODE_RECLAIM_SOME 0 -#define NODE_RECLAIM_SUCCESS 1 +enum node_reclaim { + NODE_RECLAIM_NONE, + NODE_RECLAIM_SUCCESS, +}; #ifdef CONFIG_NUMA extern int node_reclaim_mode; -extern int node_reclaim(struct pglist_data *, gfp_t, unsigned int); +extern enum node_reclaim node_reclaim(struct pglist_data *pgdat, + gfp_t gfp_mask, unsigned int order); extern int find_next_best_node(int node, nodemask_t *used_node_mask); #else #define node_reclaim_mode 0 -static inline int node_reclaim(struct pglist_data *pgdat, gfp_t mask, - unsigned int order) +static inline enum node_reclaim node_reclaim(struct pglist_data *pgdat, + gfp_t mask, unsigned int order) { - return NODE_RECLAIM_NOSCAN; + return NODE_RECLAIM_NONE; } static inline int find_next_best_node(int node, nodemask_t *used_node_mask) { diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f7db8f049bd23..83a1caac5ac9c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3899,8 +3899,6 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, if (!zone_watermark_fast(zone, order, mark, ac->highest_zoneidx, alloc_flags, gfp_mask)) { - int ret; - if (cond_accept_memory(zone, order, alloc_flags)) goto try_this_zone; @@ -3921,22 +3919,13 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, !zone_allows_reclaim(zonelist_zone(ac->preferred_zoneref), zone)) continue; - ret = node_reclaim(zone->zone_pgdat, gfp_mask, order); - switch (ret) { - case NODE_RECLAIM_NOSCAN: - /* did not scan */ - continue; - case NODE_RECLAIM_FULL: - /* scanned but unreclaimable */ + if (node_reclaim(zone->zone_pgdat, gfp_mask, order) == NODE_RECLAIM_NONE) continue; - default: - /* did we reclaim enough */ - if (zone_watermark_ok(zone, order, mark, - ac->highest_zoneidx, alloc_flags)) - goto try_this_zone; + /* did we reclaim enough */ + if (!zone_watermark_ok(zone, order, mark, + ac->highest_zoneidx, alloc_flags)) continue; - } } try_this_zone: diff --git a/mm/vmscan.c b/mm/vmscan.c index 3f3ff25e561ac..d5bd55620ee9a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -7786,9 +7786,9 @@ static unsigned long __node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, return sc->nr_reclaimed; } -int node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned int order) +enum node_reclaim node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned int order) { - int ret; + unsigned long nr_reclaimed; /* Minimum pages needed in order to stay on node */ const unsigned long nr_pages = 1 << order; struct scan_control sc = { @@ -7815,13 +7815,13 @@ int node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned int order) if (node_pagecache_reclaimable(pgdat) <= pgdat->min_unmapped_pages && node_page_state_pages(pgdat, NR_SLAB_RECLAIMABLE_B) <= pgdat->min_slab_pages) - return NODE_RECLAIM_FULL; + return NODE_RECLAIM_NONE; /* * Do not scan if the allocation should not be delayed. */ if (!gfpflags_allow_blocking(gfp_mask) || (current->flags & PF_MEMALLOC)) - return NODE_RECLAIM_NOSCAN; + return NODE_RECLAIM_NONE; /* * Only run node reclaim on the local node or on nodes that do not @@ -7830,20 +7830,20 @@ int node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned int order) * as wide as possible. */ if (node_state(pgdat->node_id, N_CPU) && pgdat->node_id != numa_node_id()) - return NODE_RECLAIM_NOSCAN; + return NODE_RECLAIM_NONE; if (test_and_set_bit_lock(PGDAT_RECLAIM_LOCKED, &pgdat->flags)) - return NODE_RECLAIM_NOSCAN; + return NODE_RECLAIM_NONE; - ret = __node_reclaim(pgdat, gfp_mask, nr_pages, &sc) >= nr_pages; + nr_reclaimed = __node_reclaim(pgdat, gfp_mask, nr_pages, &sc); clear_bit_unlock(PGDAT_RECLAIM_LOCKED, &pgdat->flags); - if (ret) + if (nr_reclaimed >= nr_pages) count_vm_event(PGSCAN_ZONE_RECLAIM_SUCCESS); else count_vm_event(PGSCAN_ZONE_RECLAIM_FAILED); - return ret; + return NODE_RECLAIM_SUCCESS; } #else -- 2.54.0