[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210226091718.2927291-3-yuzhao@google.com>
Date: Fri, 26 Feb 2021 02:17:17 -0700
From: Yu Zhao <yuzhao@...gle.com>
To: akpm@...ux-foundation.org, alex.shi@...ux.alibaba.com,
vbabka@...e.cz, willy@...radead.org
Cc: guro@...com, hannes@...xchg.org, hughd@...gle.com,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
mhocko@...nel.org, vdavydov.dev@...il.com,
Yu Zhao <yuzhao@...gle.com>
Subject: [PATCH v2 2/3] mm: use PF_NO_TAIL for PG_lru
Trying to set or clear PG_lru on tail pages has been considered buggy.
Enforce this rule by changing the policy for PG_lru from PF_HEAD to
PF_NO_TAIL. This means setting or clearing PG_lru on tail pages won't
be "corrected" by compound_page(). Such "correction" isn't helpful --
even if a piece of buggy code has gotten away with
compound_page(tail)->flags, it will run into trouble with lru list
addition and deletion because they use tail->lru rather than
compound_page(tail)->lru.
bloat-o-meter result:
add/remove: 0/0 grow/shrink: 0/11 up/down: 0/-535 (-535)
Signed-off-by: Yu Zhao <yuzhao@...gle.com>
---
include/linux/page-flags.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 1995208a3763..c9626e54df8d 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -333,8 +333,8 @@ PAGEFLAG(Referenced, referenced, PF_HEAD)
__SETPAGEFLAG(Referenced, referenced, PF_HEAD)
PAGEFLAG(Dirty, dirty, PF_HEAD) TESTSCFLAG(Dirty, dirty, PF_HEAD)
__CLEARPAGEFLAG(Dirty, dirty, PF_HEAD)
-PAGEFLAG(LRU, lru, PF_HEAD) __CLEARPAGEFLAG(LRU, lru, PF_HEAD)
- TESTCLEARFLAG(LRU, lru, PF_HEAD)
+PAGEFLAG(LRU, lru, PF_NO_TAIL) __CLEARPAGEFLAG(LRU, lru, PF_NO_TAIL)
+ TESTCLEARFLAG(LRU, lru, PF_NO_TAIL)
PAGEFLAG(Active, active, PF_HEAD) __CLEARPAGEFLAG(Active, active, PF_HEAD)
TESTCLEARFLAG(Active, active, PF_HEAD)
PAGEFLAG(Workingset, workingset, PF_HEAD)
--
2.30.1.766.gb4fecdf3b7-goog
Powered by blists - more mailing lists