mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
fs: stable_page_flags(): use folio_test_*() helpers
Since commit304daa8132("maps4: add /proc/kpageflags interface"), /proc/kpageflags directly operates on page->flags to determine page status. Later, commit1779754959("proc: export more page flags in /proc/kpageflags") started using page helper functions when exposing new flags, leading to a mix of both approaches. For tail pages, the original code did not return corresponding status. commit0a71649cb7("/proc/kpageflags: return KPF_SLAB for slab tail pages") and commit832fc1de01("/proc/kpageflags: return KPF_BUDDY for "tail" buddy pages") made tail slab/buddy pages also return corresponding status. Then commitdee3d0bef2("proc: rewrite stable_page_flags()") made all tail pages return the same status as their head page, except for hwpoison and mapped flags. It also cached the folio's flags and operate on the flags directly to avoid concurrency issues if using folio_test_*() helpers. Since commit476d87d6a0("fs: stable_page_flags(): use snapshot_page()"), we can now safely switch to folio_test_*() helpers instead of directly operating on flags, which is more readable and consistent with the rest of the kernel. Only convert cfolio-specific flags (i.e., anon, ksm, swapcache) to folio_test_*() helpers, which reduces redundant code. Keep others unchanged due to they aren't folio-specific flags or coverting them doesn't cleanup. No functional change is intended. Link: https://lore.kernel.org/20260720033021.4091944-3-tujinjiang@huawei.com Signed-off-by: Jinjiang Tu <tujinjiang@huawei.com> Acked-by: David Hildenbrand (Arm) <david@kernel.org> Cc: Chengming Zhou <chengming.zhou@linux.dev> Cc: Kefeng Wang <wangkefeng.wang@huawei.com> Cc: Luiz Capitulino <luizcap@redhat.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Miaohe Lin <linmiaohe@huawei.com> Cc: Nanyong Sun <sunnanyong@huawei.com> Cc: Svetly Todorov <svetly.todorov@memverge.com> Cc: xu xin <xu.xin16@zte.com.cn> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
e984520724
commit
c52faf27a9
|
|
@ -148,8 +148,6 @@ u64 stable_page_flags(const struct page *page)
|
|||
const struct folio *folio;
|
||||
struct page_snapshot ps;
|
||||
unsigned long k;
|
||||
unsigned long mapping;
|
||||
bool is_anon;
|
||||
u64 u = 0;
|
||||
|
||||
/*
|
||||
|
|
@ -161,19 +159,16 @@ u64 stable_page_flags(const struct page *page)
|
|||
|
||||
snapshot_page(&ps, page);
|
||||
folio = &ps.folio_snapshot;
|
||||
|
||||
k = folio->flags.f;
|
||||
mapping = (unsigned long)folio->mapping;
|
||||
is_anon = mapping & FOLIO_MAPPING_ANON;
|
||||
|
||||
/*
|
||||
* pseudo flags for the well known (anonymous) memory mapped pages
|
||||
*/
|
||||
if (folio_mapped(folio))
|
||||
u |= BIT_ULL(KPF_MMAP);
|
||||
if (is_anon) {
|
||||
if (folio_test_anon(folio)) {
|
||||
u |= BIT_ULL(KPF_ANON);
|
||||
if ((mapping & FOLIO_MAPPING_FLAGS) == FOLIO_MAPPING_KSM)
|
||||
if (folio_test_ksm(folio))
|
||||
u |= BIT_ULL(KPF_KSM);
|
||||
}
|
||||
|
||||
|
|
@ -225,11 +220,10 @@ u64 stable_page_flags(const struct page *page)
|
|||
u |= kpf_copy_bit(k, KPF_ACTIVE, PG_active);
|
||||
u |= kpf_copy_bit(k, KPF_RECLAIM, PG_reclaim);
|
||||
|
||||
#define SWAPCACHE ((1 << PG_swapbacked) | (1 << PG_swapcache))
|
||||
if ((k & SWAPCACHE) == SWAPCACHE)
|
||||
if (folio_test_swapcache(folio))
|
||||
u |= BIT_ULL(KPF_SWAPCACHE);
|
||||
u |= kpf_copy_bit(k, KPF_SWAPBACKED, PG_swapbacked);
|
||||
|
||||
u |= kpf_copy_bit(k, KPF_SWAPBACKED, PG_swapbacked);
|
||||
u |= kpf_copy_bit(k, KPF_UNEVICTABLE, PG_unevictable);
|
||||
u |= kpf_copy_bit(k, KPF_MLOCKED, PG_mlocked);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user