]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: rename PG_mappedtodisk to PG_owner_2
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 21 Aug 2024 19:34:42 +0000 (20:34 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Sep 2024 04:15:45 +0000 (21:15 -0700)
This flag has similar constraints to PG_owner_priv_1 -- it is ignored by
core code, and is entirely for the use of the code which allocated the
folio.  Since the pagecache does not use it, individual filesystems can
use it.  The bufferhead code does use it, so filesystems which use the
buffer cache must not use it for another purpose.

Link: https://lkml.kernel.org/r/20240821193445.2294269-10-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/proc/page.c
include/linux/kernel-page-flags.h
include/linux/page-flags.h
include/trace/events/mmflags.h
tools/mm/page-types.c

index 73a0f872d97f634580eb5b4947c914566db77568..e74e639893be3394057446be6a58ba03581530d4 100644 (file)
@@ -211,7 +211,7 @@ u64 stable_page_flags(const struct page *page)
 #endif
 
        u |= kpf_copy_bit(k, KPF_RESERVED,      PG_reserved);
-       u |= kpf_copy_bit(k, KPF_MAPPEDTODISK,  PG_mappedtodisk);
+       u |= kpf_copy_bit(k, KPF_OWNER_2,       PG_owner_2);
        u |= kpf_copy_bit(k, KPF_PRIVATE,       PG_private);
        u |= kpf_copy_bit(k, KPF_PRIVATE_2,     PG_private_2);
        u |= kpf_copy_bit(k, KPF_OWNER_PRIVATE, PG_owner_priv_1);
index 859f4b0c1b2bbf62b3a73e4ab62e7e808443a6c1..7c587a711be1424fb47becd587514c9903406666 100644 (file)
@@ -10,7 +10,7 @@
  */
 #define KPF_RESERVED           32
 #define KPF_MLOCKED            33
-#define KPF_MAPPEDTODISK       34
+#define KPF_OWNER_2            34
 #define KPF_PRIVATE            35
 #define KPF_PRIVATE_2          36
 #define KPF_OWNER_PRIVATE      37
index 017205048cab56fc014611f8cbd4248977d96ee8..1ff3d172c22c1d84419240d077a4c5d3ea222310 100644 (file)
@@ -101,12 +101,12 @@ enum pageflags {
        PG_waiters,             /* Page has waiters, check its waitqueue. Must be bit #7 and in the same byte as "PG_locked" */
        PG_active,
        PG_workingset,
-       PG_owner_priv_1,        /* Owner use. If pagecache, fs may use*/
+       PG_owner_priv_1,        /* Owner use. If pagecache, fs may use */
+       PG_owner_2,             /* Owner use. If pagecache, fs may use */
        PG_arch_1,
        PG_reserved,
        PG_private,             /* If pagecache, has fs-private data */
        PG_private_2,           /* If pagecache, has fs aux data */
-       PG_mappedtodisk,        /* Has blocks allocated on-disk */
        PG_reclaim,             /* To be reclaimed asap */
        PG_swapbacked,          /* Page is backed by RAM/swap */
        PG_unevictable,         /* Page is "unevictable"  */
@@ -131,6 +131,11 @@ enum pageflags {
 
        PG_readahead = PG_reclaim,
 
+       /* Anonymous memory (and shmem) */
+       PG_swapcache = PG_owner_priv_1, /* Swap page: swp_entry_t in private */
+       /* Some filesystems */
+       PG_checked = PG_owner_priv_1,
+
        /*
         * Depending on the way an anonymous folio can be mapped into a page
         * table (e.g., single PMD/PUD/CONT of the head page vs. PTE-mapped
@@ -138,13 +143,13 @@ enum pageflags {
         * tail pages of an anonymous folio. For now, we only expect it to be
         * set on tail pages for PTE-mapped THP.
         */
-       PG_anon_exclusive = PG_mappedtodisk,
-
-       /* Filesystems */
-       PG_checked = PG_owner_priv_1,
+       PG_anon_exclusive = PG_owner_2,
 
-       /* SwapBacked */
-       PG_swapcache = PG_owner_priv_1, /* Swap page: swp_entry_t in private */
+       /*
+        * Set if all buffer heads in the folio are mapped.
+        * Filesystems which do not use BHs can use it for their own purpose.
+        */
+       PG_mappedtodisk = PG_owner_2,
 
        /* Two page bits are conscripted by FS-Cache to maintain local caching
         * state.  These bits are set on pages belonging to the netfs's inodes
@@ -540,6 +545,9 @@ FOLIO_FLAG(swapbacked, FOLIO_HEAD_PAGE)
 PAGEFLAG(Private, private, PF_ANY)
 PAGEFLAG(Private2, private_2, PF_ANY) TESTSCFLAG(Private2, private_2, PF_ANY)
 
+/* owner_2 can be set on tail pages for anon memory */
+FOLIO_FLAG(owner_2, FOLIO_HEAD_PAGE)
+
 /*
  * Only test-and-set exist for PG_writeback.  The unconditional operators are
  * risky: they bypass page accounting.
index c151cc21d367a723d5e005183596762b7c5f445f..3b51558cdc9b0f8bf0b134205e4799741ca95297 100644 (file)
        DEF_PAGEFLAG_NAME(active),                                      \
        DEF_PAGEFLAG_NAME(workingset),                                  \
        DEF_PAGEFLAG_NAME(owner_priv_1),                                \
+       DEF_PAGEFLAG_NAME(owner_2),                                     \
        DEF_PAGEFLAG_NAME(arch_1),                                      \
        DEF_PAGEFLAG_NAME(reserved),                                    \
        DEF_PAGEFLAG_NAME(private),                                     \
        DEF_PAGEFLAG_NAME(private_2),                                   \
        DEF_PAGEFLAG_NAME(writeback),                                   \
        DEF_PAGEFLAG_NAME(head),                                        \
-       DEF_PAGEFLAG_NAME(mappedtodisk),                                \
        DEF_PAGEFLAG_NAME(reclaim),                                     \
        DEF_PAGEFLAG_NAME(swapbacked),                                  \
        DEF_PAGEFLAG_NAME(unevictable)                                  \
index 8d5595b6c59f848fa560becf070f282815e1dcd5..8ca41c41105e9b2c91383413fab6f5b9d731394b 100644 (file)
@@ -71,7 +71,7 @@
 /* [32-] kernel hacking assistances */
 #define KPF_RESERVED           32
 #define KPF_MLOCKED            33
-#define KPF_MAPPEDTODISK       34
+#define KPF_OWNER_2            34
 #define KPF_PRIVATE            35
 #define KPF_PRIVATE_2          36
 #define KPF_OWNER_PRIVATE      37
@@ -129,7 +129,7 @@ static const char * const page_flag_names[] = {
 
        [KPF_RESERVED]          = "r:reserved",
        [KPF_MLOCKED]           = "m:mlocked",
-       [KPF_MAPPEDTODISK]      = "d:mappedtodisk",
+       [KPF_OWNER_2]           = "d:owner_2",
        [KPF_PRIVATE]           = "P:private",
        [KPF_PRIVATE_2]         = "p:private_2",
        [KPF_OWNER_PRIVATE]     = "O:owner_private",
@@ -472,9 +472,9 @@ static int bit_mask_ok(uint64_t flags)
 
 static uint64_t expand_overloaded_flags(uint64_t flags, uint64_t pme)
 {
-       /* Anonymous pages overload PG_mappedtodisk */
-       if ((flags & BIT(ANON)) && (flags & BIT(MAPPEDTODISK)))
-               flags ^= BIT(MAPPEDTODISK) | BIT(ANON_EXCLUSIVE);
+       /* Anonymous pages use PG_owner_2 for anon_exclusive */
+       if ((flags & BIT(ANON)) && (flags & BIT(OWNER_2)))
+               flags ^= BIT(OWNER_2) | BIT(ANON_EXCLUSIVE);
 
        /* SLUB overloads several page flags */
        if (flags & BIT(SLAB)) {